From b7d2b849d59b9cbbd0fc0cb01b5c3f2a862510ec Mon Sep 17 00:00:00 2001 From: Etienne Carriere Date: Tue, 12 Feb 2019 17:45:09 +0100 Subject: libutil: io_clrsetbitsX() firends for 8bit and 16bit accesses Introduce io_setbits8(), io_clrbits8(), io_clrsetbits8() and io_setbits16(), io_clrbits16(), io_clrsetbits16() for bit clear/set util over 8bit and 16bit memory cells on the model of existing io_clrsetbits32() and friends. Signed-off-by: Etienne Carriere Reviewed-by: Jens Wiklander --- core/include/io.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'core/include') diff --git a/core/include/io.h b/core/include/io.h index 7970a362..26730b12 100644 --- a/core/include/io.h +++ b/core/include/io.h @@ -120,6 +120,38 @@ static inline void io_clrsetbits32(vaddr_t addr, uint32_t clear_mask, io_write32(addr, (io_read32(addr) & ~clear_mask) | set_mask); } +static inline void io_setbits16(vaddr_t addr, uint16_t set_mask) +{ + io_write16(addr, io_read16(addr) | set_mask); +} + +static inline void io_clrbits16(vaddr_t addr, uint16_t clear_mask) +{ + io_write16(addr, io_read16(addr) & ~clear_mask); +} + +static inline void io_clrsetbits16(vaddr_t addr, uint16_t clear_mask, + uint16_t set_mask) +{ + io_write16(addr, (io_read16(addr) & ~clear_mask) | set_mask); +} + +static inline void io_setbits8(vaddr_t addr, uint8_t set_mask) +{ + io_write8(addr, io_read8(addr) | set_mask); +} + +static inline void io_clrbits8(vaddr_t addr, uint8_t clear_mask) +{ + io_write8(addr, io_read8(addr) & ~clear_mask); +} + +static inline void io_clrsetbits8(vaddr_t addr, uint8_t clear_mask, + uint8_t set_mask) +{ + io_write8(addr, (io_read8(addr) & ~clear_mask) | set_mask); +} + /* * Functions write8(), write16(), write32(), read8(), read16() and read32() * will be deprecated in OP-TEE release 3.5.0. -- cgit v1.2.3