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

📄 dmi_scan.c

📁 内核linux2.4.20,可跟rtlinux3.2打补丁 组成实时linux系统,编译内核
💻 C
📖 第 1 页 / 共 2 页
字号:
	dmi_broken |= BROKEN_ACPI_Sx;	return 0;}/* * Toshiba keyboard likes to repeat keys when they are not repeated. */static __init int broken_toshiba_keyboard(struct dmi_blacklist *d){	printk(KERN_WARNING "Toshiba with broken keyboard detected. If your keyboard sometimes generates 3 keypresses instead of one, contact pavel@ucw.cz\n");	return 0;}/* * Toshiba fails to preserve interrupts over S1 */static __init int init_ints_after_s1(struct dmi_blacklist *d){	printk(KERN_WARNING "Toshiba with broken S1 detected.\n");	dmi_broken |= BROKEN_INIT_AFTER_S1;	return 0;}/* * Some Bioses enable the PS/2 mouse (touchpad) at resume, even if it * was disabled before the suspend. Linux gets terribly confused by that. */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;}/* *	Simple "print if true" callback */ static __init int print_if_true(struct dmi_blacklist *d){	printk("%s\n", d->ident);	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			} },#endif				{ 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	                } },	{ 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			} },	{ 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 300/800's */			MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),			MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"),			NO_MATCH, NO_MATCH			} },	{ 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, "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, "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")			} },	{ 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-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-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			} },	/* 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.0094.P10"),			NO_MATCH, NO_MATCH                        } },	{ broken_pirq, "l44GX Bios", {        		/* Bad $PIR */			MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),			MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0120.P12"),			NO_MATCH, NO_MATCH                        } },	{ broken_pirq, "l44GX Bios", {		/* Bad $PIR */			MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),			MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0125.P13"),			NO_MATCH, NO_MATCH			} },	{ broken_pirq, "l44GX Bios", {		/* Bad $PIR */			MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),			MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0066.P07.9906041405"),			NO_MATCH, NO_MATCH			} },                        	/* 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			} },	 				/*	 *	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			} },	{ 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;	char *p;		switch(dm->type)	{		case  0:			p=dmi_string(dm,data[4]);			if(*p)			{				dmi_printk(("BIOS Vendor: %s\n", p));				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:			p=dmi_string(dm,data[4]);			if(*p)			{				dmi_printk(("System Vendor: %s.\n",p));				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:			p=dmi_string(dm,data[4]);			if(*p)			{				dmi_printk(("Board Vendor: %s.\n",p));				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;		case 3:			p=dmi_string(dm,data[8]);			if(*p && *p!=' ')				dmi_printk(("Asset Tag: %s.\n", p));			break;	}}static int __init dmi_scan_machine(void){	int err = dmi_iterate(dmi_decode);	if(err == 0)		dmi_check_blacklist();	return err;}module_init(dmi_scan_machine);

⌨️ 快捷键说明

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