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