#include <linux/init.h>
#include <linux/module.h>
#include <linux/slab.h>
-#include <asm/acpi.h>
+#include <linux/acpi.h>
#include <asm/io.h>
#include <linux/pm.h>
#include <asm/system.h>
#define NO_MATCH { DMI_NONE, NULL}
#define MATCH DMI_MATCH
-/*
- * Some machines, usually laptops, can't handle an enabled local APIC.
- * The symptoms include hangs or reboots when suspending or resuming,
- * attaching or detaching the power cord, or entering BIOS setup screens
- * through magic key sequences.
- */
-static int __init local_apic_kills_bios(struct dmi_blacklist *d)
-{
-#ifdef CONFIG_X86_LOCAL_APIC
- extern int enable_local_apic;
- if (enable_local_apic == 0) {
- enable_local_apic = -1;
- printk(KERN_WARNING "%s with broken BIOS detected. "
- "Refusing to enable the local APIC.\n",
- d->ident);
- }
-#endif
- return 0;
-}
-
-
/*
* Toshiba keyboard likes to repeat keys when they are not repeated.
*/
static __initdata struct dmi_blacklist dmi_blacklist[]={
- /* Machines which have problems handling enabled local APICs */
-
- { local_apic_kills_bios, "Dell Inspiron", {
- MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
- MATCH(DMI_PRODUCT_NAME, "Inspiron"),
- NO_MATCH, NO_MATCH
- } },
-
- { local_apic_kills_bios, "Dell Latitude", {
- MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
- MATCH(DMI_PRODUCT_NAME, "Latitude"),
- NO_MATCH, NO_MATCH
- } },
-
- { local_apic_kills_bios, "IBM Thinkpad T20", {
- MATCH(DMI_BOARD_VENDOR, "IBM"),
- MATCH(DMI_BOARD_NAME, "264741U"),
- NO_MATCH, NO_MATCH
- } },
-
- { local_apic_kills_bios, "ASUS L3C", {
- MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
- MATCH(DMI_BOARD_NAME, "P4_L3C"),
- NO_MATCH, NO_MATCH
- } },
-
{ broken_toshiba_keyboard, "Toshiba Satellite 4030cdt", { /* Keyboard generates spurious repeats */
MATCH(DMI_PRODUCT_NAME, "S4030CDT/4.3"),
NO_MATCH, NO_MATCH, NO_MATCH
{ NULL, }
};
-
-
-/*
- * Walk the blacklist table running matching functions until someone
- * returns 1 or we hit the end.
- */
-
-
-static __init void dmi_check_blacklist(void)
-{
-#ifdef CONFIG_ACPI_BOOT
-#define ACPI_BLACKLIST_CUTOFF_YEAR 2001
-
- if (dmi_ident[DMI_BIOS_DATE]) {
- char *s = strrchr(dmi_ident[DMI_BIOS_DATE], '/');
- if (s) {
- int year, disable = 0;
- s++;
- year = simple_strtoul(s,NULL,0);
- if (year >= 1000)
- disable = year < ACPI_BLACKLIST_CUTOFF_YEAR;
- else if (year < 1 || (year > 90 && year <= 99))
- disable = 1;
- if (disable && !acpi_force) {
- printk(KERN_NOTICE "ACPI disabled because your bios is from %s and too old\n", s);
- printk(KERN_NOTICE "You can enable it with acpi=force\n");
- disable_acpi();
- }
- }
- }
-#endif
- dmi_check_system(dmi_blacklist);
-}
-
-
/*
* Process a DMI table entry. Right now all we care about are the BIOS
{
int err = dmi_iterate(dmi_decode);
if(err == 0)
- dmi_check_blacklist();
+ dmi_check_system(dmi_blacklist);
else
printk(KERN_INFO "DMI not present.\n");
}