dmi_scan.c
来自「优龙2410linux2.6.8内核源代码」· C语言 代码 · 共 638 行 · 第 1/2 页
C
638 行
NO_MATCH, NO_MATCH, NO_MATCH } },#endif#ifdef CONFIG_ACPI_BOOT /* * If your system is blacklisted here, but you find that acpi=force * works for you, please contact acpi-devel@sourceforge.net */ /* * Boxes that need ACPI disabled */ { dmi_disable_acpi, "IBM Thinkpad", { MATCH(DMI_BOARD_VENDOR, "IBM"), MATCH(DMI_BOARD_NAME, "2629H1G"), NO_MATCH, NO_MATCH }}, /* * Boxes that need acpi=ht */ { 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 }}, /* * Systems with nForce2 BIOS timer override bug * nVidia claims all nForce have timer on pin0, * and applying this workaround is a NOP on fixed BIOS, * so prospects are good for replacing these entries * with something to key of chipset PCI-ID. */ { ignore_timer_override, "Abit NF7-S v2", { MATCH(DMI_BOARD_VENDOR, "http://www.abit.com.tw/"), MATCH(DMI_BOARD_NAME, "NF7-S/NF7,NF7-V (nVidia-nForce2)"), MATCH(DMI_BIOS_VERSION, "6.00 PG"), MATCH(DMI_BIOS_DATE, "03/24/2004") }}, { ignore_timer_override, "Asus A7N8X v2", { MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), MATCH(DMI_BOARD_NAME, "A7N8X2.0"), MATCH(DMI_BIOS_VERSION, "ASUS A7N8X2.0 Deluxe ACPI BIOS Rev 1007"), MATCH(DMI_BIOS_DATE, "10/06/2003") }}, { ignore_timer_override, "Asus A7N8X-X", { MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), MATCH(DMI_BOARD_NAME, "A7N8X-X"), MATCH(DMI_BIOS_VERSION, "ASUS A7N8X-X ACPI BIOS Rev 1009"), MATCH(DMI_BIOS_DATE, "2/3/2004") }}, { ignore_timer_override, "MSI K7N2-Delta", { MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), MATCH(DMI_BOARD_NAME, "MS-6570"), MATCH(DMI_BIOS_VERSION, "6.00 PG"), MATCH(DMI_BIOS_DATE, "03/29/2004") }}, { ignore_timer_override, "Shuttle SN41G2", { MATCH(DMI_BOARD_VENDOR, "Shuttle Inc"), MATCH(DMI_BOARD_NAME, "FN41"), MATCH(DMI_BIOS_VERSION, "6.00 PG"), MATCH(DMI_BIOS_DATE, "01/14/2004") }}, { ignore_timer_override, "Shuttle AN35N", { MATCH(DMI_BOARD_VENDOR, "Shuttle Inc"), MATCH(DMI_BOARD_NAME, "AN35"), MATCH(DMI_BIOS_VERSION, "6.00 PG"), MATCH(DMI_BIOS_DATE, "12/05/2003") }},#endif // CONFIG_ACPI_BOOT#ifdef CONFIG_ACPI_PCI /* * Boxes that need ACPI PCI IRQ routing disabled */ { disable_acpi_irq, "ASUS A7V", { MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"), MATCH(DMI_BOARD_NAME, "<A7V>"), /* newer BIOS, Revision 1011, does work */ MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"), NO_MATCH }}, /* * Boxes that need ACPI PCI IRQ routing and PCI scan disabled */ { disable_acpi_pci, "ASUS PR-DLS", { /* _BBN 0 bug */ MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), MATCH(DMI_BOARD_NAME, "PR-DLS"), MATCH(DMI_BIOS_VERSION, "ASUS PR-DLS ACPI BIOS Revision 1010"), MATCH(DMI_BIOS_DATE, "03/21/2003") }}, { disable_acpi_pci, "Acer TravelMate 36x Laptop", { MATCH(DMI_SYS_VENDOR, "Acer"), MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), NO_MATCH, NO_MATCH } },#endif { NULL, }}; /* * Walk the blacklist table running matching functions until someone * returns 1 or we hit the end. */ static __init void dmi_check_blacklist(void){#ifdef CONFIG_ACPI_BOOT#define ACPI_BLACKLIST_CUTOFF_YEAR 2001 if (dmi_ident[DMI_BIOS_DATE]) { char *s = strrchr(dmi_ident[DMI_BIOS_DATE], '/'); if (s) { int year, disable = 0; s++; year = simple_strtoul(s,NULL,0); if (year >= 1000) disable = year < ACPI_BLACKLIST_CUTOFF_YEAR; else if (year < 1 || (year > 90 && year <= 99)) disable = 1; if (disable && !acpi_force) { printk(KERN_NOTICE "ACPI disabled because your bios is from %s and too old\n", s); printk(KERN_NOTICE "You can enable it with acpi=force\n"); disable_acpi(); } } }#endif dmi_check_system(dmi_blacklist);} /* * Process a DMI table entry. Right now all we care about are the BIOS * and machine entries. For 2.5 we should pull the smbus controller info * out of here. */static void __init dmi_decode(struct dmi_header *dm){#ifdef DMI_DEBUG u8 *data = (u8 *)dm;#endif switch(dm->type) { case 0: dmi_printk(("BIOS Vendor: %s\n", dmi_string(dm, data[4]))); dmi_save_ident(dm, DMI_BIOS_VENDOR, 4); dmi_printk(("BIOS Version: %s\n", dmi_string(dm, data[5]))); dmi_save_ident(dm, DMI_BIOS_VERSION, 5); dmi_printk(("BIOS Release: %s\n", dmi_string(dm, data[8]))); dmi_save_ident(dm, DMI_BIOS_DATE, 8); break; case 1: dmi_printk(("System Vendor: %s\n", dmi_string(dm, data[4]))); dmi_save_ident(dm, DMI_SYS_VENDOR, 4); dmi_printk(("Product Name: %s\n", dmi_string(dm, data[5]))); dmi_save_ident(dm, DMI_PRODUCT_NAME, 5); dmi_printk(("Version: %s\n", dmi_string(dm, data[6]))); dmi_save_ident(dm, DMI_PRODUCT_VERSION, 6); dmi_printk(("Serial Number: %s\n", dmi_string(dm, data[7]))); break; case 2: dmi_printk(("Board Vendor: %s\n", dmi_string(dm, data[4]))); dmi_save_ident(dm, DMI_BOARD_VENDOR, 4); dmi_printk(("Board Name: %s\n", dmi_string(dm, data[5]))); dmi_save_ident(dm, DMI_BOARD_NAME, 5); dmi_printk(("Board Version: %s\n", dmi_string(dm, data[6]))); dmi_save_ident(dm, DMI_BOARD_VERSION, 6); break; }}void __init dmi_scan_machine(void){ int err = dmi_iterate(dmi_decode); if(err == 0) dmi_check_blacklist(); else printk(KERN_INFO "DMI not present.\n");}/** * 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);/** * dmi_get_system_info - return DMI data value * @field: data index (see enum dmi_filed) * * Returns one DMI data value, can be used to perform * complex DMI data checks. */char * dmi_get_system_info(int field){ return dmi_ident[field];}EXPORT_SYMBOL(dmi_get_system_info);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?