DMI cleanup patches
Subsystems (5)
Hi all,
currently arch/i386/kernel/dmi_scan.c file looks like complete mess. Interfacing with other kernel subsystem made using ad-hoc ways, mostly with ugly global variables, additionaly coding style is ... not good. So these patches appear:
patch-dmi-1-matches - simplify DMI blacklist table by
removing the need to fill unused slots with NO_MATCH macro.
patch-dmi-2-api - separate and export dmi_check_system()
function (along with some needed declarations) which checks given DMI id table against system DMI data and runs callback functions when necessary.
patch-dmi-3-whitespace - various coding style cleanups.
patch-dmi-4-sonypi - make sonypi driver use dmi_check_system()
function and remove is_sony_vaio_laptop global variable.
patch-dmi-5-apm - make APM BIOS driver use dmi_check_system()
function and move all related quirks into apm.c.
patch-dmi-6-pciirq - make pci irq routing code usedmi_check_system() function and make broken_hp_bios_irq9 variable static.
patch-dmi-7-smbus - make PIIX4 I2C use dmi_check_system()
function and remove is_unsafe_smbus global variable.
Please take a look.
Best regards.
Signature · 2 lines
Andrey Panin | Linux and UNIX system administrator [email protected] | PGP key: wwwkeys.pgp.net
cover Simplify DMI matching data
arch/i386/kernel/dmi_scan.c +38 -92
@@ -142,6 +142,7 @@enum { +DMI_NONE ,DMI_BIOS_VENDOR ,DMI_BIOS_VERSION ,DMI_BIOS_DATE ,
@@ -185,8 +186,6 @@char *substr; }; -#define NONE 255 -struct dmi_blacklist {int (*callback)(struct dmi_blacklist *);
@@ -194,7 +193,6 @@struct dmi_strmatch matches[4 ]; }; -#define NO_MATCH { NONE, NULL}#define MATCH (a,b) { a, b }/*
@@ -577,12 +575,10 @@ { broken_ps2_resume, "Dell Latitude C600", { /* Handle problems with APM on the C600 */MATCH (DMI_SYS_VENDOR ,"Dell" ),MATCH (DMI_PRODUCT_NAME ,"Latitude C600" ), -NO_MATCH ,NO_MATCH } }, { set_apm_ints, "Dell Latitude", { /* Allow interrupts during suspend on Dell Latitude laptops*/MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ),MATCH (DMI_PRODUCT_NAME ,"Latitude C510" ), -NO_MATCH ,NO_MATCH } }, { apm_is_horked, "Dell Inspiron 2500", { /* APM crashes */ MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
@@ -593,17 +589,16 @@ { set_apm_ints, "Dell Inspiron", { /* Allow interrupts during suspend on Dell Inspiron laptops*/MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ),MATCH (DMI_PRODUCT_NAME ,"Inspiron 4000" ), -NO_MATCH ,NO_MATCH } }, { broken_apm_power, "Dell Inspiron 5000e", { /* Handle problems with APM on Inspiron 5000e */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"A04" ), -MATCH (DMI_BIOS_DATE ,"08/24/2000" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"08/24/2000" ), } }, { broken_apm_power, "Dell Inspiron 2500", { /* Handle problems with APM on Inspiron 2500 */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"A12" ), -MATCH (DMI_BIOS_DATE ,"02/04/2002" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"02/04/2002" ), } }, { apm_is_horked, "Dell Dimension 4100", { /* APM crashes */ MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
@@ -614,22 +609,19 @@ { set_realmode_power_off, "Award Software v4.60 PGMA", { /* broken PM poweroff bios */MATCH (DMI_BIOS_VENDOR ,"Award Software International, Inc." ),MATCH (DMI_BIOS_VERSION ,"4.60 PGMA" ), -MATCH (DMI_BIOS_DATE ,"134526184" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"134526184" ), } }, { set_smp_bios_reboot, "Dell PowerEdge 1300", { /* Handle problems with rebooting on Dell 1300's */MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ),MATCH (DMI_PRODUCT_NAME ,"PowerEdge 1300/" ), -NO_MATCH ,NO_MATCH } }, { set_bios_reboot, "Dell PowerEdge 300", { /* Handle problems with rebooting on Dell 300's */MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ),MATCH (DMI_PRODUCT_NAME ,"PowerEdge 300/" ), -NO_MATCH ,NO_MATCH } }, { set_bios_reboot, "Dell PowerEdge 2400", { /* Handle problems with rebooting on Dell 2400's */MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ),MATCH (DMI_PRODUCT_NAME ,"PowerEdge 2400" ), -NO_MATCH ,NO_MATCH } }, { set_apm_ints, "Compaq 12XL125", { /* Allow interrupts during suspend on Compaq Laptops*/ MATCH(DMI_SYS_VENDOR, "Compaq"),
@@ -640,38 +632,31 @@ { set_apm_ints, "ASUSTeK", { /* Allow interrupts during APM or the clock goes slow */MATCH (DMI_SYS_VENDOR ,"ASUSTeK Computer Inc." ),MATCH (DMI_PRODUCT_NAME ,"L8400K series Notebook PC" ), -NO_MATCH ,NO_MATCH } }, { apm_is_horked, "ABIT KX7-333[R]", { /* APM blows on shutdown */MATCH (DMI_BOARD_VENDOR ,"ABIT" ),MATCH (DMI_BOARD_NAME ,"VT8367-8233A (KX7-333[R])" ), -NO_MATCH ,NO_MATCH , } }, { apm_is_horked, "Trigem Delhi3", { /* APM crashes */MATCH (DMI_SYS_VENDOR ,"TriGem Computer, Inc" ),MATCH (DMI_PRODUCT_NAME ,"Delhi3" ), -NO_MATCH ,NO_MATCH , } }, { apm_is_horked, "Fujitsu-Siemens", { /* APM crashes */MATCH (DMI_BIOS_VENDOR ,"hoenix/FUJITSU SIEMENS" ),MATCH (DMI_BIOS_VERSION ,"Version1.01" ), -NO_MATCH ,NO_MATCH , } }, { apm_is_horked_d850md, "Intel D850MD", { /* APM crashes */MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ),MATCH (DMI_BIOS_VERSION ,"MV85010A.86A.0016.P07.0201251536" ), -NO_MATCH ,NO_MATCH , } }, { apm_is_horked, "Intel D810EMO", { /* APM crashes */MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ),MATCH (DMI_BIOS_VERSION ,"MO81010A.86A.0008.P04.0004170800" ), -NO_MATCH ,NO_MATCH , } }, { apm_is_horked, "Dell XPS-Z", { /* APM crashes */MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ),MATCH (DMI_BIOS_VERSION ,"A11" ),MATCH (DMI_PRODUCT_NAME ,"XPS-Z" ), -NO_MATCH , } }, { apm_is_horked, "Sharp PC-PJ/AX", { /* APM crashes */ MATCH(DMI_SYS_VENDOR, "SHARP"),
@@ -688,94 +673,91 @@ { apm_likes_to_melt, "Jabil AMD", { /* APM idle hangs */MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ),MATCH (DMI_BIOS_VERSION ,"0AASNP06" ), -NO_MATCH ,NO_MATCH , } }, { apm_likes_to_melt, "AMI Bios", { /* APM idle hangs */MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ),MATCH (DMI_BIOS_VERSION ,"0AASNP05" ), -NO_MATCH ,NO_MATCH , } }, { sony_vaio_laptop, "Sony Vaio", { /* This is a Sony Vaio laptop */MATCH (DMI_SYS_VENDOR ,"Sony Corporation" ),MATCH (DMI_PRODUCT_NAME ,"PCG-" ), -NO_MATCH ,NO_MATCH , } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-N505X(DE) */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"R0206H" ), -MATCH (DMI_BIOS_DATE ,"08/23/99" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"08/23/99" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-N505VX */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"W2K06H0" ), -MATCH (DMI_BIOS_DATE ,"02/03/00" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"02/03/00" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-XG29 */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"R0117A0" ), -MATCH (DMI_BIOS_DATE ,"04/25/00" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"04/25/00" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z600NE */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"R0121Z1" ), -MATCH (DMI_BIOS_DATE ,"05/11/00" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"05/11/00" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z600NE */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"WME01Z1" ), -MATCH (DMI_BIOS_DATE ,"08/11/00" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"08/11/00" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z600LEK(DE) */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"R0206Z3" ), -MATCH (DMI_BIOS_DATE ,"12/25/00" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"12/25/00" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z505LS */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"R0203D0" ), -MATCH (DMI_BIOS_DATE ,"05/12/00" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"05/12/00" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z505LS */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"R0203Z3" ), -MATCH (DMI_BIOS_DATE ,"08/25/00" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"08/25/00" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z505LS (with updated BIOS) */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"R0209Z3" ), -MATCH (DMI_BIOS_DATE ,"05/12/01" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"05/12/01" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-F104K */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"R0204K2" ), -MATCH (DMI_BIOS_DATE ,"08/28/00" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"08/28/00" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-C1VN/C1VE */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"R0208P1" ), -MATCH (DMI_BIOS_DATE ,"11/09/00" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"11/09/00" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-C1VE */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"R0204P1" ), -MATCH (DMI_BIOS_DATE ,"09/12/00" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"09/12/00" ), } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-C1VE */MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ),MATCH (DMI_BIOS_VERSION ,"WXPO1Z3" ), -MATCH (DMI_BIOS_DATE ,"10/26/01" ),NO_MATCH +MATCH (DMI_BIOS_DATE ,"10/26/01" ), } }, { exploding_pnp_bios, "Higraded P14H", { /* PnPBIOS GPF on boot */
@@ -794,25 +776,21 @@ { 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 } },/* Problem Intel 440GX bioses */
@@ -820,79 +798,66 @@ { broken_pirq, "SABR1 Bios", { /* Bad $PIR */MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ),MATCH (DMI_BIOS_VERSION ,"SABR1" ), -NO_MATCH ,NO_MATCH } }, { broken_pirq, "l44GX Bios", { /* Bad $PIR */MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ),MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0094.P10" ), -NO_MATCH ,NO_MATCH } }, { broken_pirq, "l44GX Bios", { /* Bad $PIR */MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ),MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0115.P12" ), -NO_MATCH ,NO_MATCH } }, { broken_pirq, "l44GX Bios", { /* Bad $PIR */MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ),MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0120.P12" ), -NO_MATCH ,NO_MATCH } }, { broken_pirq, "l44GX Bios", { /* Bad $PIR */MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ),MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0125.P13" ), -NO_MATCH ,NO_MATCH } }, { broken_pirq, "l44GX Bios", { /* Bad $PIR */MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ),MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0066.P07.9906041405" ), -NO_MATCH ,NO_MATCH } }, { broken_pirq, "IBM xseries 370", { /* Bad $PIR */MATCH (DMI_BIOS_VENDOR ,"IBM" ),MATCH (DMI_BIOS_VERSION ,"MMKT33AUS" ), -NO_MATCH ,NO_MATCH } }, /* Intel in disguise - In this case they can't hide and they don't run too well either... */ { broken_pirq, "Dell PowerEdge 8450", { /* Bad $PIR */MATCH (DMI_PRODUCT_NAME ,"Dell PowerEdge 8450" ), -NO_MATCH ,NO_MATCH ,NO_MATCH } }, { broken_acpi_Sx, "ASUS K7V-RM", { /* Bad ACPI Sx table */MATCH (DMI_BIOS_VERSION ,"ASUS K7V-RM ACPI BIOS Revision 1003A" ),MATCH (DMI_BOARD_NAME ,"<K7V-RM>" ), -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 } }, { init_ints_after_s1, "Toshiba Satellite 4030cdt", { /* Reinitialization of 8259 is needed after S1 resume */MATCH (DMI_PRODUCT_NAME ,"S4030CDT/4.3" ), -NO_MATCH ,NO_MATCH ,NO_MATCH } }, #ifdef CONFIG_ACPI_SLEEP { reset_videomode_after_s3, "Toshiba Satellite 4030cdt", { /* Reset video mode after returning from ACPI S3 sleep */MATCH (DMI_PRODUCT_NAME ,"S4030CDT/4.3" ), -NO_MATCH ,NO_MATCH ,NO_MATCH } }, #endif { print_if_true, KERN_WARNING "IBM T23 - BIOS 1.03b+ and controller firmware 1.02+ may be needed for Linux APM.", {MATCH (DMI_SYS_VENDOR ,"IBM" ),MATCH (DMI_BIOS_VERSION ,"1AET38WW (1.01b)" ), -NO_MATCH ,NO_MATCH } }, { fix_broken_hp_bios_irq9, "HP Pavilion N5400 Series Laptop", {MATCH (DMI_SYS_VENDOR ,"Hewlett-Packard" ),MATCH (DMI_BIOS_VERSION ,"GE.M1.03" ),MATCH (DMI_PRODUCT_VERSION ,"HP Pavilion Notebook Model GE" ), -MATCH (DMI_BOARD_VERSION ,"OmniBook N32N-736" ) + MATCH(DMI_BOARD_VERSION, "OmniBook N32N-736"), } },
@@ -902,7 +867,6 @@ { set_apm_ints, "IBM", { /* Allow interrupts during suspend on IBM laptops */ MATCH(DMI_SYS_VENDOR, "IBM"), -NO_MATCH ,NO_MATCH ,NO_MATCH } },/*
@@ -911,7 +875,6 @@ { disable_smbus, "IBM", { MATCH(DMI_SYS_VENDOR, "IBM"), -NO_MATCH ,NO_MATCH ,NO_MATCH } },/*
@@ -922,7 +885,6 @@ { acer_cpufreq_pst, "Acer Aspire", {MATCH (DMI_SYS_VENDOR ,"Insyde Software" ),MATCH (DMI_BIOS_VERSION ,"3A71" ), -NO_MATCH ,NO_MATCH , } }, #ifdef CONFIG_ACPI_BOOT
@@ -938,7 +900,7 @@ { dmi_disable_acpi, "IBM Thinkpad", {MATCH (DMI_BOARD_VENDOR ,"IBM" ), MATCH(DMI_BOARD_NAME, "2629H1G"), - NO_MATCH, NO_MATCH }}, + } },/* * Boxes that need acpi=ht
@@ -947,77 +909,63 @@ { force_acpi_ht, "FSC Primergy T850", { MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "DELL GX240", { MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"), MATCH(DMI_BOARD_NAME, "OptiPlex GX240"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "HP VISUALIZE NT Workstation", { MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "Compaq ProLiant DL380 G2", { MATCH(DMI_SYS_VENDOR, "Compaq"), MATCH(DMI_PRODUCT_NAME, "ProLiant DL380 G2"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "Compaq ProLiant ML530 G2", { MATCH(DMI_SYS_VENDOR, "Compaq"), MATCH(DMI_PRODUCT_NAME, "ProLiant ML530 G2"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "Compaq ProLiant ML350 G3", { MATCH(DMI_SYS_VENDOR, "Compaq"), MATCH(DMI_PRODUCT_NAME, "ProLiant ML350 G3"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "Compaq Workstation W8000", { MATCH(DMI_SYS_VENDOR, "Compaq"), MATCH(DMI_PRODUCT_NAME, "Workstation W8000"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "ASUS P4B266", { MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), MATCH(DMI_BOARD_NAME, "P4B266"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "ASUS P2B-DS", { MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), MATCH(DMI_BOARD_NAME, "P2B-DS"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "ASUS CUR-DLS", { MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), MATCH(DMI_BOARD_NAME, "CUR-DLS"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "ABIT i440BX-W83977", { MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"), MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "IBM Bladecenter", { MATCH(DMI_BOARD_VENDOR, "IBM"), MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "IBM eServer xSeries 360", { MATCH(DMI_BOARD_VENDOR, "IBM"), MATCH(DMI_BOARD_NAME, "eServer xSeries 360"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "IBM eserver xSeries 330", { MATCH(DMI_BOARD_VENDOR, "IBM"), MATCH(DMI_BOARD_NAME, "eserver xSeries 330"), - NO_MATCH, NO_MATCH }}, - + } }, { force_acpi_ht, "IBM eserver xSeries 440", { MATCH(DMI_BOARD_VENDOR, "IBM"), MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"), - NO_MATCH, NO_MATCH }}, + } }, #endif // CONFIG_ACPI_BOOT #ifdef CONFIG_ACPI_PCI
@@ -1030,14 +978,12 @@MATCH (DMI_BOARD_NAME ,"<A7V>" ),/* newer BIOS, Revision 1011, does work */ MATCH (DMI_BIOS_VERSION ,"ASUS A7V ACPI BIOS Revision 1007" ), - NO_MATCH }}, - + } }, #endif - { NULL, } }; - - + +/* * Walk the blacklist table running matching functions until someone * returns 1 or we hit the end.
@@ -1077,7 +1023,7 @@for (i=0 ;i<4 ;i++) {int s = d->matches[i].slot; -if (s==NONE ) +if (s==DMI_NONE )continue ;if (dmi_ident[s] &&strstr (dmi_ident[s], d->matches[i].substr))continue ;
PATCH 1/6 Export DMI probe function
arch/i386/kernel/dmi_scan.c +241 -266
@@ -10,6 +10,7 @@#include <asm/io.h> #include <linux/pm.h> #include <asm/system.h> +#include <linux/dmi.h> #include <linux/bootmem.h> unsigned long dmi_broken;
@@ -139,22 +140,6 @@return -1 ; } - -enum -{ -DMI_NONE , -DMI_BIOS_VENDOR , -DMI_BIOS_VERSION , -DMI_BIOS_DATE , -DMI_SYS_VENDOR , -DMI_PRODUCT_NAME , -DMI_PRODUCT_VERSION , -DMI_BOARD_VENDOR , -DMI_BOARD_NAME , -DMI_BOARD_VERSION , -DMI_STRING_MAX -}; -static char *dmi_ident[DMI_STRING_MAX ];/*
@@ -176,25 +161,6 @@printk (KERN_ERR "dmi_save_ident: out of memory.\n" ); } -/* -* DMI callbacks for problem boards -*/ - -struct dmi_strmatch -{ -u8 slot; -char *substr; -}; - -struct dmi_blacklist -{ -int (*callback)(struct dmi_blacklist *); -char *ident; -struct dmi_strmatch matches[4 ]; -}; - -#define MATCH (a,b) { a, b } -/* * Reboot options and system auto-detection code provided by * Dell Inc. so their systems "just work". :-)
@@ -203,7 +169,7 @@/* * Some machines require the "reboot=b" commandline option, this quirk makes that automatic. */ -static __init int set_bios_reboot (struct dmi_blacklist *d) +static __init int set_bios_reboot (struct dmi_system_id *d) {extern int reboot_thru_bios;if (reboot_thru_bios ==0 )
@@ -217,7 +183,7 @@/* * Some machines require the "reboot=s" commandline option, this quirk makes that automatic. */ -static __init int set_smp_reboot (struct dmi_blacklist *d) +static __init int set_smp_reboot (struct dmi_system_id *d) {#ifdef CONFIG_SMP extern int reboot_smp;
@@ -233,7 +199,7 @@/* * Some machines require the "reboot=b,s" commandline option, this quirk makes that automatic. */ -static __init int set_smp_bios_reboot (struct dmi_blacklist *d) +static __init int set_smp_bios_reboot (struct dmi_system_id *d) {set_smp_reboot (d);set_bios_reboot (d);
@@ -244,7 +210,7 @@* Some bioses have a broken protected mode poweroff and need to use realmode */ -static __init int set_realmode_power_off (struct dmi_blacklist *d) +static __init int set_realmode_power_off (struct dmi_system_id *d) {if (apm_info.realmode_power_off ==0 ) {
@@ -259,7 +225,7 @@* Some laptops require interrupts to be enabled during APM calls */ -static __init int set_apm_ints (struct dmi_blacklist *d) +static __init int set_apm_ints (struct dmi_system_id *d) {if (apm_info.allow_ints ==0 ) {
@@ -273,7 +239,7 @@* Some APM bioses corrupt memory or just plain do not work */ -static __init int apm_is_horked (struct dmi_blacklist *d) +static __init int apm_is_horked (struct dmi_system_id *d) {if (apm_info.disabled ==0 ) {
@@ -283,7 +249,7 @@return 0 ; } -static __init int apm_is_horked_d850md (struct dmi_blacklist *d) +static __init int apm_is_horked_d850md (struct dmi_system_id *d) {if (apm_info.disabled ==0 ) { apm_info.disabled =1 ;
@@ -298,7 +264,7 @@* Some APM bioses hang on APM idle calls */ -static __init int apm_likes_to_melt (struct dmi_blacklist *d) +static __init int apm_likes_to_melt (struct dmi_system_id *d) {if (apm_info.forbid_idle ==0 ) { apm_info.forbid_idle =1 ;
@@ -313,7 +279,7 @@* 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) +static int __init local_apic_kills_bios (struct dmi_system_id *d) {#ifdef CONFIG_X86_LOCAL_APIC extern int enable_local_apic;
@@ -331,7 +297,7 @@* Don't access SMBus on IBM systems which get corrupted eeproms */ -static __init int disable_smbus (struct dmi_blacklist *d) +static __init int disable_smbus (struct dmi_system_id *d) {if (is_unsafe_smbus ==0 ) { is_unsafe_smbus =1 ;
@@ -344,7 +310,7 @@* Work around broken HP Pavilion Notebooks which assign USB to * IRQ 9 even though it is actually wired to IRQ 11 */ -static __init int fix_broken_hp_bios_irq9 (struct dmi_blacklist *d) +static __init int fix_broken_hp_bios_irq9 (struct dmi_system_id *d) {#ifdef CONFIG_PCI extern int broken_hp_bios_irq9;
@@ -373,7 +339,7 @@* Phoenix A07 09/29/2000 is known good (Dell Inspiron 5000) */ -static __init int broken_apm_power (struct dmi_blacklist *d) +static __init int broken_apm_power (struct dmi_system_id *d) { apm_info.get_power_status_broken =1 ;printk (KERN_WARNING "BIOS strings suggest APM bugs, disabling power status reporting.\n" );
@@ -388,7 +354,7 @@* We also want to avoid using certain functions of the PnP BIOS. */ -static __init int sony_vaio_laptop (struct dmi_blacklist *d) +static __init int sony_vaio_laptop (struct dmi_system_id *d) {if (is_sony_vaio_laptop ==0 ) {
@@ -403,7 +369,7 @@* have this problem). */ -static __init int swab_apm_power_in_minutes (struct dmi_blacklist *d) +static __init int swab_apm_power_in_minutes (struct dmi_system_id *d) { apm_info.get_power_status_swabinminutes =1 ;printk (KERN_WARNING "BIOS strings suggest APM reports battery life in minutes and wrong byte order.\n" );
@@ -417,7 +383,7 @@* The MP1.4 table is right however and so SMP kernels tend to work. */ -static __init int broken_pirq (struct dmi_blacklist *d) +static __init int broken_pirq (struct dmi_system_id *d) {printk (KERN_INFO " *** Possibly defective BIOS detected (irqtable)\n" );
@@ -438,7 +404,7 @@* ASUS K7V-RM has broken ACPI table defining sleep modes */ -static __init int broken_acpi_Sx (struct dmi_blacklist *d) +static __init int broken_acpi_Sx (struct dmi_system_id *d) {printk (KERN_WARNING "Detected ASUS mainboard with broken ACPI sleep table\n" ); dmi_broken |= BROKEN_ACPI_Sx;
@@ -449,7 +415,7 @@* Toshiba keyboard likes to repeat keys when they are not repeated. */ -static __init int broken_toshiba_keyboard (struct dmi_blacklist *d) +static __init int broken_toshiba_keyboard (struct dmi_system_id *d) {printk (KERN_WARNING "Toshiba with broken keyboard detected. If your keyboard sometimes generates 3 keypresses instead of one, see http://davyd.ucc.asn.au/projects/toshiba/README\n" );return 0 ;
@@ -459,7 +425,7 @@* Toshiba fails to preserve interrupts over S1 */ -static __init int init_ints_after_s1 (struct dmi_blacklist *d) +static __init int init_ints_after_s1 (struct dmi_system_id *d) {printk (KERN_WARNING "Toshiba with broken S1 detected.\n" ); dmi_broken |=BROKEN_INIT_AFTER_S1 ;
@@ -467,7 +433,7 @@ }#ifdef CONFIG_ACPI_SLEEP -static __init int reset_videomode_after_s3 (struct dmi_blacklist *d) +static __init int reset_videomode_after_s3 (struct dmi_system_id *d) {/* See acpi_wakeup.S */ extern long acpi_video_flags;
@@ -481,7 +447,7 @@* disabled before the suspend. Linux used to get terribly confused by that. */ -static __init int broken_ps2_resume (struct dmi_blacklist *d) +static __init int broken_ps2_resume (struct dmi_system_id *d) {printk (KERN_INFO "%s machine detected. Mousepad Resume Bug workaround hopefully not needed.\n" , d->ident);return 0 ;
@@ -492,14 +458,14 @@* some entries */ -static __init int exploding_pnp_bios (struct dmi_blacklist *d) +static __init int exploding_pnp_bios (struct dmi_system_id *d) {printk (KERN_WARNING "%s detected. Disabling PnPBIOS\n" , d->ident); dmi_broken |=BROKEN_PNP_BIOS ;return 0 ; } -static __init int acer_cpufreq_pst (struct dmi_blacklist *d) +static __init int acer_cpufreq_pst (struct dmi_system_id *d) {printk (KERN_WARNING "%s laptop with broken PST tables in BIOS detected.\n" , d->ident);printk (KERN_WARNING "You need to downgrade to 3A21 (09/09/2002), or try a newer BIOS than 3A71 (01/20/2003)\n" );
@@ -513,7 +479,7 @@* Simple "print if true" callback */ -static __init int print_if_true (struct dmi_blacklist *d) +static __init int print_if_true (struct dmi_system_id *d) {printk ("%s\n" , d->ident);return 0 ;
@@ -523,7 +489,7 @@#ifdef CONFIG_ACPI_BOOT extern int acpi_force; -static __init __attribute__((unused))int dmi_disable_acpi (struct dmi_blacklist *d) +static __init __attribute__((unused))int dmi_disable_acpi (struct dmi_system_id *d) {if (!acpi_force) {printk (KERN_NOTICE "%s detected: acpi off\n" ,d->ident);
@@ -538,7 +504,7 @@/* * Limit ACPI to CPU enumeration for HT */ -static __init __attribute__((unused))int force_acpi_ht (struct dmi_blacklist *d) +static __init __attribute__((unused))int force_acpi_ht (struct dmi_system_id *d) {if (!acpi_force) {printk (KERN_NOTICE "%s detected: force use of acpi=ht\n" , d->ident);
@@ -553,7 +519,7 @@#endif #ifdef CONFIG_ACPI_PCI -static __init int disable_acpi_pci (struct dmi_blacklist *d) +static __init int disable_acpi_pci (struct dmi_system_id *d) {printk (KERN_NOTICE "%s detected: force use of pci=noacpi\n" , d->ident);acpi_noirq_set ();
@@ -571,293 +537,293 @@* interrupt mask settings according to the laptop */ -static __initdata struct dmi_blacklist dmi_blacklist[]={ +static __initdata struct dmi_system_id dmi_blacklist[]={ { broken_ps2_resume,"Dell Latitude C600" , {/* Handle problems with APM on the C600 */ -MATCH (DMI_SYS_VENDOR ,"Dell" ), -MATCH (DMI_PRODUCT_NAME ,"Latitude C600" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Dell" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Latitude C600" ), } }, { set_apm_ints,"Dell Latitude" , {/* Allow interrupts during suspend on Dell Latitude laptops*/ -MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), -MATCH (DMI_PRODUCT_NAME ,"Latitude C510" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Latitude C510" ), } }, { apm_is_horked,"Dell Inspiron 2500" , {/* APM crashes */ -MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), -MATCH (DMI_PRODUCT_NAME ,"Inspiron 2500" ), -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"A11" ) +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Inspiron 2500" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"A11" ) } }, { set_apm_ints,"Dell Inspiron" , {/* Allow interrupts during suspend on Dell Inspiron laptops*/ -MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), -MATCH (DMI_PRODUCT_NAME ,"Inspiron 4000" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Inspiron 4000" ), } }, { broken_apm_power,"Dell Inspiron 5000e" , {/* Handle problems with APM on Inspiron 5000e */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"A04" ), -MATCH (DMI_BIOS_DATE ,"08/24/2000" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"A04" ), +DMI_MATCH (DMI_BIOS_DATE ,"08/24/2000" ), } }, { broken_apm_power,"Dell Inspiron 2500" , {/* Handle problems with APM on Inspiron 2500 */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"A12" ), -MATCH (DMI_BIOS_DATE ,"02/04/2002" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"A12" ), +DMI_MATCH (DMI_BIOS_DATE ,"02/04/2002" ), } }, { apm_is_horked,"Dell Dimension 4100" , {/* APM crashes */ -MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), -MATCH (DMI_PRODUCT_NAME ,"XPS-Z" ), -MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), -MATCH (DMI_BIOS_VERSION ,"A11" ) +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"XPS-Z" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), +DMI_MATCH (DMI_BIOS_VERSION ,"A11" ) } }, { set_realmode_power_off,"Award Software v4.60 PGMA" , {/* broken PM poweroff bios */ -MATCH (DMI_BIOS_VENDOR ,"Award Software International, Inc." ), -MATCH (DMI_BIOS_VERSION ,"4.60 PGMA" ), -MATCH (DMI_BIOS_DATE ,"134526184" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Award Software International, Inc." ), +DMI_MATCH (DMI_BIOS_VERSION ,"4.60 PGMA" ), +DMI_MATCH (DMI_BIOS_DATE ,"134526184" ), } }, { set_smp_bios_reboot,"Dell PowerEdge 1300" , {/* Handle problems with rebooting on Dell 1300's */ -MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), -MATCH (DMI_PRODUCT_NAME ,"PowerEdge 1300/" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"PowerEdge 1300/" ), } }, { set_bios_reboot,"Dell PowerEdge 300" , {/* Handle problems with rebooting on Dell 300's */ -MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), -MATCH (DMI_PRODUCT_NAME ,"PowerEdge 300/" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"PowerEdge 300/" ), } }, { set_bios_reboot,"Dell PowerEdge 2400" , {/* Handle problems with rebooting on Dell 2400's */ -MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), -MATCH (DMI_PRODUCT_NAME ,"PowerEdge 2400" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"PowerEdge 2400" ), } }, { set_apm_ints,"Compaq 12XL125" , {/* Allow interrupts during suspend on Compaq Laptops*/ -MATCH (DMI_SYS_VENDOR ,"Compaq" ), -MATCH (DMI_PRODUCT_NAME ,"Compaq PC" ), -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"4.06" ) +DMI_MATCH (DMI_SYS_VENDOR ,"Compaq" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Compaq PC" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"4.06" ) } }, { set_apm_ints,"ASUSTeK" , {/* Allow interrupts during APM or the clock goes slow */ -MATCH (DMI_SYS_VENDOR ,"ASUSTeK Computer Inc." ), -MATCH (DMI_PRODUCT_NAME ,"L8400K series Notebook PC" ), +DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK Computer Inc." ), +DMI_MATCH (DMI_PRODUCT_NAME ,"L8400K series Notebook PC" ), } }, { apm_is_horked,"ABIT KX7-333[R]" , {/* APM blows on shutdown */ -MATCH (DMI_BOARD_VENDOR ,"ABIT" ), -MATCH (DMI_BOARD_NAME ,"VT8367-8233A (KX7-333[R])" ), +DMI_MATCH (DMI_BOARD_VENDOR ,"ABIT" ), +DMI_MATCH (DMI_BOARD_NAME ,"VT8367-8233A (KX7-333[R])" ), } }, { apm_is_horked,"Trigem Delhi3" , {/* APM crashes */ -MATCH (DMI_SYS_VENDOR ,"TriGem Computer, Inc" ), -MATCH (DMI_PRODUCT_NAME ,"Delhi3" ), +DMI_MATCH (DMI_SYS_VENDOR ,"TriGem Computer, Inc" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Delhi3" ), } }, { apm_is_horked,"Fujitsu-Siemens" , {/* APM crashes */ -MATCH (DMI_BIOS_VENDOR ,"hoenix/FUJITSU SIEMENS" ), -MATCH (DMI_BIOS_VERSION ,"Version1.01" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"hoenix/FUJITSU SIEMENS" ), +DMI_MATCH (DMI_BIOS_VERSION ,"Version1.01" ), } }, { apm_is_horked_d850md,"Intel D850MD" , {/* APM crashes */ -MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), -MATCH (DMI_BIOS_VERSION ,"MV85010A.86A.0016.P07.0201251536" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), +DMI_MATCH (DMI_BIOS_VERSION ,"MV85010A.86A.0016.P07.0201251536" ), } }, { apm_is_horked,"Intel D810EMO" , {/* APM crashes */ -MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), -MATCH (DMI_BIOS_VERSION ,"MO81010A.86A.0008.P04.0004170800" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), +DMI_MATCH (DMI_BIOS_VERSION ,"MO81010A.86A.0008.P04.0004170800" ), } }, { apm_is_horked,"Dell XPS-Z" , {/* APM crashes */ -MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), -MATCH (DMI_BIOS_VERSION ,"A11" ), -MATCH (DMI_PRODUCT_NAME ,"XPS-Z" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), +DMI_MATCH (DMI_BIOS_VERSION ,"A11" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"XPS-Z" ), } }, { apm_is_horked,"Sharp PC-PJ/AX" , {/* APM crashes */ -MATCH (DMI_SYS_VENDOR ,"SHARP" ), -MATCH (DMI_PRODUCT_NAME ,"PC-PJ/AX" ), -MATCH (DMI_BIOS_VENDOR ,"SystemSoft" ), -MATCH (DMI_BIOS_VERSION ,"Version R2.08" ) +DMI_MATCH (DMI_SYS_VENDOR ,"SHARP" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"PC-PJ/AX" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"SystemSoft" ), +DMI_MATCH (DMI_BIOS_VERSION ,"Version R2.08" ) } }, { apm_is_horked,"Dell Inspiron 2500" , {/* APM crashes */ -MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), -MATCH (DMI_PRODUCT_NAME ,"Inspiron 2500" ), -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"A11" ) +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Inspiron 2500" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"A11" ) } }, { apm_likes_to_melt,"Jabil AMD" , {/* APM idle hangs */ -MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ), -MATCH (DMI_BIOS_VERSION ,"0AASNP06" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ), +DMI_MATCH (DMI_BIOS_VERSION ,"0AASNP06" ), } }, { apm_likes_to_melt,"AMI Bios" , {/* APM idle hangs */ -MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ), -MATCH (DMI_BIOS_VERSION ,"0AASNP05" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ), +DMI_MATCH (DMI_BIOS_VERSION ,"0AASNP05" ), } }, { sony_vaio_laptop,"Sony Vaio" , {/* This is a Sony Vaio laptop */ -MATCH (DMI_SYS_VENDOR ,"Sony Corporation" ), -MATCH (DMI_PRODUCT_NAME ,"PCG-" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Sony Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"PCG-" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-N505X(DE) */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"R0206H" ), -MATCH (DMI_BIOS_DATE ,"08/23/99" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0206H" ), +DMI_MATCH (DMI_BIOS_DATE ,"08/23/99" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-N505VX */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"W2K06H0" ), -MATCH (DMI_BIOS_DATE ,"02/03/00" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"W2K06H0" ), +DMI_MATCH (DMI_BIOS_DATE ,"02/03/00" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-XG29 */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"R0117A0" ), -MATCH (DMI_BIOS_DATE ,"04/25/00" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0117A0" ), +DMI_MATCH (DMI_BIOS_DATE ,"04/25/00" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-Z600NE */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"R0121Z1" ), -MATCH (DMI_BIOS_DATE ,"05/11/00" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0121Z1" ), +DMI_MATCH (DMI_BIOS_DATE ,"05/11/00" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-Z600NE */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"WME01Z1" ), -MATCH (DMI_BIOS_DATE ,"08/11/00" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"WME01Z1" ), +DMI_MATCH (DMI_BIOS_DATE ,"08/11/00" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-Z600LEK(DE) */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"R0206Z3" ), -MATCH (DMI_BIOS_DATE ,"12/25/00" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0206Z3" ), +DMI_MATCH (DMI_BIOS_DATE ,"12/25/00" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-Z505LS */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"R0203D0" ), -MATCH (DMI_BIOS_DATE ,"05/12/00" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0203D0" ), +DMI_MATCH (DMI_BIOS_DATE ,"05/12/00" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-Z505LS */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"R0203Z3" ), -MATCH (DMI_BIOS_DATE ,"08/25/00" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0203Z3" ), +DMI_MATCH (DMI_BIOS_DATE ,"08/25/00" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-Z505LS (with updated BIOS) */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"R0209Z3" ), -MATCH (DMI_BIOS_DATE ,"05/12/01" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0209Z3" ), +DMI_MATCH (DMI_BIOS_DATE ,"05/12/01" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-F104K */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"R0204K2" ), -MATCH (DMI_BIOS_DATE ,"08/28/00" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0204K2" ), +DMI_MATCH (DMI_BIOS_DATE ,"08/28/00" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-C1VN/C1VE */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"R0208P1" ), -MATCH (DMI_BIOS_DATE ,"11/09/00" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0208P1" ), +DMI_MATCH (DMI_BIOS_DATE ,"11/09/00" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-C1VE */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"R0204P1" ), -MATCH (DMI_BIOS_DATE ,"09/12/00" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0204P1" ), +DMI_MATCH (DMI_BIOS_DATE ,"09/12/00" ), } }, { swab_apm_power_in_minutes,"Sony VAIO" , {/* Handle problems with APM on Sony Vaio PCG-C1VE */ -MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), -MATCH (DMI_BIOS_VERSION ,"WXPO1Z3" ), -MATCH (DMI_BIOS_DATE ,"10/26/01" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"WXPO1Z3" ), +DMI_MATCH (DMI_BIOS_DATE ,"10/26/01" ), } }, { exploding_pnp_bios,"Higraded P14H" , {/* PnPBIOS GPF on boot */ -MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ), -MATCH (DMI_BIOS_VERSION ,"07.00T" ), -MATCH (DMI_SYS_VENDOR ,"Higraded" ), -MATCH (DMI_PRODUCT_NAME ,"P14H" ) +DMI_MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ), +DMI_MATCH (DMI_BIOS_VERSION ,"07.00T" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Higraded" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"P14H" ) } }, { exploding_pnp_bios,"ASUS P4P800" , {/* PnPBIOS GPF on boot */ -MATCH (DMI_BOARD_VENDOR ,"ASUSTeK Computer Inc." ), -MATCH (DMI_BOARD_NAME ,"P4P800" ), +DMI_MATCH (DMI_BOARD_VENDOR ,"ASUSTeK Computer Inc." ), +DMI_MATCH (DMI_BOARD_NAME ,"P4P800" ), } },/* 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" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Inspiron" ), } }, { local_apic_kills_bios,"Dell Latitude" , { -MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), -MATCH (DMI_PRODUCT_NAME ,"Latitude" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Latitude" ), } }, { local_apic_kills_bios,"IBM Thinkpad T20" , { -MATCH (DMI_BOARD_VENDOR ,"IBM" ), -MATCH (DMI_BOARD_NAME ,"264741U" ), +DMI_MATCH (DMI_BOARD_VENDOR ,"IBM" ), +DMI_MATCH (DMI_BOARD_NAME ,"264741U" ), } }, { local_apic_kills_bios,"ASUS L3C" , { -MATCH (DMI_BOARD_VENDOR ,"ASUSTeK Computer INC." ), -MATCH (DMI_BOARD_NAME ,"P4_L3C" ), +DMI_MATCH (DMI_BOARD_VENDOR ,"ASUSTeK Computer INC." ), +DMI_MATCH (DMI_BOARD_NAME ,"P4_L3C" ), } },/* Problem Intel 440GX bioses */ { broken_pirq,"SABR1 Bios" , {/* Bad $PIR */ -MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), -MATCH (DMI_BIOS_VERSION ,"SABR1" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), +DMI_MATCH (DMI_BIOS_VERSION ,"SABR1" ), } }, { broken_pirq,"l44GX Bios" , {/* Bad $PIR */ -MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), -MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0094.P10" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), +DMI_MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0094.P10" ), } }, { broken_pirq,"l44GX Bios" , {/* Bad $PIR */ -MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), -MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0115.P12" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), +DMI_MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0115.P12" ), } }, { broken_pirq,"l44GX Bios" , {/* Bad $PIR */ -MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), -MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0120.P12" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), +DMI_MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0120.P12" ), } }, { broken_pirq,"l44GX Bios" , {/* Bad $PIR */ -MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), -MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0125.P13" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), +DMI_MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0125.P13" ), } }, { broken_pirq,"l44GX Bios" , {/* Bad $PIR */ -MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), -MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0066.P07.9906041405" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corporation" ), +DMI_MATCH (DMI_BIOS_VERSION ,"L440GX0.86B.0066.P07.9906041405" ), } }, { broken_pirq,"IBM xseries 370" , {/* Bad $PIR */ -MATCH (DMI_BIOS_VENDOR ,"IBM" ), -MATCH (DMI_BIOS_VERSION ,"MMKT33AUS" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"IBM" ), +DMI_MATCH (DMI_BIOS_VERSION ,"MMKT33AUS" ), } },/* Intel in disguise - In this case they can't hide and they don't run too well either... */ { broken_pirq,"Dell PowerEdge 8450" , {/* Bad $PIR */ -MATCH (DMI_PRODUCT_NAME ,"Dell PowerEdge 8450" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Dell PowerEdge 8450" ), } }, { broken_acpi_Sx,"ASUS K7V-RM" , {/* Bad ACPI Sx table */ -MATCH (DMI_BIOS_VERSION ,"ASUS K7V-RM ACPI BIOS Revision 1003A" ), -MATCH (DMI_BOARD_NAME ,"<K7V-RM>" ), +DMI_MATCH (DMI_BIOS_VERSION ,"ASUS K7V-RM ACPI BIOS Revision 1003A" ), +DMI_MATCH (DMI_BOARD_NAME ,"<K7V-RM>" ), } }, { broken_toshiba_keyboard,"Toshiba Satellite 4030cdt" , {/* Keyboard generates spurious repeats */ -MATCH (DMI_PRODUCT_NAME ,"S4030CDT/4.3" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"S4030CDT/4.3" ), } }, { init_ints_after_s1,"Toshiba Satellite 4030cdt" , {/* Reinitialization of 8259 is needed after S1 resume */ -MATCH (DMI_PRODUCT_NAME ,"S4030CDT/4.3" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"S4030CDT/4.3" ), } }, #ifdef CONFIG_ACPI_SLEEP { reset_videomode_after_s3,"Toshiba Satellite 4030cdt" , {/* Reset video mode after returning from ACPI S3 sleep */ -MATCH (DMI_PRODUCT_NAME ,"S4030CDT/4.3" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"S4030CDT/4.3" ), } }, #endif { print_if_true,KERN_WARNING "IBM T23 - BIOS 1.03b+ and controller firmware 1.02+ may be needed for Linux APM." , { -MATCH (DMI_SYS_VENDOR ,"IBM" ), -MATCH (DMI_BIOS_VERSION ,"1AET38WW (1.01b)" ), +DMI_MATCH (DMI_SYS_VENDOR ,"IBM" ), +DMI_MATCH (DMI_BIOS_VERSION ,"1AET38WW (1.01b)" ), } }, { fix_broken_hp_bios_irq9,"HP Pavilion N5400 Series Laptop" , { -MATCH (DMI_SYS_VENDOR ,"Hewlett-Packard" ), -MATCH (DMI_BIOS_VERSION ,"GE.M1.03" ), -MATCH (DMI_PRODUCT_VERSION ,"HP Pavilion Notebook Model GE" ), -MATCH (DMI_BOARD_VERSION ,"OmniBook N32N-736" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Hewlett-Packard" ), +DMI_MATCH (DMI_BIOS_VERSION ,"GE.M1.03" ), +DMI_MATCH (DMI_PRODUCT_VERSION ,"HP Pavilion Notebook Model GE" ), +DMI_MATCH (DMI_BOARD_VERSION ,"OmniBook N32N-736" ), } },
@@ -866,7 +832,7 @@*/ { set_apm_ints, "IBM", { /* Allow interrupts during suspend on IBM laptops */ - MATCH(DMI_SYS_VENDOR, "IBM"), + DMI_MATCH(DMI_SYS_VENDOR, "IBM"), } },/*
@@ -874,7 +840,7 @@*/ { disable_smbus, "IBM", { - MATCH(DMI_SYS_VENDOR, "IBM"), + DMI_MATCH(DMI_SYS_VENDOR, "IBM"), } },/*
@@ -883,8 +849,8 @@* Mention this, and disable cpufreq. */ { acer_cpufreq_pst, "Acer Aspire", { -MATCH (DMI_SYS_VENDOR ,"Insyde Software" ), -MATCH (DMI_BIOS_VERSION ,"3A71" ), +DMI_MATCH (DMI_SYS_VENDOR ,"Insyde Software" ), +DMI_MATCH (DMI_BIOS_VERSION ,"3A71" ), } }, #ifdef CONFIG_ACPI_BOOT
@@ -898,8 +864,8 @@*/ { dmi_disable_acpi, "IBM Thinkpad", { -MATCH (DMI_BOARD_VENDOR ,"IBM" ), - MATCH(DMI_BOARD_NAME, "2629H1G"), +DMI_MATCH (DMI_BOARD_VENDOR ,"IBM" ), + DMI_MATCH(DMI_BOARD_NAME, "2629H1G"), } },/*
@@ -907,64 +873,64 @@ */ { force_acpi_ht, "FSC Primergy T850", { - MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), - MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"), + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), + DMI_MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"), } }, { force_acpi_ht, "DELL GX240", { - MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"), - MATCH(DMI_BOARD_NAME, "OptiPlex GX240"), + DMI_MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"), + DMI_MATCH(DMI_BOARD_NAME, "OptiPlex GX240"), } }, { force_acpi_ht, "HP VISUALIZE NT Workstation", { - MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), - MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"), + DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), + DMI_MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"), } }, { force_acpi_ht, "Compaq ProLiant DL380 G2", { - MATCH(DMI_SYS_VENDOR, "Compaq"), - MATCH(DMI_PRODUCT_NAME, "ProLiant DL380 G2"), + DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL380 G2"), } }, { force_acpi_ht, "Compaq ProLiant ML530 G2", { - MATCH(DMI_SYS_VENDOR, "Compaq"), - MATCH(DMI_PRODUCT_NAME, "ProLiant ML530 G2"), + DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant ML530 G2"), } }, { force_acpi_ht, "Compaq ProLiant ML350 G3", { - MATCH(DMI_SYS_VENDOR, "Compaq"), - MATCH(DMI_PRODUCT_NAME, "ProLiant ML350 G3"), + DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant ML350 G3"), } }, { force_acpi_ht, "Compaq Workstation W8000", { - MATCH(DMI_SYS_VENDOR, "Compaq"), - MATCH(DMI_PRODUCT_NAME, "Workstation W8000"), + DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), + DMI_MATCH(DMI_PRODUCT_NAME, "Workstation W8000"), } }, { force_acpi_ht, "ASUS P4B266", { - MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), - MATCH(DMI_BOARD_NAME, "P4B266"), + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), + DMI_MATCH(DMI_BOARD_NAME, "P4B266"), } }, { force_acpi_ht, "ASUS P2B-DS", { - MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), - MATCH(DMI_BOARD_NAME, "P2B-DS"), + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), + DMI_MATCH(DMI_BOARD_NAME, "P2B-DS"), } }, { force_acpi_ht, "ASUS CUR-DLS", { - MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), - MATCH(DMI_BOARD_NAME, "CUR-DLS"), + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), + DMI_MATCH(DMI_BOARD_NAME, "CUR-DLS"), } }, { force_acpi_ht, "ABIT i440BX-W83977", { - MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"), - MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"), + DMI_MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"), + DMI_MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"), } }, { force_acpi_ht, "IBM Bladecenter", { - MATCH(DMI_BOARD_VENDOR, "IBM"), - MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"), + DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), + DMI_MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"), } }, { force_acpi_ht, "IBM eServer xSeries 360", { - MATCH(DMI_BOARD_VENDOR, "IBM"), - MATCH(DMI_BOARD_NAME, "eServer xSeries 360"), + DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), + DMI_MATCH(DMI_BOARD_NAME, "eServer xSeries 360"), } }, { force_acpi_ht, "IBM eserver xSeries 330", { - MATCH(DMI_BOARD_VENDOR, "IBM"), - MATCH(DMI_BOARD_NAME, "eserver xSeries 330"), + DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), + DMI_MATCH(DMI_BOARD_NAME, "eserver xSeries 330"), } }, { force_acpi_ht, "IBM eserver xSeries 440", { - MATCH(DMI_BOARD_VENDOR, "IBM"), - MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"), + DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), + DMI_MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"), } }, #endif // CONFIG_ACPI_BOOT
@@ -974,10 +940,10 @@ */ { disable_acpi_pci, "ASUS A7V", { - MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"), - MATCH(DMI_BOARD_NAME, "<A7V>"), + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"), + DMI_MATCH(DMI_BOARD_NAME, "<A7V>"), /* newer BIOS, Revision 1011, does work */ - MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"), + DMI_MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"), } }, #endif { NULL, }
@@ -985,16 +951,42 @@/* -* Walk the blacklist table running matching functions until someone -* returns 1 or we hit the end. +* dmi_check_system - check system DMI data +* @list: array of dmi_system_id structures to match against +* +* Walk the blacklist table running matching functions until someone +* returns non zero or we hit the end. Callback function is called for +* each successfull match. Returns the number of matches. */ - +int dmi_check_system (struct dmi_system_id *list) +{ +int i, count =0 ; +struct dmi_system_id *d = list; + +while (d->ident) { +for (i =0 ; i <ARRAY_SIZE (d->matches); i++) { +int s = d->matches[i].slot; +if (s ==DMI_NONE ) +continue ; +if (dmi_ident[s] &&strstr (dmi_ident[s], d->matches[i].substr)) +continue ; +/* No match */ + goto fail; + } +if (d->callback && d->callback (d)) +break ; + count++; +fail: d++; + } + +return count; +} + +EXPORT_SYMBOL (dmi_check_system); +static __init void dmi_check_blacklist (void ) { -struct dmi_blacklist *d; -int i; -#ifdef CONFIG_ACPI_BOOT #define ACPI_BLACKLIST_CUTOFF_YEAR 2001
@@ -1017,24 +1009,7 @@ }#endif - d=&dmi_blacklist[0 ]; -while (d->callback) - { -for (i=0 ;i<4 ;i++) - { -int s = d->matches[i].slot; -if (s==DMI_NONE ) -continue ; -if (dmi_ident[s] &&strstr (dmi_ident[s], d->matches[i].substr)) -continue ; -/* No match */ - goto fail; - } -if (d->callback (d)) -return ; -fail: - d++; - } +dmi_check_system (dmi_blacklist); }
include/linux/dmi.h +44 -0
44 lines not on this page · raw message
PATCH 2/6 Whitespace cleanups
arch/i386/kernel/dmi_scan.c +51 -57
@@ -22,9 +22,9 @@struct dmi_header { -u8 type; -u8 length; -u16 handle; +u8 type; +u8 length; +u16 handle; };#undef DMI_DEBUG
@@ -37,15 +37,14 @@static char *__init dmi_string (struct dmi_header *dm,u8 s) { -u8 *bp=(u8 *)dm; - bp+=dm->length; -if (!s) +u8 *bp = ((u8 *) dm) + dm->length; + +if (!s)return "" ; s--; -while (s>0 && *bp) - { - bp+=strlen (bp); - bp++; + +while (s >0 && *bp) { + bp +=strlen (bp) +1 ; s--; }return bp;
@@ -58,13 +57,12 @@static int __init dmi_table (u32 base,int len,int num,void (*decode)(struct dmi_header *)) { -u8 *buf; +u8 *buf, *data;struct dmi_header *dm; -u8 *data; -int i=0 ; +int i =0 ; buf =bt_ioremap (base, len); -if (buf==NULL ) +if (buf ==NULL )return -1 ; data = buf;
@@ -74,20 +72,19 @@* OR we run off the end of the table (also happens) */ -while (i<num && data-buf+sizeof (struct dmi_header )<=len) - { - dm=(struct dmi_header *)data; +while ((i < num) && ((data-buf +sizeof (struct dmi_header )) <= len)) { + dm = (struct dmi_header *) data;/* * We want to know the total length (formated area and strings) * before decoding to make sure we won't run off the table in * dmi_decode or dmi_string */ - data+=dm->length; -while (data-buf<len-1 && (data[0 ] || data[1 ])) + data += dm->length; +while (((data - buf) < (len -1 )) && (data[0 ] || data[1 ])) data++; -if (data-buf<len-1 ) +if ((data - buf) < (len -1 ))decode (dm); - data+=2 ; + data +=2 ; i++; }bt_iounmap (buf, len);
@@ -95,47 +92,46 @@ } -inline static int __init dmi_checksum (u8 *buf) +static inline int dmi_checksum (u8 *buf) { -u8 sum=0 ; -int a; - -for (a=0 ; a<15 ; a++) - sum+=buf[a]; -return (sum==0 ); +u8 sum =0 ; +int a =16 ; + +for ( ; --a; ) + sum += *buf++; + +return sum ==0 ; }static int __init dmi_iterate (void (*decode)(struct dmi_header *)) {u8 buf[15 ]; -u32 fp=0xF0000 ; +u32 fp =0xF0000 ; -while (fp <0xFFFFF ) - { +while (fp <0xFFFFF ) {isa_memcpy_fromio (buf, fp,15 ); -if (memcmp (buf,"_DMI_" ,5 )==0 &&dmi_checksum (buf)) - { -u16 num=buf[13 ]<<8 |buf[12 ]; -u16 len=buf[7 ]<<8 |buf[6 ]; -u32 base=buf[11 ]<<24 |buf[10 ]<<16 |buf[9 ]<<8 |buf[8 ]; +if ((memcmp (buf,"_DMI_" ,5 ) ==0 ) &&dmi_checksum (buf)) { +u16 len =readw (buf +6 ); +u32 base =readl (buf +8 ); +u16 num =readw (buf +12 );/* * DMI version 0.0 means that the real version is taken from * the SMBIOS version, which we don't know at this point. */ -if (buf[14 ]!=0 ) +if (buf[14 ] !=0 )printk (KERN_INFO "DMI %d.%d present.\n" , - buf[14 ]>>4 , buf[14 ]&0x0F ); + buf[14 ] >>4 , buf[14 ] &0x0F );else printk (KERN_INFO "DMI present.\n" );dmi_printk ((KERN_INFO "%d structures occupying %d bytes.\n" , num, len));dmi_printk ((KERN_INFO "DMI table at 0x%08X.\n" , base)); -if (dmi_table (base,len, num, decode)==0 ) +if (!dmi_table (base, len, num, decode))return 0 ; } - fp+=16 ; + fp +=16 ; }return -1 ; }
@@ -150,12 +146,13 @@ {char *d = (char *)dm;char *p =dmi_string (dm, d[string]); -if (p==NULL || *p ==0 ) + +if (!p || !*p)return ;if (dmi_ident[slot])return ; - dmi_ident[slot] =alloc_bootmem (strlen (p)+1 ); -if (dmi_ident[slot]) + dmi_ident[slot] =alloc_bootmem (strlen (p) +1 ); +if (dmi_ident[slot])strcpy (dmi_ident[slot], p);else printk (KERN_ERR "dmi_save_ident: out of memory.\n" );
@@ -990,25 +987,23 @@#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 ; +if (dmi_ident[DMI_BIOS_DATE ]) { +char *s =strrchr (dmi_ident[DMI_BIOS_DATE ],'/' ); +if (s) { +int disable =0 , 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) { + 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); }
@@ -1068,8 +1063,7 @@void __init dmi_scan_machine (void ) { -int err =dmi_iterate (dmi_decode); -if (err ==0 ) +if (!dmi_iterate (dmi_decode))dmi_check_blacklist ();else printk (KERN_INFO "DMI not present.\n" );
PATCH 3/6 Port sonypi driver to new DMI probing
arch/i386/kernel/dmi_scan.c +0 -23
@@ -16,7 +16,6 @@unsigned long dmi_broken;EXPORT_SYMBOL (dmi_broken); -int is_sony_vaio_laptop;int is_unsafe_smbus;int es7000_plat =0 ;
@@ -344,24 +343,6 @@ }/* -* Check for a Sony Vaio system -* -* On a Sony system we want to enable the use of the sonypi -* driver for Sony-specific goodies like the camera and jogdial. -* We also want to avoid using certain functions of the PnP BIOS. -*/ - -static __init int sony_vaio_laptop (struct dmi_system_id *d) -{ -if (is_sony_vaio_laptop ==0 ) - { - is_sony_vaio_laptop =1 ; -printk (KERN_INFO "%s laptop detected.\n" , d->ident); - } -return 0 ; -} - -/* * This bios swaps the APM minute reporting bytes over (Many sony laptops * have this problem). */
@@ -641,10 +622,6 @@DMI_MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ),DMI_MATCH (DMI_BIOS_VERSION ,"0AASNP05" ), } }, - { sony_vaio_laptop, "Sony Vaio", { /* This is a Sony Vaio laptop */ -DMI_MATCH (DMI_SYS_VENDOR ,"Sony Corporation" ), -DMI_MATCH (DMI_PRODUCT_NAME ,"PCG-" ), - } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-N505X(DE) */DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), DMI_MATCH(DMI_BIOS_VERSION, "R0206H"),
arch/i386/kernel/i386_ksyms.c +0 -3
@@ -188,9 +188,6 @@EXPORT_SYMBOL (atomic_dec_and_lock);#endif -extern int is_sony_vaio_laptop; -EXPORT_SYMBOL (is_sony_vaio_laptop); -EXPORT_SYMBOL (__PAGE_KERNEL);#ifdef CONFIG_HIGHMEM
drivers/char/sonypi.c +15 -3
@@ -43,6 +43,7 @@#include <linux/delay.h> #include <linux/wait.h> #include <linux/acpi.h> +#include <linux/dmi.h> #include <asm/uaccess.h> #include <asm/io.h>
@@ -818,10 +819,21 @@printk (KERN_INFO "sonypi: removed.\n" ); } -static int __init sonypi_init_module (void ) { -struct pci_dev *pcidev =NULL ; +static struct dmi_system_id __initdata sonypi_dmi_table[] = { + { + .ident ="Sony Vaio" , + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Sony Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"PCG-" ), + }, + }, + { } +}; -if (is_sony_vaio_laptop) { +static int __init sonypi_init_module (void ) +{ +struct pci_dev *pcidev =NULL ; +if (dmi_check_system (sonypi_dmi_table)) { pcidev =pci_find_device (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_82371AB_3 ,NULL );
PATCH 4/6 Port APM BIOS driver to new DMI probing
arch/i386/kernel/apm.c +316 -0
@@ -222,6 +222,7 @@#include <linux/kernel.h> #include <linux/smp.h> #include <linux/smp_lock.h> +#include <linux/dmi.h> #include <asm/system.h> #include <asm/uaccess.h>
@@ -1884,6 +1885,319 @@ &apm_bios_fops }; + +/* Simple "print if true" callback */ +static int __init print_if_true (struct dmi_system_id *d) +{ +printk ("%s\n" , d->ident); +return 0 ; +} + +/* +* Some Bioses enable the PS/2 mouse (touchpad) at resume, even if it was +* disabled before the suspend. Linux used to get terribly confused by that. +*/ +static int __init broken_ps2_resume (struct dmi_system_id *d) +{ +printk (KERN_INFO "%s machine detected. Mousepad Resume Bug workaround hopefully not needed.\n" , d->ident); +return 0 ; +} + +/* Some bioses have a broken protected mode poweroff and need to use realmode */ +static int __init set_realmode_power_off (struct dmi_system_id *d) +{ +if (apm_info.realmode_power_off ==0 ) { + apm_info.realmode_power_off =1 ; +printk (KERN_INFO "%s bios detected. Using realmode poweroff only.\n" , d->ident); + } +return 0 ; +} + +/* Some laptops require interrupts to be enabled during APM calls */ +static int __init set_apm_ints (struct dmi_system_id *d) +{ +if (apm_info.allow_ints ==0 ) { + apm_info.allow_ints =1 ; +printk (KERN_INFO "%s machine detected. Enabling interrupts during APM calls.\n" , d->ident); + } +return 0 ; +} + +/* Some APM bioses corrupt memory or just plain do not work */ +static int __init apm_is_horked (struct dmi_system_id *d) +{ +if (apm_info.disabled ==0 ) { + apm_info.disabled =1 ; +printk (KERN_INFO "%s machine detected. Disabling APM.\n" , d->ident); + } +return 0 ; +} + +static int __init apm_is_horked_d850md (struct dmi_system_id *d) +{ +if (apm_info.disabled ==0 ) { + apm_info.disabled =1 ; +printk (KERN_INFO "%s machine detected. Disabling APM.\n" , d->ident); +printk (KERN_INFO "This bug is fixed in bios P15 which is available for \n" ); +printk (KERN_INFO "download from support.intel.com \n" ); + } +return 0 ; +} + +/* Some APM bioses hang on APM idle calls */ +static int __init apm_likes_to_melt (struct dmi_system_id *d) +{ +if (apm_info.forbid_idle ==0 ) { + apm_info.forbid_idle =1 ; +printk (KERN_INFO "%s machine detected. Disabling APM idle calls.\n" , d->ident); + } +return 0 ; +} + +/* +* Check for clue free BIOS implementations who use +* the following QA technique +* +* [ Write BIOS Code ]<------ +* | ^ +* < Does it Compile >----N-- +* |Y ^ +* < Does it Boot Win98 >-N-- +* |Y +* [Ship It] +* +* Phoenix A04 08/24/2000 is known bad (Dell Inspiron 5000e) +* Phoenix A07 09/29/2000 is known good (Dell Inspiron 5000) +*/ +static int __init broken_apm_power (struct dmi_system_id *d) +{ + apm_info.get_power_status_broken =1 ; +printk (KERN_WARNING "BIOS strings suggest APM bugs, disabling power status reporting.\n" ); +return 0 ; +} + +/* +* This bios swaps the APM minute reporting bytes over (Many sony laptops +* have this problem). +*/ +static int __init swab_apm_power_in_minutes (struct dmi_system_id *d) +{ + apm_info.get_power_status_swabinminutes =1 ; +printk (KERN_WARNING "BIOS strings suggest APM reports battery life in minutes and wrong byte order.\n" ); +return 0 ; +} + +static struct dmi_system_id __initdata apm_dmi_table[] = { + { + print_if_true, +KERN_WARNING "IBM T23 - BIOS 1.03b+ and controller firmware 1.02+ may be needed for Linux APM." , + {DMI_MATCH (DMI_SYS_VENDOR ,"IBM" ), +DMI_MATCH (DMI_BIOS_VERSION ,"1AET38WW (1.01b)" ), }, + }, + {/* Handle problems with APM on the C600 */ + broken_ps2_resume,"Dell Latitude C600" , + {DMI_MATCH (DMI_SYS_VENDOR ,"Dell" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Latitude C600" ), }, + }, + {/* Allow interrupts during suspend on Dell Latitude laptops*/ + set_apm_ints,"Dell Latitude" , + {DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Latitude C510" ), }, + }, + {/* APM crashes */ + apm_is_horked,"Dell Inspiron 2500" , + {DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Inspiron 2500" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"A11" ), }, + }, + {/* Allow interrupts during suspend on Dell Inspiron laptops*/ + set_apm_ints,"Dell Inspiron" , + {DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Inspiron 4000" ), }, + }, + {/* Handle problems with APM on Inspiron 5000e */ + broken_apm_power,"Dell Inspiron 5000e" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"A04" ), +DMI_MATCH (DMI_BIOS_DATE ,"08/24/2000" ), }, + }, + {/* Handle problems with APM on Inspiron 2500 */ + broken_apm_power,"Dell Inspiron 2500" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"A12" ), +DMI_MATCH (DMI_BIOS_DATE ,"02/04/2002" ), }, + }, + {/* APM crashes */ + apm_is_horked,"Dell Dimension 4100" , + {DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"XPS-Z" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), +DMI_MATCH (DMI_BIOS_VERSION ,"A11" ), }, + }, + {/* Allow interrupts during suspend on Compaq Laptops*/ + set_apm_ints,"Compaq 12XL125" , + {DMI_MATCH (DMI_SYS_VENDOR ,"Compaq" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Compaq PC" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"4.06" ), }, + }, + {/* Allow interrupts during APM or the clock goes slow */ + set_apm_ints,"ASUSTeK" , + {DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK Computer Inc." ), +DMI_MATCH (DMI_PRODUCT_NAME ,"L8400K series Notebook PC" ), }, + }, + {/* APM blows on shutdown */ + apm_is_horked,"ABIT KX7-333[R]" , + {DMI_MATCH (DMI_BOARD_VENDOR ,"ABIT" ), +DMI_MATCH (DMI_BOARD_NAME ,"VT8367-8233A (KX7-333[R])" ), }, + }, + {/* APM crashes */ + apm_is_horked,"Trigem Delhi3" , + {DMI_MATCH (DMI_SYS_VENDOR ,"TriGem Computer, Inc" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Delhi3" ), }, + }, + {/* APM crashes */ + apm_is_horked,"Fujitsu-Siemens" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"hoenix/FUJITSU SIEMENS" ), +DMI_MATCH (DMI_BIOS_VERSION ,"Version1.01" ), }, + }, + {/* APM crashes */ + apm_is_horked_d850md,"Intel D850MD" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), +DMI_MATCH (DMI_BIOS_VERSION ,"MV85010A.86A.0016.P07.0201251536" ), }, + }, + {/* APM crashes */ + apm_is_horked,"Intel D810EMO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), +DMI_MATCH (DMI_BIOS_VERSION ,"MO81010A.86A.0008.P04.0004170800" ), }, + }, + {/* APM crashes */ + apm_is_horked,"Dell XPS-Z" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Intel Corp." ), +DMI_MATCH (DMI_BIOS_VERSION ,"A11" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"XPS-Z" ), }, + }, + {/* APM crashes */ + apm_is_horked,"Sharp PC-PJ/AX" , + {DMI_MATCH (DMI_SYS_VENDOR ,"SHARP" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"PC-PJ/AX" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"SystemSoft" ), +DMI_MATCH (DMI_BIOS_VERSION ,"Version R2.08" ), }, + }, + {/* APM crashes */ + apm_is_horked,"Dell Inspiron 2500" , + {DMI_MATCH (DMI_SYS_VENDOR ,"Dell Computer Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Inspiron 2500" ), +DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"A11" ), }, + }, + {/* APM idle hangs */ + apm_likes_to_melt,"Jabil AMD" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ), +DMI_MATCH (DMI_BIOS_VERSION ,"0AASNP06" ), }, + }, + {/* APM idle hangs */ + apm_likes_to_melt,"AMI Bios" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"American Megatrends Inc." ), +DMI_MATCH (DMI_BIOS_VERSION ,"0AASNP05" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-N505X(DE) */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0206H" ), +DMI_MATCH (DMI_BIOS_DATE ,"08/23/99" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-N505VX */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"W2K06H0" ), +DMI_MATCH (DMI_BIOS_DATE ,"02/03/00" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-XG29 */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0117A0" ), +DMI_MATCH (DMI_BIOS_DATE ,"04/25/00" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-Z600NE */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0121Z1" ), +DMI_MATCH (DMI_BIOS_DATE ,"05/11/00" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-Z600NE */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"WME01Z1" ), +DMI_MATCH (DMI_BIOS_DATE ,"08/11/00" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-Z600LEK(DE) */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0206Z3" ), +DMI_MATCH (DMI_BIOS_DATE ,"12/25/00" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-Z505LS */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0203D0" ), +DMI_MATCH (DMI_BIOS_DATE ,"05/12/00" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-Z505LS */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0203Z3" ), +DMI_MATCH (DMI_BIOS_DATE ,"08/25/00" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-Z505LS (with updated BIOS) */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0209Z3" ), +DMI_MATCH (DMI_BIOS_DATE ,"05/12/01" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-F104K */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0204K2" ), +DMI_MATCH (DMI_BIOS_DATE ,"08/28/00" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-C1VN/C1VE */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0208P1" ), +DMI_MATCH (DMI_BIOS_DATE ,"11/09/00" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-C1VE */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"R0204P1" ), +DMI_MATCH (DMI_BIOS_DATE ,"09/12/00" ), }, + }, + {/* Handle problems with APM on Sony Vaio PCG-C1VE */ + swab_apm_power_in_minutes,"Sony VAIO" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Phoenix Technologies LTD" ), +DMI_MATCH (DMI_BIOS_VERSION ,"WXPO1Z3" ), +DMI_MATCH (DMI_BIOS_DATE ,"10/26/01" ), }, + }, + {/* broken PM poweroff bios */ + set_realmode_power_off,"Award Software v4.60 PGMA" , + {DMI_MATCH (DMI_BIOS_VENDOR ,"Award Software International, Inc." ), +DMI_MATCH (DMI_BIOS_VERSION ,"4.60 PGMA" ), +DMI_MATCH (DMI_BIOS_DATE ,"134526184" ), }, + }, + +/* Generic per vendor APM settings */ + + {/* Allow interrupts during suspend on IBM laptops */ + set_apm_ints,"IBM" , + {DMI_MATCH (DMI_SYS_VENDOR ,"IBM" ), }, + }, + + { } +}; + +/* * Just start the APM thread. We do NOT want to do APM BIOS * calls from anything but the APM thread, if for no other reason
@@ -1900,6 +2214,8 @@int ret;int i; +dmi_check_system (apm_dmi_table); +if (apm_info.bios.version ==0 ) {printk (KERN_INFO "apm: BIOS not found.\n" );return -ENODEV ;
arch/i386/kernel/dmi_scan.c +0 -309
363 lines not on this page · raw message
PATCH 5/6 Move HP Pavilion irq workaround where it belongs
arch/i386/kernel/dmi_scan.c +0 -25
@@ -235,23 +235,6 @@ }/* -* Work around broken HP Pavilion Notebooks which assign USB to -* IRQ 9 even though it is actually wired to IRQ 11 -*/ -static __init int fix_broken_hp_bios_irq9 (struct dmi_system_id *d) -{ -#ifdef CONFIG_PCI -extern int broken_hp_bios_irq9; -if (broken_hp_bios_irq9 ==0 ) - { - broken_hp_bios_irq9 =1 ; -printk (KERN_INFO "%s detected - fixing broken IRQ routing\n" , d->ident); - } -#endif -return 0 ; -} - -/* * The Intel 440GX hall of shame. * * On many (all we have checked) of these boxes the $PIRQ table is wrong.
@@ -491,14 +474,6 @@ DMI_MATCH(DMI_PRODUCT_NAME, "S4030CDT/4.3"), } },#endif - { fix_broken_hp_bios_irq9, "HP Pavilion N5400 Series Laptop", { -DMI_MATCH (DMI_SYS_VENDOR ,"Hewlett-Packard" ), -DMI_MATCH (DMI_BIOS_VERSION ,"GE.M1.03" ), -DMI_MATCH (DMI_PRODUCT_VERSION ,"HP Pavilion Notebook Model GE" ), - DMI_MATCH(DMI_BOARD_VERSION, "OmniBook N32N-736"), - } }, - -/* * SMBus / sensors settings
arch/i386/pci/irq.c +31 -1
@@ -12,6 +12,7 @@#include <linux/slab.h> #include <linux/interrupt.h> #include <linux/irq.h> +#include <linux/dmi.h> #include <asm/io.h> #include <asm/smp.h> #include <asm/io_apic.h>
@@ -22,7 +23,7 @@#define PIRQ_SIGNATURE (('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24))#define PIRQ_VERSION 0x0100 -int broken_hp_bios_irq9; +static int broken_hp_bios_irq9;static struct irq_routing_table *pirq_table;
@@ -897,6 +898,33 @@ } } +/* +* Work around broken HP Pavilion Notebooks which assign USB to +* IRQ 9 even though it is actually wired to IRQ 11 +*/ +static int __init fix_broken_hp_bios_irq9 (struct dmi_system_id *d) +{ +if (!broken_hp_bios_irq9) { + broken_hp_bios_irq9 =1 ; +printk (KERN_INFO "%s detected - fixing broken IRQ routing\n" , d->ident); + } +return 0 ; +} + +static struct dmi_system_id __initdata pciirq_dmi_table[] = { + { + .callback = fix_broken_hp_bios_irq9, + .ident ="HP Pavilion N5400 Series Laptop" , + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Hewlett-Packard" ), +DMI_MATCH (DMI_BIOS_VERSION ,"GE.M1.03" ), +DMI_MATCH (DMI_PRODUCT_VERSION ,"HP Pavilion Notebook Model GE" ), +DMI_MATCH (DMI_BOARD_VERSION ,"OmniBook N32N-736" ), + }, + }, + { } +}; +static int __init pcibios_irq_init (void ) {DBG ("PCI: IRQ init\n" );
@@ -904,6 +932,8 @@if (pcibios_enable_irq)return 0 ; +dmi_check_system (pciirq_dmi_table); + pirq_table =pirq_find_routing_table ();#ifdef CONFIG_PCI_BIOS
PATCH 6/6 Port PIIX4 I2C driver to new DMI probing
arch/i386/kernel/dmi_scan.c +0 -24
@@ -15,7 +15,6 @@unsigned long dmi_broken;EXPORT_SYMBOL (dmi_broken); -int is_unsafe_smbus;int es7000_plat =0 ;struct dmi_header
@@ -221,19 +220,6 @@return 0 ; } -/* -* Don't access SMBus on IBM systems which get corrupted eeproms -*/ - -static __init int disable_smbus (struct dmi_system_id *d) -{ -if (is_unsafe_smbus ==0 ) { - is_unsafe_smbus =1 ; -printk (KERN_INFO "%s machine detected. Disabling SMBus accesses.\n" , d->ident); - } -return 0 ; -} -/* * The Intel 440GX hall of shame. *
@@ -476,14 +462,6 @@#endif /* -* SMBus / sensors settings -*/ - - { disable_smbus, "IBM", { - DMI_MATCH(DMI_SYS_VENDOR, "IBM"), - } }, - -/* * Some Athlon laptops have really fucked PST tables. * A BIOS update is all that can save them. * Mention this, and disable cpufreq.
@@ -711,5 +689,3 @@else printk (KERN_INFO "DMI not present.\n" ); } - -EXPORT_SYMBOL (is_unsafe_smbus);
drivers/i2c/busses/i2c-piix4.c +10 -13
@@ -40,6 +40,7 @@#include <linux/i2c.h> #include <linux/init.h> #include <linux/apm_bios.h> +#include <linux/dmi.h> #include <asm/io.h>
@@ -114,18 +115,13 @@static unsigned short piix4_smba =0 ;static struct i2c_adapter piix4_adapter; -/* -* Get DMI information. -*/ -static int __devinit ibm_dmi_probe (void ) -{ -#ifdef CONFIG_X86 -extern int is_unsafe_smbus; -return is_unsafe_smbus; -#else -return 0 ; -#endif -} +static struct dmi_system_id __devinitdata piix4_dmi_table[] = { + { + .ident ="IBM" , + .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"IBM" ), }, + }, + { }, +};static int __devinit piix4_setup (struct pci_dev *PIIX4_dev,const struct pci_device_id *id)
@@ -138,7 +134,8 @@dev_info (&PIIX4_dev->dev,"Found %s device\n" ,pci_name (PIIX4_dev)); -if (ibm_dmi_probe ()) { +/* Don't access SMBus on IBM systems which get corrupted eeproms */ +if (dmi_check_system (piix4_dmi_table)) {dev_err (&PIIX4_dev->dev,"IBM Laptop detected; this module " "may corrupt your serial eeprom! Refusing to load " "module!\n" );
Re: [PATCH 6/6] Port PIIX4 I2C driver to new DMI probing
AFAIK the piix is used on a bunch of non-x86 platforms.
Re: [PATCH 6/6] Port PIIX4 I2C driver to new DMI probing
Quoted 1 line · Christoph Hellwig
AFAIK the piix is used on a bunch of non-x86 platforms.
No problem here, on non-x86 dmi_check_system() is defined as:
static inline int dmi_check_system(struct dmi_system_id *list) { return 0; }
Signature · 2 lines
Andrey Panin | Linux and UNIX system administrator [email protected] | PGP key: wwwkeys.pgp.net
On Thu, May 06, 2004 at 02:29:04PM +0400, Andrey Panin wrote:
Hi Andrey,
Quoted 4 lines
currently
arch/i386/kernel/dmi_scan.cfile looks like complete mess. Interfacing with other kernel subsystem made using ad-hoc ways, mostly with ugly global variables, additionaly coding style is ... not good. So these patches appear:
Very nice! I like the idea of moving bits to the actual drivers a lot. It makes perfect sense to have apm workarounds in the apm driver etc.
One thing that might be worth your while whilst you're getting intimate with this code, would be to take a peek at the dmi workarounds in 2.4 and make sure we didn't miss any. I forward ported a bunch a few months back, but I'm not sure if I got them all, and it's possible new ones were added there that we missed in 2.6
Good work.
Dave
Quoted 5 lines · Andrey Panin
currently
arch/i386/kernel/dmi_scan.cfile looks like complete mess. Interfacing with other kernel subsystem made using ad-hoc ways, mostly with ugly global variables, additionaly coding style is ... not good. So these patches appear:
The patches look good by me, but I'd rather leave them to after 2.6.6, since they seem to be cleanups rather than serious bug-fixes.
Andrew?
Linus
Quoted 5 lines · Linus Torvalds
Quoted 1 line · Andrey Panin
Quoted 8 lines
Quoted 4 lines
currently
arch/i386/kernel/dmi_scan.cfile looks like complete mess. Interfacing with other kernel subsystem made using ad-hoc ways, mostly with ugly global variables, additionaly coding style is ... not good. So these patches appear:The patches look good by me, but I'd rather leave them to after 2.6.6, since they seem to be cleanups rather than serious bug-fixes.
There is a significant amount of work pending in the DRM development tree at http://drm.bkbits.net/drm-2.6 (which is included in -mm). Andrey's zeroeth patch alone tosses three rejects against it.
David, now would be a good time to start getting that code ready for a merge.
Andrey, you should rebase your patches on top of the DRM tree, or -mm, and copy David on the emails.
Thanks.
Quoted 3 lines · Andrew Morton
There is a significant amount of work pending in the DRM development tree at http://drm.bkbits.net/drm-2.6 (which is included in -mm). Andrey's zeroeth patch alone tosses three rejects against it.
Why on earth is the DRM stuff touching the DMI code ?
Dave
Quoted 9 lines · Dave Jones
Quoted 3 lines · Andrew Morton
There is a significant amount of work pending in the DRM development tree at http://drm.bkbits.net/drm-2.6 (which is included in -mm). Andrey's zeroeth patch alone tosses three rejects against it.
Why on earth is the DRM stuff touching the DMI code ?
Please note the relevant header on my email:
Date: Thu, 6 May 2004 08:10:12 -0700
Having now had a corrective nap I can confirm that
a) I'm a twit and
b) there are still a ton of rejects against Linus's tree.
Andrey, please update and resend.