1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2016 Cavium, Inc
5 #ifndef _RTE_IO_ARM64_H_
6 #define _RTE_IO_ARM64_H_
14 #define RTE_OVERRIDE_IO_H
16 #include "generic/rte_io.h"
17 #include "rte_atomic_64.h"
19 static __rte_always_inline uint8_t
20 rte_read8_relaxed(const volatile void *addr)
25 "ldrb %w[val], [%x[addr]]"
31 static __rte_always_inline uint16_t
32 rte_read16_relaxed(const volatile void *addr)
37 "ldrh %w[val], [%x[addr]]"
43 static __rte_always_inline uint32_t
44 rte_read32_relaxed(const volatile void *addr)
49 "ldr %w[val], [%x[addr]]"
55 static __rte_always_inline uint64_t
56 rte_read64_relaxed(const volatile void *addr)
61 "ldr %x[val], [%x[addr]]"
67 static __rte_always_inline void
68 rte_write8_relaxed(uint8_t val, volatile void *addr)
71 "strb %w[val], [%x[addr]]"
73 : [val] "r" (val), [addr] "r" (addr));
76 static __rte_always_inline void
77 rte_write16_relaxed(uint16_t val, volatile void *addr)
80 "strh %w[val], [%x[addr]]"
82 : [val] "r" (val), [addr] "r" (addr));
85 static __rte_always_inline void
86 rte_write32_relaxed(uint32_t val, volatile void *addr)
89 "str %w[val], [%x[addr]]"
91 : [val] "r" (val), [addr] "r" (addr));
94 static __rte_always_inline void
95 rte_write64_relaxed(uint64_t val, volatile void *addr)
98 "str %x[val], [%x[addr]]"
100 : [val] "r" (val), [addr] "r" (addr));
103 static __rte_always_inline uint8_t
104 rte_read8(const volatile void *addr)
107 val = rte_read8_relaxed(addr);
112 static __rte_always_inline uint16_t
113 rte_read16(const volatile void *addr)
116 val = rte_read16_relaxed(addr);
121 static __rte_always_inline uint32_t
122 rte_read32(const volatile void *addr)
125 val = rte_read32_relaxed(addr);
130 static __rte_always_inline uint64_t
131 rte_read64(const volatile void *addr)
134 val = rte_read64_relaxed(addr);
139 static __rte_always_inline void
140 rte_write8(uint8_t value, volatile void *addr)
143 rte_write8_relaxed(value, addr);
146 static __rte_always_inline void
147 rte_write16(uint16_t value, volatile void *addr)
150 rte_write16_relaxed(value, addr);
153 static __rte_always_inline void
154 rte_write32(uint32_t value, volatile void *addr)
157 rte_write32_relaxed(value, addr);
160 static __rte_always_inline void
161 rte_write64(uint64_t value, volatile void *addr)
164 rte_write64_relaxed(value, addr);
168 static __rte_always_inline void
169 rte_write32_wc(uint32_t value, volatile void *addr)
171 rte_write32(value, addr);
175 static __rte_always_inline void
176 rte_write32_wc_relaxed(uint32_t value, volatile void *addr)
178 rte_write32_relaxed(value, addr);
185 #endif /* _RTE_IO_ARM64_H_ */