[PATCH] add acpi_interrupt_to_irq

From: Bjorn Helgaas <bjorn.helgaas_at_hp.com>
Date: 2004-01-21 10:07:32
This patch against 2.6.1 tightens up some language and removes
a couple IA64 #ifdefs:

 drivers/acpi/osl.c        |   26 ++++++++++++++------------
 include/asm-i386/acpi.h   |    6 ++++++
 include/asm-x86_64/acpi.h |    6 ++++++
 include/asm-ia64/acpi.h   |    2 +-
 arch/ia64/kernel/acpi.c   |   16 ++++++++++++----
 5 files changed, 39 insertions(+), 17 deletions(-)

ACPI: Add acpi_interrupt_to_irq() interface.

ACPI interrupts and Linux IRQs need not be identical (though they are
on i386 and x86_64), so introduce acpi_interrupt_to_irq(), clean up
usage of "interrupt" and "irq", and remove IA64 #ifdefs.

===== drivers/acpi/osl.c 1.43 vs edited =====
--- 1.43/drivers/acpi/osl.c	Mon Dec 29 14:37:24 2003
+++ edited/drivers/acpi/osl.c	Tue Jan 20 15:36:23 2004
@@ -240,23 +240,22 @@
 }
 
 acpi_status
-acpi_os_install_interrupt_handler(u32 irq, OSD_HANDLER handler, void *context)
+acpi_os_install_interrupt_handler(u32 interrupt, OSD_HANDLER handler, void *context)
 {
+	unsigned int irq;
+
 	/*
-	 * Ignore the irq from the core, and use the value in our copy of the
+	 * Ignore the interrupt from the core, and use the value in our copy of the
 	 * FADT. It may not be the same if an interrupt source override exists
 	 * for the SCI.
 	 */
-	irq = acpi_fadt.sci_int;
+	interrupt = acpi_fadt.sci_int;
 
-#ifdef CONFIG_IA64
-	irq = acpi_irq_to_vector(irq);
-	if (irq < 0) {
+	if (acpi_interrupt_to_irq(interrupt, &irq)) {
 		printk(KERN_ERR PREFIX "SCI (ACPI interrupt %d) not registered\n",
-		       acpi_fadt.sci_int);
+		       interrupt);
 		return AE_OK;
 	}
-#endif
 	acpi_irq_irq = irq;
 	acpi_irq_handler = handler;
 	acpi_irq_context = context;
@@ -269,12 +268,15 @@
 }
 
 acpi_status
-acpi_os_remove_interrupt_handler(u32 irq, OSD_HANDLER handler)
+acpi_os_remove_interrupt_handler(u32 interrupt, OSD_HANDLER handler)
 {
+	unsigned int irq;
+
 	if (acpi_irq_handler) {
-#ifdef CONFIG_IA64
-		irq = acpi_irq_to_vector(irq);
-#endif
+		if (acpi_interrupt_to_irq(interrupt, &irq)) {
+			printk(KERN_ERR PREFIX "Can't remove ACPI interrupt handler\n");
+			return AE_ERROR;
+		}
 		free_irq(irq, acpi_irq);
 		acpi_irq_handler = NULL;
 	}
===== include/asm-i386/acpi.h 1.9 vs edited =====
--- 1.9/include/asm-i386/acpi.h	Tue Sep 16 11:21:55 2003
+++ edited/include/asm-i386/acpi.h	Tue Jan 20 15:33:24 2004
@@ -139,6 +139,12 @@
 
 #endif
 
+static inline int acpi_interrupt_to_irq(u32 interrupt, unsigned int *irq)
+{
+	*irq = interrupt;
+	return 0;
+}
+
 #ifdef CONFIG_ACPI_SLEEP
 
 /* routines for saving/restoring kernel state */
===== include/asm-x86_64/acpi.h 1.3 vs edited =====
--- 1.3/include/asm-x86_64/acpi.h	Wed Dec 31 22:32:36 2003
+++ edited/include/asm-x86_64/acpi.h	Tue Jan 20 15:33:54 2004
@@ -120,6 +120,12 @@
 
 #endif /*CONFIG_ACPI_BOOT*/
 
+static inline int acpi_interrupt_to_irq(u32 interrupt, unsigned int *irq)
+{
+	*irq = interrupt;
+	return 0;
+}
+
 #ifdef CONFIG_ACPI_SLEEP
 
 /* routines for saving/restoring kernel state */
===== include/asm-ia64/acpi.h 1.13 vs edited =====
--- 1.13/include/asm-ia64/acpi.h	Mon Jan 12 00:20:13 2004
+++ edited/include/asm-ia64/acpi.h	Tue Jan 20 15:35:01 2004
@@ -91,7 +91,7 @@
 const char *acpi_get_sysname (void);
 int acpi_request_vector (u32 int_type);
 int acpi_register_irq (u32 gsi, u32 polarity, u32 trigger);
-int acpi_irq_to_vector (u32 irq);
+int acpi_interrupt_to_irq (u32 interrupt, unsigned int *irq);
 
 #ifdef CONFIG_ACPI_NUMA
 /* Proximity bitmap length; _PXM is at most 255 (8 bit)*/
===== arch/ia64/kernel/acpi.c 1.59 vs edited =====
--- 1.59/arch/ia64/kernel/acpi.c	Wed Jan 14 12:09:40 2004
+++ edited/arch/ia64/kernel/acpi.c	Tue Jan 20 15:32:41 2004
@@ -613,12 +613,20 @@
 }
 
 int
-acpi_irq_to_vector (u32 gsi)
+acpi_interrupt_to_irq (u32 interrupt, unsigned int *irq)
 {
-	if (has_8259 && gsi < 16)
-		return isa_irq_to_vector(gsi);
+	int vector;
 
-	return gsi_to_vector(gsi);
+	if (has_8259 && interrupt < 16)
+		vector = isa_irq_to_vector(interrupt);
+	else
+		vector = gsi_to_vector(interrupt);
+
+	if (vector < 0)
+		return -EINVAL;
+
+	*irq = vector;
+	return 0;
 }
 
 int

-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Tue Jan 20 18:10:31 2004

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:21 EST