1 /*
2  * FIFO-based event channel ABI.
3  *
4  * Copyright (C) 2013 Citrix Systems R&D Ltd.
5  *
6  * This source code is licensed under the GNU General Public License,
7  * Version 2 or later.  See the file COPYING for more details.
8  */
9 #ifndef __XEN_EVENT_FIFO_H__
10 #define __XEN_EVENT_FIFO_H__
11 
12 struct evtchn_fifo_queue {
13     uint32_t *head; /* points into control block */
14     uint32_t tail;
15     uint8_t priority;
16     spinlock_t lock;
17 };
18 
19 struct evtchn_fifo_vcpu {
20     struct evtchn_fifo_control_block *control_block;
21     struct evtchn_fifo_queue queue[EVTCHN_FIFO_MAX_QUEUES];
22 };
23 
24 #define EVTCHN_FIFO_EVENT_WORDS_PER_PAGE (PAGE_SIZE / sizeof(event_word_t))
25 #define EVTCHN_FIFO_MAX_EVENT_ARRAY_PAGES \
26     (EVTCHN_FIFO_NR_CHANNELS / EVTCHN_FIFO_EVENT_WORDS_PER_PAGE)
27 
28 struct evtchn_fifo_domain {
29     event_word_t *event_array[EVTCHN_FIFO_MAX_EVENT_ARRAY_PAGES];
30     unsigned int num_evtchns;
31 };
32 
33 int evtchn_fifo_init_control(struct evtchn_init_control *init_control);
34 int evtchn_fifo_expand_array(const struct evtchn_expand_array *expand_array);
35 void evtchn_fifo_destroy(struct domain *domain);
36 
37 #endif /* __XEN_EVENT_FIFO_H__ */
38 
39 /*
40  * Local variables:
41  * mode: C
42  * c-file-style: "BSD"
43  * c-basic-offset: 4
44  * tab-width: 4
45  * indent-tabs-mode: nil
46  * End:
47  */
48