aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/include/asm/mpspec.h2
-rw-r--r--arch/x86/include/asm/setup.h3
-rw-r--r--arch/x86/include/asm/x86_init.h3
-rw-r--r--arch/x86/kernel/apic/numaq_32.c6
-rw-r--r--arch/x86/kernel/mpparse.c8
-rw-r--r--arch/x86/kernel/x86_init.c1
6 files changed, 13 insertions, 10 deletions
diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h
index 03c6a92bfd42..5de8e92be2dc 100644
--- a/arch/x86/include/asm/mpspec.h
+++ b/arch/x86/include/asm/mpspec.h
@@ -63,11 +63,13 @@ extern void find_smp_config(void);
63extern void early_reserve_e820_mpc_new(void); 63extern void early_reserve_e820_mpc_new(void);
64extern int enable_update_mptable; 64extern int enable_update_mptable;
65extern int default_mpc_apic_id(struct mpc_cpu *m); 65extern int default_mpc_apic_id(struct mpc_cpu *m);
66extern void default_smp_read_mpc_oem(struct mpc_table *mpc);
66#else 67#else
67static inline void find_smp_config(void) { } 68static inline void find_smp_config(void) { }
68static inline void early_reserve_e820_mpc_new(void) { } 69static inline void early_reserve_e820_mpc_new(void) { }
69#define enable_update_mptable 0 70#define enable_update_mptable 0
70#define default_mpc_apic_id NULL 71#define default_mpc_apic_id NULL
72#define default_smp_read_mpc_oem NULL
71#endif 73#endif
72 74
73void __cpuinit generic_processor_info(int apicid, int version); 75void __cpuinit generic_processor_info(int apicid, int version);
diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h
index 7c7f44f3e4d9..adb5d44d9909 100644
--- a/arch/x86/include/asm/setup.h
+++ b/arch/x86/include/asm/setup.h
@@ -13,7 +13,6 @@
13 * Any setup quirks to be performed? 13 * Any setup quirks to be performed?
14 */ 14 */
15struct mpc_bus; 15struct mpc_bus;
16struct mpc_oemtable;
17 16
18struct x86_quirks { 17struct x86_quirks {
19 int (*arch_pre_time_init)(void); 18 int (*arch_pre_time_init)(void);
@@ -26,8 +25,6 @@ struct x86_quirks {
26 25
27 void (*mpc_oem_bus_info)(struct mpc_bus *m, char *name); 26 void (*mpc_oem_bus_info)(struct mpc_bus *m, char *name);
28 void (*mpc_oem_pci_bus)(struct mpc_bus *m); 27 void (*mpc_oem_pci_bus)(struct mpc_bus *m);
29 void (*smp_read_mpc_oem)(struct mpc_oemtable *oemtable,
30 unsigned short oemsize);
31}; 28};
32 29
33extern void x86_quirk_intr_init(void); 30extern void x86_quirk_intr_init(void);
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index f2be2a780189..fc0eef2f5fdc 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -2,17 +2,20 @@
2#define _ASM_X86_PLATFORM_H 2#define _ASM_X86_PLATFORM_H
3 3
4struct mpc_cpu; 4struct mpc_cpu;
5struct mpc_table;
5 6
6/** 7/**
7 * struct x86_init_mpparse - platform specific mpparse ops 8 * struct x86_init_mpparse - platform specific mpparse ops
8 * @mpc_record: platform specific mpc record accounting 9 * @mpc_record: platform specific mpc record accounting
9 * @setup_ioapic_ids: platform specific ioapic id override 10 * @setup_ioapic_ids: platform specific ioapic id override
10 * @mpc_apic_id: platform specific mpc apic id assignment 11 * @mpc_apic_id: platform specific mpc apic id assignment
12 * @smp_read_mpc_oem: platform specific oem mpc table setup
11 */ 13 */
12struct x86_init_mpparse { 14struct x86_init_mpparse {
13 void (*mpc_record)(unsigned int mode); 15 void (*mpc_record)(unsigned int mode);
14 void (*setup_ioapic_ids)(void); 16 void (*setup_ioapic_ids)(void);
15 int (*mpc_apic_id)(struct mpc_cpu *m); 17 int (*mpc_apic_id)(struct mpc_cpu *m);
18 void (*smp_read_mpc_oem)(struct mpc_table *mpc);
16}; 19};
17 20
18/** 21/**
diff --git a/arch/x86/kernel/apic/numaq_32.c b/arch/x86/kernel/apic/numaq_32.c
index 222413f7e797..1bd3b0ed2400 100644
--- a/arch/x86/kernel/apic/numaq_32.c
+++ b/arch/x86/kernel/apic/numaq_32.c
@@ -218,9 +218,9 @@ static int __init mpf_checksum(unsigned char *mp, int len)
218/* 218/*
219 * Read/parse the MPC oem tables 219 * Read/parse the MPC oem tables
220 */ 220 */
221static void __init 221static void __init smp_read_mpc_oem(struct mpc_table *mpc)
222 smp_read_mpc_oem(struct mpc_oemtable *oemtable, unsigned short oemsize)
223{ 222{
223 struct mpc_oemtable *oemtable = (void *)(long)mpc->oemptr;
224 int count = sizeof(*oemtable); /* the header size */ 224 int count = sizeof(*oemtable); /* the header size */
225 unsigned char *oemptr = ((unsigned char *)oemtable) + count; 225 unsigned char *oemptr = ((unsigned char *)oemtable) + count;
226 226
@@ -272,7 +272,6 @@ static struct x86_quirks numaq_x86_quirks __initdata = {
272 .mach_find_smp_config = NULL, 272 .mach_find_smp_config = NULL,
273 .mpc_oem_bus_info = mpc_oem_bus_info, 273 .mpc_oem_bus_info = mpc_oem_bus_info,
274 .mpc_oem_pci_bus = mpc_oem_pci_bus, 274 .mpc_oem_pci_bus = mpc_oem_pci_bus,
275 .smp_read_mpc_oem = smp_read_mpc_oem,
276}; 275};
277 276
278static __init void early_check_numaq(void) 277static __init void early_check_numaq(void)
@@ -293,6 +292,7 @@ static __init void early_check_numaq(void)
293 x86_init.mpparse.mpc_record = numaq_mpc_record; 292 x86_init.mpparse.mpc_record = numaq_mpc_record;
294 x86_init.mpparse.setup_ioapic_ids = x86_init_noop; 293 x86_init.mpparse.setup_ioapic_ids = x86_init_noop;
295 x86_init.mpparse.mpc_apic_id = mpc_apic_id; 294 x86_init.mpparse.mpc_apic_id = mpc_apic_id;
295 x86_init.mpparse.smp_read_mpc_oem = smp_read_mpc_oem;
296 } 296 }
297} 297}
298 298
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c
index 04560860a72a..45abdf63edcd 100644
--- a/arch/x86/kernel/mpparse.c
+++ b/arch/x86/kernel/mpparse.c
@@ -293,6 +293,8 @@ static void __init smp_dump_mptable(struct mpc_table *mpc, unsigned char *mpt)
293 1, mpc, mpc->length, 1); 293 1, mpc, mpc->length, 1);
294} 294}
295 295
296void __init default_smp_read_mpc_oem(struct mpc_table *mpc) { }
297
296static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) 298static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)
297{ 299{
298 char str[16]; 300 char str[16];
@@ -314,10 +316,8 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)
314 if (early) 316 if (early)
315 return 1; 317 return 1;
316 318
317 if (mpc->oemptr && x86_quirks->smp_read_mpc_oem) { 319 if (mpc->oemptr)
318 struct mpc_oemtable *oem_table = (void *)(long)mpc->oemptr; 320 x86_init.mpparse.smp_read_mpc_oem(mpc);
319 x86_quirks->smp_read_mpc_oem(oem_table, mpc->oemsize);
320 }
321 321
322 /* 322 /*
323 * Now process the configuration blocks. 323 * Now process the configuration blocks.
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
index 08749f2612f3..fb5d93c077d8 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
@@ -30,5 +30,6 @@ struct __initdata x86_init_ops x86_init = {
30 .mpc_record = x86_init_uint_noop, 30 .mpc_record = x86_init_uint_noop,
31 .setup_ioapic_ids = x86_init_noop, 31 .setup_ioapic_ids = x86_init_noop,
32 .mpc_apic_id = default_mpc_apic_id, 32 .mpc_apic_id = default_mpc_apic_id,
33 .smp_read_mpc_oem = default_smp_read_mpc_oem,
33 }, 34 },
34}; 35};