# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1234435735 0
# Node ID 9e3be0660c1e7214cbb83700285b8ef33a9916c9
# Parent bf9cdbec516ab1ad79e11f277a5bbdd8cb340f3c
Cleanup naming for ia64 and x86 interrupt handling functions
- Append '_IRQ' to AUTO_ASSIGN, NEVER_ASSIGN, and FREE_TO_ASSIGN
- Rename {request,setup}_irq to {request,setup}_irq_vector
- Rename free_irq to release_irq_vector
- Add {request,setup,release}_irq wrappers for their
{request,setup,release}_irq_vector counterparts
- Added generic irq_to_vector inline for ia64
- Changed ia64 to use the new naming scheme
Signed-off-by: Espen Skoglund <espen.skoglund@xxxxxxxxxxxxx>
Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
---
xen/arch/ia64/linux-xen/iosapic.c | 10 ++++++
xen/arch/ia64/linux-xen/irq_ia64.c | 26 ++++++++++-------
xen/arch/ia64/linux-xen/mca.c | 9 ++++--
xen/arch/ia64/xen/hypercall.c | 2 -
xen/arch/ia64/xen/irq.c | 24 ++++++----------
xen/arch/x86/i8259.c | 4 +-
xen/arch/x86/irq.c | 34 ++++++++++-------------
xen/arch/x86/physdev.c | 2 -
xen/drivers/char/serial.c | 2 -
xen/drivers/passthrough/amd/iommu_init.c | 7 ++--
xen/drivers/passthrough/vtd/ia64/vtd.c | 4 ++
xen/drivers/passthrough/vtd/iommu.c | 8 ++---
xen/include/asm-ia64/hvm/iommu.h | 4 --
xen/include/asm-ia64/hvm/irq.h | 14 ++++++---
xen/include/asm-ia64/linux-xen/linux/interrupt.h | 4 +-
xen/include/asm-ia64/linux/asm/hw_irq.h | 2 -
xen/include/asm-x86/irq.h | 3 --
xen/include/xen/irq.h | 20 +++++++++++--
18 files changed, 103 insertions(+), 76 deletions(-)
diff -r bf9cdbec516a -r 9e3be0660c1e xen/arch/ia64/linux-xen/iosapic.c
--- a/xen/arch/ia64/linux-xen/iosapic.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/arch/ia64/linux-xen/iosapic.c Thu Feb 12 10:48:55 2009 +0000
@@ -93,6 +93,16 @@
#include <asm/ptrace.h>
#include <asm/system.h>
+#ifdef XEN
+static inline int iosapic_irq_to_vector (int irq)
+{
+ return irq;
+}
+
+#undef irq_to_vector
+#define irq_to_vector(irq) iosapic_irq_to_vector(irq)
+#define AUTO_ASSIGN AUTO_ASSIGN_IRQ
+#endif
#undef DEBUG_INTERRUPT_ROUTING
diff -r bf9cdbec516a -r 9e3be0660c1e xen/arch/ia64/linux-xen/irq_ia64.c
--- a/xen/arch/ia64/linux-xen/irq_ia64.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/arch/ia64/linux-xen/irq_ia64.c Thu Feb 12 10:48:55 2009 +0000
@@ -250,6 +250,7 @@ register_percpu_irq (ia64_vector vec, st
register_percpu_irq (ia64_vector vec, struct irqaction *action)
{
irq_desc_t *desc;
+#ifndef XEN
unsigned int irq;
for (irq = 0; irq < NR_IRQS; ++irq)
@@ -258,16 +259,19 @@ register_percpu_irq (ia64_vector vec, st
desc->status |= IRQ_PER_CPU;
desc->handler = &irq_type_ia64_lsapic;
if (action)
-#ifdef XEN
- setup_vector(irq, action);
-#else
setup_irq(irq, action);
-#endif
- }
-}
-
-#ifdef XEN
-int request_irq(unsigned int irq,
+ }
+#else
+ desc = irq_descp(vec);
+ desc->status |= IRQ_PER_CPU;
+ desc->handler = &irq_type_ia64_lsapic;
+ if (action)
+ setup_vector(vec, action);
+#endif
+}
+
+#ifdef XEN
+int request_irq_vector(unsigned int vector,
void (*handler)(int, void *, struct cpu_user_regs *),
unsigned long irqflags, const char * devname, void *dev_id)
{
@@ -279,7 +283,7 @@ int request_irq(unsigned int irq,
* otherwise we'll have trouble later trying to figure out
* which interrupt is which (messes up the interrupt freeing logic etc).
* */
- if (irq >= NR_IRQS)
+ if (vector >= NR_VECTORS)
return -EINVAL;
if (!handler)
return -EINVAL;
@@ -291,7 +295,7 @@ int request_irq(unsigned int irq,
action->handler = handler;
action->name = devname;
action->dev_id = dev_id;
- setup_vector(irq, action);
+ setup_vector(vector, action);
if (retval)
xfree(action);
diff -r bf9cdbec516a -r 9e3be0660c1e xen/arch/ia64/linux-xen/mca.c
--- a/xen/arch/ia64/linux-xen/mca.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/arch/ia64/linux-xen/mca.c Thu Feb 12 10:48:55 2009 +0000
@@ -114,7 +114,6 @@ extern void ia64_slave_init_handler (v
extern void ia64_slave_init_handler (void);
#ifdef XEN
extern void setup_vector (unsigned int vec, struct irqaction *action);
-#define setup_irq(irq, action) setup_vector(irq, action)
#endif
static ia64_mc_info_t ia64_mc_info;
@@ -1922,12 +1921,18 @@ ia64_mca_late_init(void)
if (cpe_vector >= 0) {
/* If platform supports CPEI, enable the irq. */
cpe_poll_enabled = 0;
+#ifndef XEN
for (irq = 0; irq < NR_IRQS; ++irq)
if (irq_to_vector(irq) == cpe_vector) {
desc = irq_descp(irq);
desc->status |= IRQ_PER_CPU;
- setup_irq(irq, &mca_cpe_irqaction);
+ setup_vector(irq, &mca_cpe_irqaction);
}
+#else
+ desc = irq_descp(cpe_vector);
+ desc->status |= IRQ_PER_CPU;
+ setup_vector(cpe_vector, &mca_cpe_irqaction);
+#endif
ia64_mca_register_cpev(cpe_vector);
IA64_MCA_DEBUG("%s: CPEI/P setup and enabled.\n",
__FUNCTION__);
} else {
diff -r bf9cdbec516a -r 9e3be0660c1e xen/arch/ia64/xen/hypercall.c
--- a/xen/arch/ia64/xen/hypercall.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/arch/ia64/xen/hypercall.c Thu Feb 12 10:48:55 2009 +0000
@@ -543,7 +543,7 @@ long do_physdev_op(int cmd, XEN_GUEST_HA
break;
irq_status_query.flags = 0;
/* Edge-triggered interrupts don't need an explicit unmask downcall. */
- if ( !strstr(irq_desc[irq_to_vector(irq)].handler->typename, "edge") )
+ if ( !strstr(irq_descp(irq)->handler->typename, "edge") )
irq_status_query.flags |= XENIRQSTAT_needs_eoi;
ret = copy_to_guest(arg, &irq_status_query, 1) ? -EFAULT : 0;
break;
diff -r bf9cdbec516a -r 9e3be0660c1e xen/arch/ia64/xen/irq.c
--- a/xen/arch/ia64/xen/irq.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/arch/ia64/xen/irq.c Thu Feb 12 10:48:55 2009 +0000
@@ -228,11 +228,11 @@ out:
* disabled.
*/
-int setup_vector(unsigned int irq, struct irqaction * new)
+int setup_vector(unsigned int vector, struct irqaction * new)
{
unsigned long flags;
struct irqaction *old, **p;
- irq_desc_t *desc = irq_descp(irq);
+ irq_desc_t *desc = irq_descp(vector);
/*
* The following block of code has to be executed atomically
@@ -248,8 +248,8 @@ int setup_vector(unsigned int irq, struc
desc->depth = 0;
desc->status &= ~(IRQ_DISABLED | IRQ_INPROGRESS | IRQ_GUEST);
- desc->handler->startup(irq);
- desc->handler->enable(irq);
+ desc->handler->startup(vector);
+ desc->handler->enable(vector);
spin_unlock_irqrestore(&desc->lock,flags);
return 0;
@@ -258,13 +258,11 @@ int setup_vector(unsigned int irq, struc
/* Vectors reserved by xen (and thus not sharable with domains). */
unsigned long ia64_xen_vector[BITS_TO_LONGS(NR_IRQS)];
-int setup_irq(unsigned int irq, struct irqaction * new)
-{
- unsigned int vec;
+int setup_irq_vector(unsigned int vec, struct irqaction * new)
+{
int res;
- /* Get vector for IRQ. */
- if (acpi_gsi_to_irq (irq, &vec) < 0)
+ if ( vec == IA64_INVALID_VECTOR )
return -ENOSYS;
/* Reserve the vector (and thus the irq). */
if (test_and_set_bit(vec, ia64_xen_vector))
@@ -273,14 +271,12 @@ int setup_irq(unsigned int irq, struct i
return res;
}
-void free_irq(unsigned int irq)
-{
- unsigned int vec;
+void release_irq_vector(unsigned int vec)
+{
unsigned long flags;
irq_desc_t *desc;
- /* Get vector for IRQ. */
- if (acpi_gsi_to_irq(irq, &vec) < 0)
+ if ( vec == IA64_INVALID_VECTOR )
return;
desc = irq_descp(vec);
diff -r bf9cdbec516a -r 9e3be0660c1e xen/arch/x86/i8259.c
--- a/xen/arch/x86/i8259.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/arch/x86/i8259.c Thu Feb 12 10:48:55 2009 +0000
@@ -410,8 +410,8 @@ void __init init_IRQ(void)
}
/* Never allocate the hypercall vector or Linux/BSD fast-trap vector. */
- vector_irq[HYPERCALL_VECTOR] = NEVER_ASSIGN;
- vector_irq[0x80] = NEVER_ASSIGN;
+ vector_irq[HYPERCALL_VECTOR] = NEVER_ASSIGN_IRQ;
+ vector_irq[0x80] = NEVER_ASSIGN_IRQ;
apic_intr_init();
diff -r bf9cdbec516a -r 9e3be0660c1e xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/arch/x86/irq.c Thu Feb 12 10:48:55 2009 +0000
@@ -29,7 +29,7 @@ irq_desc_t irq_desc[NR_VECTORS];
static DEFINE_SPINLOCK(vector_lock);
int vector_irq[NR_VECTORS] __read_mostly = {
- [0 ... NR_VECTORS - 1] = FREE_TO_ASSIGN
+ [0 ... NR_VECTORS - 1] = FREE_TO_ASSIGN_IRQ
};
static void __do_IRQ_guest(int vector);
@@ -66,11 +66,11 @@ int free_irq_vector(int vector)
BUG_ON((vector > LAST_DYNAMIC_VECTOR) || (vector < FIRST_DYNAMIC_VECTOR));
spin_lock(&vector_lock);
- if ((irq = vector_irq[vector]) == AUTO_ASSIGN)
- vector_irq[vector] = FREE_TO_ASSIGN;
+ if ((irq = vector_irq[vector]) == AUTO_ASSIGN_IRQ)
+ vector_irq[vector] = FREE_TO_ASSIGN_IRQ;
spin_unlock(&vector_lock);
- return (irq == AUTO_ASSIGN) ? 0 : -EINVAL;
+ return (irq == AUTO_ASSIGN_IRQ) ? 0 : -EINVAL;
}
int assign_irq_vector(int irq)
@@ -82,13 +82,13 @@ int assign_irq_vector(int irq)
spin_lock(&vector_lock);
- if ((irq != AUTO_ASSIGN) && (IO_APIC_VECTOR(irq) > 0)) {
+ if ((irq != AUTO_ASSIGN_IRQ) && (IO_APIC_VECTOR(irq) > 0)) {
spin_unlock(&vector_lock);
return IO_APIC_VECTOR(irq);
}
vector = current_vector;
- while (vector_irq[vector] != FREE_TO_ASSIGN) {
+ while (vector_irq[vector] != FREE_TO_ASSIGN_IRQ) {
vector += 8;
if (vector > LAST_DYNAMIC_VECTOR)
vector = FIRST_DYNAMIC_VECTOR + ((vector + 1) & 7);
@@ -101,7 +101,7 @@ int assign_irq_vector(int irq)
current_vector = vector;
vector_irq[vector] = irq;
- if (irq != AUTO_ASSIGN)
+ if (irq != AUTO_ASSIGN_IRQ)
IO_APIC_VECTOR(irq) = vector;
spin_unlock(&vector_lock);
@@ -159,7 +159,7 @@ asmlinkage void do_IRQ(struct cpu_user_r
spin_unlock(&desc->lock);
}
-int request_irq(unsigned int irq,
+int request_irq_vector(unsigned int vector,
void (*handler)(int, void *, struct cpu_user_regs *),
unsigned long irqflags, const char * devname, void *dev_id)
{
@@ -172,7 +172,7 @@ int request_irq(unsigned int irq,
* which interrupt is which (messes up the interrupt freeing
* logic etc).
*/
- if (irq >= NR_IRQS)
+ if (vector >= NR_VECTORS)
return -EINVAL;
if (!handler)
return -EINVAL;
@@ -185,17 +185,16 @@ int request_irq(unsigned int irq,
action->name = devname;
action->dev_id = dev_id;
- retval = setup_irq(irq, action);
+ retval = setup_irq_vector(vector, action);
if (retval)
xfree(action);
return retval;
}
-void free_irq(unsigned int irq)
-{
- unsigned int vector = irq_to_vector(irq);
- irq_desc_t *desc = &irq_desc[vector];
+void release_irq_vector(unsigned int vector)
+{
+ irq_desc_t *desc = &irq_desc[vector];
unsigned long flags;
spin_lock_irqsave(&desc->lock,flags);
@@ -209,10 +208,9 @@ void free_irq(unsigned int irq)
do { smp_mb(); } while ( desc->status & IRQ_INPROGRESS );
}
-int setup_irq(unsigned int irq, struct irqaction *new)
-{
- unsigned int vector = irq_to_vector(irq);
- irq_desc_t *desc = &irq_desc[vector];
+int setup_irq_vector(unsigned int vector, struct irqaction *new)
+{
+ irq_desc_t *desc = &irq_desc[vector];
unsigned long flags;
spin_lock_irqsave(&desc->lock,flags);
diff -r bf9cdbec516a -r 9e3be0660c1e xen/arch/x86/physdev.c
--- a/xen/arch/x86/physdev.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/arch/x86/physdev.c Thu Feb 12 10:48:55 2009 +0000
@@ -75,7 +75,7 @@ static int physdev_map_pirq(struct physd
case MAP_PIRQ_TYPE_MSI:
vector = map->index;
if ( vector == -1 )
- vector = assign_irq_vector(AUTO_ASSIGN);
+ vector = assign_irq_vector(AUTO_ASSIGN_IRQ);
if ( vector < 0 || vector >= NR_VECTORS )
{
diff -r bf9cdbec516a -r 9e3be0660c1e xen/drivers/char/serial.c
--- a/xen/drivers/char/serial.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/drivers/char/serial.c Thu Feb 12 10:48:55 2009 +0000
@@ -471,7 +471,7 @@ void serial_suspend(void)
int i, irq;
for ( i = 0; i < ARRAY_SIZE(com); i++ )
if ( (irq = serial_irq(i)) >= 0 )
- free_irq(irq);
+ release_irq(irq);
}
void serial_resume(void)
diff -r bf9cdbec516a -r 9e3be0660c1e xen/drivers/passthrough/amd/iommu_init.c
--- a/xen/drivers/passthrough/amd/iommu_init.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/drivers/passthrough/amd/iommu_init.c Thu Feb 12 10:48:55 2009 +0000
@@ -479,7 +479,7 @@ static int set_iommu_interrupt_handler(s
{
int vector, ret;
- vector = assign_irq_vector(AUTO_ASSIGN);
+ vector = assign_irq_vector(AUTO_ASSIGN_IRQ);
if ( vector <= 0 )
{
gdprintk(XENLOG_ERR VTDPREFIX, "IOMMU: no vectors\n");
@@ -487,7 +487,8 @@ static int set_iommu_interrupt_handler(s
}
irq_desc[vector].handler = &iommu_msi_type;
- ret = request_irq(vector, amd_iommu_page_fault, 0, "amd_iommu", iommu);
+ ret = request_irq_vector(vector, amd_iommu_page_fault, 0,
+ "amd_iommu", iommu);
if ( ret )
{
irq_desc[vector].handler = &no_irq_type;
@@ -497,7 +498,7 @@ static int set_iommu_interrupt_handler(s
}
/* Make sure that vector is never re-used. */
- vector_irq[vector] = NEVER_ASSIGN;
+ vector_irq[vector] = NEVER_ASSIGN_IRQ;
vector_to_iommu[vector] = iommu;
iommu->vector = vector;
return vector;
diff -r bf9cdbec516a -r 9e3be0660c1e xen/drivers/passthrough/vtd/ia64/vtd.c
--- a/xen/drivers/passthrough/vtd/ia64/vtd.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/drivers/passthrough/vtd/ia64/vtd.c Thu Feb 12 10:48:55 2009 +0000
@@ -29,7 +29,9 @@
#include "../vtd.h"
-int vector_irq[NR_VECTORS] __read_mostly = { [0 ... NR_VECTORS - 1] = -1};
+int vector_irq[NR_VECTORS] __read_mostly = {
+ [0 ... NR_VECTORS - 1] = FREE_TO_ASSIGN_IRQ
+};
/* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */
u8 irq_vector[NR_IRQS] __read_mostly;
diff -r bf9cdbec516a -r 9e3be0660c1e xen/drivers/passthrough/vtd/iommu.c
--- a/xen/drivers/passthrough/vtd/iommu.c Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/drivers/passthrough/vtd/iommu.c Thu Feb 12 10:48:55 2009 +0000
@@ -874,7 +874,7 @@ int iommu_set_interrupt(struct iommu *io
{
int vector, ret;
- vector = assign_irq_vector(AUTO_ASSIGN);
+ vector = assign_irq_vector(AUTO_ASSIGN_IRQ);
if ( vector <= 0 )
{
gdprintk(XENLOG_ERR VTDPREFIX, "IOMMU: no vectors\n");
@@ -882,7 +882,7 @@ int iommu_set_interrupt(struct iommu *io
}
irq_desc[vector].handler = &dma_msi_type;
- ret = request_irq(vector, iommu_page_fault, 0, "dmar", iommu);
+ ret = request_irq_vector(vector, iommu_page_fault, 0, "dmar", iommu);
if ( ret )
{
irq_desc[vector].handler = &no_irq_type;
@@ -892,7 +892,7 @@ int iommu_set_interrupt(struct iommu *io
}
/* Make sure that vector is never re-used. */
- vector_irq[vector] = NEVER_ASSIGN;
+ vector_irq[vector] = NEVER_ASSIGN_IRQ;
vector_to_iommu[vector] = iommu;
return vector;
@@ -970,7 +970,7 @@ static void iommu_free(struct acpi_drhd_
iounmap(iommu->reg);
free_intel_iommu(iommu->intel);
- free_irq(iommu->vector);
+ release_irq_vector(iommu->vector);
xfree(iommu);
drhd->iommu = NULL;
diff -r bf9cdbec516a -r 9e3be0660c1e xen/include/asm-ia64/hvm/iommu.h
--- a/xen/include/asm-ia64/hvm/iommu.h Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/include/asm-ia64/hvm/iommu.h Thu Feb 12 10:48:55 2009 +0000
@@ -28,10 +28,6 @@ static inline void pci_cleanup_msi(struc
/* TODO */
}
-/* Special IRQ numbers */
-#define AUTO_ASSIGN (-1)
-#define NEVER_ASSIGN (-2)
-#define FREE_TO_ASSIGN (-3)
extern int assign_irq_vector (int irq);
diff -r bf9cdbec516a -r 9e3be0660c1e xen/include/asm-ia64/hvm/irq.h
--- a/xen/include/asm-ia64/hvm/irq.h Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/include/asm-ia64/hvm/irq.h Thu Feb 12 10:48:55 2009 +0000
@@ -90,13 +90,17 @@ struct hvm_irq {
#define hvm_pci_intx_link(dev, intx) \
(((dev) + (intx)) & 3)
-/* Extract the IA-64 vector that corresponds to IRQ. */
-static inline int
-irq_to_vector (int irq)
+#define IA64_INVALID_VECTOR ((unsigned int)((int)-1))
+static inline unsigned int irq_to_vector(int irq)
{
- return irq;
+ int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
+ unsigned int vector;
+
+ if ( acpi_gsi_to_irq(irq, &vector) < 0)
+ return 0;
+
+ return vector;
}
-
extern u8 irq_vector[NR_IRQS];
extern int vector_irq[NR_VECTORS];
diff -r bf9cdbec516a -r 9e3be0660c1e
xen/include/asm-ia64/linux-xen/linux/interrupt.h
--- a/xen/include/asm-ia64/linux-xen/linux/interrupt.h Wed Feb 11 16:36:59
2009 +0000
+++ b/xen/include/asm-ia64/linux-xen/linux/interrupt.h Thu Feb 12 10:48:55
2009 +0000
@@ -52,10 +52,10 @@ struct irqaction {
};
extern irqreturn_t no_action(int cpl, void *dev_id, struct pt_regs *regs);
-extern int request_irq(unsigned int,
+extern int request_irq_vector(unsigned int,
irqreturn_t (*handler)(int, void *, struct pt_regs *),
unsigned long, const char *, void *);
-extern void free_irq(unsigned int, void *);
+extern void release_irq_vector(unsigned int, void *);
#endif
diff -r bf9cdbec516a -r 9e3be0660c1e xen/include/asm-ia64/linux/asm/hw_irq.h
--- a/xen/include/asm-ia64/linux/asm/hw_irq.h Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/include/asm-ia64/linux/asm/hw_irq.h Thu Feb 12 10:48:55 2009 +0000
@@ -34,7 +34,7 @@ typedef u8 ia64_vector;
#define IA64_MAX_VECTORED_IRQ 255
#define IA64_NUM_VECTORS 256
-#define AUTO_ASSIGN -1
+#define AUTO_ASSIGN_IRQ (-1)
#define IA64_SPURIOUS_INT_VECTOR 0x0f
diff -r bf9cdbec516a -r 9e3be0660c1e xen/include/asm-x86/irq.h
--- a/xen/include/asm-x86/irq.h Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/include/asm-x86/irq.h Thu Feb 12 10:48:55 2009 +0000
@@ -19,9 +19,6 @@
extern int vector_irq[NR_VECTORS];
extern u8 irq_vector[NR_IRQS];
-#define AUTO_ASSIGN -1
-#define NEVER_ASSIGN -2
-#define FREE_TO_ASSIGN -3
#define platform_legacy_irq(irq) ((irq) < 16)
diff -r bf9cdbec516a -r 9e3be0660c1e xen/include/xen/irq.h
--- a/xen/include/xen/irq.h Wed Feb 11 16:36:59 2009 +0000
+++ b/xen/include/xen/irq.h Thu Feb 12 10:48:55 2009 +0000
@@ -24,6 +24,11 @@ struct irqaction
#define IRQ_GUEST 16 /* IRQ is handled by guest OS(es) */
#define IRQ_GUEST_EOI_PENDING 32 /* IRQ was disabled, pending a guest EOI */
#define IRQ_PER_CPU 256 /* IRQ is per CPU */
+
+/* Special IRQ numbers. */
+#define AUTO_ASSIGN_IRQ (-1)
+#define NEVER_ASSIGN_IRQ (-2)
+#define FREE_TO_ASSIGN_IRQ (-3)
/*
* Interrupt controller descriptor. This is all we need
@@ -64,11 +69,20 @@ typedef struct {
extern irq_desc_t irq_desc[NR_VECTORS];
-extern int setup_irq(unsigned int, struct irqaction *);
-extern void free_irq(unsigned int);
-extern int request_irq(unsigned int irq,
+extern int setup_irq_vector(unsigned int, struct irqaction *);
+extern void release_irq_vector(unsigned int);
+extern int request_irq_vector(unsigned int vector,
void (*handler)(int, void *, struct cpu_user_regs *),
unsigned long irqflags, const char * devname, void *dev_id);
+
+#define setup_irq(irq, action) \
+ setup_irq_vector(irq_to_vector(irq), action)
+
+#define release_irq(irq) \
+ release_irq_vector(irq_to_vector(irq))
+
+#define request_irq(irq, handler, irqflags, devname, devid) \
+ request_irq_vector(irq_to_vector(irq), handler, irqflags, defname, devid)
extern hw_irq_controller no_irq_type;
extern void no_action(int cpl, void *dev_id, struct cpu_user_regs *regs);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|