diff --git a/CHANGES b/CHANGES index 3f0c156d..365e8ca4 100644 --- a/CHANGES +++ b/CHANGES @@ -28,7 +28,8 @@ ask CVS about it: enhance adm1023 support Makefile: Take kernel source location from /lib/modules/x.x.x/build Module adm1021: Add support for MC1066 - Module dmi_scan: Rename symbol duplicated in kernel + Module dmi_scan: Rename symbol duplicated in kernel; Apply fixes from + kernel 2.5.43 Module gl518sm: Iterate allowed only for rev 0x00 Module i2c-amd756: Configure base address for nForce support; check for uninitialized base address diff --git a/kernel/busses/dmi_scan.c b/kernel/busses/dmi_scan.c index 9e10e3ab..866984eb 100644 --- a/kernel/busses/dmi_scan.c +++ b/kernel/busses/dmi_scan.c @@ -36,7 +36,7 @@ static char * __init dmi_string(struct dmi_header *dm, u8 s) if(!s) return ""; s--; - while(s>0) + while(s>0 && *bp) { bp+=strlen(bp); bp++; @@ -55,7 +55,7 @@ static int __init dmi_table(u32 base, int len, int num, void (*decode)(struct dm u8 *buf; struct dmi_header *dm; u8 *data; - int i=1; + int i=0; buf = ioremap(base, len); if(buf==NULL) @@ -64,28 +64,23 @@ static int __init dmi_table(u32 base, int len, int num, void (*decode)(struct dm data = buf; /* - * Stop when we see al the items the table claimed to have + * Stop when we see all the items the table claimed to have * OR we run off the end of the table (also happens) */ - while(ilength) >= len) - break; - decode(dm); data+=dm->length; - /* - * Don't go off the end of the data if there is - * stuff looking like string fill past the end - */ - while((data-buf) < len && (*data || data[1])) + while(data-buf>4, buf[14]&0x0F)); + /* + * DMI version 0.0 means that the real version is taken from + * the SMBIOS version, which we don't know at this point. + */ + if(buf[14]!=0) + dmi_printk((KERN_INFO "DMI %d.%d present.\n", + buf[14]>>4, buf[14]&0x0F)); + else + dmi_printk((KERN_INFO "DMI present.\n")); dmi_printk((KERN_INFO "%d structures occupying %d bytes.\n", - buf[13]<<8|buf[12], - buf[7]<<8|buf[6])); + num, len)); dmi_printk((KERN_INFO "DMI table at 0x%08X.\n", - buf[11]<<24|buf[10]<<16|buf[9]<<8|buf[8])); + base)); if(dmi_table(base,len, num, decode)==0) return 0; } + fp+=16; } return -1; } @@ -163,59 +173,43 @@ static void __init dmi_save_ident(struct dmi_header *dm, int slot, int string) 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); - } + 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: - 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]))); - } + 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: - 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)); + 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; } }