As part of the new SMBIOS and System Firmware code: - add in ia64 and x86 calls to initialize SMBIOS - Replace old dmi* structures and functions with new sysfw* and smbios* structures and functions in individual drivers - cleanup sysfw_id lookup tables - cleanup of includes for dmi.h and mod_devicetable.h which were included in some files that did not need them Cc: linux-ia64@xxxxxxxxxxxxxxx Cc: x86@xxxxxxxxxx Signed-off-by: Prarit Bhargava <prarit@xxxxxxxxxx> --- arch/ia64/kernel/setup.c | 8 +- arch/x86/include/asm/mmconfig.h | 4 +- arch/x86/include/asm/pci_x86.h | 6 +- arch/x86/kernel/acpi/boot.c | 177 ++++++++-------- arch/x86/kernel/acpi/sleep.c | 1 - arch/x86/kernel/apic/apic.c | 20 +- arch/x86/kernel/apic/bigsmp_32.c | 37 ++-- arch/x86/kernel/apm_32.c | 391 ++++++++++++++++++++++-------------- arch/x86/kernel/cpu/amd.c | 2 +- arch/x86/kernel/cpu/vmware.c | 17 ++- arch/x86/kernel/io_delay.c | 42 ++-- arch/x86/kernel/mmconf-fam10h_64.c | 28 ++-- arch/x86/kernel/probe_roms.c | 1 - arch/x86/kernel/process.c | 8 +- arch/x86/kernel/reboot.c | 132 +++++++------ arch/x86/kernel/setup.c | 14 +- arch/x86/kernel/tsc.c | 16 +- arch/x86/pci/acpi.c | 18 +- arch/x86/pci/broadcom_bus.c | 1 - arch/x86/pci/common.c | 163 ++++++++-------- arch/x86/pci/direct.c | 7 +- arch/x86/pci/fixup.c | 33 ++-- arch/x86/pci/init.c | 4 +- arch/x86/pci/irq.c | 26 ++-- arch/x86/pci/mmconfig-shared.c | 10 +- arch/x86/pci/mrst.c | 1 - drivers/cpufreq/acpi-cpufreq.c | 16 +- drivers/cpufreq/powernow-k7.c | 14 +- 28 files changed, 657 insertions(+), 540 deletions(-) diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 5e2c724..e170fcc 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c @@ -36,7 +36,7 @@ #include <linux/string.h> #include <linux/threads.h> #include <linux/screen_info.h> -#include <linux/dmi.h> +#include <linux/smbios.h> #include <linux/serial.h> #include <linux/serial_core.h> #include <linux/efi.h> @@ -1043,9 +1043,9 @@ check_bugs (void) (unsigned long) __end___mckinley_e9_bundles); } -static int __init run_dmi_scan(void) +static int __init run_smbios_scan(void) { - dmi_scan_machine(); + smbios_init(); return 0; } -core_initcall(run_dmi_scan); +core_initcall(run_smbios_scan); diff --git a/arch/x86/include/asm/mmconfig.h b/arch/x86/include/asm/mmconfig.h index 9b119da..1831965 100644 --- a/arch/x86/include/asm/mmconfig.h +++ b/arch/x86/include/asm/mmconfig.h @@ -3,10 +3,10 @@ #ifdef CONFIG_PCI_MMCONFIG extern void __cpuinit fam10h_check_enable_mmcfg(void); -extern void __cpuinit check_enable_amd_mmconf_dmi(void); +extern void __cpuinit check_enable_amd_pci_mmconf(void); #else static inline void fam10h_check_enable_mmcfg(void) { } -static inline void check_enable_amd_mmconf_dmi(void) { } +static inline void check_enable_amd_pci_mmconf(void) { } #endif #endif /* _ASM_X86_MMCONFIG_H */ diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h index 7045267..28e3f3a 100644 --- a/arch/x86/include/asm/pci_x86.h +++ b/arch/x86/include/asm/pci_x86.h @@ -39,7 +39,7 @@ enum pci_bf_sort_state { pci_bf_sort_default, pci_force_nobf, pci_force_bf, - pci_dmi_bf, + pci_smbios_bf, }; /* pci-i386.c */ @@ -109,8 +109,8 @@ extern bool port_cf9_safe; extern int pci_direct_probe(void); extern void pci_direct_init(int type); extern void pci_pcbios_init(void); -extern void __init dmi_check_pciprobe(void); -extern void __init dmi_check_skip_isa_align(void); +extern void __init smbios_check_pciprobe(void); +extern void __init smbios_check_skip_isa_align(void); /* some common used subsys_initcalls */ extern int __init pci_acpi_init(void); diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 4558f0d..180d4c7 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -29,7 +29,7 @@ #include <linux/efi.h> #include <linux/cpumask.h> #include <linux/module.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/irq.h> #include <linux/slab.h> #include <linux/bootmem.h> @@ -1294,7 +1294,7 @@ static void __init acpi_process_madt(void) return; } -static int __init disable_acpi_irq(const struct dmi_system_id *d) +static int __init disable_acpi_irq(const struct sysfw_id *d) { if (!acpi_force) { printk(KERN_NOTICE "%s detected: force use of acpi=noirq\n", @@ -1304,7 +1304,7 @@ static int __init disable_acpi_irq(const struct dmi_system_id *d) return 0; } -static int __init disable_acpi_pci(const struct dmi_system_id *d) +static int __init disable_acpi_pci(const struct sysfw_id *d) { if (!acpi_force) { printk(KERN_NOTICE "%s detected: force use of pci=noacpi\n", @@ -1314,14 +1314,14 @@ static int __init disable_acpi_pci(const struct dmi_system_id *d) return 0; } -static int __init dmi_disable_acpi(const struct dmi_system_id *d) +static int __init id_disable_acpi(const struct sysfw_id *d) { if (!acpi_force) { printk(KERN_NOTICE "%s detected: acpi off\n", d->ident); disable_acpi(); } else { - printk(KERN_NOTICE - "Warning: DMI blacklist says broken, but acpi forced\n"); + printk(KERN_NOTICE "Warning: SMBIOS blacklist says broken, " + "but acpi forced\n"); } return 0; } @@ -1329,7 +1329,8 @@ static int __init dmi_disable_acpi(const struct dmi_system_id *d) /* * Force ignoring BIOS IRQ0 pin2 override */ -static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d) +static int __init +id_ignore_irq0_timer_override(const struct sysfw_id *d) { /* * The ati_ixp4x0_rev() early PCI quirk should have set @@ -1348,33 +1349,32 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d) * If your system is blacklisted here, but you find that acpi=force * works for you, please contact linux-acpi@xxxxxxxxxxxxxxx */ -static struct dmi_system_id __initdata acpi_dmi_table[] = { +static struct sysfw_id __initdata acpi_id_table[] = { /* * Boxes that need ACPI disabled */ { - .callback = dmi_disable_acpi, - .ident = "IBM Thinkpad", - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), - DMI_MATCH(DMI_BOARD_NAME, "2629H1G"), - }, + .callback = id_disable_acpi, + .ident = "IBM Thinkpad", + .matches = { + SYSFW_MATCH(SYSFW_BOARD_VENDOR, "IBM"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "2629H1G"), + }, }, - /* * Boxes that need ACPI PCI IRQ routing disabled */ { - .callback = disable_acpi_irq, - .ident = "ASUS A7V", - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"), - DMI_MATCH(DMI_BOARD_NAME, "<A7V>"), - /* newer BIOS, Revision 1011, does work */ - DMI_MATCH(DMI_BIOS_VERSION, - "ASUS A7V ACPI BIOS Revision 1007"), - }, - }, + .callback = disable_acpi_irq, + .ident = "ASUS A7V", + .matches = { + SYSFW_MATCH(SYSFW_BOARD_VENDOR, "ASUSTeK Computer INC"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "<A7V>"), + /* newer BIOS, Revision 1011, does work */ + SYSFW_MATCH(SYSFW_BIOS_VERSION, + "ASUS A7V ACPI BIOS Revision 1007"), + }, + }, { /* * Latest BIOS for IBM 600E (1.16) has bad pcinum @@ -1382,48 +1382,49 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { * interrupt links to work. DSDT fix is in bug 5966. * 2645, 2646 model numbers are shared with 600/600E/600X */ - .callback = disable_acpi_irq, - .ident = "IBM Thinkpad 600 Series 2645", - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), - DMI_MATCH(DMI_BOARD_NAME, "2645"), - }, - }, + .callback = disable_acpi_irq, + .ident = "IBM Thinkpad 600 Series 2645", + .matches = { + SYSFW_MATCH(SYSFW_BOARD_VENDOR, "IBM"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "2645"), + }, + }, { - .callback = disable_acpi_irq, - .ident = "IBM Thinkpad 600 Series 2646", - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), - DMI_MATCH(DMI_BOARD_NAME, "2646"), - }, - }, + .callback = disable_acpi_irq, + .ident = "IBM Thinkpad 600 Series 2646", + .matches = { + SYSFW_MATCH(SYSFW_BOARD_VENDOR, "IBM"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "2646"), + }, + }, /* * Boxes that need ACPI PCI IRQ routing and PCI scan disabled */ { /* _BBN 0 bug */ - .callback = disable_acpi_pci, - .ident = "ASUS PR-DLS", - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), - DMI_MATCH(DMI_BOARD_NAME, "PR-DLS"), - DMI_MATCH(DMI_BIOS_VERSION, - "ASUS PR-DLS ACPI BIOS Revision 1010"), - DMI_MATCH(DMI_BIOS_DATE, "03/21/2003") - }, - }, + .callback = disable_acpi_pci, + .ident = "ASUS PR-DLS", + .matches = { + SYSFW_MATCH(SYSFW_BOARD_VENDOR, + "ASUSTeK Computer INC."), + SYSFW_MATCH(SYSFW_BOARD_NAME, "PR-DLS"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, + "ASUS PR-DLS ACPI BIOS Revision 1010"), + SYSFW_MATCH(SYSFW_BIOS_DATE, "03/21/2003") + }, + }, { - .callback = disable_acpi_pci, - .ident = "Acer TravelMate 36x Laptop", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Acer"), - DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), - }, - }, + .callback = disable_acpi_pci, + .ident = "Acer TravelMate 36x Laptop", + .matches = { + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Acer"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "TravelMate 360"), + }, + }, {} }; -/* second table for DMI checks that should run after early-quirks */ -static struct dmi_system_id __initdata acpi_dmi_table_late[] = { +/* second table for SMBIOS checks that should run after early-quirks */ +static struct sysfw_id __initdata acpi_id_late[] = { /* * HP laptops which use a DSDT reporting as HP/SB400/10000, * which includes some code which overrides all temperature @@ -1435,37 +1436,37 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = { * override in that cases. */ { - .callback = dmi_ignore_irq0_timer_override, - .ident = "HP nx6115 laptop", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), - DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6115"), - }, - }, + .callback = id_ignore_irq0_timer_override, + .ident = "HP nx6115 laptop", + .matches = { + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Hewlett-Packard"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "HP Compaq nx6115"), + }, + }, { - .callback = dmi_ignore_irq0_timer_override, - .ident = "HP NX6125 laptop", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), - DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6125"), - }, - }, + .callback = id_ignore_irq0_timer_override, + .ident = "HP NX6125 laptop", + .matches = { + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Hewlett-Packard"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "HP Compaq nx6125"), + }, + }, { - .callback = dmi_ignore_irq0_timer_override, - .ident = "HP NX6325 laptop", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), - DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"), - }, - }, + .callback = id_ignore_irq0_timer_override, + .ident = "HP NX6325 laptop", + .matches = { + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Hewlett-Packard"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "HP Compaq nx6325"), + }, + }, { - .callback = dmi_ignore_irq0_timer_override, - .ident = "HP 6715b laptop", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), - DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6715b"), - }, - }, + .callback = id_ignore_irq0_timer_override, + .ident = "HP 6715b laptop", + .matches = { + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Hewlett-Packard"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "HP Compaq 6715b"), + }, + }, {} }; @@ -1490,7 +1491,7 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = { void __init acpi_boot_table_init(void) { - dmi_check_system(acpi_dmi_table); + sysfw_callback(acpi_id_table); /* * If acpi_disabled, bail out @@ -1541,7 +1542,7 @@ int __init early_acpi_boot_init(void) int __init acpi_boot_init(void) { /* those are executed after early-quirks are executed */ - dmi_check_system(acpi_dmi_table_late); + sysfw_callback(acpi_id_late); /* * If acpi_disabled, bail out diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c index 103b6ab..c96b82d 100644 --- a/arch/x86/kernel/acpi/sleep.c +++ b/arch/x86/kernel/acpi/sleep.c @@ -8,7 +8,6 @@ #include <linux/acpi.h> #include <linux/bootmem.h> #include <linux/memblock.h> -#include <linux/dmi.h> #include <linux/cpumask.h> #include <asm/segment.h> #include <asm/desc.h> diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index b9338b8..a3a176d 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -30,7 +30,7 @@ #include <linux/dmar.h> #include <linux/init.h> #include <linux/cpu.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/smp.h> #include <linux/mm.h> @@ -162,7 +162,7 @@ early_param("nox2apic", setup_nox2apic); unsigned long mp_lapic_addr; int disable_apic; -/* Disable local APIC timer from the kernel commandline or via dmi quirk */ +/* Disable local APIC timer from the kernel commandline or via smbios quirk */ static int disable_apic_timer __initdata; /* Local APIC timer works in C2 */ int local_apic_timer_c2_ok; @@ -2231,7 +2231,7 @@ static int __cpuinit apic_cluster_num(void) static int __cpuinitdata multi_checked; static int __cpuinitdata multi; -static int __cpuinit set_multi(const struct dmi_system_id *d) +static int __cpuinit set_multi(const struct sysfw_id *d) { if (multi) return 0; @@ -2240,24 +2240,24 @@ static int __cpuinit set_multi(const struct dmi_system_id *d) return 0; } -static const __cpuinitconst struct dmi_system_id multi_dmi_table[] = { +static const __cpuinitconst struct sysfw_id set_multi_table[] = { { .callback = set_multi, .ident = "IBM System Summit2", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "IBM"), - DMI_MATCH(DMI_PRODUCT_NAME, "Summit2"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "IBM"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Summit2"), }, }, {} }; -static void __cpuinit dmi_check_multi(void) +static void __cpuinit check_set_multi(void) { if (multi_checked) return; - dmi_check_system(multi_dmi_table); + sysfw_callback(set_multi_table); multi_checked = 1; } @@ -2267,11 +2267,11 @@ static void __cpuinit dmi_check_multi(void) * Thus far, the major user of this is IBM's Summit2 series: * Clustered boxes may have unsynced TSC problems if they are * multi-chassis. - * Use DMI to check them + * Use SMBIOS to check them */ __cpuinit int apic_is_clustered_box(void) { - dmi_check_multi(); + check_set_multi(); if (multi) return 1; diff --git a/arch/x86/kernel/apic/bigsmp_32.c b/arch/x86/kernel/apic/bigsmp_32.c index efd737e..76bee5d 100644 --- a/arch/x86/kernel/apic/bigsmp_32.c +++ b/arch/x86/kernel/apic/bigsmp_32.c @@ -7,7 +7,7 @@ #include <linux/cpumask.h> #include <linux/kernel.h> #include <linux/init.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/smp.h> #include <asm/apicdef.h> @@ -151,30 +151,35 @@ static void bigsmp_send_IPI_all(int vector) bigsmp_send_IPI_mask(cpu_online_mask, vector); } -static int dmi_bigsmp; /* can be set by dmi scanners */ +static int smbios_bigsmp; /* can be set by smbios scanners */ -static int hp_ht_bigsmp(const struct dmi_system_id *d) +static int hp_ht_bigsmp(const struct sysfw_id *d) { printk(KERN_NOTICE "%s detected: force use of apic=bigsmp\n", d->ident); - dmi_bigsmp = 1; + smbios_bigsmp = 1; return 0; } -static const struct dmi_system_id bigsmp_dmi_table[] = { - { hp_ht_bigsmp, "HP ProLiant DL760 G2", - { DMI_MATCH(DMI_BIOS_VENDOR, "HP"), - DMI_MATCH(DMI_BIOS_VERSION, "P44-"), +static const struct sysfw_id bigsmp_id_table[] = { + { + .callback = hp_ht_bigsmp, + .ident = "HP ProLiant DL760 G2", + { + SYSFW_MATCH(SYSFW_BIOS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "P44-"), } }, - - { hp_ht_bigsmp, "HP ProLiant DL740", - { DMI_MATCH(DMI_BIOS_VENDOR, "HP"), - DMI_MATCH(DMI_BIOS_VERSION, "P47-"), + { + .callback = hp_ht_bigsmp, + .ident = "HP ProLiant DL740", + { + SYSFW_MATCH(SYSFW_BIOS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "P47-"), } }, - { } /* NULL entry stops DMI scanning */ + {} /* NULL entry stops SMBIOS scanning */ }; static void bigsmp_vector_allocation_domain(int cpu, struct cpumask *retmask) @@ -186,11 +191,11 @@ static void bigsmp_vector_allocation_domain(int cpu, struct cpumask *retmask) static int probe_bigsmp(void) { if (def_to_bigsmp) - dmi_bigsmp = 1; + smbios_bigsmp = 1; else - dmi_check_system(bigsmp_dmi_table); + sysfw_callback(bigsmp_id_table); - return dmi_bigsmp; + return smbios_bigsmp; } static struct apic apic_bigsmp = { diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c index 965a766..dd804ef 100644 --- a/arch/x86/kernel/apm_32.c +++ b/arch/x86/kernel/apm_32.c @@ -223,7 +223,7 @@ #include <linux/kernel.h> #include <linux/freezer.h> #include <linux/smp.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/suspend.h> #include <linux/kthread.h> #include <linux/jiffies.h> @@ -1931,7 +1931,7 @@ static struct miscdevice apm_device = { /* Simple "print if true" callback */ -static int __init print_if_true(const struct dmi_system_id *d) +static int __init print_if_true(const struct sysfw_id *d) { printk("%s\n", d->ident); return 0; @@ -1941,7 +1941,7 @@ static int __init print_if_true(const struct dmi_system_id *d) * 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(const struct dmi_system_id *d) +static int __init broken_ps2_resume(const struct sysfw_id *d) { printk(KERN_INFO "%s machine detected. Mousepad Resume Bug " "workaround hopefully not needed.\n", d->ident); @@ -1949,7 +1949,7 @@ static int __init broken_ps2_resume(const struct dmi_system_id *d) } /* Some bioses have a broken protected mode poweroff and need to use realmode */ -static int __init set_realmode_power_off(const struct dmi_system_id *d) +static int __init set_realmode_power_off(const struct sysfw_id *d) { if (apm_info.realmode_power_off == 0) { apm_info.realmode_power_off = 1; @@ -1960,7 +1960,7 @@ static int __init set_realmode_power_off(const struct dmi_system_id *d) } /* Some laptops require interrupts to be enabled during APM calls */ -static int __init set_apm_ints(const struct dmi_system_id *d) +static int __init set_apm_ints(const struct sysfw_id *d) { if (apm_info.allow_ints == 0) { apm_info.allow_ints = 1; @@ -1971,7 +1971,7 @@ static int __init set_apm_ints(const struct dmi_system_id *d) } /* Some APM bioses corrupt memory or just plain do not work */ -static int __init apm_is_horked(const struct dmi_system_id *d) +static int __init apm_is_horked(const struct sysfw_id *d) { if (apm_info.disabled == 0) { apm_info.disabled = 1; @@ -1981,7 +1981,7 @@ static int __init apm_is_horked(const struct dmi_system_id *d) return 0; } -static int __init apm_is_horked_d850md(const struct dmi_system_id *d) +static int __init apm_is_horked_d850md(const struct sysfw_id *d) { if (apm_info.disabled == 0) { apm_info.disabled = 1; @@ -1994,7 +1994,7 @@ static int __init apm_is_horked_d850md(const struct dmi_system_id *d) } /* Some APM bioses hang on APM idle calls */ -static int __init apm_likes_to_melt(const struct dmi_system_id *d) +static int __init apm_likes_to_melt(const struct sysfw_id *d) { if (apm_info.forbid_idle == 0) { apm_info.forbid_idle = 1; @@ -2019,7 +2019,7 @@ static int __init apm_likes_to_melt(const struct dmi_system_id *d) * 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(const struct dmi_system_id *d) +static int __init broken_apm_power(const struct sysfw_id *d) { apm_info.get_power_status_broken = 1; printk(KERN_WARNING "BIOS strings suggest APM bugs, " @@ -2031,7 +2031,7 @@ static int __init broken_apm_power(const struct dmi_system_id *d) * This bios swaps the APM minute reporting bytes over (Many sony laptops * have this problem). */ -static int __init swab_apm_power_in_minutes(const struct dmi_system_id *d) +static int __init swab_apm_power_in_minutes(const struct sysfw_id *d) { apm_info.get_power_status_swabinminutes = 1; printk(KERN_WARNING "BIOS strings suggest APM reports battery life " @@ -2039,215 +2039,314 @@ static int __init swab_apm_power_in_minutes(const struct dmi_system_id *d) return 0; } -static struct dmi_system_id __initdata apm_dmi_table[] = { +static struct sysfw_id __initdata apm_id_table[] = { { - print_if_true, + .callback = 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)"), }, + { SYSFW_MATCH(SYSFW_SYS_VENDOR, "IBM"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = broken_ps2_resume, + .ident = "Dell Latitude C600", + { SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell"), + SYSFW_MATCH(SYSFW_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"), } + .callback = set_apm_ints, + .ident = "Dell Latitude", + { SYSFW_MATCH(SYSFW_SYS_VENDOR, + "Dell Computer Corporation"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_is_horked, + .ident = "Dell Inspiron 2500", + { SYSFW_MATCH(SYSFW_SYS_VENDOR, + "Dell Computer Corporation"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Inspiron 2500"), + SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = set_apm_ints, + .ident = "Dell Inspiron", { + SYSFW_MATCH(SYSFW_SYS_VENDOR, + "Dell Computer Corporation"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = broken_apm_power, + .ident = "Dell Inspiron 5000e", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "A04"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = broken_apm_power, + .ident = "Dell Inspiron 2500", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "A12"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_is_horked, + .ident = "Dell Dimension 4100", + { SYSFW_MATCH(SYSFW_SYS_VENDOR, + "Dell Computer Corporation"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "XPS-Z"), + SYSFW_MATCH(SYSFW_BIOS_VENDOR, "Intel Corp."), + SYSFW_MATCH(SYSFW_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"), }, + .callback = set_apm_ints, + .ident = "Compaq 12XL125", + { SYSFW_MATCH(SYSFW_SYS_VENDOR, "Compaq"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Compaq PC"), + SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = set_apm_ints, + .ident = "ASUSTeK", + { SYSFW_MATCH(SYSFW_SYS_VENDOR, + "ASUSTeK Computer Inc."), + SYSFW_MATCH(SYSFW_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])"), }, + .callback = apm_is_horked, + .ident = "ABIT KX7-333[R]", + { SYSFW_MATCH(SYSFW_BOARD_VENDOR, "ABIT"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_is_horked, + .ident = "Trigem Delhi3", + { SYSFW_MATCH(SYSFW_SYS_VENDOR, "TriGem Computer, Inc"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_is_horked, + .ident = "Fujitsu-Siemens", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "hoenix/FUJITSU SIEMENS"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_is_horked_d850md, + .ident = "Intel D850MD", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, "Intel Corp."), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_is_horked, + .ident = "Intel D810EMO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, "Intel Corp."), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_is_horked, + .ident = "Dell XPS-Z", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, "Intel Corp."), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "A11"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_is_horked, + .ident = "Sharp PC-PJ/AX", + { SYSFW_MATCH(SYSFW_SYS_VENDOR, "SHARP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "PC-PJ/AX"), + SYSFW_MATCH(SYSFW_BIOS_VENDOR, "SystemSoft"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_is_horked, + .ident = "Dell Inspiron 2500", + { SYSFW_MATCH(SYSFW_SYS_VENDOR, + "Dell Computer Corporation"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Inspiron 2500"), + SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_likes_to_melt, + .ident = "Jabil AMD", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "American Megatrends Inc."), + SYSFW_MATCH(SYSFW_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"), }, + .callback = apm_likes_to_melt, + .ident = "AMI Bios", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "American Megatrends Inc."), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "R0206H"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "W2K06H0"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "R0117A0"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "R0121Z1"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "WME01Z1"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "R0206Z3"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "R0203D0"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "R0203Z3"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "R0209Z3"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "R0204K2"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "R0208P1"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "R0204P1"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = swab_apm_power_in_minutes, + .ident = "Sony VAIO", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Phoenix Technologies LTD"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "WXPO1Z3"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = set_realmode_power_off, + .ident = "Award Software v4.60 PGMA", + { SYSFW_MATCH(SYSFW_BIOS_VENDOR, + "Award Software International, Inc."), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "4.60 PGMA"), + SYSFW_MATCH(SYSFW_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"), }, + .callback = set_apm_ints, + .ident = "IBM", + { + SYSFW_MATCH(SYSFW_SYS_VENDOR, "IBM"), + }, }, - - { } + {} }; /* @@ -2265,7 +2364,7 @@ static int __init apm_init(void) struct desc_struct *gdt; int err; - dmi_check_system(apm_dmi_table); + sysfw_callback(apm_id_table); if (apm_info.bios.version == 0 || paravirt_enabled() || machine_is_olpc()) { printk(KERN_INFO "apm: BIOS not found.\n"); @@ -2288,7 +2387,7 @@ static int __init apm_init(void) apm_info.get_power_status_broken = 1; if (realmode_power_off) apm_info.realmode_power_off = 1; - /* User can override, but default is to trust DMI */ + /* User can override, but default is to trust SMBIOS */ if (apm_disabled != -1) apm_info.disabled = apm_disabled; diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index b13ed39..79fd786 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c @@ -587,7 +587,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c) if (c->x86 == 0x10) { /* do this for boot cpu */ if (c == &boot_cpu_data) - check_enable_amd_mmconf_dmi(); + check_enable_amd_pci_mmconf(); fam10h_check_enable_mmcfg(); } diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index d22d0c4..e427451 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -21,7 +21,7 @@ * */ -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/module.h> #include <asm/div64.h> #include <asm/x86_init.h> @@ -85,8 +85,18 @@ static void __init vmware_platform_setup(void) "Failed to get TSC freq from the hypervisor\n"); } +static struct sysfw_id vmware_id_table[] = { + { + .ident = "VMware", + .matches = { + SYSFW_MATCH(SYSFW_PRODUCT_SERIAL, "VMWare"), + }, + }, + {}, +}; + /* - * While checking the dmi string information, just checking the product + * While checking the smbios string information, just checking the product * serial key should be enough, as this will always have a VMware * specific string when running under VMware hypervisor. */ @@ -100,8 +110,7 @@ static bool __init vmware_platform(void) &hyper_vendor_id[1], &hyper_vendor_id[2]); if (!memcmp(hyper_vendor_id, "VMwareVMware", 12)) return true; - } else if (dmi_available && dmi_name_in_serial("VMware") && - __vmware_platform()) + } else if (sysfw_callback(vmware_id_table) && __vmware_platform()) return true; return false; diff --git a/arch/x86/kernel/io_delay.c b/arch/x86/kernel/io_delay.c index a979b5b..27c0390 100644 --- a/arch/x86/kernel/io_delay.c +++ b/arch/x86/kernel/io_delay.c @@ -1,7 +1,7 @@ /* * I/O delay strategies for inb_p/outb_p * - * Allow for a DMI based override of port 0x80, needed for certain HP laptops + * Allow for a SMBIOS based override of port 0x80, needed for certain HP laptops * and possibly other systems. Also allow for the gradual elimination of * outb_p/inb_p API uses. */ @@ -9,7 +9,7 @@ #include <linux/module.h> #include <linux/delay.h> #include <linux/init.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/io.h> int io_delay_type __read_mostly = CONFIG_DEFAULT_IO_DELAY_TYPE; @@ -44,7 +44,7 @@ void native_io_delay(void) } EXPORT_SYMBOL(native_io_delay); -static int __init dmi_io_delay_0xed_port(const struct dmi_system_id *id) +static int __init io_delay_0xed_port(const struct sysfw_id *id) { if (io_delay_type == CONFIG_IO_DELAY_TYPE_0X80) { pr_notice("%s: using 0xed I/O delay port\n", id->ident); @@ -58,54 +58,54 @@ static int __init dmi_io_delay_0xed_port(const struct dmi_system_id *id) * Quirk table for systems that misbehave (lock up, etc.) if port * 0x80 is used: */ -static struct dmi_system_id __initdata io_delay_0xed_port_dmi_table[] = { +static struct sysfw_id __initdata io_delay_0xed_port_table[] = { { - .callback = dmi_io_delay_0xed_port, + .callback = io_delay_0xed_port, .ident = "Compaq Presario V6000", .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"), - DMI_MATCH(DMI_BOARD_NAME, "30B7") + SYSFW_MATCH(SYSFW_BOARD_VENDOR, "Quanta"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "30B7") } }, { - .callback = dmi_io_delay_0xed_port, + .callback = io_delay_0xed_port, .ident = "HP Pavilion dv9000z", .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"), - DMI_MATCH(DMI_BOARD_NAME, "30B9") + SYSFW_MATCH(SYSFW_BOARD_VENDOR, "Quanta"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "30B9") } }, { - .callback = dmi_io_delay_0xed_port, + .callback = io_delay_0xed_port, .ident = "HP Pavilion dv6000", .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"), - DMI_MATCH(DMI_BOARD_NAME, "30B8") + SYSFW_MATCH(SYSFW_BOARD_VENDOR, "Quanta"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "30B8") } }, { - .callback = dmi_io_delay_0xed_port, + .callback = io_delay_0xed_port, .ident = "HP Pavilion tx1000", .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"), - DMI_MATCH(DMI_BOARD_NAME, "30BF") + SYSFW_MATCH(SYSFW_BOARD_VENDOR, "Quanta"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "30BF") } }, { - .callback = dmi_io_delay_0xed_port, + .callback = io_delay_0xed_port, .ident = "Presario F700", .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"), - DMI_MATCH(DMI_BOARD_NAME, "30D3") + SYSFW_MATCH(SYSFW_BOARD_VENDOR, "Quanta"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "30D3") } }, - { } + {} }; void __init io_delay_init(void) { if (!io_delay_override) - dmi_check_system(io_delay_0xed_port_dmi_table); + sysfw_callback(io_delay_0xed_port_table); } static int __init io_delay_param(char *s) diff --git a/arch/x86/kernel/mmconf-fam10h_64.c b/arch/x86/kernel/mmconf-fam10h_64.c index ac861b8..f24400a 100644 --- a/arch/x86/kernel/mmconf-fam10h_64.c +++ b/arch/x86/kernel/mmconf-fam10h_64.c @@ -6,7 +6,7 @@ #include <linux/mm.h> #include <linux/string.h> #include <linux/pci.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/range.h> #include <asm/pci-direct.h> @@ -213,25 +213,25 @@ void __cpuinit fam10h_check_enable_mmcfg(void) wrmsrl(address, val); } -static int __init set_check_enable_amd_mmconf(const struct dmi_system_id *d) +static int __init set_check_enable_amd_mmconf(const struct sysfw_id *d) { - pci_probe |= PCI_CHECK_ENABLE_AMD_MMCONF; - return 0; + pci_probe |= PCI_CHECK_ENABLE_AMD_MMCONF; + return 0; } -static const struct dmi_system_id __initconst mmconf_dmi_table[] = { - { - .callback = set_check_enable_amd_mmconf, - .ident = "Sun Microsystems Machine", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Sun Microsystems"), - }, - }, +static const struct sysfw_id __initconst mmconf_id_table[] = { + { + .callback = set_check_enable_amd_mmconf, + .ident = "Sun Microsystems Machine", + .matches = { + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Sun Microsystems"), + }, + }, {} }; /* Called from a __cpuinit function, but only on the BSP. */ -void __ref check_enable_amd_mmconf_dmi(void) +void __ref check_enable_amd_pci_mmconf(void) { - dmi_check_system(mmconf_dmi_table); + sysfw_callback(mmconf_id_table); } diff --git a/arch/x86/kernel/probe_roms.c b/arch/x86/kernel/probe_roms.c index ba0a4cc..e36d641 100644 --- a/arch/x86/kernel/probe_roms.c +++ b/arch/x86/kernel/probe_roms.c @@ -7,7 +7,6 @@ #include <linux/console.h> #include <linux/init.h> #include <linux/edd.h> -#include <linux/dmi.h> #include <linux/pfn.h> #include <linux/pci.h> #include <asm/pci-direct.h> diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index e1ba8cb..c1d7c54 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -10,7 +10,7 @@ #include <linux/clockchips.h> #include <linux/random.h> #include <linux/user-return-notifier.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/utsname.h> #include <trace/events/power.h> #include <linux/hw_breakpoint.h> @@ -94,15 +94,15 @@ void show_regs_common(void) { const char *vendor, *product, *board; - vendor = dmi_get_system_info(DMI_SYS_VENDOR); + vendor = sysfw_lookup(SYSFW_SYS_VENDOR); if (!vendor) vendor = ""; - product = dmi_get_system_info(DMI_PRODUCT_NAME); + product = sysfw_lookup(SYSFW_PRODUCT_NAME); if (!product) product = ""; /* Board Name is optional */ - board = dmi_get_system_info(DMI_BOARD_NAME); + board = sysfw_lookup(SYSFW_BOARD_NAME); printk(KERN_CONT "\n"); printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s", diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 4f0d46f..b3837c5 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -3,7 +3,7 @@ #include <linux/init.h> #include <linux/pm.h> #include <linux/efi.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/sched.h> #include <linux/tboot.h> #include <linux/delay.h> @@ -127,7 +127,7 @@ __setup("reboot=", reboot_setup); * Some machines require the "reboot=b" commandline option, * this quirk makes that automatic. */ -static int __init set_bios_reboot(const struct dmi_system_id *d) +static int __init set_bios_reboot(const struct sysfw_id *d) { if (reboot_type != BOOT_BIOS) { reboot_type = BOOT_BIOS; @@ -136,178 +136,186 @@ static int __init set_bios_reboot(const struct dmi_system_id *d) return 0; } -static struct dmi_system_id __initdata reboot_dmi_table[] = { +static struct sysfw_id __initdata reboot_id_table[] = { { /* Handle problems with rebooting on Dell E520's */ .callback = set_bios_reboot, .ident = "Dell E520", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell DM061"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Dell DM061"), }, }, { /* Handle problems with rebooting on Dell 1300's */ .callback = set_bios_reboot, .ident = "Dell PowerEdge 1300", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), - DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1300/"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, + "Dell Computer Corporation"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "PowerEdge 1300/"), }, }, { /* Handle problems with rebooting on Dell 300's */ .callback = set_bios_reboot, .ident = "Dell PowerEdge 300", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), - DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, + "Dell Computer Corporation"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "PowerEdge 300/"), }, }, { /* Handle problems with rebooting on Dell Optiplex 745's SFF*/ .callback = set_bios_reboot, .ident = "Dell OptiPlex 745", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "OptiPlex 745"), }, }, { /* Handle problems with rebooting on Dell Optiplex 745's DFF*/ .callback = set_bios_reboot, .ident = "Dell OptiPlex 745", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), - DMI_MATCH(DMI_BOARD_NAME, "0MM599"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "OptiPlex 745"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "0MM599"), }, }, { /* Handle problems with rebooting on Dell Optiplex 745 with 0KW626 */ .callback = set_bios_reboot, .ident = "Dell OptiPlex 745", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), - DMI_MATCH(DMI_BOARD_NAME, "0KW626"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "OptiPlex 745"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "0KW626"), }, }, { /* Handle problems with rebooting on Dell Optiplex 330 with 0KP561 */ .callback = set_bios_reboot, .ident = "Dell OptiPlex 330", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 330"), - DMI_MATCH(DMI_BOARD_NAME, "0KP561"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "OptiPlex 330"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "0KP561"), }, }, { /* Handle problems with rebooting on Dell Optiplex 360 with 0T656F */ .callback = set_bios_reboot, .ident = "Dell OptiPlex 360", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 360"), - DMI_MATCH(DMI_BOARD_NAME, "0T656F"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "OptiPlex 360"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "0T656F"), }, }, { /* Handle problems with rebooting on Dell OptiPlex 760 with 0G919G*/ .callback = set_bios_reboot, .ident = "Dell OptiPlex 760", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 760"), - DMI_MATCH(DMI_BOARD_NAME, "0G919G"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "OptiPlex 760"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "0G919G"), }, }, { /* Handle problems with rebooting on Dell 2400's */ .callback = set_bios_reboot, .ident = "Dell PowerEdge 2400", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), - DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, + "Dell Computer Corporation"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "PowerEdge 2400"), }, }, { /* Handle problems with rebooting on Dell T5400's */ .callback = set_bios_reboot, .ident = "Dell Precision T5400", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T5400"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, + "Precision WorkStation T5400"), }, }, { /* Handle problems with rebooting on Dell T7400's */ .callback = set_bios_reboot, .ident = "Dell Precision T7400", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T7400"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, + "Precision WorkStation T7400"), }, }, { /* Handle problems with rebooting on HP laptops */ .callback = set_bios_reboot, .ident = "HP Compaq Laptop", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), - DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Hewlett-Packard"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "HP Compaq"), }, }, { /* Handle problems with rebooting on Dell XPS710 */ .callback = set_bios_reboot, .ident = "Dell XPS710", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Dell XPS710"), }, }, { /* Handle problems with rebooting on Dell DXP061 */ .callback = set_bios_reboot, .ident = "Dell DXP061", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Dell DXP061"), }, }, { /* Handle problems with rebooting on Sony VGN-Z540N */ .callback = set_bios_reboot, .ident = "Sony VGN-Z540N", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), - DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Sony Corporation"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "VGN-Z540N"), }, }, { /* Handle problems with rebooting on CompuLab SBC-FITPC2 */ .callback = set_bios_reboot, .ident = "CompuLab SBC-FITPC2", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "CompuLab"), - DMI_MATCH(DMI_PRODUCT_NAME, "SBC-FITPC2"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "CompuLab"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "SBC-FITPC2"), }, }, { /* Handle problems with rebooting on ASUS P4S800 */ .callback = set_bios_reboot, .ident = "ASUS P4S800", .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), - DMI_MATCH(DMI_BOARD_NAME, "P4S800"), + SYSFW_MATCH(SYSFW_BOARD_VENDOR, + "ASUSTeK Computer INC."), + SYSFW_MATCH(SYSFW_BOARD_NAME, "P4S800"), }, }, { /* Handle problems with rebooting on VersaLogic Menlow boards */ .callback = set_bios_reboot, .ident = "VersaLogic Menlow based board", .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "VersaLogic Corporation"), - DMI_MATCH(DMI_BOARD_NAME, "VersaLogic Menlow board"), + SYSFW_MATCH(SYSFW_BOARD_VENDOR, + "VersaLogic Corporation"), + SYSFW_MATCH(SYSFW_BOARD_NAME, + "VersaLogic Menlow board"), }, }, { /* Handle reboot issue on Acer Aspire one */ .callback = set_bios_reboot, .ident = "Acer Aspire One A110", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Acer"), - DMI_MATCH(DMI_PRODUCT_NAME, "AOA110"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Acer"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "AOA110"), }, }, - { } + {} }; static int __init reboot_init(void) { - dmi_check_system(reboot_dmi_table); + sysfw_callback(reboot_id_table); return 0; } core_initcall(reboot_init); @@ -376,7 +384,7 @@ EXPORT_SYMBOL(machine_real_restart); /* * Some Apple MacBook and MacBookPro's needs reboot=p to be able to reboot */ -static int __init set_pci_reboot(const struct dmi_system_id *d) +static int __init set_pci_reboot(const struct sysfw_id *d) { if (reboot_type != BOOT_CF9) { reboot_type = BOOT_CF9; @@ -386,45 +394,45 @@ static int __init set_pci_reboot(const struct dmi_system_id *d) return 0; } -static struct dmi_system_id __initdata pci_reboot_dmi_table[] = { +static struct sysfw_id __initdata pci_reboot_id_table[] = { { /* Handle problems with rebooting on Apple MacBook5 */ .callback = set_pci_reboot, .ident = "Apple MacBook5", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Apple Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "MacBook5"), }, }, { /* Handle problems with rebooting on Apple MacBookPro5 */ .callback = set_pci_reboot, .ident = "Apple MacBookPro5", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Apple Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "MacBookPro5"), }, }, { /* Handle problems with rebooting on Apple Macmini3,1 */ .callback = set_pci_reboot, .ident = "Apple Macmini3,1", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Macmini3,1"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Apple Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "Macmini3,1"), }, }, { /* Handle problems with rebooting on the iMac9,1. */ .callback = set_pci_reboot, .ident = "Apple iMac9,1", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Apple Inc."), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "iMac9,1"), }, }, - { } + {} }; static int __init pci_reboot_init(void) { - dmi_check_system(pci_reboot_dmi_table); + sysfw_callback(pci_reboot_id_table); return 0; } core_initcall(pci_reboot_init); diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index afaf384..8b74838 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -44,7 +44,7 @@ #include <linux/iscsi_ibft.h> #include <linux/nodemask.h> #include <linux/kexec.h> -#include <linux/dmi.h> +#include <linux/smbios.h> #include <linux/pfn.h> #include <linux/pci.h> #include <asm/pci-direct.h> @@ -81,7 +81,7 @@ #include <asm/timer.h> #include <asm/i8259.h> #include <asm/sections.h> -#include <asm/dmi.h> +#include <asm/smbios.h> #include <asm/io_apic.h> #include <asm/ist.h> #include <asm/setup_arch.h> @@ -123,8 +123,8 @@ unsigned long max_low_pfn_mapped; unsigned long max_pfn_mapped; -#ifdef CONFIG_DMI -RESERVE_BRK(dmi_alloc, 65536); +#ifdef CONFIG_SMBIOS +RESERVE_BRK(smbios_alloc, SMBIOS_SIZE); #endif @@ -834,11 +834,11 @@ void __init setup_arch(char **cmdline_p) if (efi_enabled) efi_init(); - dmi_scan_machine(); + smbios_init(); /* - * VMware detection requires dmi to be available, so this - * needs to be done after dmi_scan_machine, for the BP. + * VMware detection requires smbios to be available, so this + * needs to be done after smbios_init(), for the BP. */ init_hypervisor_platform(); diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 6cc6922..36c4160 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -5,7 +5,7 @@ #include <linux/timer.h> #include <linux/acpi_pmtmr.h> #include <linux/cpufreq.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/delay.h> #include <linux/clocksource.h> #include <linux/percpu.h> @@ -800,22 +800,22 @@ void mark_tsc_unstable(char *reason) EXPORT_SYMBOL_GPL(mark_tsc_unstable); -static int __init dmi_mark_tsc_unstable(const struct dmi_system_id *d) +static int __init quirk_mark_tsc_unstable(const struct sysfw_id *d) { printk(KERN_NOTICE "%s detected: marking TSC unstable.\n", - d->ident); + d->ident); tsc_unstable = 1; return 0; } /* List of systems that have known TSC problems */ -static struct dmi_system_id __initdata bad_tsc_dmi_table[] = { +static struct sysfw_id __initdata bad_tsc_table[] = { { - .callback = dmi_mark_tsc_unstable, + .callback = quirk_mark_tsc_unstable, .ident = "IBM Thinkpad 380XD", .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), - DMI_MATCH(DMI_BOARD_NAME, "2635FA0"), + SYSFW_MATCH(SYSFW_BOARD_VENDOR, "IBM"), + SYSFW_MATCH(SYSFW_BOARD_NAME, "2635FA0"), }, }, {} @@ -1011,7 +1011,7 @@ void __init tsc_init(void) use_tsc_delay(); /* Check and install the TSC clocksource */ - dmi_check_system(bad_tsc_dmi_table); + sysfw_callback(bad_tsc_table); if (unsynchronized_tsc()) mark_tsc_unstable("TSCs unsynchronized"); diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c index 68c3c13..51517a1 100644 --- a/arch/x86/pci/acpi.c +++ b/arch/x86/pci/acpi.c @@ -2,7 +2,7 @@ #include <linux/acpi.h> #include <linux/init.h> #include <linux/irq.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/slab.h> #include <asm/numa.h> #include <asm/pci_x86.h> @@ -18,20 +18,20 @@ struct pci_root_info { static bool pci_use_crs = true; -static int __init set_use_crs(const struct dmi_system_id *id) +static int __init set_use_crs(const struct sysfw_id *id) { pci_use_crs = true; return 0; } -static const struct dmi_system_id pci_use_crs_table[] __initconst = { +static const struct sysfw_id pci_use_crs_table[] __initconst = { /* http://bugzilla.kernel.org/show_bug.cgi?id=14183 */ { .callback = set_use_crs, .ident = "IBM System x3800", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "IBM"), - DMI_MATCH(DMI_PRODUCT_NAME, "x3800"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "IBM"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "x3800"), }, }, /* https://bugzilla.kernel.org/show_bug.cgi?id=16007 */ @@ -40,7 +40,7 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = { .callback = set_use_crs, .ident = "ASRock ALiveSATA2-GLAN", .matches = { - DMI_MATCH(DMI_PRODUCT_NAME, "ALiveSATA2-GLAN"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ALiveSATA2-GLAN"), }, }, {} @@ -48,12 +48,10 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = { void __init pci_acpi_crs_quirks(void) { - int year; - - if (dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL) && year < 2008) + if (!(sysfw_get_date() >= 20080000)) pci_use_crs = false; - dmi_check_system(pci_use_crs_table); + sysfw_callback(pci_use_crs_table); /* * If the user specifies "pci=use_crs" or "pci=nocrs" explicitly, that diff --git a/arch/x86/pci/broadcom_bus.c b/arch/x86/pci/broadcom_bus.c index ab8269b..c332b7b 100644 --- a/arch/x86/pci/broadcom_bus.c +++ b/arch/x86/pci/broadcom_bus.c @@ -11,7 +11,6 @@ #include <linux/acpi.h> #include <linux/delay.h> -#include <linux/dmi.h> #include <linux/pci.h> #include <linux/init.h> #include <asm/pci_x86.h> diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index 5fe7502..ee193bd 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c @@ -8,7 +8,8 @@ #include <linux/pci.h> #include <linux/ioport.h> #include <linux/init.h> -#include <linux/dmi.h> +#include <linux/smbios.h> +#include <linux/sysfw.h> #include <linux/slab.h> #include <asm/acpi.h> @@ -79,14 +80,15 @@ struct pci_ops pci_root_ops = { */ DEFINE_RAW_SPINLOCK(pci_config_lock); -static int __devinit can_skip_ioresource_align(const struct dmi_system_id *d) +static int __devinit can_skip_ioresource_align(const struct sysfw_id *d) { pci_probe |= PCI_CAN_SKIP_ISA_ALIGN; printk(KERN_INFO "PCI: %s detected, can skip ISA alignment\n", d->ident); return 0; } -static const struct dmi_system_id can_skip_pciprobe_dmi_table[] __devinitconst = { +static const struct sysfw_id +can_skip_pciprobe_smbios_table[] __devinitconst = { /* * Systems where PCI IO resource ISA alignment can be skipped * when the ISA enable bit in the bridge control is not set @@ -95,32 +97,32 @@ static const struct dmi_system_id can_skip_pciprobe_dmi_table[] __devinitconst = .callback = can_skip_ioresource_align, .ident = "IBM System x3800", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "IBM"), - DMI_MATCH(DMI_PRODUCT_NAME, "x3800"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "IBM"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "x3800"), }, }, { .callback = can_skip_ioresource_align, .ident = "IBM System x3850", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "IBM"), - DMI_MATCH(DMI_PRODUCT_NAME, "x3850"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "IBM"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "x3850"), }, }, { .callback = can_skip_ioresource_align, .ident = "IBM System x3950", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "IBM"), - DMI_MATCH(DMI_PRODUCT_NAME, "x3950"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "IBM"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "x3950"), }, }, {} }; -void __init dmi_check_skip_isa_align(void) +void __init smbios_check_skip_isa_align(void) { - dmi_check_system(can_skip_pciprobe_dmi_table); + sysfw_callback(can_skip_pciprobe_smbios_table); } static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) @@ -173,32 +175,37 @@ void __devinit pcibios_fixup_bus(struct pci_bus *b) } /* - * Only use DMI information to set this if nothing was passed + * Only use SMBIOS information to set this if nothing was passed * on the kernel command line (which was parsed earlier). */ -static int __devinit set_bf_sort(const struct dmi_system_id *d) +static int __devinit set_bf_sort(const struct sysfw_id *d) { if (pci_bf_sort == pci_bf_sort_default) { - pci_bf_sort = pci_dmi_bf; + pci_bf_sort = pci_smbios_bf; printk(KERN_INFO "PCI: %s detected, enabling pci=bfsort.\n", d->ident); } return 0; } -static void __devinit read_dmi_type_b1(const struct dmi_header *dm, - void *private_data) +static int __devinit dell_sort_method_decode(const union smbios_struct *ss, + void *data) { - u8 *d = (u8 *)dm + 4; + u8 *p; + const struct sysfw_id *d = (const struct sysfw_id *)data; - if (dm->type != 0xB1) - return; - switch (((*(u32 *)d) >> 9) & 0x03) { + if ((ss->header.type) != 0xb1) + return SMBIOS_WALK_CONTINUE; + + p = (u8 *)ss + 4; + switch (((*(u32 *)p) >> 9) & 0x03) { case 0x00: - printk(KERN_INFO "dmi type 0xB1 record - unknown flag\n"); + printk(KERN_INFO "smbios type 0xB1 record - unknown flag\n"); break; case 0x01: /* set pci=bfsort */ smbios_type_b1_flag = 1; + set_bf_sort(d); + return SMBIOS_WALK_STOP; break; case 0x02: /* do not set pci=bfsort */ smbios_type_b1_flag = 2; @@ -206,24 +213,22 @@ static void __devinit read_dmi_type_b1(const struct dmi_header *dm, default: break; } -} -static int __devinit find_sort_method(const struct dmi_system_id *d) -{ - dmi_walk(read_dmi_type_b1, NULL); + return SMBIOS_WALK_STOP; - if (smbios_type_b1_flag == 1) { - set_bf_sort(d); - return 0; - } - return -1; +} +static int __devinit find_sort_method(const struct sysfw_id *d) +{ + if (smbios_walk(dell_sort_method_decode, (void *)d)) + return 1; + return 0; } /* * Enable renumbering of PCI bus# ranges to reach all PCI busses (Cardbus) */ #ifdef __i386__ -static int __devinit assign_all_busses(const struct dmi_system_id *d) +static int __devinit assign_all_busses(const struct sysfw_id *d) { pci_probe |= PCI_ASSIGN_ALL_BUSSES; printk(KERN_INFO "%s detected: enabling PCI bus# renumbering" @@ -232,7 +237,7 @@ static int __devinit assign_all_busses(const struct dmi_system_id *d) } #endif -static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = { +static const struct sysfw_id __devinitconst pciprobe_smbios_table[] = { #ifdef __i386__ /* * Laptops which need pci=assign-busses to see Cardbus cards @@ -241,8 +246,8 @@ static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = { .callback = assign_all_busses, .ident = "Samsung X20 Laptop", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Samsung Electronics"), - DMI_MATCH(DMI_PRODUCT_NAME, "SX20S"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Samsung Electronics"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "SX20S"), }, }, #endif /* __i386__ */ @@ -250,151 +255,151 @@ static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = { .callback = find_sort_method, .ident = "Dell System", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell Inc"), }, }, { .callback = set_bf_sort, .ident = "Dell PowerEdge 1950", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell"), - DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1950"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "PowerEdge 1950"), }, }, { .callback = set_bf_sort, .ident = "Dell PowerEdge 1955", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell"), - DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1955"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "PowerEdge 1955"), }, }, { .callback = set_bf_sort, .ident = "Dell PowerEdge 2900", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell"), - DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2900"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "PowerEdge 2900"), }, }, { .callback = set_bf_sort, .ident = "Dell PowerEdge 2950", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell"), - DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2950"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "PowerEdge 2950"), }, }, { .callback = set_bf_sort, .ident = "Dell PowerEdge R900", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell"), - DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge R900"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Dell"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "PowerEdge R900"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL20p G3", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL20p G3"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL20p G3"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL20p G4", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL20p G4"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL20p G4"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL30p G1", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL30p G1"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL30p G1"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL25p G1", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL25p G1"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL25p G1"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL35p G1", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL35p G1"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL35p G1"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL45p G1", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL45p G1"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL45p G1"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL45p G2", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL45p G2"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL45p G2"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL460c G1", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL460c G1"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL460c G1"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL465c G1", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL465c G1"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL465c G1"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL480c G1", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL480c G1"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL480c G1"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant BL685c G1", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL685c G1"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant BL685c G1"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant DL360", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL360"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant DL360"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant DL380", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL380"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant DL380"), }, }, #ifdef __i386__ @@ -402,8 +407,8 @@ static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = { .callback = assign_all_busses, .ident = "Compaq EVO N800c", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), - DMI_MATCH(DMI_PRODUCT_NAME, "EVO N800c"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Compaq"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "EVO N800c"), }, }, #endif @@ -411,24 +416,24 @@ static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = { .callback = set_bf_sort, .ident = "HP ProLiant DL385 G2", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL385 G2"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant DL385 G2"), }, }, { .callback = set_bf_sort, .ident = "HP ProLiant DL585 G2", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL585 G2"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "HP"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "ProLiant DL585 G2"), }, }, {} }; -void __init dmi_check_pciprobe(void) +void __init smbios_check_pciprobe(void) { - dmi_check_system(pciprobe_dmi_table); + sysfw_callback(pciprobe_smbios_table); } struct pci_bus * __devinit pcibios_scan_root(int busnum) diff --git a/arch/x86/pci/direct.c b/arch/x86/pci/direct.c index e6fd847..217d788 100644 --- a/arch/x86/pci/direct.c +++ b/arch/x86/pci/direct.c @@ -4,7 +4,7 @@ #include <linux/pci.h> #include <linux/init.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <asm/pci_x86.h> /* @@ -192,14 +192,13 @@ struct pci_raw_ops pci_direct_conf2 = { static int __init pci_sanity_check(struct pci_raw_ops *o) { u32 x = 0; - int year, devfn; + int devfn; if (pci_probe & PCI_NO_CHECKS) return 1; /* Assume Type 1 works for newer systems. This handles machines that don't have anything on PCI Bus 0. */ - dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL); - if (year >= 2001) + if (sysfw_get_date() >= 20010000) return 1; for (devfn = 0; devfn < 0x100; devfn++) { diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c index 6dd8955..381c136 100644 --- a/arch/x86/pci/fixup.c +++ b/arch/x86/pci/fixup.c @@ -3,7 +3,7 @@ */ #include <linux/delay.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/pci.h> #include <linux/init.h> #include <asm/pci_x86.h> @@ -356,12 +356,12 @@ static void __devinit pci_fixup_video(struct pci_dev *pdev) DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_video); -static const struct dmi_system_id __devinitconst msi_k8t_dmi_table[] = { +static const struct sysfw_id __devinitconst msi_k8t_quirk_table[] = { { .ident = "MSI-K8T-Neo2Fir", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "MSI"), - DMI_MATCH(DMI_PRODUCT_NAME, "MS-6702E"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "MSI"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "MS-6702E"), }, }, {} @@ -375,12 +375,12 @@ static const struct dmi_system_id __devinitconst msi_k8t_dmi_table[] = { * the corresponding register-value to enable the soundcard. * * The soundcard is only enabled, if the mainborad is identified - * via DMI-tables and the soundcard is detected to be off. + * via SMBIOS tables and the soundcard is detected to be off. */ static void __devinit pci_fixup_msi_k8t_onboard_sound(struct pci_dev *dev) { unsigned char val; - if (!dmi_check_system(msi_k8t_dmi_table)) + if (!sysfw_callback(msi_k8t_quirk_table)) return; /* only applies to MSI K8T Neo2-FIR */ pci_read_config_byte(dev, 0x50, &val); @@ -413,34 +413,35 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, */ static u16 toshiba_line_size; -static const struct dmi_system_id __devinitconst toshiba_ohci1394_dmi_table[] = { +static const struct sysfw_id __devinitconst +toshiba_ohci1394_quirk_table[] = { { .ident = "Toshiba PS5 based laptop", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), - DMI_MATCH(DMI_PRODUCT_VERSION, "PS5"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"), + SYSFW_MATCH(SYSFW_PRODUCT_VERSION, "PS5"), }, }, { .ident = "Toshiba PSM4 based laptop", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), - DMI_MATCH(DMI_PRODUCT_VERSION, "PSM4"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"), + SYSFW_MATCH(SYSFW_PRODUCT_VERSION, "PSM4"), }, }, { .ident = "Toshiba A40 based laptop", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), - DMI_MATCH(DMI_PRODUCT_VERSION, "PSA40U"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "TOSHIBA"), + SYSFW_MATCH(SYSFW_PRODUCT_VERSION, "PSA40U"), }, }, - { } + {} }; static void __devinit pci_pre_fixup_toshiba_ohci1394(struct pci_dev *dev) { - if (!dmi_check_system(toshiba_ohci1394_dmi_table)) + if (!sysfw_callback(toshiba_ohci1394_quirk_table)) return; /* only applies to certain Toshibas (so far) */ dev->current_state = PCI_D3cold; @@ -451,7 +452,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TI, 0x8032, static void __devinit pci_post_fixup_toshiba_ohci1394(struct pci_dev *dev) { - if (!dmi_check_system(toshiba_ohci1394_dmi_table)) + if (!sysfw_callback(toshiba_ohci1394_quirk_table)) return; /* only applies to certain Toshibas (so far) */ /* Restore config space on Toshiba laptops */ diff --git a/arch/x86/pci/init.c b/arch/x86/pci/init.c index adb62aa..9afdbc3 100644 --- a/arch/x86/pci/init.c +++ b/arch/x86/pci/init.c @@ -35,9 +35,9 @@ static __init int pci_arch_init(void) printk(KERN_ERR "PCI: Fatal: No config space access function found\n"); - dmi_check_pciprobe(); + smbios_check_pciprobe(); - dmi_check_skip_isa_align(); + smbios_check_skip_isa_align(); return 0; } diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c index 372e9b8..3e2ac8f 100644 --- a/arch/x86/pci/irq.c +++ b/arch/x86/pci/irq.c @@ -9,7 +9,7 @@ #include <linux/pci.h> #include <linux/init.h> #include <linux/interrupt.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/io.h> #include <linux/smp.h> #include <asm/io_apic.h> @@ -1070,7 +1070,7 @@ void __init pcibios_fixup_irqs(void) * 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(const struct dmi_system_id *d) +static int __init fix_broken_hp_bios_irq9(const struct sysfw_id *d) { if (!broken_hp_bios_irq9) { broken_hp_bios_irq9 = 1; @@ -1084,7 +1084,7 @@ static int __init fix_broken_hp_bios_irq9(const struct dmi_system_id *d) * Work around broken Acer TravelMate 360 Notebooks which assign * Cardbus to IRQ 11 even though it is actually wired to IRQ 10 */ -static int __init fix_acer_tm360_irqrouting(const struct dmi_system_id *d) +static int __init fix_acer_tm360_irqrouting(const struct sysfw_id *d) { if (!acer_tm360_irqrouting) { acer_tm360_irqrouting = 1; @@ -1094,27 +1094,27 @@ static int __init fix_acer_tm360_irqrouting(const struct dmi_system_id *d) return 0; } -static struct dmi_system_id __initdata pciirq_dmi_table[] = { +static struct sysfw_id __initdata pciirq_quirk_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"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Hewlett-Packard"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "GE.M1.03"), + SYSFW_MATCH(SYSFW_PRODUCT_VERSION, + "HP Pavilion Notebook Model GE"), + SYSFW_MATCH(SYSFW_BOARD_VERSION, "OmniBook N32N-736"), }, }, { .callback = fix_acer_tm360_irqrouting, .ident = "Acer TravelMate 36x Laptop", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Acer"), - DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Acer"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "TravelMate 360"), }, }, - { } + {} }; void __init pcibios_irq_init(void) @@ -1124,7 +1124,7 @@ void __init pcibios_irq_init(void) if (raw_pci_ops == NULL) return; - dmi_check_system(pciirq_dmi_table); + sysfw_callback(pciirq_quirk_table); pirq_table = pirq_find_routing_table(); diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c index 750c346..730b36b 100644 --- a/arch/x86/pci/mmconfig-shared.c +++ b/arch/x86/pci/mmconfig-shared.c @@ -15,7 +15,7 @@ #include <linux/acpi.h> #include <linux/sfi_acpi.h> #include <linux/bitmap.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/slab.h> #include <asm/e820.h> #include <asm/pci_x86.h> @@ -514,19 +514,15 @@ static int __initdata known_bridge; static int __init acpi_mcfg_check_entry(struct acpi_table_mcfg *mcfg, struct acpi_mcfg_allocation *cfg) { - int year; - if (cfg->address < 0xFFFFFFFF) return 0; if (!strcmp(mcfg->header.oem_id, "SGI")) return 0; - if (mcfg->header.revision >= 1) { - if (dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL) && - year >= 2010) + if (mcfg->header.revision >= 1) + if (sysfw_get_date() >= 20100000) return 0; - } printk(KERN_ERR PREFIX "MCFG region for %04x [bus %02x-%02x] at %#llx " "is above 4GB, ignored\n", cfg->pci_segment, diff --git a/arch/x86/pci/mrst.c b/arch/x86/pci/mrst.c index cb29191..741dbb0 100644 --- a/arch/x86/pci/mrst.c +++ b/arch/x86/pci/mrst.c @@ -22,7 +22,6 @@ #include <linux/pci.h> #include <linux/ioport.h> #include <linux/init.h> -#include <linux/dmi.h> #include <asm/acpi.h> #include <asm/segment.h> diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c index 596d5dd..6880c41 100644 --- a/drivers/cpufreq/acpi-cpufreq.c +++ b/drivers/cpufreq/acpi-cpufreq.c @@ -32,7 +32,7 @@ #include <linux/sched.h> #include <linux/cpufreq.h> #include <linux/compiler.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/slab.h> #include <linux/acpi.h> @@ -462,23 +462,23 @@ static int __init acpi_cpufreq_early_init(void) */ static int bios_with_sw_any_bug; -static int sw_any_bug_found(const struct dmi_system_id *d) +static int sw_any_bug_found(const struct sysfw_id *d) { bios_with_sw_any_bug = 1; return 0; } -static const struct dmi_system_id sw_any_bug_dmi_table[] = { +static const struct sysfw_id sw_any_bug_table[] = { { .callback = sw_any_bug_found, .ident = "Supermicro Server X6DLP", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Supermicro"), - DMI_MATCH(DMI_BIOS_VERSION, "080010"), - DMI_MATCH(DMI_PRODUCT_NAME, "X6DLP"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Supermicro"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "080010"), + SYSFW_MATCH(SYSFW_PRODUCT_NAME, "X6DLP"), }, }, - { } + {} }; static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c) @@ -554,7 +554,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) cpumask_copy(policy->related_cpus, perf->shared_cpu_map); #ifdef CONFIG_SMP - dmi_check_system(sw_any_bug_dmi_table); + sysfw_callback(sw_any_bug_table); if (bios_with_sw_any_bug && cpumask_weight(policy->cpus) == 1) { policy->shared_type = CPUFREQ_SHARED_TYPE_ALL; cpumask_copy(policy->cpus, cpu_core_mask(cpu)); diff --git a/drivers/cpufreq/powernow-k7.c b/drivers/cpufreq/powernow-k7.c index d71d9f3..ce33c9f 100644 --- a/drivers/cpufreq/powernow-k7.c +++ b/drivers/cpufreq/powernow-k7.c @@ -21,7 +21,7 @@ #include <linux/cpufreq.h> #include <linux/slab.h> #include <linux/string.h> -#include <linux/dmi.h> +#include <linux/sysfw.h> #include <linux/timex.h> #include <linux/io.h> @@ -598,7 +598,7 @@ static unsigned int powernow_get(unsigned int cpu) } -static int __cpuinit acer_cpufreq_pst(const struct dmi_system_id *d) +static int __cpuinit acer_cpufreq_pst(const struct sysfw_id *d) { printk(KERN_WARNING PFX "%s laptop with broken PST tables in BIOS detected.\n", @@ -616,16 +616,16 @@ static int __cpuinit acer_cpufreq_pst(const struct dmi_system_id *d) * A BIOS update is all that can save them. * Mention this, and disable cpufreq. */ -static struct dmi_system_id __cpuinitdata powernow_dmi_table[] = { +static struct sysfw_id __cpuinitdata powernow_id_table[] = { { .callback = acer_cpufreq_pst, .ident = "Acer Aspire", .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Insyde Software"), - DMI_MATCH(DMI_BIOS_VERSION, "3A71"), + SYSFW_MATCH(SYSFW_SYS_VENDOR, "Insyde Software"), + SYSFW_MATCH(SYSFW_BIOS_VERSION, "3A71"), }, }, - { } + {} }; static int __cpuinit powernow_cpu_init(struct cpufreq_policy *policy) @@ -647,7 +647,7 @@ static int __cpuinit powernow_cpu_init(struct cpufreq_policy *policy) } pr_debug("FSB: %3dMHz\n", fsb/1000); - if (dmi_check_system(powernow_dmi_table) || acpi_force) { + if (sysfw_callback(powernow_id_table) || acpi_force) { printk(KERN_INFO PFX "PSB/PST known to be broken. " "Trying ACPI instead\n"); result = powernow_acpi_init(); -- 1.6.5.2 -- To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html