# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/03/25 17:40:31-05:00 len.brown@intel.com 
#   [ACPI] PCI interrupt link routing (Luming Yu)
#   use _PRS to determine resource type for _SRS
#   fixes HP Proliant servers
#   http://bugzilla.kernel.org/show_bug.cgi?id=1590
# 
# drivers/acpi/pci_link.c
#   2004/03/25 17:34:37-05:00 len.brown@intel.com +13 -5
#   determine resource type from _PRS for benefit of _SRS
#   todo: retry_programming can probably be deleted
# 
diff -Nru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
--- a/drivers/acpi/pci_link.c	Thu Mar 25 17:40:38 2004
+++ b/drivers/acpi/pci_link.c	Thu Mar 25 17:40:38 2004
@@ -72,6 +72,7 @@
 	u8			edge_level;		/* All IRQs */
 	u8			active_high_low;	/* All IRQs */
 	u8			setonboot;
+	u8			resource_type;
 	u8			possible_count;
 	u8			possible[ACPI_PCI_LINK_MAX_POSSIBLE];
 };
@@ -123,6 +124,7 @@
 		}
 		link->irq.edge_level = p->edge_level;
 		link->irq.active_high_low = p->active_high_low;
+		link->irq.resource_type = ACPI_RSTYPE_IRQ;
 		break;
 	}
 	case ACPI_RSTYPE_EXT_IRQ:
@@ -143,6 +145,7 @@
 		}
 		link->irq.edge_level = p->edge_level;
 		link->irq.active_high_low = p->active_high_low;
+		link->irq.resource_type = ACPI_RSTYPE_EXT_IRQ;
 		break;
 	}
 	default:
@@ -342,13 +345,18 @@
 		}
 	}
 
+	resource_type = link->irq.resource_type;
+
+	if (resource_type != ACPI_RSTYPE_IRQ &&
+			resource_type != ACPI_RSTYPE_EXT_IRQ){
 	/* If IRQ<=15, first try with a "normal" IRQ descriptor. If that fails, try with
 	 * an extended one */
-	if (irq <= 15) {
-		resource_type = ACPI_RSTYPE_IRQ;
-	} else {
-		resource_type = ACPI_RSTYPE_EXT_IRQ;
-	}
+		if (irq <= 15) {
+			resource_type = ACPI_RSTYPE_IRQ;
+		} else {
+			resource_type = ACPI_RSTYPE_EXT_IRQ;
+		}
+	} 
 
 retry_programming:
    
