DPDK  21.08.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_compat.h>
18 #include <rte_atomic.h>
19 
20 #ifdef __DOXYGEN__
21 
34 static inline uint8_t
35 rte_read8_relaxed(const volatile void *addr);
36 
49 static inline uint16_t
50 rte_read16_relaxed(const volatile void *addr);
51 
64 static inline uint32_t
65 rte_read32_relaxed(const volatile void *addr);
66 
79 static inline uint64_t
80 rte_read64_relaxed(const volatile void *addr);
81 
95 static inline void
96 rte_write8_relaxed(uint8_t value, volatile void *addr);
97 
110 static inline void
111 rte_write16_relaxed(uint16_t value, volatile void *addr);
112 
125 static inline void
126 rte_write32_relaxed(uint32_t value, volatile void *addr);
127 
140 static inline void
141 rte_write64_relaxed(uint64_t value, volatile void *addr);
142 
151 static inline uint8_t
152 rte_read8(const volatile void *addr);
153 
163 static inline uint16_t
164 rte_read16(const volatile void *addr);
165 
174 static inline uint32_t
175 rte_read32(const volatile void *addr);
176 
185 static inline uint64_t
186 rte_read64(const volatile void *addr);
187 
197 static inline void
198 rte_write8(uint8_t value, volatile void *addr);
199 
208 static inline void
209 rte_write16(uint16_t value, volatile void *addr);
210 
219 static inline void
220 rte_write32(uint32_t value, volatile void *addr);
221 
230 static inline void
231 rte_write64(uint64_t value, volatile void *addr);
232 
244 __rte_experimental
245 static inline void
246 rte_write32_wc(uint32_t value, volatile void *addr);
247 
263 __rte_experimental
264 static inline void
265 rte_write32_wc_relaxed(uint32_t value, volatile void *addr);
266 
267 #endif /* __DOXYGEN__ */
268 
269 #ifndef RTE_OVERRIDE_IO_H
270 
271 static __rte_always_inline uint8_t
272 rte_read8_relaxed(const volatile void *addr)
273 {
274  return *(const volatile uint8_t *)addr;
275 }
276 
277 static __rte_always_inline uint16_t
278 rte_read16_relaxed(const volatile void *addr)
279 {
280  return *(const volatile uint16_t *)addr;
281 }
282 
283 static __rte_always_inline uint32_t
284 rte_read32_relaxed(const volatile void *addr)
285 {
286  return *(const volatile uint32_t *)addr;
287 }
288 
289 static __rte_always_inline uint64_t
290 rte_read64_relaxed(const volatile void *addr)
291 {
292  return *(const volatile uint64_t *)addr;
293 }
294 
295 static __rte_always_inline void
296 rte_write8_relaxed(uint8_t value, volatile void *addr)
297 {
298  *(volatile uint8_t *)addr = value;
299 }
300 
301 static __rte_always_inline void
302 rte_write16_relaxed(uint16_t value, volatile void *addr)
303 {
304  *(volatile uint16_t *)addr = value;
305 }
306 
307 static __rte_always_inline void
308 rte_write32_relaxed(uint32_t value, volatile void *addr)
309 {
310  *(volatile uint32_t *)addr = value;
311 }
312 
313 static __rte_always_inline void
314 rte_write64_relaxed(uint64_t value, volatile void *addr)
315 {
316  *(volatile uint64_t *)addr = value;
317 }
318 
319 static __rte_always_inline uint8_t
320 rte_read8(const volatile void *addr)
321 {
322  uint8_t val;
323  val = rte_read8_relaxed(addr);
324  rte_io_rmb();
325  return val;
326 }
327 
328 static __rte_always_inline uint16_t
329 rte_read16(const volatile void *addr)
330 {
331  uint16_t val;
332  val = rte_read16_relaxed(addr);
333  rte_io_rmb();
334  return val;
335 }
336 
337 static __rte_always_inline uint32_t
338 rte_read32(const volatile void *addr)
339 {
340  uint32_t val;
341  val = rte_read32_relaxed(addr);
342  rte_io_rmb();
343  return val;
344 }
345 
346 static __rte_always_inline uint64_t
347 rte_read64(const volatile void *addr)
348 {
349  uint64_t val;
350  val = rte_read64_relaxed(addr);
351  rte_io_rmb();
352  return val;
353 }
354 
355 static __rte_always_inline void
356 rte_write8(uint8_t value, volatile void *addr)
357 {
358  rte_io_wmb();
359  rte_write8_relaxed(value, addr);
360 }
361 
362 static __rte_always_inline void
363 rte_write16(uint16_t value, volatile void *addr)
364 {
365  rte_io_wmb();
366  rte_write16_relaxed(value, addr);
367 }
368 
369 static __rte_always_inline void
370 rte_write32(uint32_t value, volatile void *addr)
371 {
372  rte_io_wmb();
373  rte_write32_relaxed(value, addr);
374 }
375 
376 static __rte_always_inline void
377 rte_write64(uint64_t value, volatile void *addr)
378 {
379  rte_io_wmb();
380  rte_write64_relaxed(value, addr);
381 }
382 
383 #ifndef RTE_NATIVE_WRITE32_WC
384 static __rte_always_inline void
385 rte_write32_wc(uint32_t value, volatile void *addr)
386 {
387  rte_write32(value, addr);
388 }
389 
390 static __rte_always_inline void
391 rte_write32_wc_relaxed(uint32_t value, volatile void *addr)
392 {
393  rte_write32_relaxed(value, addr);
394 }
395 #endif /* RTE_NATIVE_WRITE32_WC */
396 
397 #endif /* RTE_OVERRIDE_IO_H */
398 
399 #endif /* _RTE_IO_H_ */
#define __rte_always_inline
Definition: rte_common.h:228
static void rte_write32(uint32_t value, volatile void *addr)
Definition: rte_io.h:370
static uint32_t rte_read32_relaxed(const volatile void *addr)
Definition: rte_io.h:284
static void rte_write64(uint64_t value, volatile void *addr)
Definition: rte_io.h:377
static void rte_write64_relaxed(uint64_t value, volatile void *addr)
Definition: rte_io.h:314
static void rte_write32_relaxed(uint32_t value, volatile void *addr)
Definition: rte_io.h:308
static void rte_write16(uint16_t value, volatile void *addr)
Definition: rte_io.h:363
static void rte_write16_relaxed(uint16_t value, volatile void *addr)
Definition: rte_io.h:302
static uint64_t rte_read64_relaxed(const volatile void *addr)
Definition: rte_io.h:290
static uint64_t rte_read64(const volatile void *addr)
Definition: rte_io.h:347
static uint8_t rte_read8(const volatile void *addr)
Definition: rte_io.h:320
static uint32_t rte_read32(const volatile void *addr)
Definition: rte_io.h:338
static uint16_t rte_read16(const volatile void *addr)
Definition: rte_io.h:329
static void rte_io_wmb(void)
static __rte_experimental void rte_write32_wc(uint32_t value, volatile void *addr)
Definition: rte_io.h:385
static void rte_write8_relaxed(uint8_t value, volatile void *addr)
Definition: rte_io.h:296
static void rte_write8(uint8_t value, volatile void *addr)
Definition: rte_io.h:356
static uint16_t rte_read16_relaxed(const volatile void *addr)
Definition: rte_io.h:278
static __rte_experimental void rte_write32_wc_relaxed(uint32_t value, volatile void *addr)
Definition: rte_io.h:391
static uint8_t rte_read8_relaxed(const volatile void *addr)
Definition: rte_io.h:272
static void rte_io_rmb(void)