From: Adam Belay Below is a quick wrap up of the current PnP changes in my tree. I would appreciate if they could be tested in -mm. Changes include the following: 1.) added an asus board to the pnpbios blacklist 2.) fixed resource allocation return codes 3.) added support for ANSI string tags in the PnPBIOS driver 4.) changed call type to dynamic in PnPBIOS proc in order to avoid faults I'm going to be out of town, but I'll be back to merge these next week. --- 25-akpm/arch/i386/kernel/dmi_scan.c | 6 +++++- 25-akpm/drivers/pnp/interface.c | 2 +- 25-akpm/drivers/pnp/manager.c | 24 ++++++++++-------------- 25-akpm/drivers/pnp/pnpbios/proc.c | 2 +- 25-akpm/drivers/pnp/pnpbios/rsparser.c | 5 +++++ 5 files changed, 22 insertions(+), 17 deletions(-) diff -puN arch/i386/kernel/dmi_scan.c~pnp-updates arch/i386/kernel/dmi_scan.c --- 25/arch/i386/kernel/dmi_scan.c~pnp-updates 2004-04-02 22:22:42.559506960 -0800 +++ 25-akpm/arch/i386/kernel/dmi_scan.c 2004-04-02 22:22:42.570505288 -0800 @@ -778,12 +778,16 @@ static __initdata struct dmi_blacklist d MATCH(DMI_BIOS_DATE, "10/26/01"), NO_MATCH } }, - { exploding_pnp_bios, "Higraded P14H", { /* BIOSPnP problem */ + { exploding_pnp_bios, "Higraded P14H", { /* PnPBIOS GPF on boot */ MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."), MATCH(DMI_BIOS_VERSION, "07.00T"), MATCH(DMI_SYS_VENDOR, "Higraded"), MATCH(DMI_PRODUCT_NAME, "P14H") } }, + { exploding_pnp_bios, "ASUS P4P800", { /* PnPBIOS GPF on boot */ + MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."), + MATCH(DMI_BOARD_NAME, "P4P800"), + } }, /* Machines which have problems handling enabled local APICs */ diff -puN drivers/pnp/interface.c~pnp-updates drivers/pnp/interface.c --- 25/drivers/pnp/interface.c~pnp-updates 2004-04-02 22:22:42.560506808 -0800 +++ 25-akpm/drivers/pnp/interface.c 2004-04-02 22:22:42.569505440 -0800 @@ -434,7 +434,7 @@ pnp_set_current_resources(struct device goto done; } done: - if (retval) + if (retval < 0) return retval; return count; } diff -puN drivers/pnp/manager.c~pnp-updates drivers/pnp/manager.c --- 25/drivers/pnp/manager.c~pnp-updates 2004-04-02 22:22:42.562506504 -0800 +++ 25-akpm/drivers/pnp/manager.c 2004-04-02 22:22:42.569505440 -0800 @@ -452,23 +452,19 @@ int pnp_auto_config_dev(struct pnp_dev * if (!dev->dependent) { if (pnp_assign_resources(dev, 0)) - return 1; - else return 0; + } else { + dep = dev->dependent; + do { + if (pnp_assign_resources(dev, i)) + return 0; + dep = dep->next; + i++; + } while (dep); } - dep = dev->dependent; - do { - if (pnp_assign_resources(dev, i)) - return 1; - - /* if this dependent resource failed, try the next one */ - dep = dep->next; - i++; - } while (dep); - pnp_err("Unable to assign resources to device %s.", dev->dev.bus_id); - return 0; + return -EBUSY; } /** @@ -486,7 +482,7 @@ int pnp_activate_dev(struct pnp_dev *dev } /* ensure resources are allocated */ - if (!pnp_auto_config_dev(dev)) + if (pnp_auto_config_dev(dev)) return -EBUSY; if (!pnp_can_write(dev)) { diff -puN drivers/pnp/pnpbios/proc.c~pnp-updates drivers/pnp/pnpbios/proc.c --- 25/drivers/pnp/pnpbios/proc.c~pnp-updates 2004-04-02 22:22:42.563506352 -0800 +++ 25-akpm/drivers/pnp/pnpbios/proc.c 2004-04-02 22:22:42.571505136 -0800 @@ -139,7 +139,7 @@ static int proc_read_devices(char *buf, /* 26 = the number of characters per line sprintf'ed */ if ((p - buf + 26) > count) break; - if (pnp_bios_get_dev_node(&nodenum, PNPMODE_STATIC, node)) + if (pnp_bios_get_dev_node(&nodenum, PNPMODE_DYNAMIC, node)) break; p += sprintf(p, "%02x\t%08x\t%02x:%02x:%02x\t%04x\n", node->handle, node->eisa_id, diff -puN drivers/pnp/pnpbios/rsparser.c~pnp-updates drivers/pnp/pnpbios/rsparser.c --- 25/drivers/pnp/pnpbios/rsparser.c~pnp-updates 2004-04-02 22:22:42.565506048 -0800 +++ 25-akpm/drivers/pnp/pnpbios/rsparser.c 2004-04-02 22:22:42.568505592 -0800 @@ -505,6 +505,11 @@ pnpbios_parse_compatible_ids(unsigned ch switch (tag) { + case LARGE_TAG_ANSISTR: + strncpy(dev->name, p + 3, len >= PNP_NAME_LEN ? PNP_NAME_LEN - 2 : len); + dev->name[len >= PNP_NAME_LEN ? PNP_NAME_LEN - 1 : len] = '\0'; + break; + case SMALL_TAG_COMPATDEVID: /* compatible ID */ if (len != 4) goto len_err; _