int bind_evtchn_to_irqhandler(
unsigned int evtchn,
- irqreturn_t (*handler)(int, void *, struct pt_regs *),
+ irq_handler_t handler,
unsigned long irqflags,
const char *devname,
void *dev_id)
int bind_virq_to_irqhandler(
unsigned int virq,
unsigned int cpu,
- irqreturn_t (*handler)(int, void *, struct pt_regs *),
+ irq_handler_t handler,
unsigned long irqflags,
const char *devname,
void *dev_id)
int bind_ipi_to_irqhandler(
unsigned int ipi,
unsigned int cpu,
- irqreturn_t (*handler)(int, void *, struct pt_regs *),
+ irq_handler_t handler,
unsigned long irqflags,
const char *devname,
void *dev_id)
rebind_irq_to_cpu(irq, tcpu);
}
-static int retrigger(unsigned int irq)
+static int retrigger_vector(unsigned int irq)
{
int evtchn = evtchn_from_irq(irq);
shared_info_t *s = HYPERVISOR_shared_info;
* Interface to generic handling in irq.c
*/
-static unsigned int startup_dynirq(unsigned int irq)
+static unsigned int startup_dynirq_vector(unsigned int irq)
{
int evtchn = evtchn_from_irq(irq);
return 0;
}
-static void shutdown_dynirq(unsigned int irq)
-{
- int evtchn = evtchn_from_irq(irq);
-
- if (VALID_EVTCHN(evtchn))
- mask_evtchn(evtchn);
-}
-
-static void enable_dynirq(unsigned int irq)
+static void unmask_dynirq_vector(unsigned int irq)
{
int evtchn = evtchn_from_irq(irq);
unmask_evtchn(evtchn);
}
-static void disable_dynirq(unsigned int irq)
+static void mask_dynirq_vector(unsigned int irq)
{
int evtchn = evtchn_from_irq(irq);
mask_evtchn(evtchn);
}
-static void ack_dynirq(unsigned int irq)
+static void ack_dynirq_vector(unsigned int irq)
{
int evtchn = evtchn_from_irq(irq);
}
}
-static void end_dynirq(unsigned int irq)
+static void ack_dynirq_quirk_vector(unsigned int irq)
{
int evtchn = evtchn_from_irq(irq);
unmask_evtchn(evtchn);
}
-static struct hw_interrupt_type dynirq_type = {
- .typename = "Dynamic-irq",
- .startup = startup_dynirq,
- .shutdown = shutdown_dynirq,
- .enable = enable_dynirq,
- .disable = disable_dynirq,
- .ack = ack_dynirq,
- .end = end_dynirq,
+static struct irq_chip dynirq_chip = {
+ .name = "Dynamic-irq",
+ .startup = startup_dynirq_vector,
+ .mask = mask_dynirq_vector,
+ .unmask = unmask_dynirq_vector,
+ .ack = ack_dynirq_vector,
+ .eoi = ack_dynirq_quirk_vector,
#ifdef CONFIG_SMP
.set_affinity = set_affinity_irq,
#endif
- .retrigger = retrigger,
+ .retrigger = retrigger_vector,
};
static inline void pirq_unmask_notify(int pirq)
*/
#define probing_irq(_irq) (irq_desc[(_irq)].action == NULL)
-static unsigned int startup_pirq(unsigned int irq)
+static unsigned int startup_pirq_vector(unsigned int irq)
{
struct evtchn_bind_pirq bind_pirq;
int evtchn = evtchn_from_irq(irq);
return 0;
}
-static void shutdown_pirq(unsigned int irq)
-{
- struct evtchn_close close;
- int evtchn = evtchn_from_irq(irq);
-
- if (!VALID_EVTCHN(evtchn))
- return;
-
- mask_evtchn(evtchn);
-
- close.port = evtchn;
- if (HYPERVISOR_event_channel_op(EVTCHNOP_close, &close) != 0)
- BUG();
-
- bind_evtchn_to_cpu(evtchn, 0);
- evtchn_to_irq[evtchn] = -1;
- irq_info[irq] = IRQ_UNBOUND;
-}
-
-static void enable_pirq(unsigned int irq)
+static void unmask_pirq_vector(unsigned int irq)
{
int evtchn = evtchn_from_irq(irq);
}
}
-static void disable_pirq(unsigned int irq)
+static void mask_pirq_vector(unsigned int irq)
{
int evtchn = evtchn_from_irq(irq);
mask_evtchn(evtchn);
}
-static void ack_pirq(unsigned int irq)
+static void ack_pirq_vector(unsigned int irq)
{
int evtchn = evtchn_from_irq(irq);
}
}
-static void end_pirq(unsigned int irq)
+static void ack_pirq_quirk_vector(unsigned int irq)
{
int evtchn = evtchn_from_irq(irq);
}
}
-static struct hw_interrupt_type pirq_type = {
- .typename = "Phys-irq",
- .startup = startup_pirq,
- .shutdown = shutdown_pirq,
- .enable = enable_pirq,
- .disable = disable_pirq,
- .ack = ack_pirq,
- .end = end_pirq,
+static struct irq_chip pirq_chip = {
+ .name = "Phys-irq",
+ .startup = startup_pirq_vector,
+ .mask = mask_pirq_vector,
+ .unmask = unmask_pirq_vector,
+ .ack = ack_pirq_vector,
+ .eoi = ack_pirq_quirk_vector,
#ifdef CONFIG_SMP
.set_affinity = set_affinity_irq,
#endif
- .retrigger = retrigger,
+ .retrigger = retrigger_vector,
};
int irq_ignore_unhandled(unsigned int irq)
irq_desc[dynirq_to_irq(i)].status = IRQ_DISABLED;
irq_desc[dynirq_to_irq(i)].action = NULL;
irq_desc[dynirq_to_irq(i)].depth = 1;
- irq_desc[dynirq_to_irq(i)].chip = &dynirq_type;
+ set_irq_chip_and_handler_name(dynirq_to_irq(i), &dynirq_chip,
+ handle_level_irq, "level");
}
/* Phys IRQ space is statically bound (1:1 mapping). Nail refcnts. */
irq_desc[pirq_to_irq(i)].status = IRQ_DISABLED;
irq_desc[pirq_to_irq(i)].action = NULL;
irq_desc[pirq_to_irq(i)].depth = 1;
- irq_desc[pirq_to_irq(i)].chip = &pirq_type;
+ set_irq_chip_and_handler_name(pirq_to_irq(i), &pirq_chip,
+ handle_level_irq, "level");
}
}