xen/events: add a evtchn_op for port setup

Add a hook for port-specific setup and call it from
xen_irq_info_common_setup().

The FIFO-based ABIs may need to perform additional setup (expanding
the event array) before a bound event channel can start to receive
events.

Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
This commit is contained in:
David Vrabel 2013-03-18 16:54:57 +00:00 committed by Konrad Rzeszutek Wilk
parent 96d4c58818
commit 083858758f
2 changed files with 13 additions and 1 deletions

View File

@ -117,7 +117,7 @@ static int xen_irq_info_common_setup(struct irq_info *info,
irq_clear_status_flags(irq, IRQ_NOREQUEST|IRQ_NOAUTOEN); irq_clear_status_flags(irq, IRQ_NOREQUEST|IRQ_NOAUTOEN);
return 0; return xen_evtchn_port_setup(info);
} }
static int xen_irq_info_evtchn_setup(unsigned irq, static int xen_irq_info_evtchn_setup(unsigned irq,

View File

@ -55,6 +55,7 @@ struct irq_info {
#define PIRQ_SHAREABLE (1 << 1) #define PIRQ_SHAREABLE (1 << 1)
struct evtchn_ops { struct evtchn_ops {
int (*setup)(struct irq_info *info);
void (*bind_to_cpu)(struct irq_info *info, unsigned cpu); void (*bind_to_cpu)(struct irq_info *info, unsigned cpu);
void (*clear_pending)(unsigned port); void (*clear_pending)(unsigned port);
@ -75,6 +76,17 @@ struct irq_info *info_for_irq(unsigned irq);
unsigned cpu_from_irq(unsigned irq); unsigned cpu_from_irq(unsigned irq);
unsigned cpu_from_evtchn(unsigned int evtchn); unsigned cpu_from_evtchn(unsigned int evtchn);
/*
* Do any ABI specific setup for a bound event channel before it can
* be unmasked and used.
*/
static inline int xen_evtchn_port_setup(struct irq_info *info)
{
if (evtchn_ops->setup)
return evtchn_ops->setup(info);
return 0;
}
static inline void xen_evtchn_port_bind_to_cpu(struct irq_info *info, static inline void xen_evtchn_port_bind_to_cpu(struct irq_info *info,
unsigned cpu) unsigned cpu)
{ {