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