xref: /openbmc/linux/arch/x86/include/asm/xen/pci.h (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
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