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