1 /******************************************************************************
2  * iocap.h
3  *
4  * Per-domain I/O capabilities.
5  */
6 
7 #ifndef __XEN_IOCAP_H__
8 #define __XEN_IOCAP_H__
9 
10 #include <xen/rangeset.h>
11 #include <asm/iocap.h>
12 
13 #define iomem_permit_access(d, s, e)                    \
14     rangeset_add_range((d)->iomem_caps, s, e)
15 #define iomem_deny_access(d, s, e)                      \
16     rangeset_remove_range((d)->iomem_caps, s, e)
17 #define iomem_access_permitted(d, s, e)                 \
18     rangeset_contains_range((d)->iomem_caps, s, e)
19 
20 #define irq_permit_access(d, i)                         \
21     rangeset_add_singleton((d)->irq_caps, i)
22 #define irq_deny_access(d, i)                           \
23     rangeset_remove_singleton((d)->irq_caps, i)
24 #define irqs_permit_access(d, s, e)                     \
25     rangeset_add_range((d)->irq_caps, s, e)
26 #define irqs_deny_access(d, s, e)                       \
27     rangeset_remove_range((d)->irq_caps, s, e)
28 #define irq_access_permitted(d, i)                      \
29     rangeset_contains_singleton((d)->irq_caps, i)
30 
31 #define pirq_access_permitted(d, i) ({                  \
32     struct domain *d__ = (d);                           \
33     int irq__ = domain_pirq_to_irq(d__, i);             \
34     irq__ > 0 && irq_access_permitted(d__, irq__)       \
35     ? irq__ : 0;                                        \
36 })
37 
38 #endif /* __XEN_IOCAP_H__ */
39