AArch64 EL2 hypervisor for QEMU virt that boots at EL2
1#ifndef HV_MMIO_H
2#define HV_MMIO_H
3
4#include "hv/types.h"
5
6static inline void hv_dmb_ish(void)
7{
8 __asm__ volatile("dmb ish" ::: "memory");
9}
10
11static inline void hv_dsb_ish(void)
12{
13 __asm__ volatile("dsb ish" ::: "memory");
14}
15
16static inline void hv_dsb_sy(void)
17{
18 __asm__ volatile("dsb sy" ::: "memory");
19}
20
21static inline void hv_isb(void)
22{
23 __asm__ volatile("isb" ::: "memory");
24}
25
26static inline uint32_t mmio_read32(uintptr_t addr)
27{
28 uint32_t value = *(volatile uint32_t *)addr;
29 hv_dmb_ish();
30 return value;
31}
32
33static inline void mmio_write32(uintptr_t addr, uint32_t value)
34{
35 hv_dmb_ish();
36 *(volatile uint32_t *)addr = value;
37 hv_dmb_ish();
38}
39
40#endif