⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dmi_scan.c

📁 这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自测试~但就算用来做参考资料也是非常好的
💻 C
📖 第 1 页 / 共 2 页
字号:
 */typedef void (pm_kbd_func) (void);static __init int broken_ps2_resume(struct dmi_blacklist *d){#ifdef CONFIG_VT	if (pm_kbd_request_override == NULL)	{		pm_kbd_request_override = pckbd_pm_resume;		printk(KERN_INFO "%s machine detected. Mousepad Resume Bug workaround enabled.\n", d->ident);	}#endif	return 0;}/* * 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){#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;}/* *	Simple "print if true" callback */ static __init int print_if_true(struct dmi_blacklist *d){	printk("%s\n", d->ident);	return 0;}/* * Dell Inspiron 8000 APM BIOS fails to correctly save and restore the * config space of some PCI devices. */static __init int broken_apm_pci_restore(struct dmi_blacklist *d){#ifdef CONFIG_PCI	extern int pci_bridge_force_restore;	printk(KERN_WARNING "%s detected. Forcing restore of PCI configuration space on APM resume.\n", d->ident);	pci_bridge_force_restore = 1;#endif	return 0;}/* *	Process the DMI blacklists */ /* *	This will be expanded over time to force things like the APM  *	interrupt mask settings according to the laptop */ static __initdata struct dmi_blacklist dmi_blacklist[]={#if 0	{ disable_ide_dma, "KT7", {	/* Overbroad right now - kill DMA on problem KT7 boards */			MATCH(DMI_PRODUCT_NAME, "KT7-RAID"),			NO_MATCH, NO_MATCH, NO_MATCH			} },	{ disable_ide_dma, "Dell Inspiron 8100", {	/* Kill DMA on Dell Inspiron 8100 laptops */			MATCH(DMI_PRODUCT_NAME, "Inspiron 8100"),			MATCH(DMI_SYS_VENDOR,"Dell Computer Corporation"), NO_MATCH, NO_MATCH			} },#endif				/* Dell Laptop hall of shame */	{ 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	                } },	{ 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")			} },	{ 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")			} },	{ 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			} },	{ 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			} },	{ 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			} },	/* other items */		{ 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			} },	{ 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			} },	{ 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 1300'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"),			MATCH(DMI_PRODUCT_NAME, "Compaq PC"),			MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"),			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"),			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, "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"),			MATCH(DMI_PRODUCT_NAME, "PC-PJ/AX"),			MATCH(DMI_BIOS_VENDOR,"SystemSoft"),			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")			} },	{ 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	} },	{ 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			} },				{ 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			} },	{ 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			} },	{ 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			} },	{ 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			} },	{ 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			} },	{ 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			} },		{ 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			} },		{ 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, "WXP01Z3"),			MATCH(DMI_BIOS_DATE, "10/26/01"), NO_MATCH			} },		{ 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			} },		{ 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			} },	{ 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			} },	/* Machines which have problems handling enabled local APICs */	{ local_apic_kills_bios, "Dell Inspiron", {			MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),			MATCH(DMI_PRODUCT_NAME, "Inspiron"),			NO_MATCH, NO_MATCH			} },	{ local_apic_kills_bios, "Dell Latitude", {			MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),			MATCH(DMI_PRODUCT_NAME, "Latitude"),			NO_MATCH, NO_MATCH			} },	{ local_apic_kills_bios, "IBM Thinkpad T20", {			MATCH(DMI_BOARD_VENDOR, "IBM"),			MATCH(DMI_BOARD_NAME, "264741U"),			NO_MATCH, NO_MATCH			} },	{ apm_kills_local_apic, "Microstar 6163", {			MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),			MATCH(DMI_BOARD_NAME, "MS-6163"),			NO_MATCH, NO_MATCH } },	{ apm_kills_local_apic_timer, "Intel AL440LX", {			MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),			MATCH(DMI_BOARD_NAME, "AL440LX"),			NO_MATCH, NO_MATCH } },	/* Problem Intel 440GX bioses */	{ 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.0066.P07"),			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                        } },	{ 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.0133.P14"),			NO_MATCH, NO_MATCH			} },	{ broken_pirq, "l44GX Bios", {		/* Bad $PIR */			MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),			MATCH(DMI_BIOS_VERSION,"L440GX0"),			NO_MATCH, NO_MATCH			} },                        	/* Intel in disgiuse - 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			} },	{ 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")			} }, 	/*	 *	Generic per vendor APM settings	 */	 	{ set_apm_ints, "IBM", {	/* Allow interrupts during suspend on IBM laptops */			MATCH(DMI_SYS_VENDOR, "IBM"),			NO_MATCH, NO_MATCH, NO_MATCH			} },	{ broken_apm_pci_restore, "Dell Inspiron 8000", {	/* Work around broken Dell BIOS */			MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),			MATCH(DMI_PRODUCT_NAME, "Inspiron 8000"),			NO_MATCH, NO_MATCH			} },	{ broken_apm_pci_restore, "Dell Inspiron 8100", {	/* Work around broken Dell BIOS */			MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),			MATCH(DMI_PRODUCT_NAME, "Inspiron 8100"),			NO_MATCH, NO_MATCH			} },	{ NULL, }};		/* *	Walk the blacklist table running matching functions until someone  *	returns 1 or we hit the end. */ static __init void dmi_check_blacklist(void){	struct dmi_blacklist *d;	int i;			d=&dmi_blacklist[0];	while(d->callback)	{		for(i=0;i<4;i++)		{			int s = d->matches[i].slot;			if(s==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++;	}}	/* *	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){	u8 *data = (u8 *)dm;		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();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -