diff options
| -rw-r--r-- | arch/x86/include/asm/mpspec_def.h | 20 | ||||
| -rw-r--r-- | arch/x86/kernel/mpparse.c | 59 | ||||
| -rw-r--r-- | arch/x86/mach-generic/es7000.c | 4 |
3 files changed, 41 insertions, 42 deletions
diff --git a/arch/x86/include/asm/mpspec_def.h b/arch/x86/include/asm/mpspec_def.h index 6ea62ea2dc21..59568bc4767f 100644 --- a/arch/x86/include/asm/mpspec_def.h +++ b/arch/x86/include/asm/mpspec_def.h | |||
| @@ -40,16 +40,16 @@ struct intel_mp_floating { | |||
| 40 | #define MPC_SIGNATURE "PCMP" | 40 | #define MPC_SIGNATURE "PCMP" |
| 41 | 41 | ||
| 42 | struct mpc_table { | 42 | struct mpc_table { |
| 43 | char mpc_signature[4]; | 43 | char signature[4]; |
| 44 | unsigned short mpc_length; /* Size of table */ | 44 | unsigned short length; /* Size of table */ |
| 45 | char mpc_spec; /* 0x01 */ | 45 | char spec; /* 0x01 */ |
| 46 | char mpc_checksum; | 46 | char checksum; |
| 47 | char mpc_oem[8]; | 47 | char oem[8]; |
| 48 | char mpc_productid[12]; | 48 | char productid[12]; |
| 49 | unsigned int mpc_oemptr; /* 0 if not present */ | 49 | unsigned int oemptr; /* 0 if not present */ |
| 50 | unsigned short mpc_oemsize; /* 0 if not present */ | 50 | unsigned short oemsize; /* 0 if not present */ |
| 51 | unsigned short mpc_oemcount; | 51 | unsigned short oemcount; |
| 52 | unsigned int mpc_lapic; /* APIC address */ | 52 | unsigned int lapic; /* APIC address */ |
| 53 | unsigned int reserved; | 53 | unsigned int reserved; |
| 54 | }; | 54 | }; |
| 55 | 55 | ||
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index d780ddddbc37..e6a9724fefc1 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c | |||
| @@ -247,35 +247,35 @@ static void __init MP_lintsrc_info(struct mpc_lintsrc *m) | |||
| 247 | static int __init smp_check_mpc(struct mpc_table *mpc, char *oem, char *str) | 247 | static int __init smp_check_mpc(struct mpc_table *mpc, char *oem, char *str) |
| 248 | { | 248 | { |
| 249 | 249 | ||
| 250 | if (memcmp(mpc->mpc_signature, MPC_SIGNATURE, 4)) { | 250 | if (memcmp(mpc->signature, MPC_SIGNATURE, 4)) { |
| 251 | printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n", | 251 | printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n", |
| 252 | mpc->mpc_signature[0], mpc->mpc_signature[1], | 252 | mpc->signature[0], mpc->signature[1], |
| 253 | mpc->mpc_signature[2], mpc->mpc_signature[3]); | 253 | mpc->signature[2], mpc->signature[3]); |
| 254 | return 0; | 254 | return 0; |
| 255 | } | 255 | } |
| 256 | if (mpf_checksum((unsigned char *)mpc, mpc->mpc_length)) { | 256 | if (mpf_checksum((unsigned char *)mpc, mpc->length)) { |
| 257 | printk(KERN_ERR "MPTABLE: checksum error!\n"); | 257 | printk(KERN_ERR "MPTABLE: checksum error!\n"); |
| 258 | return 0; | 258 | return 0; |
| 259 | } | 259 | } |
| 260 | if (mpc->mpc_spec != 0x01 && mpc->mpc_spec != 0x04) { | 260 | if (mpc->spec != 0x01 && mpc->spec != 0x04) { |
| 261 | printk(KERN_ERR "MPTABLE: bad table version (%d)!!\n", | 261 | printk(KERN_ERR "MPTABLE: bad table version (%d)!!\n", |
| 262 | mpc->mpc_spec); | 262 | mpc->spec); |
| 263 | return 0; | 263 | return 0; |
| 264 | } | 264 | } |
| 265 | if (!mpc->mpc_lapic) { | 265 | if (!mpc->lapic) { |
| 266 | printk(KERN_ERR "MPTABLE: null local APIC address!\n"); | 266 | printk(KERN_ERR "MPTABLE: null local APIC address!\n"); |
| 267 | return 0; | 267 | return 0; |
| 268 | } | 268 | } |
| 269 | memcpy(oem, mpc->mpc_oem, 8); | 269 | memcpy(oem, mpc->oem, 8); |
| 270 | oem[8] = 0; | 270 | oem[8] = 0; |
| 271 | printk(KERN_INFO "MPTABLE: OEM ID: %s\n", oem); | 271 | printk(KERN_INFO "MPTABLE: OEM ID: %s\n", oem); |
| 272 | 272 | ||
| 273 | memcpy(str, mpc->mpc_productid, 12); | 273 | memcpy(str, mpc->productid, 12); |
| 274 | str[12] = 0; | 274 | str[12] = 0; |
| 275 | 275 | ||
| 276 | printk(KERN_INFO "MPTABLE: Product ID: %s\n", str); | 276 | printk(KERN_INFO "MPTABLE: Product ID: %s\n", str); |
| 277 | 277 | ||
| 278 | printk(KERN_INFO "MPTABLE: APIC at: 0x%X\n", mpc->mpc_lapic); | 278 | printk(KERN_INFO "MPTABLE: APIC at: 0x%X\n", mpc->lapic); |
| 279 | 279 | ||
| 280 | return 1; | 280 | return 1; |
| 281 | } | 281 | } |
| @@ -305,14 +305,14 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) | |||
| 305 | #endif | 305 | #endif |
| 306 | /* save the local APIC address, it might be non-default */ | 306 | /* save the local APIC address, it might be non-default */ |
| 307 | if (!acpi_lapic) | 307 | if (!acpi_lapic) |
| 308 | mp_lapic_addr = mpc->mpc_lapic; | 308 | mp_lapic_addr = mpc->lapic; |
| 309 | 309 | ||
| 310 | if (early) | 310 | if (early) |
| 311 | return 1; | 311 | return 1; |
| 312 | 312 | ||
| 313 | if (mpc->mpc_oemptr && x86_quirks->smp_read_mpc_oem) { | 313 | if (mpc->oemptr && x86_quirks->smp_read_mpc_oem) { |
| 314 | struct mpc_oemtable *oem_table = (void *)(long)mpc->mpc_oemptr; | 314 | struct mpc_oemtable *oem_table = (void *)(long)mpc->oemptr; |
| 315 | x86_quirks->smp_read_mpc_oem(oem_table, mpc->mpc_oemsize); | 315 | x86_quirks->smp_read_mpc_oem(oem_table, mpc->oemsize); |
| 316 | } | 316 | } |
| 317 | 317 | ||
| 318 | /* | 318 | /* |
| @@ -321,7 +321,7 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) | |||
| 321 | if (x86_quirks->mpc_record) | 321 | if (x86_quirks->mpc_record) |
| 322 | *x86_quirks->mpc_record = 0; | 322 | *x86_quirks->mpc_record = 0; |
| 323 | 323 | ||
| 324 | while (count < mpc->mpc_length) { | 324 | while (count < mpc->length) { |
| 325 | switch (*mpt) { | 325 | switch (*mpt) { |
| 326 | case MP_PROCESSOR: | 326 | case MP_PROCESSOR: |
| 327 | { | 327 | { |
| @@ -378,8 +378,8 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) | |||
| 378 | printk(KERN_ERR "Your mptable is wrong, contact your HW vendor!\n"); | 378 | printk(KERN_ERR "Your mptable is wrong, contact your HW vendor!\n"); |
| 379 | printk(KERN_ERR "type %x\n", *mpt); | 379 | printk(KERN_ERR "type %x\n", *mpt); |
| 380 | print_hex_dump(KERN_ERR, " ", DUMP_PREFIX_ADDRESS, 16, | 380 | print_hex_dump(KERN_ERR, " ", DUMP_PREFIX_ADDRESS, 16, |
| 381 | 1, mpc, mpc->mpc_length, 1); | 381 | 1, mpc, mpc->length, 1); |
| 382 | count = mpc->mpc_length; | 382 | count = mpc->length; |
| 383 | break; | 383 | break; |
| 384 | } | 384 | } |
| 385 | if (x86_quirks->mpc_record) | 385 | if (x86_quirks->mpc_record) |
| @@ -848,8 +848,8 @@ static int __init replace_intsrc_all(struct mpc_table *mpc, | |||
| 848 | int count = sizeof(*mpc); | 848 | int count = sizeof(*mpc); |
| 849 | unsigned char *mpt = ((unsigned char *)mpc) + count; | 849 | unsigned char *mpt = ((unsigned char *)mpc) + count; |
| 850 | 850 | ||
| 851 | printk(KERN_INFO "mpc_length %x\n", mpc->mpc_length); | 851 | printk(KERN_INFO "mpc_length %x\n", mpc->length); |
| 852 | while (count < mpc->mpc_length) { | 852 | while (count < mpc->length) { |
| 853 | switch (*mpt) { | 853 | switch (*mpt) { |
| 854 | case MP_PROCESSOR: | 854 | case MP_PROCESSOR: |
| 855 | { | 855 | { |
| @@ -912,7 +912,7 @@ static int __init replace_intsrc_all(struct mpc_table *mpc, | |||
| 912 | printk(KERN_ERR "Your mptable is wrong, contact your HW vendor!\n"); | 912 | printk(KERN_ERR "Your mptable is wrong, contact your HW vendor!\n"); |
| 913 | printk(KERN_ERR "type %x\n", *mpt); | 913 | printk(KERN_ERR "type %x\n", *mpt); |
| 914 | print_hex_dump(KERN_ERR, " ", DUMP_PREFIX_ADDRESS, 16, | 914 | print_hex_dump(KERN_ERR, " ", DUMP_PREFIX_ADDRESS, 16, |
| 915 | 1, mpc, mpc->mpc_length, 1); | 915 | 1, mpc, mpc->length, 1); |
| 916 | goto out; | 916 | goto out; |
| 917 | } | 917 | } |
| 918 | } | 918 | } |
| @@ -947,7 +947,7 @@ static int __init replace_intsrc_all(struct mpc_table *mpc, | |||
| 947 | } | 947 | } |
| 948 | } | 948 | } |
| 949 | assign_to_mpc_intsrc(&mp_irqs[i], m); | 949 | assign_to_mpc_intsrc(&mp_irqs[i], m); |
| 950 | mpc->mpc_length = count; | 950 | mpc->length = count; |
| 951 | mpt += sizeof(struct mpc_intsrc); | 951 | mpt += sizeof(struct mpc_intsrc); |
| 952 | } | 952 | } |
| 953 | print_mp_irq_info(&mp_irqs[i]); | 953 | print_mp_irq_info(&mp_irqs[i]); |
| @@ -955,9 +955,8 @@ static int __init replace_intsrc_all(struct mpc_table *mpc, | |||
| 955 | #endif | 955 | #endif |
| 956 | out: | 956 | out: |
| 957 | /* update checksum */ | 957 | /* update checksum */ |
| 958 | mpc->mpc_checksum = 0; | 958 | mpc->checksum = 0; |
| 959 | mpc->mpc_checksum -= mpf_checksum((unsigned char *)mpc, | 959 | mpc->checksum -= mpf_checksum((unsigned char *)mpc, mpc->length); |
| 960 | mpc->mpc_length); | ||
| 961 | 960 | ||
| 962 | return 0; | 961 | return 0; |
| 963 | } | 962 | } |
| @@ -1029,7 +1028,7 @@ static int __init update_mp_table(void) | |||
| 1029 | printk(KERN_INFO "mpf: %lx\n", virt_to_phys(mpf)); | 1028 | printk(KERN_INFO "mpf: %lx\n", virt_to_phys(mpf)); |
| 1030 | printk(KERN_INFO "mpf_physptr: %x\n", mpf->mpf_physptr); | 1029 | printk(KERN_INFO "mpf_physptr: %x\n", mpf->mpf_physptr); |
| 1031 | 1030 | ||
| 1032 | if (mpc_new_phys && mpc->mpc_length > mpc_new_length) { | 1031 | if (mpc_new_phys && mpc->length > mpc_new_length) { |
| 1033 | mpc_new_phys = 0; | 1032 | mpc_new_phys = 0; |
| 1034 | printk(KERN_INFO "mpc_new_length is %ld, please use alloc_mptable=8k\n", | 1033 | printk(KERN_INFO "mpc_new_length is %ld, please use alloc_mptable=8k\n", |
| 1035 | mpc_new_length); | 1034 | mpc_new_length); |
| @@ -1038,10 +1037,10 @@ static int __init update_mp_table(void) | |||
| 1038 | if (!mpc_new_phys) { | 1037 | if (!mpc_new_phys) { |
| 1039 | unsigned char old, new; | 1038 | unsigned char old, new; |
| 1040 | /* check if we can change the postion */ | 1039 | /* check if we can change the postion */ |
| 1041 | mpc->mpc_checksum = 0; | 1040 | mpc->checksum = 0; |
| 1042 | old = mpf_checksum((unsigned char *)mpc, mpc->mpc_length); | 1041 | old = mpf_checksum((unsigned char *)mpc, mpc->length); |
| 1043 | mpc->mpc_checksum = 0xff; | 1042 | mpc->checksum = 0xff; |
| 1044 | new = mpf_checksum((unsigned char *)mpc, mpc->mpc_length); | 1043 | new = mpf_checksum((unsigned char *)mpc, mpc->length); |
| 1045 | if (old == new) { | 1044 | if (old == new) { |
| 1046 | printk(KERN_INFO "mpc is readonly, please try alloc_mptable instead\n"); | 1045 | printk(KERN_INFO "mpc is readonly, please try alloc_mptable instead\n"); |
| 1047 | return 0; | 1046 | return 0; |
| @@ -1050,7 +1049,7 @@ static int __init update_mp_table(void) | |||
| 1050 | } else { | 1049 | } else { |
| 1051 | mpf->mpf_physptr = mpc_new_phys; | 1050 | mpf->mpf_physptr = mpc_new_phys; |
| 1052 | mpc_new = phys_to_virt(mpc_new_phys); | 1051 | mpc_new = phys_to_virt(mpc_new_phys); |
| 1053 | memcpy(mpc_new, mpc, mpc->mpc_length); | 1052 | memcpy(mpc_new, mpc, mpc->length); |
| 1054 | mpc = mpc_new; | 1053 | mpc = mpc_new; |
| 1055 | /* check if we can modify that */ | 1054 | /* check if we can modify that */ |
| 1056 | if (mpc_new_phys - mpf->mpf_physptr) { | 1055 | if (mpc_new_phys - mpf->mpf_physptr) { |
diff --git a/arch/x86/mach-generic/es7000.c b/arch/x86/mach-generic/es7000.c index 39243a796e18..c2ded1448024 100644 --- a/arch/x86/mach-generic/es7000.c +++ b/arch/x86/mach-generic/es7000.c | |||
| @@ -46,9 +46,9 @@ static void __init enable_apic_mode(void) | |||
| 46 | static __init int | 46 | static __init int |
| 47 | mps_oem_check(struct mpc_table *mpc, char *oem, char *productid) | 47 | mps_oem_check(struct mpc_table *mpc, char *oem, char *productid) |
| 48 | { | 48 | { |
| 49 | if (mpc->mpc_oemptr) { | 49 | if (mpc->oemptr) { |
| 50 | struct mpc_oemtable *oem_table = | 50 | struct mpc_oemtable *oem_table = |
| 51 | (struct mpc_oemtable *)mpc->mpc_oemptr; | 51 | (struct mpc_oemtable *)mpc->oemptr; |
| 52 | if (!strncmp(oem, "UNISYS", 6)) | 52 | if (!strncmp(oem, "UNISYS", 6)) |
| 53 | return parse_unisys_oem((char *)oem_table); | 53 | return parse_unisys_oem((char *)oem_table); |
| 54 | } | 54 | } |
