diff options
Diffstat (limited to 'arch/x86/kernel/reboot.c')
| -rw-r--r-- | arch/x86/kernel/reboot.c | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index d2d1ce8170f0..a06e8d101844 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | #include <linux/init.h> | 3 | #include <linux/init.h> |
| 4 | #include <linux/pm.h> | 4 | #include <linux/pm.h> |
| 5 | #include <linux/efi.h> | 5 | #include <linux/efi.h> |
| 6 | #include <linux/dmi.h> | ||
| 6 | #include <acpi/reboot.h> | 7 | #include <acpi/reboot.h> |
| 7 | #include <asm/io.h> | 8 | #include <asm/io.h> |
| 8 | #include <asm/apic.h> | 9 | #include <asm/apic.h> |
| @@ -17,7 +18,6 @@ | |||
| 17 | #include <asm/cpu.h> | 18 | #include <asm/cpu.h> |
| 18 | 19 | ||
| 19 | #ifdef CONFIG_X86_32 | 20 | #ifdef CONFIG_X86_32 |
| 20 | # include <linux/dmi.h> | ||
| 21 | # include <linux/ctype.h> | 21 | # include <linux/ctype.h> |
| 22 | # include <linux/mc146818rtc.h> | 22 | # include <linux/mc146818rtc.h> |
| 23 | #else | 23 | #else |
| @@ -249,6 +249,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { | |||
| 249 | DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"), | 249 | DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"), |
| 250 | }, | 250 | }, |
| 251 | }, | 251 | }, |
| 252 | { /* Handle problems with rebooting on CompuLab SBC-FITPC2 */ | ||
| 253 | .callback = set_bios_reboot, | ||
| 254 | .ident = "CompuLab SBC-FITPC2", | ||
| 255 | .matches = { | ||
| 256 | DMI_MATCH(DMI_SYS_VENDOR, "CompuLab"), | ||
| 257 | DMI_MATCH(DMI_PRODUCT_NAME, "SBC-FITPC2"), | ||
| 258 | }, | ||
| 259 | }, | ||
| 252 | { } | 260 | { } |
| 253 | }; | 261 | }; |
| 254 | 262 | ||
| @@ -396,6 +404,46 @@ EXPORT_SYMBOL(machine_real_restart); | |||
| 396 | 404 | ||
| 397 | #endif /* CONFIG_X86_32 */ | 405 | #endif /* CONFIG_X86_32 */ |
| 398 | 406 | ||
| 407 | /* | ||
| 408 | * Some Apple MacBook and MacBookPro's needs reboot=p to be able to reboot | ||
| 409 | */ | ||
| 410 | static int __init set_pci_reboot(const struct dmi_system_id *d) | ||
| 411 | { | ||
| 412 | if (reboot_type != BOOT_CF9) { | ||
| 413 | reboot_type = BOOT_CF9; | ||
| 414 | printk(KERN_INFO "%s series board detected. " | ||
| 415 | "Selecting PCI-method for reboots.\n", d->ident); | ||
| 416 | } | ||
| 417 | return 0; | ||
| 418 | } | ||
| 419 | |||
| 420 | static struct dmi_system_id __initdata pci_reboot_dmi_table[] = { | ||
| 421 | { /* Handle problems with rebooting on Apple MacBook5 */ | ||
| 422 | .callback = set_pci_reboot, | ||
| 423 | .ident = "Apple MacBook5", | ||
| 424 | .matches = { | ||
| 425 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | ||
| 426 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5"), | ||
| 427 | }, | ||
| 428 | }, | ||
| 429 | { /* Handle problems with rebooting on Apple MacBookPro5 */ | ||
| 430 | .callback = set_pci_reboot, | ||
| 431 | .ident = "Apple MacBookPro5", | ||
| 432 | .matches = { | ||
| 433 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | ||
| 434 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5"), | ||
| 435 | }, | ||
| 436 | }, | ||
| 437 | { } | ||
| 438 | }; | ||
| 439 | |||
| 440 | static int __init pci_reboot_init(void) | ||
| 441 | { | ||
| 442 | dmi_check_system(pci_reboot_dmi_table); | ||
| 443 | return 0; | ||
| 444 | } | ||
| 445 | core_initcall(pci_reboot_init); | ||
| 446 | |||
| 399 | static inline void kb_wait(void) | 447 | static inline void kb_wait(void) |
| 400 | { | 448 | { |
| 401 | int i; | 449 | int i; |
