]> Zhao Yanbai Git Server - minix.git/commitdiff
mmio: add 16-bit variants of read/write/set 35/735/1
authorThomas Cort <tcort@minix3.org>
Mon, 12 Aug 2013 17:33:13 +0000 (13:33 -0400)
committerThomas Cort <tcort@minix3.org>
Tue, 13 Aug 2013 20:29:22 +0000 (16:29 -0400)
Change-Id: If4fb5585865768daa151bd4aa343ac5c84d2e9c3

include/minix/mmio.h

index 8c23a352006c82344c88b57769fdd081e08f3e8e..60a41c95297be283fdeeee6d2c2e9f9349d797e9 100644 (file)
@@ -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__ */