x86: unify mp_bus_info
[deliverable/linux.git] / arch / x86 / kernel / mpparse_64.c
index 3196c2318640d06eb2ba30d27a2e3153ca033117..831097f2022a29ad610e42f5e468f299952cf37d 100644 (file)
@@ -44,25 +44,6 @@ DECLARE_BITMAP(mp_bus_not_pci, MAX_MP_BUSSES);
 int mp_bus_id_to_pci_bus[MAX_MP_BUSSES] = {[0 ... MAX_MP_BUSSES - 1] = -1 };
 
 static int mp_current_pci_id = 0;
-/* I/O APIC entries */
-struct mpc_config_ioapic mp_ioapics[MAX_IO_APICS];
-
-/* # of MP IRQ source entries */
-struct mpc_config_intsrc mp_irqs[MAX_IRQ_SOURCES];
-
-/* MP IRQ source entries */
-int mp_irq_entries;
-
-int nr_ioapics;
-
-/* Make it easy to share the UP and SMP code: */
-#ifndef CONFIG_X86_SMP
-unsigned int num_processors;
-unsigned disabled_cpus __cpuinitdata;
-#ifndef CONFIG_X86_LOCAL_APIC
-unsigned int boot_cpu_physical_apicid = -1U;
-#endif
-#endif
 
 /*
  * Intel MP BIOS table parsing routines:
@@ -84,19 +65,25 @@ static int __init mpf_checksum(unsigned char *mp, int len)
 
 static void __cpuinit MP_processor_info(struct mpc_config_processor *m)
 {
+       int apicid;
        char *bootup_cpu = "";
 
        if (!(m->mpc_cpuflag & CPU_ENABLED)) {
                disabled_cpus++;
                return;
        }
+#ifdef CONFIG_X86_NUMAQ
+       apicid = mpc_apic_id(m, translation_table[mpc_record]);
+#else
+       apicid = m->mpc_apicid;
+#endif
        if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) {
                bootup_cpu = " (Bootup-CPU)";
                boot_cpu_physical_apicid = m->mpc_apicid;
        }
 
        printk(KERN_INFO "Processor #%d%s\n", m->mpc_apicid, bootup_cpu);
-       generic_processor_info(m->mpc_apicid, 0);
+       generic_processor_info(apicid, m->mpc_apicver);
 }
 
 static void __init MP_bus_info(struct mpc_config_bus *m)
@@ -105,17 +92,43 @@ static void __init MP_bus_info(struct mpc_config_bus *m)
 
        memcpy(str, m->mpc_bustype, 6);
        str[6] = 0;
+
+#ifdef CONFIG_X86_NUMAQ
+       mpc_oem_bus_info(m, str, translation_table[mpc_record]);
+#else
        Dprintk("Bus #%d is %s\n", m->mpc_busid, str);
+#endif
 
-       if (strncmp(str, "ISA", 3) == 0) {
-               set_bit(m->mpc_busid, mp_bus_not_pci);
-       } else if (strncmp(str, "PCI", 3) == 0) {
+#if MAX_MP_BUSSES < 256
+       if (m->mpc_busid >= MAX_MP_BUSSES) {
+               printk(KERN_WARNING "MP table busid value (%d) for bustype %s "
+                      " is too large, max. supported is %d\n",
+                      m->mpc_busid, str, MAX_MP_BUSSES - 1);
+               return;
+       }
+#endif
+
+       if (strncmp(str, BUSTYPE_ISA, sizeof(BUSTYPE_ISA) - 1) == 0) {
+                set_bit(m->mpc_busid, mp_bus_not_pci);
+#if defined(CONFIG_EISA) || defined (CONFIG_MCA)
+               mp_bus_id_to_type[m->mpc_busid] = MP_BUS_ISA;
+#endif
+       } else if (strncmp(str, BUSTYPE_PCI, sizeof(BUSTYPE_PCI) - 1) == 0) {
+#ifdef CONFIG_X86_NUMAQ
+               mpc_oem_pci_bus(m, translation_table[mpc_record]);
+#endif
                clear_bit(m->mpc_busid, mp_bus_not_pci);
                mp_bus_id_to_pci_bus[m->mpc_busid] = mp_current_pci_id;
                mp_current_pci_id++;
-       } else {
-               printk(KERN_ERR "Unknown bustype %s\n", str);
-       }
+#if defined(CONFIG_EISA) || defined (CONFIG_MCA)
+               mp_bus_id_to_type[m->mpc_busid] = MP_BUS_PCI;
+       } else if (strncmp(str, BUSTYPE_EISA, sizeof(BUSTYPE_EISA) - 1) == 0) {
+               mp_bus_id_to_type[m->mpc_busid] = MP_BUS_EISA;
+       } else if (strncmp(str, BUSTYPE_MCA, sizeof(BUSTYPE_MCA) - 1) == 0) {
+               mp_bus_id_to_type[m->mpc_busid] = MP_BUS_MCA;
+#endif
+       } else
+               printk(KERN_WARNING "Unknown bustype %s - ignoring\n", str);
 }
 
 static int bad_ioapic(unsigned long address)
@@ -613,33 +626,10 @@ void __init find_smp_config(void)
 
 #ifdef CONFIG_ACPI
 
-void __init mp_register_lapic_address(u64 address)
-{
-       mp_lapic_addr = (unsigned long)address;
-       set_fixmap_nocache(FIX_APIC_BASE, mp_lapic_addr);
-       if (boot_cpu_physical_apicid == -1U)
-               boot_cpu_physical_apicid  = GET_APIC_ID(read_apic_id());
-}
-void __cpuinit mp_register_lapic(int id, u8 enabled)
-{
-       if (!enabled) {
-               ++disabled_cpus;
-               return;
-       }
-
-       generic_processor_info(id, 0);
-}
-
-
 #define MP_ISA_BUS             0
 #define MP_MAX_IOAPIC_PIN      127
 
-static struct mp_ioapic_routing {
-       int apic_id;
-       int gsi_base;
-       int gsi_end;
-       u32 pin_programmed[4];
-} mp_ioapic_routing[MAX_IO_APICS];
+extern struct mp_ioapic_routing mp_ioapic_routing[MAX_IO_APICS];
 
 static int mp_find_ioapic(int gsi)
 {
This page took 0.026004 seconds and 5 git commands to generate.