summaryrefslogtreecommitdiffstats
path: root/arch/x86/xen/apic.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/xen/apic.c')
-rw-r--r--arch/x86/xen/apic.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86/xen/apic.c b/arch/x86/xen/apic.c
index 73ade38caa32..1913bf2d2a9c 100644
--- a/arch/x86/xen/apic.c
+++ b/arch/x86/xen/apic.c
@@ -1,8 +1,21 @@
#include <linux/init.h>
#include <asm/x86_init.h>
+#include <asm/apic.h>
+#include <xen/interface/physdev.h>
+#include <asm/xen/hypercall.h>
unsigned int xen_io_apic_read(unsigned apic, unsigned reg)
{
+ struct physdev_apic apic_op;
+ int ret;
+
+ apic_op.apic_physbase = mpc_ioapic_addr(apic);
+ apic_op.reg = reg;
+ ret = HYPERVISOR_physdev_op(PHYSDEVOP_apic_read, &apic_op);
+ if (!ret)
+ return apic_op.value;
+
+ /* fallback to return an emulated IO_APIC values */
if (reg == 0x1)
return 0x00170020;
else if (reg == 0x0)