mmio: add 16-bit variants of read/write/set
Change-Id: If4fb5585865768daa151bd4aa343ac5c84d2e9c3
This commit is contained in:
parent
70bd6044c8
commit
99e91dab2f
@ -1,6 +1,7 @@
|
|||||||
#ifndef __MMIO_H__
|
#ifndef __MMIO_H__
|
||||||
#define __MMIO_H__
|
#define __MMIO_H__
|
||||||
|
|
||||||
|
#define REG16(x)(*((volatile uint16_t *)(x)))
|
||||||
#define REG(x)(*((volatile uint32_t *)(x)))
|
#define REG(x)(*((volatile uint32_t *)(x)))
|
||||||
#define BIT(x)(0x1 << x)
|
#define BIT(x)(0x1 << x)
|
||||||
|
|
||||||
@ -30,4 +31,32 @@ set32(uint32_t address, uint32_t mask, uint32_t value)
|
|||||||
val |= (value & mask);
|
val |= (value & mask);
|
||||||
write32(address, val);
|
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__ */
|
#endif /* __MMIO_H__ */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user