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) 17void __init xen_setup_pirqs(void); 18#else 19static inline void __init xen_setup_pirqs(void) 20{ 21} 22#endif 23 24#if defined(CONFIG_PCI_MSI) 25#if defined(CONFIG_PCI_XEN) 26/* The drivers/pci/xen-pcifront.c sets this structure to 27 * its own functions. 28 */ 29struct xen_pci_frontend_ops { 30 int (*enable_msi)(struct pci_dev *dev, int **vectors); 31 void (*disable_msi)(struct pci_dev *dev); 32 int (*enable_msix)(struct pci_dev *dev, int **vectors, int nvec); 33 void (*disable_msix)(struct pci_dev *dev); 34}; 35 36extern struct xen_pci_frontend_ops *xen_pci_frontend; 37 38static inline int xen_pci_frontend_enable_msi(struct pci_dev *dev, 39 int **vectors) 40{ 41 if (xen_pci_frontend && xen_pci_frontend->enable_msi) 42 return xen_pci_frontend->enable_msi(dev, vectors); 43 return -ENODEV; 44} 45static inline void xen_pci_frontend_disable_msi(struct pci_dev *dev) 46{ 47 if (xen_pci_frontend && xen_pci_frontend->disable_msi) 48 xen_pci_frontend->disable_msi(dev); 49} 50static inline int xen_pci_frontend_enable_msix(struct pci_dev *dev, 51 int **vectors, int nvec) 52{ 53 if (xen_pci_frontend && xen_pci_frontend->enable_msix) 54 return xen_pci_frontend->enable_msix(dev, vectors, nvec); 55 return -ENODEV; 56} 57static inline void xen_pci_frontend_disable_msix(struct pci_dev *dev) 58{ 59 if (xen_pci_frontend && xen_pci_frontend->disable_msix) 60 xen_pci_frontend->disable_msix(dev); 61} 62#endif /* CONFIG_PCI_XEN */ 63#endif /* CONFIG_PCI_MSI */ 64 65#endif /* _ASM_X86_XEN_PCI_H */ 66