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