DPDK  19.02.0
rte_io.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2016 Cavium, Inc
3  */
4 
5 #ifndef _RTE_IO_H_
6 #define _RTE_IO_H_
7 
15 #include <stdint.h>
16 #include <rte_common.h>
17 #include <rte_atomic.h>
18 
19 #ifdef __DOXYGEN__
20 
33 static inline uint8_t
34 rte_read8_relaxed(const volatile void *addr);
35 
48 static inline uint16_t
49 rte_read16_relaxed(const volatile void *addr);
50 
63 static inline uint32_t
64 rte_read32_relaxed(const volatile void *addr);
65 
78 static inline uint64_t
79 rte_read64_relaxed(const volatile void *addr);
80 
94 static inline void
95 rte_write8_relaxed(uint8_t value, volatile void *addr);
96 
109 static inline void
110 rte_write16_relaxed(uint16_t value, volatile void *addr);
111 
124 static inline void
125 rte_write32_relaxed(uint32_t value, volatile void *addr);
126 
139 static inline void
140 rte_write64_relaxed(uint64_t value, volatile void *addr);
141 
150 static inline uint8_t
151 rte_read8(const volatile void *addr);
152 
162 static inline uint16_t
163 rte_read16(const volatile void *addr);
164 
173 static inline uint32_t
174 rte_read32(const volatile void *addr);
175 
184 static inline uint64_t
185 rte_read64(const volatile void *addr);
186 
196 static inline void
197 rte_write8(uint8_t value, volatile void *addr);
198 
207 static inline void
208 rte_write16(uint16_t value, volatile void *addr);
209 
218 static inline void
219 rte_write32(uint32_t value, volatile void *addr);
220 
229 static inline void
230 rte_write64(uint64_t value, volatile void *addr);
231 
232 #endif /* __DOXYGEN__ */
233 
234 #ifndef RTE_OVERRIDE_IO_H
235 
236 static __rte_always_inline uint8_t
237 rte_read8_relaxed(const volatile void *addr)
238 {
239  return *(const volatile uint8_t *)addr;
240 }
241 
242 static __rte_always_inline uint16_t
243 rte_read16_relaxed(const volatile void *addr)
244 {
245  return *(const volatile uint16_t *)addr;
246 }
247 
248 static __rte_always_inline uint32_t
249 rte_read32_relaxed(const volatile void *addr)
250 {
251  return *(const volatile uint32_t *)addr;
252 }
253 
254 static __rte_always_inline uint64_t
255 rte_read64_relaxed(const volatile void *addr)
256 {
257  return *(const volatile uint64_t *)addr;
258 }
259 
260 static __rte_always_inline void
261 rte_write8_relaxed(uint8_t value, volatile void *addr)
262 {
263  *(volatile uint8_t *)addr = value;
264 }
265 
266 static __rte_always_inline void
267 rte_write16_relaxed(uint16_t value, volatile void *addr)
268 {
269  *(volatile uint16_t *)addr = value;
270 }
271 
272 static __rte_always_inline void
273 rte_write32_relaxed(uint32_t value, volatile void *addr)
274 {
275  *(volatile uint32_t *)addr = value;
276 }
277 
278 static __rte_always_inline void
279 rte_write64_relaxed(uint64_t value, volatile void *addr)
280 {
281  *(volatile uint64_t *)addr = value;
282 }
283 
284 static __rte_always_inline uint8_t
285 rte_read8(const volatile void *addr)
286 {
287  uint8_t val;
288  val = rte_read8_relaxed(addr);
289  rte_io_rmb();
290  return val;
291 }
292 
293 static __rte_always_inline uint16_t
294 rte_read16(const volatile void *addr)
295 {
296  uint16_t val;
297  val = rte_read16_relaxed(addr);
298  rte_io_rmb();
299  return val;
300 }
301 
302 static __rte_always_inline uint32_t
303 rte_read32(const volatile void *addr)
304 {
305  uint32_t val;
306  val = rte_read32_relaxed(addr);
307  rte_io_rmb();
308  return val;
309 }
310 
311 static __rte_always_inline uint64_t
312 rte_read64(const volatile void *addr)
313 {
314  uint64_t val;
315  val = rte_read64_relaxed(addr);
316  rte_io_rmb();
317  return val;
318 }
319 
320 static __rte_always_inline void
321 rte_write8(uint8_t value, volatile void *addr)
322 {
323  rte_io_wmb();
324  rte_write8_relaxed(value, addr);
325 }
326 
327 static __rte_always_inline void
328 rte_write16(uint16_t value, volatile void *addr)
329 {
330  rte_io_wmb();
331  rte_write16_relaxed(value, addr);
332 }
333 
334 static __rte_always_inline void
335 rte_write32(uint32_t value, volatile void *addr)
336 {
337  rte_io_wmb();
338  rte_write32_relaxed(value, addr);
339 }
340 
341 static __rte_always_inline void
342 rte_write64(uint64_t value, volatile void *addr)
343 {
344  rte_io_wmb();
345  rte_write64_relaxed(value, addr);
346 }
347 
348 #endif /* RTE_OVERRIDE_IO_H */
349 
350 #endif /* _RTE_IO_H_ */