diff options
author | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2012-03-20 18:53:10 -0400 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2012-05-01 14:50:33 -0400 |
commit | 31b3c9d723407b395564d1fff3624cc0083ae520 (patch) | |
tree | 91956c150661328c2f1ff344491000cf06d2f60e /arch | |
parent | 4a8e2a3115e7aa4bd2deb4c6483d47c743e0fbb3 (diff) |
xen/x86: Implement x86_apic_ops
Or rather just implement one different function as opposed
to the native one : the read function.
We synthesize the values.
Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>
[v1: Rebased on top of tip/x86/urgent]
[v2: Return 0xfd instead of 0xff in the default case]
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/xen/Makefile | 2 | ||||
-rw-r--r-- | arch/x86/xen/apic.c | 17 | ||||
-rw-r--r-- | arch/x86/xen/enlighten.c | 2 | ||||
-rw-r--r-- | arch/x86/xen/xen-ops.h | 4 |
4 files changed, 24 insertions, 1 deletions
diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile index add2c2d729ce..96ab2c09cb68 100644 --- a/arch/x86/xen/Makefile +++ b/arch/x86/xen/Makefile | |||
@@ -20,5 +20,5 @@ obj-$(CONFIG_EVENT_TRACING) += trace.o | |||
20 | obj-$(CONFIG_SMP) += smp.o | 20 | obj-$(CONFIG_SMP) += smp.o |
21 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o | 21 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o |
22 | obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o | 22 | obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o |
23 | obj-$(CONFIG_XEN_DOM0) += vga.o | 23 | obj-$(CONFIG_XEN_DOM0) += apic.o vga.o |
24 | obj-$(CONFIG_SWIOTLB_XEN) += pci-swiotlb-xen.o | 24 | obj-$(CONFIG_SWIOTLB_XEN) += pci-swiotlb-xen.o |
diff --git a/arch/x86/xen/apic.c b/arch/x86/xen/apic.c new file mode 100644 index 000000000000..73ade38caa32 --- /dev/null +++ b/arch/x86/xen/apic.c | |||
@@ -0,0 +1,17 @@ | |||
1 | #include <linux/init.h> | ||
2 | #include <asm/x86_init.h> | ||
3 | |||
4 | unsigned int xen_io_apic_read(unsigned apic, unsigned reg) | ||
5 | { | ||
6 | if (reg == 0x1) | ||
7 | return 0x00170020; | ||
8 | else if (reg == 0x0) | ||
9 | return apic << 24; | ||
10 | |||
11 | return 0xfd; | ||
12 | } | ||
13 | |||
14 | void __init xen_init_apic(void) | ||
15 | { | ||
16 | x86_io_apic_ops.read = xen_io_apic_read; | ||
17 | } | ||
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index a8f8844b8d32..c2ea9e9f420d 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -1362,6 +1362,8 @@ asmlinkage void __init xen_start_kernel(void) | |||
1362 | xen_start_info->console.domU.mfn = 0; | 1362 | xen_start_info->console.domU.mfn = 0; |
1363 | xen_start_info->console.domU.evtchn = 0; | 1363 | xen_start_info->console.domU.evtchn = 0; |
1364 | 1364 | ||
1365 | xen_init_apic(); | ||
1366 | |||
1365 | /* Make sure ACS will be enabled */ | 1367 | /* Make sure ACS will be enabled */ |
1366 | pci_request_acs(); | 1368 | pci_request_acs(); |
1367 | } | 1369 | } |
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h index b095739ccd4c..45c0c0667bd9 100644 --- a/arch/x86/xen/xen-ops.h +++ b/arch/x86/xen/xen-ops.h | |||
@@ -92,11 +92,15 @@ struct dom0_vga_console_info; | |||
92 | 92 | ||
93 | #ifdef CONFIG_XEN_DOM0 | 93 | #ifdef CONFIG_XEN_DOM0 |
94 | void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size); | 94 | void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size); |
95 | void __init xen_init_apic(void); | ||
95 | #else | 96 | #else |
96 | static inline void __init xen_init_vga(const struct dom0_vga_console_info *info, | 97 | static inline void __init xen_init_vga(const struct dom0_vga_console_info *info, |
97 | size_t size) | 98 | size_t size) |
98 | { | 99 | { |
99 | } | 100 | } |
101 | static inline void __init xen_init_apic(void) | ||
102 | { | ||
103 | } | ||
100 | #endif | 104 | #endif |
101 | 105 | ||
102 | /* Declare an asm function, along with symbols needed to make it | 106 | /* Declare an asm function, along with symbols needed to make it |