1 /* $NetBSD: i82093var.h,v 1.5 2017/11/04 09:31:08 cherry Exp $ */ 2 3 #ifndef _XEN_I82093VAR_H_ 4 #define _XEN_I82093VAR_H_ 5 6 #include "opt_xen.h" 7 #define _IOAPIC_CUSTOM_RW 8 #include <x86/i82093var.h> 9 #include <hypervisor.h> 10 11 static inline uint32_t 12 ioapic_read_ul(struct ioapic_softc *sc, int regid) 13 { 14 physdev_op_t op; 15 int ret; 16 17 op.cmd = PHYSDEVOP_APIC_READ; 18 op.u.apic_op.apic_physbase = sc->sc_pa; 19 op.u.apic_op.reg = regid; 20 ret = HYPERVISOR_physdev_op(&op); 21 if (ret) { 22 printf("PHYSDEVOP_APIC_READ ret %d\n", ret); 23 panic("PHYSDEVOP_APIC_READ"); 24 } 25 return op.u.apic_op.value; 26 } 27 28 static inline void 29 ioapic_write_ul(struct ioapic_softc *sc, int regid, uint32_t val) 30 { 31 physdev_op_t op; 32 int ret; 33 34 op.cmd = PHYSDEVOP_APIC_WRITE; 35 op.u.apic_op.apic_physbase = sc->sc_pa; 36 op.u.apic_op.reg = regid; 37 op.u.apic_op.value = val; 38 ret = HYPERVISOR_physdev_op(&op); 39 if (ret) 40 printf("PHYSDEVOP_APIC_WRITE ret %d\n", ret); 41 } 42 43 #endif /* !_XEN_I82093VAR_H_ */ 44