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) |
