http://linux-acpi.bkbits.net/linux-acpi-test-2.6.7
len.brown@intel.com|ChangeSet|20040512055731|24130 len.brown

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/05/12 01:57:31-04:00 len.brown@intel.com 
#   Merge intel.com:/home/lenb/src/linux-acpi-test-2.6.6
#   into intel.com:/home/lenb/src/linux-acpi-test-2.6.7
# 
# arch/i386/mach-es7000/es7000plat.c
#   2004/05/12 01:57:24-04:00 len.brown@intel.com +0 -0
#   Auto merged
# 
# BitKeeper/deleted/.del-setup.c~1b687d49b2d0b042
#   2004/05/12 01:57:24-04:00 len.brown@intel.com +0 -0
#   Auto merged
# 
# arch/i386/mach-es7000/es7000plat.c
#   2004/05/12 01:57:24-04:00 len.brown@intel.com +0 -0
#   Merge rename: arch/i386/mach-es7000/es7000.c -> arch/i386/mach-es7000/es7000plat.c
# 
# BitKeeper/deleted/.del-setup.c~1b687d49b2d0b042
#   2004/05/12 01:57:24-04:00 len.brown@intel.com +0 -0
#   Merge rename: arch/i386/mach-es7000/setup.c -> BitKeeper/deleted/.del-setup.c~1b687d49b2d0b042
# 
# ChangeSet
#   2004/05/12 00:37:02-04:00 len.brown@intel.com 
#   [ACPI] if _STA.functional, set _STA.present (Bjorn Helgaas)
#   workaround for Big Sur and Bull systems
# 
# drivers/acpi/bus.c
#   2004/05/12 00:36:55-04:00 len.brown@intel.com +8 -0
#   if _STA.functional, set _STA.present
#   workaround for Big Sur and Bull systems
# 
# ChangeSet
#   2004/05/11 23:53:05-04:00 len.brown@intel.com 
#   [ACPI] create platform_rename_gsi() so ES7000 can munge IRQ numbers
#   from Natalie Protasevich
# 
# arch/i386/mach-es7000/es7000.c
#   2004/05/11 23:53:00-04:00 len.brown@intel.com +24 -0
#   platform_rename_gsi = es7000_rename_gsi
# 
# arch/i386/kernel/mpparse.c
#   2004/05/11 23:53:00-04:00 len.brown@intel.com +4 -4
#   call platform_rename_gsi() to allow ES7000 to munge IRQ#'s
# 
# arch/i386/mach-es7000/setup.c
#   2004/05/11 17:18:42-04:00 len.brown@intel.com +2 -1
#   whitespace
# 
# ChangeSet
#   2004/05/10 16:48:38-04:00 len.brown@intel.com 
#   [ACPI] handle _CRS outside _PRS -- even when non-zero
#   avoid sharing IRQ12
#   http://bugzilla.kernel.org/show_bug.cgi?id=2665
# 
# drivers/acpi/pci_link.c
#   2004/05/10 16:42:35-04:00 len.brown@intel.com +11 -5
#   handle _CRS outside _PRS even when non-zero
#   avoid sharing IRQ12
# 
# ChangeSet
#   2004/05/02 21:51:20-07:00 akpm@bix.(none) 
#   Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.6
#   into bix.(none):/usr/src/bk-acpi
# 
# Documentation/kernel-parameters.txt
#   2004/05/02 21:51:18-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/04/27 00:59:21-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi
# 
# Documentation/kernel-parameters.txt
#   2004/04/27 00:59:18-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
diff -Nru a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c
--- a/arch/i386/kernel/mpparse.c	Wed May 12 20:24:23 2004
+++ b/arch/i386/kernel/mpparse.c	Wed May 12 20:24:23 2004
@@ -1029,6 +1029,8 @@
 
 #ifdef CONFIG_ACPI_PCI
 
+int (*platform_rename_gsi)(int ioapic, int gsi);
+
 void __init mp_parse_prt (void)
 {
 	struct list_head	*node = NULL;
@@ -1072,10 +1074,8 @@
 			continue;
 		ioapic_pin = gsi - mp_ioapic_routing[ioapic].gsi_base;
 
-		if (es7000_plat) {
-			if (!ioapic && (gsi < 16))
-				gsi += 16;
-		}
+		if (platform_rename_gsi)
+			gsi = platform_rename_gsi(ioapic, gsi);
 
 		/* 
 		 * Avoid pin reprogramming.  PRTs typically include entries  
diff -Nru a/arch/i386/mach-es7000/es7000plat.c b/arch/i386/mach-es7000/es7000plat.c
--- a/arch/i386/mach-es7000/es7000plat.c	Wed May 12 20:24:23 2004
+++ b/arch/i386/mach-es7000/es7000plat.c	Wed May 12 20:24:23 2004
@@ -50,6 +50,29 @@
 struct mip_reg		*host_reg;
 int 			mip_port;
 unsigned long		mip_addr, host_addr;
+extern int (*platform_rename_gsi)();
+
+static int __init
+es7000_rename_gsi(int ioapic, int gsi)
+{
+	if (ioapic)
+		return gsi;
+	else {
+		if (gsi == 0)
+			return 13;
+		if (gsi == 1)
+			return 16;
+		if (gsi == 4)
+			return 17;
+		if (gsi == 6)
+			return 18;
+		if (gsi == 7)
+			return 19;
+		if (gsi == 8)
+			return 20;
+		return gsi;
+        }
+}
 
 /*
  * Parse the OEM Table
@@ -116,6 +139,7 @@
 	} else {
 		printk("\nEnabling ES7000 specific features...\n");
 		es7000_plat = 1;
+		platform_rename_gsi = es7000_rename_gsi;
 	}
 	return es7000_plat;
 }
diff -Nru a/drivers/acpi/bus.c b/drivers/acpi/bus.c
--- a/drivers/acpi/bus.c	Wed May 12 20:24:23 2004
+++ b/drivers/acpi/bus.c	Wed May 12 20:24:23 2004
@@ -112,6 +112,14 @@
 	else
 		STRUCT_TO_INT(device->status) = 0x0F;
 
+	if (device->status.functional && !device->status.present) {
+		printk(KERN_WARNING PREFIX "Device [%s] status [%08x]: "
+			"functional but not present; setting present\n",
+			device->pnp.bus_id,
+			(u32) STRUCT_TO_INT(device->status));
+		device->status.present = 1;
+	}
+
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n", 
 		device->pnp.bus_id, (u32) STRUCT_TO_INT(device->status)));
 
diff -Nru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
--- a/drivers/acpi/pci_link.c	Wed May 12 20:24:23 2004
+++ b/drivers/acpi/pci_link.c	Wed May 12 20:24:23 2004
@@ -479,7 +479,7 @@
 	PIRQ_PENALTY_PCI_AVAILABLE,	/* IRQ9  PCI, often acpi */
 	PIRQ_PENALTY_PCI_AVAILABLE,	/* IRQ10 PCI */
 	PIRQ_PENALTY_PCI_AVAILABLE,	/* IRQ11 PCI */
-	PIRQ_PENALTY_ISA_TYPICAL,	/* IRQ12 mouse */
+	PIRQ_PENALTY_ISA_USED,	/* IRQ12 mouse */
 	PIRQ_PENALTY_ISA_USED,	/* IRQ13 fpe, sometimes */
 	PIRQ_PENALTY_ISA_USED,	/* IRQ14 ide0 */
 	PIRQ_PENALTY_ISA_USED,	/* IRQ15 ide1 */
@@ -546,17 +546,23 @@
 		if (link->irq.active == link->irq.possible[i])
 			break;
 	}
+	/*
+	 * forget active IRQ that is not in possible list
+	 */
+	if (i == link->irq.possible_count) {
+		if (acpi_strict)
+			printk(KERN_WARNING PREFIX "_CRS %d not found"
+				" in _PRS\n", link->irq.active);
+		link->irq.active = 0;
+	}
 
 	/*
 	 * if active found, use it; else pick entry from end of possible list.
 	 */
-	if (i != link->irq.possible_count) {
+	if (link->irq.active) {
 		irq = link->irq.active;
 	} else {
 		irq = link->irq.possible[link->irq.possible_count - 1];
-		if (acpi_strict)
-			printk(KERN_WARNING PREFIX "_CRS %d not found"
-				" in _PRS\n", link->irq.active);
 	}
 
 	if (acpi_irq_balance || !link->irq.active) {
