Skip to contentSkip to conversation

PnP Fixes for 2.6.5

PATCH In review Adam Belay 1 participant 6 messages Apr 14, 2004

Subsystems (2)
lore
Share & tools
lore

Adam Belay

author
#0 lore raw

PATCH 1/1 PnP Fixes for 2.6.5

drivers/pnp/pnpbios/rsparser.c +5 -0
diff -Nru a/drivers/pnp/pnpbios/rsparser.c b/drivers/pnp/pnpbios/rsparser.c
@@ -505,6 +505,11 @@
 
 		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;
author
#1 lore raw
drivers/pnp/manager.c +10 -14
diff -Nru a/drivers/pnp/manager.c b/drivers/pnp/manager.c
@@ -452,23 +452,19 @@
 
 	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 @@
 	}
 
 	/* ensure resources are allocated */
-	if (!pnp_auto_config_dev(dev))
+	if (pnp_auto_config_dev(dev))
 		return -EBUSY;
 
 	if (!pnp_can_write(dev)) {
author
#2 lore raw
drivers/pnp/interface.c +1 -1
diff -Nru a/drivers/pnp/interface.c b/drivers/pnp/interface.c
@@ -434,7 +434,7 @@
 		goto done;
 	}
  done:
-	if (retval)
+	if (retval < 0)
 		return retval;
 	return count;
 }
author
#3 lore raw
arch/i386/kernel/dmi_scan.c +5 -1
diff -Nru a/arch/i386/kernel/dmi_scan.c b/arch/i386/kernel/dmi_scan.c
@@ -778,11 +778,15 @@
 			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 */
author
#4 lore raw
drivers/pnp/pnpbios/proc.c +1 -1
diff -Nru a/drivers/pnp/pnpbios/proc.c b/drivers/pnp/pnpbios/proc.c
@@ -139,7 +139,7 @@
 		/* 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,
author
#5 lore raw
drivers/pnp/isapnp/core.c +1 -1
diff -Nru a/drivers/pnp/isapnp/core.c b/drivers/pnp/isapnp/core.c
@@ -995,7 +995,7 @@
 			res->port_resource[tmp].flags = IORESOURCE_IO;
 		}
 		for (tmp = 0; tmp < PNP_MAX_MEM; tmp++) {
-			ret = isapnp_read_dword(ISAPNP_CFG_MEM + (tmp << 3));
+			ret = isapnp_read_word(ISAPNP_CFG_MEM + (tmp << 3)) << 8;
 			if (!ret)
 				continue;
 			res->mem_resource[tmp].start = ret;