Kyösti Mälkki has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/70041 )
Change subject: arch/x86: Add bitwise operations for IO space ......................................................................
arch/x86: Add bitwise operations for IO space
Change-Id: Ia3e1146f062dced1b75195846ea65a44e2bd4482 Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com --- A src/arch/x86/include/arch/io_bitops.h 1 file changed, 93 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/41/70041/1
diff --git a/src/arch/x86/include/arch/io_bitops.h b/src/arch/x86/include/arch/io_bitops.h new file mode 100644 index 0000000..d18cbcc --- /dev/null +++ b/src/arch/x86/include/arch/io_bitops.h @@ -0,0 +1,83 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __ARCH_IO_BITOPS__ +#define __ARCH_IO_BITOPS__ + +#include <arch/io.h> +#include <types.h> + +static inline u32 io_read32(const u16 addr) +{ + return inl(addr); +} + +static inline u16 io_read16(const u16 addr) +{ + return inw(addr); +} + +static inline u8 io_read8(const u16 addr) +{ + return inb(addr); +} + +static inline void io_write32(const u16 addr, const u32 value) +{ + outl(value, addr); +} + +static inline void io_write16(const u16 addr, const u16 value) +{ + outw(value, addr); +} + +static inline void io_write8(const u16 addr, const u8 value) +{ + outb(value, addr); +} + +static inline u32 io_rwc32(const u16 addr) +{ + u32 reg = io_read32(addr); + io_write32(reg, addr); + return reg; +} + +static inline u16 io_rwc16(const u16 addr) +{ + u16 reg = io_read16(addr); + io_write16(addr, reg); + return reg; +} + +static inline u8 io_rwc8(const u16 addr) +{ + u8 reg = io_read8(addr); + io_write8(addr, reg); + return reg; +} + +static inline void io_clrsetbits32(const u16 addr, const u32 clr, const u32 set) +{ + io_write32(addr, (io_read32(addr) & ~clr) | set); +} + +static inline void io_clrsetbits16(const u16 addr, const u16 clr, const u16 set) +{ + io_write16(addr, (io_read16(addr) & ~clr) | set); +} + +static inline void io_clrsetbits8(const u16 addr, const u8 clr, const u8 set) +{ + io_write8(addr, (io_read8(addr) & ~clr) | set); +} + +#define io_setbits32(addr, set) io_clrsetbits32(addr, 0, set) +#define io_setbits16(addr, set) io_clrsetbits16(addr, 0, set) +#define io_setbits8(addr, set) io_clrsetbits8(addr, 0, set) + +#define io_clrbits32(addr, clr) io_clrsetbits32(addr, clr, 0) +#define io_clrbits16(addr, clr) io_clrsetbits16(addr, clr, 0) +#define io_clrbits8(addr, clr) io_clrsetbits8(addr, clr, 0) + +#endif