DPDK  24.11.0-rc3
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_compat.h>
18 #include <rte_atomic.h>
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 #ifdef __DOXYGEN__
25 
38 static inline uint8_t
39 rte_read8_relaxed(const volatile void *addr);
40 
53 static inline uint16_t
54 rte_read16_relaxed(const volatile void *addr);
55 
68 static inline uint32_t
69 rte_read32_relaxed(const volatile void *addr);
70 
83 static inline uint64_t
84 rte_read64_relaxed(const volatile void *addr);
85 
99 static inline void
100 rte_write8_relaxed(uint8_t value, volatile void *addr);
101 
114 static inline void
115 rte_write16_relaxed(uint16_t value, volatile void *addr);
116 
129 static inline void
130 rte_write32_relaxed(uint32_t value, volatile void *addr);
131 
144 static inline void
145 rte_write64_relaxed(uint64_t value, volatile void *addr);
146 
155 static inline uint8_t
156 rte_read8(const volatile void *addr);
157 
167 static inline uint16_t
168 rte_read16(const volatile void *addr);
169 
178 static inline uint32_t
179 rte_read32(const volatile void *addr);
180 
189 static inline uint64_t
190 rte_read64(const volatile void *addr);
191 
201 static inline void
202 rte_write8(uint8_t value, volatile void *addr);
203 
212 static inline void
213 rte_write16(uint16_t value, volatile void *addr);
214 
223 static inline void
224 rte_write32(uint32_t value, volatile void *addr);
225 
234 static inline void
235 rte_write64(uint64_t value, volatile void *addr);
236 
248 __rte_experimental
249 static inline void
250 rte_write32_wc(uint32_t value, volatile void *addr);
251 
267 __rte_experimental
268 static inline void
269 rte_write32_wc_relaxed(uint32_t value, volatile void *addr);
270 
271 #endif /* __DOXYGEN__ */
272 
273 #ifndef RTE_OVERRIDE_IO_H
274 
275 static __rte_always_inline uint8_t
276 rte_read8_relaxed(const volatile void *addr)
277 {
278  return *(const volatile uint8_t *)addr;
279 }
280 
281 static __rte_always_inline uint16_t
282 rte_read16_relaxed(const volatile void *addr)
283 {
284  return *(const volatile uint16_t *)addr;
285 }
286 
287 static __rte_always_inline uint32_t
288 rte_read32_relaxed(const volatile void *addr)
289 {
290  return *(const volatile uint32_t *)addr;
291 }
292 
293 static __rte_always_inline uint64_t
294 rte_read64_relaxed(const volatile void *addr)
295 {
296  return *(const volatile uint64_t *)addr;
297 }
298 
299 static __rte_always_inline void
300 rte_write8_relaxed(uint8_t value, volatile void *addr)
301 {
302  *(volatile uint8_t *)addr = value;
303 }
304 
305 static __rte_always_inline void
306 rte_write16_relaxed(uint16_t value, volatile void *addr)
307 {
308  *(volatile uint16_t *)addr = value;
309 }
310 
311 static __rte_always_inline void
312 rte_write32_relaxed(uint32_t value, volatile void *addr)
313 {
314  *(volatile uint32_t *)addr = value;
315 }
316 
317 static __rte_always_inline void
318 rte_write64_relaxed(uint64_t value, volatile void *addr)
319 {
320  *(volatile uint64_t *)addr = value;
321 }
322 
323 static __rte_always_inline uint8_t
324 rte_read8(const volatile void *addr)
325 {
326  uint8_t val;
327  val = rte_read8_relaxed(addr);
328  rte_io_rmb();
329  return val;
330 }
331 
332 static __rte_always_inline uint16_t
333 rte_read16(const volatile void *addr)
334 {
335  uint16_t val;
336  val = rte_read16_relaxed(addr);
337  rte_io_rmb();
338  return val;
339 }
340 
341 static __rte_always_inline uint32_t
342 rte_read32(const volatile void *addr)
343 {
344  uint32_t val;
345  val = rte_read32_relaxed(addr);
346  rte_io_rmb();
347  return val;
348 }
349 
350 static __rte_always_inline uint64_t
351 rte_read64(const volatile void *addr)
352 {
353  uint64_t val;
354  val = rte_read64_relaxed(addr);
355  rte_io_rmb();
356  return val;
357 }
358 
359 static __rte_always_inline void
360 rte_write8(uint8_t value, volatile void *addr)
361 {
362  rte_io_wmb();
363  rte_write8_relaxed(value, addr);
364 }
365 
366 static __rte_always_inline void
367 rte_write16(uint16_t value, volatile void *addr)
368 {
369  rte_io_wmb();
370  rte_write16_relaxed(value, addr);
371 }
372 
373 static __rte_always_inline void
374 rte_write32(uint32_t value, volatile void *addr)
375 {
376  rte_io_wmb();
377  rte_write32_relaxed(value, addr);
378 }
379 
380 static __rte_always_inline void
381 rte_write64(uint64_t value, volatile void *addr)
382 {
383  rte_io_wmb();
384  rte_write64_relaxed(value, addr);
385 }
386 
387 #ifndef RTE_NATIVE_WRITE32_WC
388 static __rte_always_inline void
389 rte_write32_wc(uint32_t value, volatile void *addr)
390 {
391  rte_write32(value, addr);
392 }
393 
394 static __rte_always_inline void
395 rte_write32_wc_relaxed(uint32_t value, volatile void *addr)
396 {
397  rte_write32_relaxed(value, addr);
398 }
399 #endif /* RTE_NATIVE_WRITE32_WC */
400 
401 #endif /* RTE_OVERRIDE_IO_H */
402 
403 #ifdef __cplusplus
404 }
405 #endif
406 
407 #endif /* _RTE_IO_H_ */
#define __rte_always_inline
Definition: rte_common.h:413
static void rte_write32(uint32_t value, volatile void *addr)
Definition: rte_io.h:374
static uint32_t rte_read32_relaxed(const volatile void *addr)
Definition: rte_io.h:288
static void rte_write64(uint64_t value, volatile void *addr)
Definition: rte_io.h:381
static void rte_write64_relaxed(uint64_t value, volatile void *addr)
Definition: rte_io.h:318
static void rte_write32_relaxed(uint32_t value, volatile void *addr)
Definition: rte_io.h:312
static void rte_write16(uint16_t value, volatile void *addr)
Definition: rte_io.h:367
static void rte_write16_relaxed(uint16_t value, volatile void *addr)
Definition: rte_io.h:306
static uint64_t rte_read64_relaxed(const volatile void *addr)
Definition: rte_io.h:294
static uint64_t rte_read64(const volatile void *addr)
Definition: rte_io.h:351
static uint8_t rte_read8(const volatile void *addr)
Definition: rte_io.h:324
static uint32_t rte_read32(const volatile void *addr)
Definition: rte_io.h:342
static uint16_t rte_read16(const volatile void *addr)
Definition: rte_io.h:333
static void rte_io_wmb(void)
static __rte_experimental void rte_write32_wc(uint32_t value, volatile void *addr)
Definition: rte_io.h:389
static void rte_write8_relaxed(uint8_t value, volatile void *addr)
Definition: rte_io.h:300
static void rte_write8(uint8_t value, volatile void *addr)
Definition: rte_io.h:360
static uint16_t rte_read16_relaxed(const volatile void *addr)
Definition: rte_io.h:282
static __rte_experimental void rte_write32_wc_relaxed(uint32_t value, volatile void *addr)
Definition: rte_io.h:395
static uint8_t rte_read8_relaxed(const volatile void *addr)
Definition: rte_io.h:276
static void rte_io_rmb(void)