diff options
Diffstat (limited to 'arch/x86/kernel/mpparse.c')
| -rw-r--r-- | arch/x86/kernel/mpparse.c | 75 |
1 files changed, 24 insertions, 51 deletions
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index fcd513bf2846..5be95ef4ffec 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c | |||
| @@ -45,6 +45,11 @@ static int __init mpf_checksum(unsigned char *mp, int len) | |||
| 45 | return sum & 0xFF; | 45 | return sum & 0xFF; |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | int __init default_mpc_apic_id(struct mpc_cpu *m) | ||
| 49 | { | ||
| 50 | return m->apicid; | ||
| 51 | } | ||
| 52 | |||
| 48 | static void __init MP_processor_info(struct mpc_cpu *m) | 53 | static void __init MP_processor_info(struct mpc_cpu *m) |
| 49 | { | 54 | { |
| 50 | int apicid; | 55 | int apicid; |
| @@ -55,10 +60,7 @@ static void __init MP_processor_info(struct mpc_cpu *m) | |||
| 55 | return; | 60 | return; |
| 56 | } | 61 | } |
| 57 | 62 | ||
| 58 | if (x86_quirks->mpc_apic_id) | 63 | apicid = x86_init.mpparse.mpc_apic_id(m); |
| 59 | apicid = x86_quirks->mpc_apic_id(m); | ||
| 60 | else | ||
| 61 | apicid = m->apicid; | ||
| 62 | 64 | ||
| 63 | if (m->cpuflag & CPU_BOOTPROCESSOR) { | 65 | if (m->cpuflag & CPU_BOOTPROCESSOR) { |
| 64 | bootup_cpu = " (Bootup-CPU)"; | 66 | bootup_cpu = " (Bootup-CPU)"; |
| @@ -70,16 +72,18 @@ static void __init MP_processor_info(struct mpc_cpu *m) | |||
| 70 | } | 72 | } |
| 71 | 73 | ||
| 72 | #ifdef CONFIG_X86_IO_APIC | 74 | #ifdef CONFIG_X86_IO_APIC |
| 73 | static void __init MP_bus_info(struct mpc_bus *m) | 75 | void __init default_mpc_oem_bus_info(struct mpc_bus *m, char *str) |
| 74 | { | 76 | { |
| 75 | char str[7]; | ||
| 76 | memcpy(str, m->bustype, 6); | 77 | memcpy(str, m->bustype, 6); |
| 77 | str[6] = 0; | 78 | str[6] = 0; |
| 79 | apic_printk(APIC_VERBOSE, "Bus #%d is %s\n", m->busid, str); | ||
| 80 | } | ||
| 78 | 81 | ||
| 79 | if (x86_quirks->mpc_oem_bus_info) | 82 | static void __init MP_bus_info(struct mpc_bus *m) |
| 80 | x86_quirks->mpc_oem_bus_info(m, str); | 83 | { |
| 81 | else | 84 | char str[7]; |
| 82 | apic_printk(APIC_VERBOSE, "Bus #%d is %s\n", m->busid, str); | 85 | |
| 86 | x86_init.mpparse.mpc_oem_bus_info(m, str); | ||
| 83 | 87 | ||
| 84 | #if MAX_MP_BUSSES < 256 | 88 | #if MAX_MP_BUSSES < 256 |
| 85 | if (m->busid >= MAX_MP_BUSSES) { | 89 | if (m->busid >= MAX_MP_BUSSES) { |
| @@ -96,8 +100,8 @@ static void __init MP_bus_info(struct mpc_bus *m) | |||
| 96 | mp_bus_id_to_type[m->busid] = MP_BUS_ISA; | 100 | mp_bus_id_to_type[m->busid] = MP_BUS_ISA; |
| 97 | #endif | 101 | #endif |
| 98 | } else if (strncmp(str, BUSTYPE_PCI, sizeof(BUSTYPE_PCI) - 1) == 0) { | 102 | } else if (strncmp(str, BUSTYPE_PCI, sizeof(BUSTYPE_PCI) - 1) == 0) { |
| 99 | if (x86_quirks->mpc_oem_pci_bus) | 103 | if (x86_init.mpparse.mpc_oem_pci_bus) |
| 100 | x86_quirks->mpc_oem_pci_bus(m); | 104 | x86_init.mpparse.mpc_oem_pci_bus(m); |
| 101 | 105 | ||
| 102 | clear_bit(m->busid, mp_bus_not_pci); | 106 | clear_bit(m->busid, mp_bus_not_pci); |
| 103 | #if defined(CONFIG_EISA) || defined(CONFIG_MCA) | 107 | #if defined(CONFIG_EISA) || defined(CONFIG_MCA) |
| @@ -291,6 +295,8 @@ static void __init smp_dump_mptable(struct mpc_table *mpc, unsigned char *mpt) | |||
| 291 | 1, mpc, mpc->length, 1); | 295 | 1, mpc, mpc->length, 1); |
| 292 | } | 296 | } |
| 293 | 297 | ||
| 298 | void __init default_smp_read_mpc_oem(struct mpc_table *mpc) { } | ||
| 299 | |||
| 294 | static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) | 300 | static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) |
| 295 | { | 301 | { |
| 296 | char str[16]; | 302 | char str[16]; |
| @@ -312,16 +318,13 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) | |||
| 312 | if (early) | 318 | if (early) |
| 313 | return 1; | 319 | return 1; |
| 314 | 320 | ||
| 315 | if (mpc->oemptr && x86_quirks->smp_read_mpc_oem) { | 321 | if (mpc->oemptr) |
| 316 | struct mpc_oemtable *oem_table = (void *)(long)mpc->oemptr; | 322 | x86_init.mpparse.smp_read_mpc_oem(mpc); |
| 317 | x86_quirks->smp_read_mpc_oem(oem_table, mpc->oemsize); | ||
| 318 | } | ||
| 319 | 323 | ||
| 320 | /* | 324 | /* |
| 321 | * Now process the configuration blocks. | 325 | * Now process the configuration blocks. |
| 322 | */ | 326 | */ |
| 323 | if (x86_quirks->mpc_record) | 327 | x86_init.mpparse.mpc_record(0); |
| 324 | *x86_quirks->mpc_record = 0; | ||
| 325 | 328 | ||
| 326 | while (count < mpc->length) { | 329 | while (count < mpc->length) { |
| 327 | switch (*mpt) { | 330 | switch (*mpt) { |
| @@ -353,8 +356,7 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) | |||
| 353 | count = mpc->length; | 356 | count = mpc->length; |
| 354 | break; | 357 | break; |
| 355 | } | 358 | } |
| 356 | if (x86_quirks->mpc_record) | 359 | x86_init.mpparse.mpc_record(1); |
| 357 | (*x86_quirks->mpc_record)++; | ||
| 358 | } | 360 | } |
| 359 | 361 | ||
| 360 | #ifdef CONFIG_X86_BIGSMP | 362 | #ifdef CONFIG_X86_BIGSMP |
| @@ -608,7 +610,7 @@ static int __init check_physptr(struct mpf_intel *mpf, unsigned int early) | |||
| 608 | /* | 610 | /* |
| 609 | * Scan the memory blocks for an SMP configuration block. | 611 | * Scan the memory blocks for an SMP configuration block. |
| 610 | */ | 612 | */ |
| 611 | static void __init __get_smp_config(unsigned int early) | 613 | void __init default_get_smp_config(unsigned int early) |
| 612 | { | 614 | { |
| 613 | struct mpf_intel *mpf = mpf_found; | 615 | struct mpf_intel *mpf = mpf_found; |
| 614 | 616 | ||
| @@ -625,11 +627,6 @@ static void __init __get_smp_config(unsigned int early) | |||
| 625 | if (acpi_lapic && acpi_ioapic) | 627 | if (acpi_lapic && acpi_ioapic) |
| 626 | return; | 628 | return; |
| 627 | 629 | ||
| 628 | if (x86_quirks->mach_get_smp_config) { | ||
| 629 | if (x86_quirks->mach_get_smp_config(early)) | ||
| 630 | return; | ||
| 631 | } | ||
| 632 | |||
| 633 | printk(KERN_INFO "Intel MultiProcessor Specification v1.%d\n", | 630 | printk(KERN_INFO "Intel MultiProcessor Specification v1.%d\n", |
| 634 | mpf->specification); | 631 | mpf->specification); |
| 635 | #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_32) | 632 | #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_32) |
| @@ -670,16 +667,6 @@ static void __init __get_smp_config(unsigned int early) | |||
| 670 | */ | 667 | */ |
| 671 | } | 668 | } |
| 672 | 669 | ||
| 673 | void __init early_get_smp_config(void) | ||
| 674 | { | ||
| 675 | __get_smp_config(1); | ||
| 676 | } | ||
| 677 | |||
| 678 | void __init get_smp_config(void) | ||
| 679 | { | ||
| 680 | __get_smp_config(0); | ||
| 681 | } | ||
| 682 | |||
| 683 | static void __init smp_reserve_bootmem(struct mpf_intel *mpf) | 670 | static void __init smp_reserve_bootmem(struct mpf_intel *mpf) |
| 684 | { | 671 | { |
| 685 | unsigned long size = get_mpc_size(mpf->physptr); | 672 | unsigned long size = get_mpc_size(mpf->physptr); |
| @@ -745,14 +732,10 @@ static int __init smp_scan_config(unsigned long base, unsigned long length, | |||
| 745 | return 0; | 732 | return 0; |
| 746 | } | 733 | } |
| 747 | 734 | ||
| 748 | static void __init __find_smp_config(unsigned int reserve) | 735 | void __init default_find_smp_config(unsigned int reserve) |
| 749 | { | 736 | { |
| 750 | unsigned int address; | 737 | unsigned int address; |
| 751 | 738 | ||
| 752 | if (x86_quirks->mach_find_smp_config) { | ||
| 753 | if (x86_quirks->mach_find_smp_config(reserve)) | ||
| 754 | return; | ||
| 755 | } | ||
| 756 | /* | 739 | /* |
| 757 | * FIXME: Linux assumes you have 640K of base ram.. | 740 | * FIXME: Linux assumes you have 640K of base ram.. |
| 758 | * this continues the error... | 741 | * this continues the error... |
| @@ -787,16 +770,6 @@ static void __init __find_smp_config(unsigned int reserve) | |||
| 787 | smp_scan_config(address, 0x400, reserve); | 770 | smp_scan_config(address, 0x400, reserve); |
| 788 | } | 771 | } |
| 789 | 772 | ||
| 790 | void __init early_find_smp_config(void) | ||
| 791 | { | ||
| 792 | __find_smp_config(0); | ||
| 793 | } | ||
| 794 | |||
| 795 | void __init find_smp_config(void) | ||
| 796 | { | ||
| 797 | __find_smp_config(1); | ||
| 798 | } | ||
| 799 | |||
| 800 | #ifdef CONFIG_X86_IO_APIC | 773 | #ifdef CONFIG_X86_IO_APIC |
| 801 | static u8 __initdata irq_used[MAX_IRQ_SOURCES]; | 774 | static u8 __initdata irq_used[MAX_IRQ_SOURCES]; |
| 802 | 775 | ||
