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__
 | 
			
		||||
#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__ */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user