Add rte_write32_wc function that implements a WC store using movdiri instruction.
Signed-off-by: Radu Nicolau <radu.nico...@intel.com> --- lib/librte_eal/x86/include/rte_io.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/librte_eal/x86/include/rte_io.h b/lib/librte_eal/x86/include/rte_io.h index 2db71b1..3d74bec 100644 --- a/lib/librte_eal/x86/include/rte_io.h +++ b/lib/librte_eal/x86/include/rte_io.h @@ -11,6 +11,26 @@ extern "C" { #include "generic/rte_io.h" +/** + * Write a 32-bit value to I/O device memory address *addr*. + * Uses MOVDIRI instruction to perform a direct-store operation using WC + * memory write protocol. + * + * @param value + * Value to write + * @param addr + * I/O memory address to write the value to + */ +static __rte_always_inline void +rte_write32_wc(uint32_t value, volatile void *addr) +{ + asm volatile("sfence\n\t" + /* MOVDIRI */ + ".byte 0x40, 0x0f, 0x38, 0xf9, 0x02" + : + : "a" (value), "d" (addr)); +} + #ifdef __cplusplus } #endif -- 2.7.4