diff options
| author | Martin J. Bligh <mbligh@aracnet.com> | 2002-12-22 18:19:48 -0800 |
|---|---|---|
| committer | Patrick Mochel <mochel@osdl.org> | 2002-12-22 18:19:48 -0800 |
| commit | 37d1206a506a5ee32d71bfa8e2c818551341e684 (patch) | |
| tree | 1aa6af48e453bf813aff1ddbbcc43e8e348c6b97 | |
| parent | 43f1c206e9e0cb6d11f13c177fde56f988ada646 (diff) | |
[PATCH] mpparse cleanups
Most of code originally by James Cleverdon.
More stuff reformed in the mpparse sections - this time not apic stuff,
so we create mach_mpparse.h and stick it in there.
Abstracts out:
- mpc_oem_bus_info() - stores mappings between buses and nodes/quads.
- mpc_oem_pci_bus() - stores mappings between global and local pci bus numbers
Changes summit_check() into mps_oem_check() to generalise it.
| -rw-r--r-- | arch/i386/kernel/mpparse.c | 28 | ||||
| -rw-r--r-- | include/asm-i386/mach-default/mach_apic.h | 4 | ||||
| -rw-r--r-- | include/asm-i386/mach-default/mach_mpparse.h | 20 | ||||
| -rw-r--r-- | include/asm-i386/mach-numaq/mach_apic.h | 4 | ||||
| -rw-r--r-- | include/asm-i386/mach-numaq/mach_mpparse.h | 37 | ||||
| -rw-r--r-- | include/asm-i386/mach-summit/mach_apic.h | 6 | ||||
| -rw-r--r-- | include/asm-i386/mach-summit/mach_mpparse.h | 22 |
7 files changed, 86 insertions, 35 deletions
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c index 12231f7b60b0..fb5baa1754cc 100644 --- a/arch/i386/kernel/mpparse.c +++ b/arch/i386/kernel/mpparse.c @@ -32,6 +32,7 @@ #include <asm/io_apic.h> #include <mach_apic.h> +#include <mach_mpparse.h> /* Have we found an MP table */ int smp_found_config; @@ -191,28 +192,18 @@ void __init MP_processor_info (struct mpc_config_processor *m) static void __init MP_bus_info (struct mpc_config_bus *m) { char str[7]; - int quad; memcpy(str, m->mpc_bustype, 6); str[6] = 0; - - if (clustered_apic_mode) { - quad = translation_table[mpc_record]->trans_quad; - mp_bus_id_to_node[m->mpc_busid] = quad; - mp_bus_id_to_local[m->mpc_busid] = translation_table[mpc_record]->trans_local; - printk("Bus #%d is %s (node %d)\n", m->mpc_busid, str, quad); - } else { - Dprintk("Bus #%d is %s\n", m->mpc_busid, str); - } + + mpc_oem_bus_info(m, str, translation_table[mpc_record]); if (strncmp(str, BUSTYPE_ISA, sizeof(BUSTYPE_ISA)-1) == 0) { mp_bus_id_to_type[m->mpc_busid] = MP_BUS_ISA; } 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_PCI, sizeof(BUSTYPE_PCI)-1) == 0) { - if (clustered_apic_mode){ - quad_local_to_mp_bus_id[quad][translation_table[mpc_record]->trans_local] = m->mpc_busid; - } + mpc_oem_pci_bus(m, translation_table[mpc_record]); mp_bus_id_to_type[m->mpc_busid] = MP_BUS_PCI; mp_bus_id_to_pci_bus[m->mpc_busid] = mp_current_pci_id; mp_current_pci_id++; @@ -300,6 +291,7 @@ static void __init smp_read_mpc_oem(struct mp_config_oemtable *oemtable, \ int count = sizeof (*oemtable); /* the header size */ unsigned char *oemptr = ((unsigned char *)oemtable)+count; + mpc_record = 0; printk("Found an OEM MPC table at %8p - parsing it ... \n", oemtable); if (memcmp(oemtable->oem_signature,MPC_OEM_SIGNATURE,4)) { @@ -376,7 +368,7 @@ static int __init smp_read_mpc(struct mp_config_table *mpc) str[12]=0; printk("Product ID: %s ",str); - summit_check(oem, str); + mps_oem_check(mpc, oem, str); printk("APIC at: 0x%lX\n",mpc->mpc_lapic); @@ -387,16 +379,10 @@ static int __init smp_read_mpc(struct mp_config_table *mpc) if (!acpi_lapic) mp_lapic_addr = mpc->mpc_lapic; - if (clustered_apic_mode && mpc->mpc_oemptr) { - /* We need to process the oem mpc tables to tell us which quad things are in ... */ - mpc_record = 0; - smp_read_mpc_oem((struct mp_config_oemtable *) mpc->mpc_oemptr, mpc->mpc_oemsize); - mpc_record = 0; - } - /* * Now process the configuration blocks. */ + mpc_record = 0; while (count < mpc->mpc_length) { switch(*mpt) { case MP_PROCESSOR: diff --git a/include/asm-i386/mach-default/mach_apic.h b/include/asm-i386/mach-default/mach_apic.h index 7d26f6aeedc5..e30e38ccdf66 100644 --- a/include/asm-i386/mach-default/mach_apic.h +++ b/include/asm-i386/mach-default/mach_apic.h @@ -14,10 +14,6 @@ #define APIC_BROADCAST_ID 0x0F #define check_apicid_used(bitmap, apicid) (bitmap & (1 << apicid)) -static inline void summit_check(char *oem, char *productid) -{ -} - static inline int apic_id_registered(void) { return (test_bit(GET_APIC_ID(apic_read(APIC_ID)), diff --git a/include/asm-i386/mach-default/mach_mpparse.h b/include/asm-i386/mach-default/mach_mpparse.h new file mode 100644 index 000000000000..20a41976843d --- /dev/null +++ b/include/asm-i386/mach-default/mach_mpparse.h @@ -0,0 +1,20 @@ +#ifndef __ASM_MACH_MPPARSE_H +#define __ASM_MACH_MPPARSE_H + +static inline void mpc_oem_bus_info(struct mpc_config_bus *m, char *name, + struct mpc_config_translation *translation) +{ + Dprintk("Bus #%d is %s\n", m->mpc_busid, name); +} + +static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, + struct mpc_config_translation *translation) +{ +} + +static inline void mps_oem_check(struct mp_config_table *mpc, char *oem, + char *productid) +{ +} + +#endif /* __ASM_MACH_MPPARSE_H */ diff --git a/include/asm-i386/mach-numaq/mach_apic.h b/include/asm-i386/mach-numaq/mach_apic.h index c4b5047a0bcc..2faa25de2ea7 100644 --- a/include/asm-i386/mach-numaq/mach_apic.h +++ b/include/asm-i386/mach-numaq/mach_apic.h @@ -10,10 +10,6 @@ #define APIC_BROADCAST_ID 0x0F #define check_apicid_used(bitmap, apicid) (bitmap & (1 << apicid)) -static inline void summit_check(char *oem, char *productid) -{ -} - static inline int apic_id_registered(void) { return (1); diff --git a/include/asm-i386/mach-numaq/mach_mpparse.h b/include/asm-i386/mach-numaq/mach_mpparse.h new file mode 100644 index 000000000000..ddda81a724a8 --- /dev/null +++ b/include/asm-i386/mach-numaq/mach_mpparse.h @@ -0,0 +1,37 @@ +#ifndef __ASM_MACH_MPPARSE_H +#define __ASM_MACH_MPPARSE_H + +static void __init smp_read_mpc_oem(struct mp_config_oemtable *oemtable, + unsigned short oemsize); + +static inline void mpc_oem_bus_info(struct mpc_config_bus *m, char *name, + struct mpc_config_translation *translation) +{ + int quad = translation->trans_quad; + int local = translation->trans_local; + + mp_bus_id_to_node[m->mpc_busid] = quad; + mp_bus_id_to_local[m->mpc_busid] = local; + printk("Bus #%d is %s (node %d)\n", m->mpc_busid, name, quad); +} + +static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, + struct mpc_config_translation *translation) +{ + int quad = translation->trans_quad; + int local = translation->trans_local; + + quad_local_to_mp_bus_id[quad][local] = m->mpc_busid; +} + +static inline void mps_oem_check(struct mp_config_table *mpc, char *oem, + char *productid) +{ + if (strncmp(oem, "IBM NUMA", 8)) + printk("Warning! May not be a NUMA-Q system!\n"); + if (mpc->mpc_oemptr) + smp_read_mpc_oem((struct mp_config_oemtable *) mpc->mpc_oemptr, + mpc->mpc_oemsize); +} + +#endif /* __ASM_MACH_MPPARSE_H */ diff --git a/include/asm-i386/mach-summit/mach_apic.h b/include/asm-i386/mach-summit/mach_apic.h index 4cc36cd80092..14d4db5f8d1d 100644 --- a/include/asm-i386/mach-summit/mach_apic.h +++ b/include/asm-i386/mach-summit/mach_apic.h @@ -26,12 +26,6 @@ static inline unsigned long calculate_ldr(unsigned long old) #define APIC_BROADCAST_ID (x86_summit ? 0xFF : 0x0F) #define check_apicid_used(bitmap, apicid) (0) -static inline void summit_check(char *oem, char *productid) -{ - if (!strncmp(oem, "IBM ENSW", 8) && !strncmp(str, "VIGIL SMP", 9)) - x86_summit = 1; -} - static inline void clustered_apic_check(void) { printk("Enabling APIC mode: %s. Using %d I/O APICs\n", diff --git a/include/asm-i386/mach-summit/mach_mpparse.h b/include/asm-i386/mach-summit/mach_mpparse.h new file mode 100644 index 000000000000..7bb66819082f --- /dev/null +++ b/include/asm-i386/mach-summit/mach_mpparse.h @@ -0,0 +1,22 @@ +#ifndef __ASM_MACH_MPPARSE_H +#define __ASM_MACH_MPPARSE_H + +static inline void mpc_oem_bus_info(struct mpc_config_bus *m, char *name, + struct mpc_config_translation *translation) +{ + Dprintk("Bus #%d is %s\n", m->mpc_busid, name); +} + +static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, + struct mpc_config_translation *translation) +{ +} + +static inline void mps_oem_check(struct mp_config_table *mpc, char *oem, + char *productid) +{ + if (!strncmp(oem, "IBM ENSW", 8) && !strncmp(str, "VIGIL SMP", 9)) + x86_summit = 1; +} + +#endif /* __ASM_MACH_MPPARSE_H */ |
