x86: Move smp_read_mpc_oem to x86_init_ops.
authorThomas Gleixner <tglx@linutronix.de>
Thu, 20 Aug 2009 10:18:32 +0000 (12:18 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 27 Aug 2009 15:12:52 +0000 (17:12 +0200)
Move smp_read_mpc_oem from quirks to x86_init.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/include/asm/mpspec.h
arch/x86/include/asm/setup.h
arch/x86/include/asm/x86_init.h
arch/x86/kernel/apic/numaq_32.c
arch/x86/kernel/mpparse.c
arch/x86/kernel/x86_init.c

index 03c6a92bfd4214156cb1eeb37585a1f7d94aaff6..5de8e92be2dc7e73c7a1ba08f4cc07e23b31f1f0 100644 (file)
@@ -63,11 +63,13 @@ extern void find_smp_config(void);
 extern void early_reserve_e820_mpc_new(void);
 extern int enable_update_mptable;
 extern int default_mpc_apic_id(struct mpc_cpu *m);
+extern void default_smp_read_mpc_oem(struct mpc_table *mpc);
 #else
 static inline void find_smp_config(void) { }
 static inline void early_reserve_e820_mpc_new(void) { }
 #define enable_update_mptable 0
 #define default_mpc_apic_id NULL
+#define default_smp_read_mpc_oem NULL
 #endif
 
 void __cpuinit generic_processor_info(int apicid, int version);
index 7c7f44f3e4d93711dc5aa7e50b3caa91c3f5d166..adb5d44d990904cbb14520cd4eb31d3f41e98618 100644 (file)
@@ -13,7 +13,6 @@
  * Any setup quirks to be performed?
  */
 struct mpc_bus;
-struct mpc_oemtable;
 
 struct x86_quirks {
        int (*arch_pre_time_init)(void);
@@ -26,8 +25,6 @@ struct x86_quirks {
 
        void (*mpc_oem_bus_info)(struct mpc_bus *m, char *name);
        void (*mpc_oem_pci_bus)(struct mpc_bus *m);
-       void (*smp_read_mpc_oem)(struct mpc_oemtable *oemtable,
-                               unsigned short oemsize);
 };
 
 extern void x86_quirk_intr_init(void);
index f2be2a780189c3d9490f67c748ff5c37edb515ab..fc0eef2f5fdcbd147fd79087fff10267a688d97a 100644 (file)
@@ -2,17 +2,20 @@
 #define _ASM_X86_PLATFORM_H
 
 struct mpc_cpu;
+struct mpc_table;
 
 /**
  * struct x86_init_mpparse - platform specific mpparse ops
  * @mpc_record:                        platform specific mpc record accounting
  * @setup_ioapic_ids:          platform specific ioapic id override
  * @mpc_apic_id:               platform specific mpc apic id assignment
+ * @smp_read_mpc_oem:          platform specific oem mpc table setup
  */
 struct x86_init_mpparse {
        void (*mpc_record)(unsigned int mode);
        void (*setup_ioapic_ids)(void);
        int (*mpc_apic_id)(struct mpc_cpu *m);
+       void (*smp_read_mpc_oem)(struct mpc_table *mpc);
 };
 
 /**
index 222413f7e79796489e19b5405403b972dadb994b..1bd3b0ed240030c306ac437615a0d8f1aef0d264 100644 (file)
@@ -218,9 +218,9 @@ static int __init mpf_checksum(unsigned char *mp, int len)
 /*
  * Read/parse the MPC oem tables
  */
-static void __init
- smp_read_mpc_oem(struct mpc_oemtable *oemtable, unsigned short oemsize)
+static void __init smp_read_mpc_oem(struct mpc_table *mpc)
 {
+       struct mpc_oemtable *oemtable = (void *)(long)mpc->oemptr;
        int count = sizeof(*oemtable);  /* the header size */
        unsigned char *oemptr = ((unsigned char *)oemtable) + count;
 
@@ -272,7 +272,6 @@ static struct x86_quirks numaq_x86_quirks __initdata = {
        .mach_find_smp_config           = NULL,
        .mpc_oem_bus_info               = mpc_oem_bus_info,
        .mpc_oem_pci_bus                = mpc_oem_pci_bus,
-       .smp_read_mpc_oem               = smp_read_mpc_oem,
 };
 
 static __init void early_check_numaq(void)
@@ -293,6 +292,7 @@ static __init void early_check_numaq(void)
                x86_init.mpparse.mpc_record = numaq_mpc_record;
                x86_init.mpparse.setup_ioapic_ids = x86_init_noop;
                x86_init.mpparse.mpc_apic_id = mpc_apic_id;
+               x86_init.mpparse.smp_read_mpc_oem = smp_read_mpc_oem;
        }
 }
 
index 04560860a72a246a7b0ad51fb7b73125d42072c0..45abdf63edcdf8f6c8c3fc2f319047d02f53d4ef 100644 (file)
@@ -293,6 +293,8 @@ static void __init smp_dump_mptable(struct mpc_table *mpc, unsigned char *mpt)
                        1, mpc, mpc->length, 1);
 }
 
+void __init default_smp_read_mpc_oem(struct mpc_table *mpc) { }
+
 static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)
 {
        char str[16];
@@ -314,10 +316,8 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)
        if (early)
                return 1;
 
-       if (mpc->oemptr && x86_quirks->smp_read_mpc_oem) {
-               struct mpc_oemtable *oem_table = (void *)(long)mpc->oemptr;
-               x86_quirks->smp_read_mpc_oem(oem_table, mpc->oemsize);
-       }
+       if (mpc->oemptr)
+               x86_init.mpparse.smp_read_mpc_oem(mpc);
 
        /*
         *      Now process the configuration blocks.
index 08749f2612f30c52f2b6ba0ca377b89f362dfd0d..fb5d93c077d82d1c9053b493a90116ef74a30627 100644 (file)
@@ -30,5 +30,6 @@ struct __initdata x86_init_ops x86_init = {
                .mpc_record             = x86_init_uint_noop,
                .setup_ioapic_ids       = x86_init_noop,
                .mpc_apic_id            = default_mpc_apic_id,
+               .smp_read_mpc_oem       = default_smp_read_mpc_oem,
        },
 };