#ifndef HV_MMIO_H #define HV_MMIO_H #include "hv/types.h" static inline void hv_dmb_ish(void) { __asm__ volatile("dmb ish" ::: "memory"); } static inline void hv_dsb_ish(void) { __asm__ volatile("dsb ish" ::: "memory"); } static inline void hv_dsb_sy(void) { __asm__ volatile("dsb sy" ::: "memory"); } static inline void hv_isb(void) { __asm__ volatile("isb" ::: "memory"); } static inline uint32_t mmio_read32(uintptr_t addr) { uint32_t value = *(volatile uint32_t *)addr; hv_dmb_ish(); return value; } static inline void mmio_write32(uintptr_t addr, uint32_t value) { hv_dmb_ish(); *(volatile uint32_t *)addr = value; hv_dmb_ish(); } #endif