xref: /netbsd-src/sys/arch/xen/include/i82093var.h (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
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