1/* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2010-2018 Intel Corporation 3 */ 4 5#ifndef _OSDEP_RAW_GENERIC_H 6#define _OSDEP_RAW_GENERIC_H 7 8#define compiler_barrier() (asm volatile ("" : : : "memory")) 9 10#define io_wmb() compiler_barrier() 11#define io_rmb() compiler_barrier() 12 13static inline uint8_t opae_readb(const volatile void *addr) 14{ 15 uint8_t val; 16 17 val = *(const volatile uint8_t *)addr; 18 io_rmb(); 19 return val; 20} 21 22static inline uint16_t opae_readw(const volatile void *addr) 23{ 24 uint16_t val; 25 26 val = *(const volatile uint16_t *)addr; 27 io_rmb(); 28 return val; 29} 30 31static inline uint32_t opae_readl(const volatile void *addr) 32{ 33 uint32_t val; 34 35 val = *(const volatile uint32_t *)addr; 36 io_rmb(); 37 return val; 38} 39 40static inline uint64_t opae_readq(const volatile void *addr) 41{ 42 uint64_t val; 43 44 val = *(const volatile uint64_t *)addr; 45 io_rmb(); 46 return val; 47} 48 49static inline void opae_writeb(uint8_t value, volatile void *addr) 50{ 51 io_wmb(); 52 *(volatile uint8_t *)addr = value; 53} 54 55static inline void opae_writew(uint16_t value, volatile void *addr) 56{ 57 io_wmb(); 58 *(volatile uint16_t *)addr = value; 59} 60 61static inline void opae_writel(uint32_t value, volatile void *addr) 62{ 63 io_wmb(); 64 *(volatile uint32_t *)addr = value; 65} 66 67static inline void opae_writeq(uint64_t value, volatile void *addr) 68{ 69 io_wmb(); 70 *(volatile uint64_t *)addr = value; 71} 72 73#define opae_free(addr) free(addr) 74#define opae_memcpy(a, b, c) memcpy((a), (b), (c)) 75 76#endif 77