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