18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _ASM_X86_XEN_PCI_H 38c2ecf20Sopenharmony_ci#define _ASM_X86_XEN_PCI_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#if defined(CONFIG_PCI_XEN) 68c2ecf20Sopenharmony_ciextern int __init pci_xen_init(void); 78c2ecf20Sopenharmony_ciextern int __init pci_xen_hvm_init(void); 88c2ecf20Sopenharmony_ci#define pci_xen 1 98c2ecf20Sopenharmony_ci#else 108c2ecf20Sopenharmony_ci#define pci_xen 0 118c2ecf20Sopenharmony_ci#define pci_xen_init (0) 128c2ecf20Sopenharmony_cistatic inline int pci_xen_hvm_init(void) 138c2ecf20Sopenharmony_ci{ 148c2ecf20Sopenharmony_ci return -1; 158c2ecf20Sopenharmony_ci} 168c2ecf20Sopenharmony_ci#endif 178c2ecf20Sopenharmony_ci#if defined(CONFIG_XEN_DOM0) 188c2ecf20Sopenharmony_ciint __init pci_xen_initial_domain(void); 198c2ecf20Sopenharmony_ciint xen_find_device_domain_owner(struct pci_dev *dev); 208c2ecf20Sopenharmony_ciint xen_register_device_domain_owner(struct pci_dev *dev, uint16_t domain); 218c2ecf20Sopenharmony_ciint xen_unregister_device_domain_owner(struct pci_dev *dev); 228c2ecf20Sopenharmony_ci#else 238c2ecf20Sopenharmony_cistatic inline int __init pci_xen_initial_domain(void) 248c2ecf20Sopenharmony_ci{ 258c2ecf20Sopenharmony_ci return -1; 268c2ecf20Sopenharmony_ci} 278c2ecf20Sopenharmony_cistatic inline int xen_find_device_domain_owner(struct pci_dev *dev) 288c2ecf20Sopenharmony_ci{ 298c2ecf20Sopenharmony_ci return -1; 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_cistatic inline int xen_register_device_domain_owner(struct pci_dev *dev, 328c2ecf20Sopenharmony_ci uint16_t domain) 338c2ecf20Sopenharmony_ci{ 348c2ecf20Sopenharmony_ci return -1; 358c2ecf20Sopenharmony_ci} 368c2ecf20Sopenharmony_cistatic inline int xen_unregister_device_domain_owner(struct pci_dev *dev) 378c2ecf20Sopenharmony_ci{ 388c2ecf20Sopenharmony_ci return -1; 398c2ecf20Sopenharmony_ci} 408c2ecf20Sopenharmony_ci#endif 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci#if defined(CONFIG_PCI_MSI) 438c2ecf20Sopenharmony_ci#if defined(CONFIG_PCI_XEN) 448c2ecf20Sopenharmony_ci/* The drivers/pci/xen-pcifront.c sets this structure to 458c2ecf20Sopenharmony_ci * its own functions. 468c2ecf20Sopenharmony_ci */ 478c2ecf20Sopenharmony_cistruct xen_pci_frontend_ops { 488c2ecf20Sopenharmony_ci int (*enable_msi)(struct pci_dev *dev, int vectors[]); 498c2ecf20Sopenharmony_ci void (*disable_msi)(struct pci_dev *dev); 508c2ecf20Sopenharmony_ci int (*enable_msix)(struct pci_dev *dev, int vectors[], int nvec); 518c2ecf20Sopenharmony_ci void (*disable_msix)(struct pci_dev *dev); 528c2ecf20Sopenharmony_ci}; 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ciextern struct xen_pci_frontend_ops *xen_pci_frontend; 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_cistatic inline int xen_pci_frontend_enable_msi(struct pci_dev *dev, 578c2ecf20Sopenharmony_ci int vectors[]) 588c2ecf20Sopenharmony_ci{ 598c2ecf20Sopenharmony_ci if (xen_pci_frontend && xen_pci_frontend->enable_msi) 608c2ecf20Sopenharmony_ci return xen_pci_frontend->enable_msi(dev, vectors); 618c2ecf20Sopenharmony_ci return -ENOSYS; 628c2ecf20Sopenharmony_ci} 638c2ecf20Sopenharmony_cistatic inline void xen_pci_frontend_disable_msi(struct pci_dev *dev) 648c2ecf20Sopenharmony_ci{ 658c2ecf20Sopenharmony_ci if (xen_pci_frontend && xen_pci_frontend->disable_msi) 668c2ecf20Sopenharmony_ci xen_pci_frontend->disable_msi(dev); 678c2ecf20Sopenharmony_ci} 688c2ecf20Sopenharmony_cistatic inline int xen_pci_frontend_enable_msix(struct pci_dev *dev, 698c2ecf20Sopenharmony_ci int vectors[], int nvec) 708c2ecf20Sopenharmony_ci{ 718c2ecf20Sopenharmony_ci if (xen_pci_frontend && xen_pci_frontend->enable_msix) 728c2ecf20Sopenharmony_ci return xen_pci_frontend->enable_msix(dev, vectors, nvec); 738c2ecf20Sopenharmony_ci return -ENOSYS; 748c2ecf20Sopenharmony_ci} 758c2ecf20Sopenharmony_cistatic inline void xen_pci_frontend_disable_msix(struct pci_dev *dev) 768c2ecf20Sopenharmony_ci{ 778c2ecf20Sopenharmony_ci if (xen_pci_frontend && xen_pci_frontend->disable_msix) 788c2ecf20Sopenharmony_ci xen_pci_frontend->disable_msix(dev); 798c2ecf20Sopenharmony_ci} 808c2ecf20Sopenharmony_ci#endif /* CONFIG_PCI_XEN */ 818c2ecf20Sopenharmony_ci#endif /* CONFIG_PCI_MSI */ 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci#endif /* _ASM_X86_XEN_PCI_H */ 84