diff options
Diffstat (limited to 'arch/i386/kernel/mpparse.c')
| -rw-r--r-- | arch/i386/kernel/mpparse.c | 70 |
1 files changed, 21 insertions, 49 deletions
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c index a70b5fa0ef06..442aaf8c77eb 100644 --- a/arch/i386/kernel/mpparse.c +++ b/arch/i386/kernel/mpparse.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <asm/io_apic.h> | 30 | #include <asm/io_apic.h> |
| 31 | 31 | ||
| 32 | #include <mach_apic.h> | 32 | #include <mach_apic.h> |
| 33 | #include <mach_apicdef.h> | ||
| 33 | #include <mach_mpparse.h> | 34 | #include <mach_mpparse.h> |
| 34 | #include <bios_ebda.h> | 35 | #include <bios_ebda.h> |
| 35 | 36 | ||
| @@ -68,7 +69,7 @@ unsigned int def_to_bigsmp = 0; | |||
| 68 | /* Processor that is doing the boot up */ | 69 | /* Processor that is doing the boot up */ |
| 69 | unsigned int boot_cpu_physical_apicid = -1U; | 70 | unsigned int boot_cpu_physical_apicid = -1U; |
| 70 | /* Internal processor count */ | 71 | /* Internal processor count */ |
| 71 | static unsigned int __devinitdata num_processors; | 72 | unsigned int __cpuinitdata num_processors; |
| 72 | 73 | ||
| 73 | /* Bitmask of physically existing CPUs */ | 74 | /* Bitmask of physically existing CPUs */ |
| 74 | physid_mask_t phys_cpu_present_map; | 75 | physid_mask_t phys_cpu_present_map; |
| @@ -228,12 +229,14 @@ static void __init MP_bus_info (struct mpc_config_bus *m) | |||
| 228 | 229 | ||
| 229 | mpc_oem_bus_info(m, str, translation_table[mpc_record]); | 230 | mpc_oem_bus_info(m, str, translation_table[mpc_record]); |
| 230 | 231 | ||
| 232 | #if MAX_MP_BUSSES < 256 | ||
| 231 | if (m->mpc_busid >= MAX_MP_BUSSES) { | 233 | if (m->mpc_busid >= MAX_MP_BUSSES) { |
| 232 | printk(KERN_WARNING "MP table busid value (%d) for bustype %s " | 234 | printk(KERN_WARNING "MP table busid value (%d) for bustype %s " |
| 233 | " is too large, max. supported is %d\n", | 235 | " is too large, max. supported is %d\n", |
| 234 | m->mpc_busid, str, MAX_MP_BUSSES - 1); | 236 | m->mpc_busid, str, MAX_MP_BUSSES - 1); |
| 235 | return; | 237 | return; |
| 236 | } | 238 | } |
| 239 | #endif | ||
| 237 | 240 | ||
| 238 | if (strncmp(str, BUSTYPE_ISA, sizeof(BUSTYPE_ISA)-1) == 0) { | 241 | if (strncmp(str, BUSTYPE_ISA, sizeof(BUSTYPE_ISA)-1) == 0) { |
| 239 | mp_bus_id_to_type[m->mpc_busid] = MP_BUS_ISA; | 242 | mp_bus_id_to_type[m->mpc_busid] = MP_BUS_ISA; |
| @@ -293,19 +296,6 @@ static void __init MP_lintsrc_info (struct mpc_config_lintsrc *m) | |||
| 293 | m->mpc_irqtype, m->mpc_irqflag & 3, | 296 | m->mpc_irqtype, m->mpc_irqflag & 3, |
| 294 | (m->mpc_irqflag >> 2) &3, m->mpc_srcbusid, | 297 | (m->mpc_irqflag >> 2) &3, m->mpc_srcbusid, |
| 295 | m->mpc_srcbusirq, m->mpc_destapic, m->mpc_destapiclint); | 298 | m->mpc_srcbusirq, m->mpc_destapic, m->mpc_destapiclint); |
| 296 | /* | ||
| 297 | * Well it seems all SMP boards in existence | ||
| 298 | * use ExtINT/LVT1 == LINT0 and | ||
| 299 | * NMI/LVT2 == LINT1 - the following check | ||
| 300 | * will show us if this assumptions is false. | ||
| 301 | * Until then we do not have to add baggage. | ||
| 302 | */ | ||
| 303 | if ((m->mpc_irqtype == mp_ExtINT) && | ||
| 304 | (m->mpc_destapiclint != 0)) | ||
| 305 | BUG(); | ||
| 306 | if ((m->mpc_irqtype == mp_NMI) && | ||
| 307 | (m->mpc_destapiclint != 1)) | ||
| 308 | BUG(); | ||
| 309 | } | 299 | } |
| 310 | 300 | ||
| 311 | #ifdef CONFIG_X86_NUMAQ | 301 | #ifdef CONFIG_X86_NUMAQ |
| @@ -822,8 +812,7 @@ int es7000_plat; | |||
| 822 | 812 | ||
| 823 | #ifdef CONFIG_ACPI | 813 | #ifdef CONFIG_ACPI |
| 824 | 814 | ||
| 825 | void __init mp_register_lapic_address ( | 815 | void __init mp_register_lapic_address(u64 address) |
| 826 | u64 address) | ||
| 827 | { | 816 | { |
| 828 | mp_lapic_addr = (unsigned long) address; | 817 | mp_lapic_addr = (unsigned long) address; |
| 829 | 818 | ||
| @@ -835,13 +824,10 @@ void __init mp_register_lapic_address ( | |||
| 835 | Dprintk("Boot CPU = %d\n", boot_cpu_physical_apicid); | 824 | Dprintk("Boot CPU = %d\n", boot_cpu_physical_apicid); |
| 836 | } | 825 | } |
| 837 | 826 | ||
| 838 | 827 | void __devinit mp_register_lapic (u8 id, u8 enabled) | |
| 839 | void __devinit mp_register_lapic ( | ||
| 840 | u8 id, | ||
| 841 | u8 enabled) | ||
| 842 | { | 828 | { |
| 843 | struct mpc_config_processor processor; | 829 | struct mpc_config_processor processor; |
| 844 | int boot_cpu = 0; | 830 | int boot_cpu = 0; |
| 845 | 831 | ||
| 846 | if (MAX_APICS - id <= 0) { | 832 | if (MAX_APICS - id <= 0) { |
| 847 | printk(KERN_WARNING "Processor #%d invalid (max %d)\n", | 833 | printk(KERN_WARNING "Processor #%d invalid (max %d)\n", |
| @@ -878,11 +864,9 @@ static struct mp_ioapic_routing { | |||
| 878 | u32 pin_programmed[4]; | 864 | u32 pin_programmed[4]; |
| 879 | } mp_ioapic_routing[MAX_IO_APICS]; | 865 | } mp_ioapic_routing[MAX_IO_APICS]; |
| 880 | 866 | ||
| 881 | 867 | static int mp_find_ioapic (int gsi) | |
| 882 | static int mp_find_ioapic ( | ||
| 883 | int gsi) | ||
| 884 | { | 868 | { |
| 885 | int i = 0; | 869 | int i = 0; |
| 886 | 870 | ||
| 887 | /* Find the IOAPIC that manages this GSI. */ | 871 | /* Find the IOAPIC that manages this GSI. */ |
| 888 | for (i = 0; i < nr_ioapics; i++) { | 872 | for (i = 0; i < nr_ioapics; i++) { |
| @@ -895,15 +879,11 @@ static int mp_find_ioapic ( | |||
| 895 | 879 | ||
| 896 | return -1; | 880 | return -1; |
| 897 | } | 881 | } |
| 898 | |||
| 899 | 882 | ||
| 900 | void __init mp_register_ioapic ( | 883 | void __init mp_register_ioapic(u8 id, u32 address, u32 gsi_base) |
| 901 | u8 id, | ||
| 902 | u32 address, | ||
| 903 | u32 gsi_base) | ||
| 904 | { | 884 | { |
| 905 | int idx = 0; | 885 | int idx = 0; |
| 906 | int tmpid; | 886 | int tmpid; |
| 907 | 887 | ||
| 908 | if (nr_ioapics >= MAX_IO_APICS) { | 888 | if (nr_ioapics >= MAX_IO_APICS) { |
| 909 | printk(KERN_ERR "ERROR: Max # of I/O APICs (%d) exceeded " | 889 | printk(KERN_ERR "ERROR: Max # of I/O APICs (%d) exceeded " |
| @@ -949,16 +929,10 @@ void __init mp_register_ioapic ( | |||
| 949 | mp_ioapics[idx].mpc_apicver, mp_ioapics[idx].mpc_apicaddr, | 929 | mp_ioapics[idx].mpc_apicver, mp_ioapics[idx].mpc_apicaddr, |
| 950 | mp_ioapic_routing[idx].gsi_base, | 930 | mp_ioapic_routing[idx].gsi_base, |
| 951 | mp_ioapic_routing[idx].gsi_end); | 931 | mp_ioapic_routing[idx].gsi_end); |
| 952 | |||
| 953 | return; | ||
| 954 | } | 932 | } |
| 955 | 933 | ||
| 956 | 934 | void __init | |
| 957 | void __init mp_override_legacy_irq ( | 935 | mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, u32 gsi) |
| 958 | u8 bus_irq, | ||
| 959 | u8 polarity, | ||
| 960 | u8 trigger, | ||
| 961 | u32 gsi) | ||
| 962 | { | 936 | { |
| 963 | struct mpc_config_intsrc intsrc; | 937 | struct mpc_config_intsrc intsrc; |
| 964 | int ioapic = -1; | 938 | int ioapic = -1; |
| @@ -996,15 +970,13 @@ void __init mp_override_legacy_irq ( | |||
| 996 | mp_irqs[mp_irq_entries] = intsrc; | 970 | mp_irqs[mp_irq_entries] = intsrc; |
| 997 | if (++mp_irq_entries == MAX_IRQ_SOURCES) | 971 | if (++mp_irq_entries == MAX_IRQ_SOURCES) |
| 998 | panic("Max # of irq sources exceeded!\n"); | 972 | panic("Max # of irq sources exceeded!\n"); |
| 999 | |||
| 1000 | return; | ||
| 1001 | } | 973 | } |
| 1002 | 974 | ||
| 1003 | void __init mp_config_acpi_legacy_irqs (void) | 975 | void __init mp_config_acpi_legacy_irqs (void) |
| 1004 | { | 976 | { |
| 1005 | struct mpc_config_intsrc intsrc; | 977 | struct mpc_config_intsrc intsrc; |
| 1006 | int i = 0; | 978 | int i = 0; |
| 1007 | int ioapic = -1; | 979 | int ioapic = -1; |
| 1008 | 980 | ||
| 1009 | /* | 981 | /* |
| 1010 | * Fabricate the legacy ISA bus (bus #31). | 982 | * Fabricate the legacy ISA bus (bus #31). |
| @@ -1073,12 +1045,12 @@ void __init mp_config_acpi_legacy_irqs (void) | |||
| 1073 | 1045 | ||
| 1074 | #define MAX_GSI_NUM 4096 | 1046 | #define MAX_GSI_NUM 4096 |
| 1075 | 1047 | ||
| 1076 | int mp_register_gsi (u32 gsi, int triggering, int polarity) | 1048 | int mp_register_gsi(u32 gsi, int triggering, int polarity) |
| 1077 | { | 1049 | { |
| 1078 | int ioapic = -1; | 1050 | int ioapic = -1; |
| 1079 | int ioapic_pin = 0; | 1051 | int ioapic_pin = 0; |
| 1080 | int idx, bit = 0; | 1052 | int idx, bit = 0; |
| 1081 | static int pci_irq = 16; | 1053 | static int pci_irq = 16; |
| 1082 | /* | 1054 | /* |
| 1083 | * Mapping between Global System Interrups, which | 1055 | * Mapping between Global System Interrups, which |
| 1084 | * represent all possible interrupts, and IRQs | 1056 | * represent all possible interrupts, and IRQs |
