diff options
-rw-r--r-- | arch/x86/xen/apic.c | 13 |
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 @@ | |||
1 | #include <linux/init.h> | 1 | #include <linux/init.h> |
2 | #include <asm/x86_init.h> | 2 | #include <asm/x86_init.h> |
3 | #include <asm/apic.h> | ||
4 | #include <xen/interface/physdev.h> | ||
5 | #include <asm/xen/hypercall.h> | ||
3 | 6 | ||
4 | unsigned int xen_io_apic_read(unsigned apic, unsigned reg) | 7 | unsigned int xen_io_apic_read(unsigned apic, unsigned reg) |
5 | { | 8 | { |
9 | struct physdev_apic apic_op; | ||
10 | int ret; | ||
11 | |||
12 | apic_op.apic_physbase = mpc_ioapic_addr(apic); | ||
13 | apic_op.reg = reg; | ||
14 | ret = HYPERVISOR_physdev_op(PHYSDEVOP_apic_read, &apic_op); | ||
15 | if (!ret) | ||
16 | return apic_op.value; | ||
17 | |||
18 | /* fallback to return an emulated IO_APIC values */ | ||
6 | if (reg == 0x1) | 19 | if (reg == 0x1) |
7 | return 0x00170020; | 20 | return 0x00170020; |
8 | else if (reg == 0x0) | 21 | else if (reg == 0x0) |