xref: /minix/minix/include/minix/mmio.h (revision 83133719)
1 #ifndef __MMIO_H__
2 #define __MMIO_H__
3 
4 #define REG16(x)(*((volatile uint16_t *)(x)))
5 #define REG(x)(*((volatile uint32_t *)(x)))
6 #define BIT(x)(0x1 << x)
7 
8 /* Write a uint32_t value to a memory address. */
9 static inline void
10 write32(uint32_t address, uint32_t value)
11 {
12 	REG(address) = value;
13 }
14 
15 /* Read an uint32_t from a memory address */
16 static inline uint32_t
17 read32(uint32_t address)
18 {
19 	return REG(address);
20 }
21 
22 /* Set a 32 bits value depending on a mask */
23 static inline void
24 set32(uint32_t address, uint32_t mask, uint32_t value)
25 {
26 	uint32_t val;
27 	val = read32(address);
28 	/* clear the bits */
29 	val &= ~(mask);
30 	/* apply the value using the mask */
31 	val |= (value & mask);
32 	write32(address, val);
33 }
34 
35 /* Write a uint16_t value to a memory address. */
36 static inline void
37 write16(uint32_t address, uint16_t value)
38 {
39 	REG16(address) = value;
40 }
41 
42 /* Read an uint16_t from a memory address */
43 static inline uint16_t
44 read16(uint32_t address)
45 {
46 	return REG16(address);
47 }
48 
49 /* Set a 16 bits value depending on a mask */
50 static inline void
51 set16(uint32_t address, uint16_t mask, uint16_t value)
52 {
53 	uint16_t val;
54 	val = read16(address);
55 	/* clear the bits */
56 	val &= ~(mask);
57 	/* apply the value using the mask */
58 	val |= (value & mask);
59 	write16(address, val);
60 }
61 
62 #endif /* __MMIO_H__ */
63