DPDK 22.11.4
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
34static inline uint8_t
35rte_read8_relaxed(const volatile void *addr);
36
49static inline uint16_t
50rte_read16_relaxed(const volatile void *addr);
51
64static inline uint32_t
65rte_read32_relaxed(const volatile void *addr);
66
79static inline uint64_t
80rte_read64_relaxed(const volatile void *addr);
81
95static inline void
96rte_write8_relaxed(uint8_t value, volatile void *addr);
97
110static inline void
111rte_write16_relaxed(uint16_t value, volatile void *addr);
112
125static inline void
126rte_write32_relaxed(uint32_t value, volatile void *addr);
127
140static inline void
141rte_write64_relaxed(uint64_t value, volatile void *addr);
142
151static inline uint8_t
152rte_read8(const volatile void *addr);
153
163static inline uint16_t
164rte_read16(const volatile void *addr);
165
174static inline uint32_t
175rte_read32(const volatile void *addr);
176
185static inline uint64_t
186rte_read64(const volatile void *addr);
187
197static inline void
198rte_write8(uint8_t value, volatile void *addr);
199
208static inline void
209rte_write16(uint16_t value, volatile void *addr);
210
219static inline void
220rte_write32(uint32_t value, volatile void *addr);
221
230static inline void
231rte_write64(uint64_t value, volatile void *addr);
232
244__rte_experimental
245static inline void
246rte_write32_wc(uint32_t value, volatile void *addr);
247
263__rte_experimental
264static inline void
265rte_write32_wc_relaxed(uint32_t value, volatile void *addr);
266
267#endif /* __DOXYGEN__ */
268
269#ifndef RTE_OVERRIDE_IO_H
270
271static __rte_always_inline uint8_t
272rte_read8_relaxed(const volatile void *addr)
273{
274 return *(const volatile uint8_t *)addr;
275}
276
277static __rte_always_inline uint16_t
278rte_read16_relaxed(const volatile void *addr)
279{
280 return *(const volatile uint16_t *)addr;
281}
282
283static __rte_always_inline uint32_t
284rte_read32_relaxed(const volatile void *addr)
285{
286 return *(const volatile uint32_t *)addr;
287}
288
289static __rte_always_inline uint64_t
290rte_read64_relaxed(const volatile void *addr)
291{
292 return *(const volatile uint64_t *)addr;
293}
294
295static __rte_always_inline void
296rte_write8_relaxed(uint8_t value, volatile void *addr)
297{
298 *(volatile uint8_t *)addr = value;
299}
300
301static __rte_always_inline void
302rte_write16_relaxed(uint16_t value, volatile void *addr)
303{
304 *(volatile uint16_t *)addr = value;
305}
306
307static __rte_always_inline void
308rte_write32_relaxed(uint32_t value, volatile void *addr)
309{
310 *(volatile uint32_t *)addr = value;
311}
312
313static __rte_always_inline void
314rte_write64_relaxed(uint64_t value, volatile void *addr)
315{
316 *(volatile uint64_t *)addr = value;
317}
318
319static __rte_always_inline uint8_t
320rte_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
328static __rte_always_inline uint16_t
329rte_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
337static __rte_always_inline uint32_t
338rte_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
346static __rte_always_inline uint64_t
347rte_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
355static __rte_always_inline void
356rte_write8(uint8_t value, volatile void *addr)
357{
358 rte_io_wmb();
359 rte_write8_relaxed(value, addr);
360}
361
362static __rte_always_inline void
363rte_write16(uint16_t value, volatile void *addr)
364{
365 rte_io_wmb();
366 rte_write16_relaxed(value, addr);
367}
368
369static __rte_always_inline void
370rte_write32(uint32_t value, volatile void *addr)
371{
372 rte_io_wmb();
373 rte_write32_relaxed(value, addr);
374}
375
376static __rte_always_inline void
377rte_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
384static __rte_always_inline void
385rte_write32_wc(uint32_t value, volatile void *addr)
386{
387 rte_write32(value, addr);
388}
389
390static __rte_always_inline void
391rte_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_ */
static void rte_io_rmb(void)
static void rte_io_wmb(void)
#define __rte_always_inline
Definition: rte_common.h:255
static void rte_write8(uint8_t value, volatile void *addr)
Definition: rte_io.h:356
static void rte_write16_relaxed(uint16_t value, volatile void *addr)
Definition: rte_io.h:302
static void rte_write64(uint64_t value, volatile void *addr)
Definition: rte_io.h:377
static uint8_t rte_read8(const volatile void *addr)
Definition: rte_io.h:320
static uint8_t rte_read8_relaxed(const volatile void *addr)
Definition: rte_io.h:272
static uint64_t rte_read64(const volatile void *addr)
Definition: rte_io.h:347
static uint16_t rte_read16(const volatile void *addr)
Definition: rte_io.h:329
static uint32_t rte_read32_relaxed(const volatile void *addr)
Definition: rte_io.h:284
static void rte_write64_relaxed(uint64_t value, volatile void *addr)
Definition: rte_io.h:314
static uint64_t rte_read64_relaxed(const volatile void *addr)
Definition: rte_io.h:290
static void rte_write32(uint32_t value, volatile void *addr)
Definition: rte_io.h:370
static __rte_experimental void rte_write32_wc_relaxed(uint32_t value, volatile void *addr)
Definition: rte_io.h:391
static uint16_t rte_read16_relaxed(const volatile void *addr)
Definition: rte_io.h:278
static void rte_write32_relaxed(uint32_t value, volatile void *addr)
Definition: rte_io.h:308
static void rte_write8_relaxed(uint8_t value, volatile void *addr)
Definition: rte_io.h:296
static __rte_experimental void rte_write32_wc(uint32_t value, volatile void *addr)
Definition: rte_io.h:385
static uint32_t rte_read32(const volatile void *addr)
Definition: rte_io.h:338
static void rte_write16(uint16_t value, volatile void *addr)
Definition: rte_io.h:363