0001
0002 #ifndef _ASM_X86_XEN_PCI_H
0003 #define _ASM_X86_XEN_PCI_H
0004
0005 #if defined(CONFIG_PCI_XEN)
0006 extern int __init pci_xen_init(void);
0007 extern int __init pci_xen_hvm_init(void);
0008 #define pci_xen 1
0009 #else
0010 #define pci_xen 0
0011 #define pci_xen_init (0)
0012 static inline int pci_xen_hvm_init(void)
0013 {
0014 return -1;
0015 }
0016 #endif
0017 #ifdef CONFIG_XEN_PV_DOM0
0018 int __init pci_xen_initial_domain(void);
0019 #else
0020 static inline int __init pci_xen_initial_domain(void)
0021 {
0022 return -1;
0023 }
0024 #endif
0025
0026 #if defined(CONFIG_PCI_MSI)
0027 #if defined(CONFIG_PCI_XEN)
0028
0029
0030
0031 struct xen_pci_frontend_ops {
0032 int (*enable_msi)(struct pci_dev *dev, int vectors[]);
0033 void (*disable_msi)(struct pci_dev *dev);
0034 int (*enable_msix)(struct pci_dev *dev, int vectors[], int nvec);
0035 void (*disable_msix)(struct pci_dev *dev);
0036 };
0037
0038 extern struct xen_pci_frontend_ops *xen_pci_frontend;
0039
0040 static inline int xen_pci_frontend_enable_msi(struct pci_dev *dev,
0041 int vectors[])
0042 {
0043 if (xen_pci_frontend && xen_pci_frontend->enable_msi)
0044 return xen_pci_frontend->enable_msi(dev, vectors);
0045 return -ENOSYS;
0046 }
0047 static inline void xen_pci_frontend_disable_msi(struct pci_dev *dev)
0048 {
0049 if (xen_pci_frontend && xen_pci_frontend->disable_msi)
0050 xen_pci_frontend->disable_msi(dev);
0051 }
0052 static inline int xen_pci_frontend_enable_msix(struct pci_dev *dev,
0053 int vectors[], int nvec)
0054 {
0055 if (xen_pci_frontend && xen_pci_frontend->enable_msix)
0056 return xen_pci_frontend->enable_msix(dev, vectors, nvec);
0057 return -ENOSYS;
0058 }
0059 static inline void xen_pci_frontend_disable_msix(struct pci_dev *dev)
0060 {
0061 if (xen_pci_frontend && xen_pci_frontend->disable_msix)
0062 xen_pci_frontend->disable_msix(dev);
0063 }
0064 #endif
0065 #endif
0066
0067 #endif