# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2005/04/01 00:07:31-05:00 len.brown@intel.com 
#   [ACPI] PNPACPI vs sound IRQ
#   
#   http://bugme.osdl.org/show_bug.cgi?id=4016
#   
#   Written-by: David Shaohua Li <shaohua.li@intel.com>
#   Acked-by: Adam Belay <abelay@novell.com>
#   Signed-off-by: Len Brown <len.brown@intel.com>
# 
# include/linux/acpi.h
#   2005/01/11 21:12:55-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-x86_64/pci.h
#   2005/01/11 21:03:54-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-sparc64/pci.h
#   2005/01/11 21:04:00-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-sparc/pci.h
#   2005/01/11 21:04:00-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-sh64/pci.h
#   2005/01/11 21:04:00-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-sh/pci.h
#   2005/01/11 21:04:00-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-ppc64/pci.h
#   2005/01/11 21:03:54-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-ppc/pci.h
#   2005/01/11 21:08:28-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-mips/pci.h
#   2005/01/11 21:03:54-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-m68k/pci.h
#   2005/01/11 21:04:00-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-ia64/pci.h
#   2005/01/11 21:04:00-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-i386/pci.h
#   2005/01/11 21:04:00-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-h8300/pci.h
#   2005/01/11 21:04:00-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-arm/pci.h
#   2005/01/11 21:06:45-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# include/asm-alpha/pci.h
#   2005/01/11 21:04:00-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# drivers/pnp/resource.c
#   2005/01/11 21:09:53-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# drivers/pnp/pnpbios/rsparser.c
#   2005/01/11 21:10:55-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# drivers/pnp/pnpacpi/rsparser.c
#   2005/01/11 21:11:40-05:00 len.brown@intel.com +2 -2
#   PNPACPI vs sound IRQ
# 
# drivers/acpi/pci_link.c
#   2005/01/11 21:15:10-05:00 len.brown@intel.com +5 -2
#   PNPACPI vs sound IRQ
# 
# arch/i386/pci/visws.c
#   2005/01/11 21:03:54-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
# arch/i386/pci/irq.c
#   2005/01/11 21:15:49-05:00 len.brown@intel.com +10 -6
#   PNPACPI vs sound IRQ
# 
# arch/frv/mb93090-mb00/pci-irq.c
#   2005/04/01 00:07:22-05:00 len.brown@intel.com +1 -1
#   PNPACPI vs sound IRQ
# 
Index: linux-2.6.12/arch/frv/mb93090-mb00/pci-irq.c
===================================================================
--- linux-2.6.12.orig/arch/frv/mb93090-mb00/pci-irq.c	2005-07-09 23:35:15.000000000 -0400
+++ linux-2.6.12/arch/frv/mb93090-mb00/pci-irq.c	2005-07-10 00:26:10.000000000 -0400
@@ -60,7 +60,7 @@
 	}
 }
 
-void __init pcibios_penalize_isa_irq(int irq)
+void __init pcibios_penalize_isa_irq(int irq, int active)
 {
 }
 
Index: linux-2.6.12/arch/i386/pci/irq.c
===================================================================
--- linux-2.6.12.orig/arch/i386/pci/irq.c	2005-07-09 23:35:16.000000000 -0400
+++ linux-2.6.12/arch/i386/pci/irq.c	2005-07-10 00:26:10.000000000 -0400
@@ -1006,24 +1006,28 @@
 subsys_initcall(pcibios_irq_init);
 
 
-static void pirq_penalize_isa_irq(int irq)
+static void pirq_penalize_isa_irq(int irq, int active)
 {
 	/*
 	 *  If any ISAPnP device reports an IRQ in its list of possible
 	 *  IRQ's, we try to avoid assigning it to PCI devices.
 	 */
-	if (irq < 16)
-		pirq_penalty[irq] += 100;
+	if (irq < 16) {
+		if (active)
+			pirq_penalty[irq] += 1000;
+		else
+			pirq_penalty[irq] += 100;
+	}
 }
 
-void pcibios_penalize_isa_irq(int irq)
+void pcibios_penalize_isa_irq(int irq, int active)
 {
 #ifdef CONFIG_ACPI_PCI
 	if (!acpi_noirq)
-		acpi_penalize_isa_irq(irq);
+		acpi_penalize_isa_irq(irq, active);
 	else
 #endif
-		pirq_penalize_isa_irq(irq);
+		pirq_penalize_isa_irq(irq, active);
 }
 
 static int pirq_enable_irq(struct pci_dev *dev)
Index: linux-2.6.12/arch/i386/pci/visws.c
===================================================================
--- linux-2.6.12.orig/arch/i386/pci/visws.c	2005-07-09 23:35:18.000000000 -0400
+++ linux-2.6.12/arch/i386/pci/visws.c	2005-07-10 00:26:10.000000000 -0400
@@ -21,7 +21,7 @@
 
 int (*pcibios_enable_irq)(struct pci_dev *dev) = &pci_visws_enable_irq;
 
-void __init pcibios_penalize_isa_irq(int irq) {}
+void __init pcibios_penalize_isa_irq(int irq, int active) {}
 
 
 unsigned int pci_bus0, pci_bus1;
Index: linux-2.6.12/drivers/acpi/pci_link.c
===================================================================
--- linux-2.6.12.orig/drivers/acpi/pci_link.c	2005-07-09 23:53:23.000000000 -0400
+++ linux-2.6.12/drivers/acpi/pci_link.c	2005-07-10 00:26:10.000000000 -0400
@@ -804,9 +804,12 @@
  * There is no ISA_POSSIBLE weight, so we simply use
  * the (small) PCI_USING penalty.
  */
-void acpi_penalize_isa_irq(int irq)
+void acpi_penalize_isa_irq(int irq, int active)
 {
-	acpi_irq_penalty[irq] += PIRQ_PENALTY_PCI_USING;
+	if (active)
+		acpi_irq_penalty[irq] += PIRQ_PENALTY_ISA_USED;
+	else
+		acpi_irq_penalty[irq] += PIRQ_PENALTY_PCI_USING;
 }
 
 /*
Index: linux-2.6.12/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- linux-2.6.12.orig/drivers/pnp/pnpacpi/rsparser.c	2005-07-10 00:12:30.000000000 -0400
+++ linux-2.6.12/drivers/pnp/pnpacpi/rsparser.c	2005-07-10 00:26:10.000000000 -0400
@@ -160,7 +160,7 @@
 				acpi_register_gsi(res->data.irq.interrupts[0],
 					res->data.irq.edge_level,
 					res->data.irq.active_high_low));
-			pcibios_penalize_isa_irq(res->data.irq.interrupts[0]);
+			pcibios_penalize_isa_irq(res->data.irq.interrupts[0], 1);
 		}
 		break;
 
@@ -171,7 +171,7 @@
 				acpi_register_gsi(res->data.extended_irq.interrupts[0],
 					res->data.extended_irq.edge_level,
 					res->data.extended_irq.active_high_low));
-			pcibios_penalize_isa_irq(res->data.extended_irq.interrupts[0]);
+			pcibios_penalize_isa_irq(res->data.extended_irq.interrupts[0], 1);
 		}
 		break;
 	case ACPI_RSTYPE_DMA:
Index: linux-2.6.12/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- linux-2.6.12.orig/drivers/pnp/pnpbios/rsparser.c	2005-07-09 23:35:04.000000000 -0400
+++ linux-2.6.12/drivers/pnp/pnpbios/rsparser.c	2005-07-10 00:26:10.000000000 -0400
@@ -64,7 +64,7 @@
 		}
 		res->irq_resource[i].start =
 		res->irq_resource[i].end = (unsigned long) irq;
-		pcibios_penalize_isa_irq(irq);
+		pcibios_penalize_isa_irq(irq, 1);
 	}
 }
 
Index: linux-2.6.12/drivers/pnp/resource.c
===================================================================
--- linux-2.6.12.orig/drivers/pnp/resource.c	2005-07-09 23:35:07.000000000 -0400
+++ linux-2.6.12/drivers/pnp/resource.c	2005-07-10 00:26:10.000000000 -0400
@@ -102,7 +102,7 @@
 
 		for (i = 0; i < 16; i++)
 			if (test_bit(i, data->map))
-				pcibios_penalize_isa_irq(i);
+				pcibios_penalize_isa_irq(i, 0);
 	}
 #endif
 	return 0;
Index: linux-2.6.12/include/asm-alpha/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-alpha/pci.h	2005-07-09 23:35:17.000000000 -0400
+++ linux-2.6.12/include/asm-alpha/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -58,7 +58,7 @@
 
 extern void pcibios_set_master(struct pci_dev *dev);
 
-extern inline void pcibios_penalize_isa_irq(int irq)
+extern inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-arm/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-arm/pci.h	2005-07-09 23:35:03.000000000 -0400
+++ linux-2.6.12/include/asm-arm/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -14,7 +14,7 @@
 	/* No special bus mastering setup handling */
 }
 
-static inline void pcibios_penalize_isa_irq(int irq)
+static inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-h8300/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-h8300/pci.h	2005-07-09 23:35:05.000000000 -0400
+++ linux-2.6.12/include/asm-h8300/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -15,7 +15,7 @@
 	/* No special bus mastering setup handling */
 }
 
-extern inline void pcibios_penalize_isa_irq(int irq)
+extern inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-i386/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-i386/pci.h	2005-07-09 23:35:04.000000000 -0400
+++ linux-2.6.12/include/asm-i386/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -27,7 +27,7 @@
 struct pci_bus * pcibios_scan_root(int bus);
 
 void pcibios_set_master(struct pci_dev *dev);
-void pcibios_penalize_isa_irq(int irq);
+void pcibios_penalize_isa_irq(int irq, int active);
 struct irq_routing_table *pcibios_get_irq_routing_table(void);
 int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
 
Index: linux-2.6.12/include/asm-ia64/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-ia64/pci.h	2005-07-09 23:35:14.000000000 -0400
+++ linux-2.6.12/include/asm-ia64/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -47,7 +47,7 @@
 }
 
 static inline void
-pcibios_penalize_isa_irq (int irq)
+pcibios_penalize_isa_irq (int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-m68k/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-m68k/pci.h	2005-07-09 23:35:04.000000000 -0400
+++ linux-2.6.12/include/asm-m68k/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -43,7 +43,7 @@
 	/* No special bus mastering setup handling */
 }
 
-static inline void pcibios_penalize_isa_irq(int irq)
+static inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-mips/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-mips/pci.h	2005-07-09 23:35:08.000000000 -0400
+++ linux-2.6.12/include/asm-mips/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -69,7 +69,7 @@
 
 extern void pcibios_set_master(struct pci_dev *dev);
 
-static inline void pcibios_penalize_isa_irq(int irq)
+static inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-ppc/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-ppc/pci.h	2005-07-09 23:35:09.000000000 -0400
+++ linux-2.6.12/include/asm-ppc/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -37,7 +37,7 @@
 	/* No special bus mastering setup handling */
 }
 
-extern inline void pcibios_penalize_isa_irq(int irq)
+extern inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-ppc64/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-ppc64/pci.h	2005-07-09 23:35:04.000000000 -0400
+++ linux-2.6.12/include/asm-ppc64/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -37,7 +37,7 @@
 	/* No special bus mastering setup handling */
 }
 
-static inline void pcibios_penalize_isa_irq(int irq)
+static inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-sh/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-sh/pci.h	2005-07-09 23:35:08.000000000 -0400
+++ linux-2.6.12/include/asm-sh/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -36,7 +36,7 @@
 
 extern void pcibios_set_master(struct pci_dev *dev);
 
-static inline void pcibios_penalize_isa_irq(int irq)
+static inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-sh64/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-sh64/pci.h	2005-07-09 23:35:16.000000000 -0400
+++ linux-2.6.12/include/asm-sh64/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -26,7 +26,7 @@
 /*
  * Set penalize isa irq function
  */
-static inline void pcibios_penalize_isa_irq(int irq)
+static inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-sparc/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-sparc/pci.h	2005-07-09 23:35:09.000000000 -0400
+++ linux-2.6.12/include/asm-sparc/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -20,7 +20,7 @@
 	/* No special bus mastering setup handling */
 }
 
-extern inline void pcibios_penalize_isa_irq(int irq)
+extern inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-sparc64/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-sparc64/pci.h	2005-07-09 23:35:02.000000000 -0400
+++ linux-2.6.12/include/asm-sparc64/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -23,7 +23,7 @@
 	/* No special bus mastering setup handling */
 }
 
-static inline void pcibios_penalize_isa_irq(int irq)
+static inline void pcibios_penalize_isa_irq(int irq, int active)
 {
 	/* We don't do dynamic PCI IRQ allocation */
 }
Index: linux-2.6.12/include/asm-x86_64/pci.h
===================================================================
--- linux-2.6.12.orig/include/asm-x86_64/pci.h	2005-07-09 23:35:04.000000000 -0400
+++ linux-2.6.12/include/asm-x86_64/pci.h	2005-07-10 00:26:10.000000000 -0400
@@ -33,7 +33,7 @@
 extern int (*pci_config_write)(int seg, int bus, int dev, int fn, int reg, int len, u32 value);
 
 void pcibios_set_master(struct pci_dev *dev);
-void pcibios_penalize_isa_irq(int irq);
+void pcibios_penalize_isa_irq(int irq, int active);
 struct irq_routing_table *pcibios_get_irq_routing_table(void);
 int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
 
Index: linux-2.6.12/include/linux/acpi.h
===================================================================
--- linux-2.6.12.orig/include/linux/acpi.h	2005-07-10 00:25:50.000000000 -0400
+++ linux-2.6.12/include/linux/acpi.h	2005-07-10 00:26:10.000000000 -0400
@@ -465,7 +465,7 @@
 struct pci_dev;
 
 int acpi_pci_irq_enable (struct pci_dev *dev);
-void acpi_penalize_isa_irq(int irq);
+void acpi_penalize_isa_irq(int irq, int active);
 
 #ifdef CONFIG_ACPI_DEALLOCATE_IRQ
 void acpi_pci_irq_disable (struct pci_dev *dev);