[U-Boot] [PATCH 36/69] x86: Add macros to clear and set I/O bits

Bin Meng bmeng.cn at gmail.com
Fri Mar 11 07:22:21 CET 2016


Hi Simon,

On Mon, Mar 7, 2016 at 10:28 AM, Simon Glass <sjg at chromium.org> wrote:
> The clrsetbits_...() macros are useful for working with memory mapped I/O.
> But they do not work with I/O space, as used on x86 machines.
>
> Add some macros to provide similar features for I/O.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
>  arch/x86/include/asm/io.h | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
>
> diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h
> index e0b2561..38b543d 100644
> --- a/arch/x86/include/asm/io.h
> +++ b/arch/x86/include/asm/io.h
> @@ -254,6 +254,28 @@ __OUTS(b)
>  __OUTS(w)
>  __OUTS(l)
>
> +/* IO space accessors */
> +#define clrio(type, addr, clear) \
> +       out##type(in##type(addr) & ~(clear), (addr))
> +
> +#define setio(type, addr, set) \
> +       out##type(in##type(addr) | (set), (addr))
> +
> +#define clrsetio(type, addr, clear, set) \
> +       out##type((in##type(addr) & ~(clear)) | (set), (addr))
> +
> +#define clrio_le32(addr, clear) clrio(l, addr, clear)
> +#define clrio_le16(addr, clear) clrio(w, addr, clear)
> +#define clrio_8(addr, clear) clrio(b, addr, clear)
> +
> +#define setio_le32(addr, set) setio(l, addr, set)
> +#define setio_le16(addr, set) setio(w, addr, set)
> +#define setio_8(addr, set) setio(b, addr, set)
> +
> +#define clrsetio_le32(addr, clear, set) clrsetio(l, addr, clear, set)
> +#define clrsetio_le16(addr, clear, set) clrsetio(w, addr, clear, set)
> +#define clrsetio_8(addr, clear, set) clrsetio(b, addr, clear, set)

Why adding _leXX to these ops? x86 is always little-endian, and we
won't bother creating a _beXX version.

> +
>  static inline void sync(void)
>  {
>  }
> --

Regards,
Bin


More information about the U-Boot mailing list