1f22e705eSMichal Mazurek /* SPDX-License-Identifier: BSD-3-Clause 2f22e705eSMichal Mazurek * Copyright(c) 2022 StarFive 3f22e705eSMichal Mazurek * Copyright(c) 2022 SiFive 4f22e705eSMichal Mazurek * Copyright(c) 2022 Semihalf 5f22e705eSMichal Mazurek * All rights reserved. 6f22e705eSMichal Mazurek */ 7f22e705eSMichal Mazurek 8f22e705eSMichal Mazurek #ifndef RTE_ATOMIC_RISCV_H 9f22e705eSMichal Mazurek #define RTE_ATOMIC_RISCV_H 10f22e705eSMichal Mazurek 11f22e705eSMichal Mazurek #ifndef RTE_FORCE_INTRINSICS 12f22e705eSMichal Mazurek # error Platform must be built with RTE_FORCE_INTRINSICS 13f22e705eSMichal Mazurek #endif 14f22e705eSMichal Mazurek 15f22e705eSMichal Mazurek #include <stdint.h> 16f22e705eSMichal Mazurek #include <rte_common.h> 17f22e705eSMichal Mazurek #include <rte_config.h> 18f22e705eSMichal Mazurek #include "generic/rte_atomic.h" 19f22e705eSMichal Mazurek 20*719834a6SMattias Rönnblom #ifdef __cplusplus 21*719834a6SMattias Rönnblom extern "C" { 22*719834a6SMattias Rönnblom #endif 23*719834a6SMattias Rönnblom 24f22e705eSMichal Mazurek #define rte_mb() asm volatile("fence rw, rw" : : : "memory") 25f22e705eSMichal Mazurek 26f22e705eSMichal Mazurek #define rte_wmb() asm volatile("fence w, w" : : : "memory") 27f22e705eSMichal Mazurek 28f22e705eSMichal Mazurek #define rte_rmb() asm volatile("fence r, r" : : : "memory") 29f22e705eSMichal Mazurek 30f22e705eSMichal Mazurek #define rte_smp_mb() rte_mb() 31f22e705eSMichal Mazurek 32f22e705eSMichal Mazurek #define rte_smp_wmb() rte_wmb() 33f22e705eSMichal Mazurek 34f22e705eSMichal Mazurek #define rte_smp_rmb() rte_rmb() 35f22e705eSMichal Mazurek 36f22e705eSMichal Mazurek #define rte_io_mb() asm volatile("fence iorw, iorw" : : : "memory") 37f22e705eSMichal Mazurek 38f22e705eSMichal Mazurek #define rte_io_wmb() asm volatile("fence orw, ow" : : : "memory") 39f22e705eSMichal Mazurek 40f22e705eSMichal Mazurek #define rte_io_rmb() asm volatile("fence ir, ir" : : : "memory") 41f22e705eSMichal Mazurek 42f22e705eSMichal Mazurek static __rte_always_inline void 431ec6a845STyler Retzlaff rte_atomic_thread_fence(rte_memory_order memorder) 44f22e705eSMichal Mazurek { 451ec6a845STyler Retzlaff __rte_atomic_thread_fence(memorder); 46f22e705eSMichal Mazurek } 47f22e705eSMichal Mazurek 48f22e705eSMichal Mazurek #ifdef __cplusplus 49f22e705eSMichal Mazurek } 50f22e705eSMichal Mazurek #endif 51f22e705eSMichal Mazurek 52f22e705eSMichal Mazurek #endif /* RTE_ATOMIC_RISCV_H */ 53