1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2b5401a96SAlex Nixon #ifndef _ASM_X86_XEN_PCI_H
3b5401a96SAlex Nixon #define _ASM_X86_XEN_PCI_H
4b5401a96SAlex Nixon
5b5401a96SAlex Nixon #if defined(CONFIG_PCI_XEN)
6b5401a96SAlex Nixon extern int __init pci_xen_init(void);
73942b740SStefano Stabellini extern int __init pci_xen_hvm_init(void);
8b5401a96SAlex Nixon #define pci_xen 1
9b5401a96SAlex Nixon #else
10b5401a96SAlex Nixon #define pci_xen 0
11b5401a96SAlex Nixon #define pci_xen_init (0)
pci_xen_hvm_init(void)123942b740SStefano Stabellini static inline int pci_xen_hvm_init(void)
133942b740SStefano Stabellini {
143942b740SStefano Stabellini return -1;
153942b740SStefano Stabellini }
16b5401a96SAlex Nixon #endif
17*cae7d81aSJan Beulich #ifdef CONFIG_XEN_PV_DOM0
18a0ee0567SKonrad Rzeszutek Wilk int __init pci_xen_initial_domain(void);
1938aa66fcSJeremy Fitzhardinge #else
pci_xen_initial_domain(void)20a0ee0567SKonrad Rzeszutek Wilk static inline int __init pci_xen_initial_domain(void)
2138aa66fcSJeremy Fitzhardinge {
22a0ee0567SKonrad Rzeszutek Wilk return -1;
2338aa66fcSJeremy Fitzhardinge }
24*cae7d81aSJan Beulich #endif
25b5401a96SAlex Nixon
26b5401a96SAlex Nixon #if defined(CONFIG_PCI_MSI)
27b5401a96SAlex Nixon #if defined(CONFIG_PCI_XEN)
28b5401a96SAlex Nixon /* The drivers/pci/xen-pcifront.c sets this structure to
29b5401a96SAlex Nixon * its own functions.
30b5401a96SAlex Nixon */
31b5401a96SAlex Nixon struct xen_pci_frontend_ops {
32cc0f89c4SKonrad Rzeszutek Wilk int (*enable_msi)(struct pci_dev *dev, int vectors[]);
33b5401a96SAlex Nixon void (*disable_msi)(struct pci_dev *dev);
34cc0f89c4SKonrad Rzeszutek Wilk int (*enable_msix)(struct pci_dev *dev, int vectors[], int nvec);
35b5401a96SAlex Nixon void (*disable_msix)(struct pci_dev *dev);
36b5401a96SAlex Nixon };
37b5401a96SAlex Nixon
38b5401a96SAlex Nixon extern struct xen_pci_frontend_ops *xen_pci_frontend;
39b5401a96SAlex Nixon
xen_pci_frontend_enable_msi(struct pci_dev * dev,int vectors[])40b5401a96SAlex Nixon static inline int xen_pci_frontend_enable_msi(struct pci_dev *dev,
41cc0f89c4SKonrad Rzeszutek Wilk int vectors[])
42b5401a96SAlex Nixon {
43b5401a96SAlex Nixon if (xen_pci_frontend && xen_pci_frontend->enable_msi)
44b5401a96SAlex Nixon return xen_pci_frontend->enable_msi(dev, vectors);
452cfec6a2SKonrad Rzeszutek Wilk return -ENOSYS;
46b5401a96SAlex Nixon }
xen_pci_frontend_disable_msi(struct pci_dev * dev)47b5401a96SAlex Nixon static inline void xen_pci_frontend_disable_msi(struct pci_dev *dev)
48b5401a96SAlex Nixon {
49b5401a96SAlex Nixon if (xen_pci_frontend && xen_pci_frontend->disable_msi)
50b5401a96SAlex Nixon xen_pci_frontend->disable_msi(dev);
51b5401a96SAlex Nixon }
xen_pci_frontend_enable_msix(struct pci_dev * dev,int vectors[],int nvec)52b5401a96SAlex Nixon static inline int xen_pci_frontend_enable_msix(struct pci_dev *dev,
53cc0f89c4SKonrad Rzeszutek Wilk int vectors[], int nvec)
54b5401a96SAlex Nixon {
55b5401a96SAlex Nixon if (xen_pci_frontend && xen_pci_frontend->enable_msix)
56b5401a96SAlex Nixon return xen_pci_frontend->enable_msix(dev, vectors, nvec);
572cfec6a2SKonrad Rzeszutek Wilk return -ENOSYS;
58b5401a96SAlex Nixon }
xen_pci_frontend_disable_msix(struct pci_dev * dev)59b5401a96SAlex Nixon static inline void xen_pci_frontend_disable_msix(struct pci_dev *dev)
60b5401a96SAlex Nixon {
61b5401a96SAlex Nixon if (xen_pci_frontend && xen_pci_frontend->disable_msix)
62b5401a96SAlex Nixon xen_pci_frontend->disable_msix(dev);
63b5401a96SAlex Nixon }
64b5401a96SAlex Nixon #endif /* CONFIG_PCI_XEN */
65b5401a96SAlex Nixon #endif /* CONFIG_PCI_MSI */
66b5401a96SAlex Nixon
67b5401a96SAlex Nixon #endif /* _ASM_X86_XEN_PCI_H */
68