From 99e91dab2f13fddc42edbe0b50e89f737185d374 Mon Sep 17 00:00:00 2001 From: Thomas Cort Date: Mon, 12 Aug 2013 13:33:13 -0400 Subject: [PATCH] mmio: add 16-bit variants of read/write/set Change-Id: If4fb5585865768daa151bd4aa343ac5c84d2e9c3 --- include/minix/mmio.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/include/minix/mmio.h b/include/minix/mmio.h index 8c23a3520..60a41c952 100644 --- a/include/minix/mmio.h +++ b/include/minix/mmio.h @@ -1,6 +1,7 @@ #ifndef __MMIO_H__ #define __MMIO_H__ +#define REG16(x)(*((volatile uint16_t *)(x))) #define REG(x)(*((volatile uint32_t *)(x))) #define BIT(x)(0x1 << x) @@ -30,4 +31,32 @@ set32(uint32_t address, uint32_t mask, uint32_t value) val |= (value & mask); write32(address, val); } + +/* Write a uint16_t value to a memory address. */ +static inline void +write16(uint32_t address, uint16_t value) +{ + REG16(address) = value; +} + +/* Read an uint16_t from a memory address */ +static inline uint16_t +read16(uint32_t address) +{ + return REG16(address); +} + +/* Set a 16 bits value depending on a mask */ +static inline void +set16(uint32_t address, uint16_t mask, uint16_t value) +{ + uint16_t val; + val = read16(address); + /* clear the bits */ + val &= ~(mask); + /* apply the value using the mask */ + val |= (value & mask); + write16(address, val); +} + #endif /* __MMIO_H__ */ -- 2.44.0