xen/events: move 2-level specific code into its own file
In preparation for alternative event channel ABIs, move all the functions accessing the shared data structures into their own file. 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:

committed by
Konrad Rzeszutek Wilk

parent
d2ba3166f2
commit
9a489f45a1
74
drivers/xen/events/events_internal.h
Normal file
74
drivers/xen/events/events_internal.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Xen Event Channels (internal header)
|
||||
*
|
||||
* Copyright (C) 2013 Citrix Systems R&D Ltd.
|
||||
*
|
||||
* This source code is licensed under the GNU General Public License,
|
||||
* Version 2 or later. See the file COPYING for more details.
|
||||
*/
|
||||
#ifndef __EVENTS_INTERNAL_H__
|
||||
#define __EVENTS_INTERNAL_H__
|
||||
|
||||
/* Interrupt types. */
|
||||
enum xen_irq_type {
|
||||
IRQT_UNBOUND = 0,
|
||||
IRQT_PIRQ,
|
||||
IRQT_VIRQ,
|
||||
IRQT_IPI,
|
||||
IRQT_EVTCHN
|
||||
};
|
||||
|
||||
/*
|
||||
* Packed IRQ information:
|
||||
* type - enum xen_irq_type
|
||||
* event channel - irq->event channel mapping
|
||||
* cpu - cpu this event channel is bound to
|
||||
* index - type-specific information:
|
||||
* PIRQ - vector, with MSB being "needs EIO", or physical IRQ of the HVM
|
||||
* guest, or GSI (real passthrough IRQ) of the device.
|
||||
* VIRQ - virq number
|
||||
* IPI - IPI vector
|
||||
* EVTCHN -
|
||||
*/
|
||||
struct irq_info {
|
||||
struct list_head list;
|
||||
int refcnt;
|
||||
enum xen_irq_type type; /* type */
|
||||
unsigned irq;
|
||||
unsigned short evtchn; /* event channel */
|
||||
unsigned short cpu; /* cpu bound */
|
||||
|
||||
union {
|
||||
unsigned short virq;
|
||||
enum ipi_vector ipi;
|
||||
struct {
|
||||
unsigned short pirq;
|
||||
unsigned short gsi;
|
||||
unsigned char vector;
|
||||
unsigned char flags;
|
||||
uint16_t domid;
|
||||
} pirq;
|
||||
} u;
|
||||
};
|
||||
|
||||
#define PIRQ_NEEDS_EOI (1 << 0)
|
||||
#define PIRQ_SHAREABLE (1 << 1)
|
||||
|
||||
extern int *evtchn_to_irq;
|
||||
|
||||
struct irq_info *info_for_irq(unsigned irq);
|
||||
unsigned cpu_from_irq(unsigned irq);
|
||||
unsigned cpu_from_evtchn(unsigned int evtchn);
|
||||
|
||||
void xen_evtchn_port_bind_to_cpu(struct irq_info *info, int cpu);
|
||||
|
||||
void clear_evtchn(int port);
|
||||
void set_evtchn(int port);
|
||||
int test_evtchn(int port);
|
||||
int test_and_set_mask(int port);
|
||||
void mask_evtchn(int port);
|
||||
void unmask_evtchn(int port);
|
||||
|
||||
void xen_evtchn_handle_events(int cpu);
|
||||
|
||||
#endif /* #ifndef __EVENTS_INTERNAL_H__ */
|
Reference in New Issue
Block a user