1#ifndef _ASM_X86_XEN_PCI_H 2#define _ASM_X86_XEN_PCI_H 3 4#if defined(CONFIG_PCI_XEN) 5extern int __init pci_xen_init(void); 6extern int __init pci_xen_hvm_init(void); 7#define pci_xen 1 8#else 9#define pci_xen 0 10#define pci_xen_init (0) 11static inline int pci_xen_hvm_init(void) 12{ 13 return -1; 14} 15#endif 16#if defined(CONFIG_XEN_DOM0) 17int __init pci_xen_initial_domain(void); 18int xen_find_device_domain_owner(struct pci_dev *dev); 19int xen_register_device_domain_owner(struct pci_dev *dev, uint16_t domain); 20int xen_unregister_device_domain_owner(struct pci_dev *dev); 21#else 22static inline int __init pci_xen_initial_domain(void) 23{ 24 return -1; 25} 26static inline int xen_find_device_domain_owner(struct pci_dev *dev) 27{ 28 return -1; 29} 30static inline int xen_register_device_domain_owner(struct pci_dev *dev, 31 uint16_t domain) 32{ 33 return -1; 34} 35static inline int xen_unregister_device_domain_owner(struct pci_dev *dev) 36{ 37 return -1; 38} 39#endif 40 41#if defined(CONFIG_PCI_MSI) 42#if defined(CONFIG_PCI_XEN) 43/* The drivers/pci/xen-pcifront.c sets this structure to 44 * its own functions. 45 */ 46struct xen_pci_frontend_ops { 47 int (*enable_msi)(struct pci_dev *dev, int vectors[]); 48 void (*disable_msi)(struct pci_dev *dev); 49 int (*enable_msix)(struct pci_dev *dev, int vectors[], int nvec); 50 void (*disable_msix)(struct pci_dev *dev); 51}; 52 53extern struct xen_pci_frontend_ops *xen_pci_frontend; 54 55static inline int xen_pci_frontend_enable_msi(struct pci_dev *dev, 56 int vectors[]) 57{ 58 if (xen_pci_frontend && xen_pci_frontend->enable_msi) 59 return xen_pci_frontend->enable_msi(dev, vectors); 60 return -ENODEV; 61} 62static inline void xen_pci_frontend_disable_msi(struct pci_dev *dev) 63{ 64 if (xen_pci_frontend && xen_pci_frontend->disable_msi) 65 xen_pci_frontend->disable_msi(dev); 66} 67static inline int xen_pci_frontend_enable_msix(struct pci_dev *dev, 68 int vectors[], int nvec) 69{ 70 if (xen_pci_frontend && xen_pci_frontend->enable_msix) 71 return xen_pci_frontend->enable_msix(dev, vectors, nvec); 72 return -ENODEV; 73} 74static inline void xen_pci_frontend_disable_msix(struct pci_dev *dev) 75{ 76 if (xen_pci_frontend && xen_pci_frontend->disable_msix) 77 xen_pci_frontend->disable_msix(dev); 78} 79#endif /* CONFIG_PCI_XEN */ 80#endif /* CONFIG_PCI_MSI */ 81 82#endif /* _ASM_X86_XEN_PCI_H */ 83