1 /*
2  * Copyright (c) 2015, Wind River Systems, Inc.
3  * Copyright (c) 2017, Oticon A/S
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 /* Memory mapped registers I/O functions in non-arch-specific C code */
9 
10 #ifndef ZEPHYR_INCLUDE_ARCH_COMMON_SYS_IO_H_
11 #define ZEPHYR_INCLUDE_ARCH_COMMON_SYS_IO_H_
12 
13 #ifndef _ASMLANGUAGE
14 
15 #include <zephyr/toolchain.h>
16 #include <zephyr/types.h>
17 #include <zephyr/sys/sys_io.h>
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
sys_read8(mem_addr_t addr)23 static ALWAYS_INLINE uint8_t sys_read8(mem_addr_t addr)
24 {
25 	return *(volatile uint8_t *)addr;
26 }
27 
sys_write8(uint8_t data,mem_addr_t addr)28 static ALWAYS_INLINE void sys_write8(uint8_t data, mem_addr_t addr)
29 {
30 	*(volatile uint8_t *)addr = data;
31 }
32 
sys_read16(mem_addr_t addr)33 static ALWAYS_INLINE uint16_t sys_read16(mem_addr_t addr)
34 {
35 	return *(volatile uint16_t *)addr;
36 }
37 
sys_write16(uint16_t data,mem_addr_t addr)38 static ALWAYS_INLINE void sys_write16(uint16_t data, mem_addr_t addr)
39 {
40 	*(volatile uint16_t *)addr = data;
41 }
42 
sys_read32(mem_addr_t addr)43 static ALWAYS_INLINE uint32_t sys_read32(mem_addr_t addr)
44 {
45 	return *(volatile uint32_t *)addr;
46 }
47 
sys_write32(uint32_t data,mem_addr_t addr)48 static ALWAYS_INLINE void sys_write32(uint32_t data, mem_addr_t addr)
49 {
50 	*(volatile uint32_t *)addr = data;
51 }
52 
sys_read64(mem_addr_t addr)53 static ALWAYS_INLINE uint64_t sys_read64(mem_addr_t addr)
54 {
55 	return *(volatile uint64_t *)addr;
56 }
57 
sys_write64(uint64_t data,mem_addr_t addr)58 static ALWAYS_INLINE void sys_write64(uint64_t data, mem_addr_t addr)
59 {
60 	*(volatile uint64_t *)addr = data;
61 }
62 
63 #ifdef __cplusplus
64 }
65 #endif
66 
67 #endif /* _ASMLANGUAGE */
68 
69 #endif /* ZEPHYR_INCLUDE_ARCH_COMMON_SYS_IO_H_ */
70