linux/arch/x86/include/asm/xen/pci.h
<<
>>
Prefs
   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)
   6extern int __init pci_xen_init(void);
   7extern 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)
  12static inline int pci_xen_hvm_init(void)
  13{
  14        return -1;
  15}
  16#endif
  17#if defined(CONFIG_XEN_DOM0)
  18int __init pci_xen_initial_domain(void);
  19int xen_find_device_domain_owner(struct pci_dev *dev);
  20int xen_register_device_domain_owner(struct pci_dev *dev, uint16_t domain);
  21int xen_unregister_device_domain_owner(struct pci_dev *dev);
  22#else
  23static inline int __init pci_xen_initial_domain(void)
  24{
  25        return -1;
  26}
  27static inline int xen_find_device_domain_owner(struct pci_dev *dev)
  28{
  29        return -1;
  30}
  31static inline int xen_register_device_domain_owner(struct pci_dev *dev,
  32                                                   uint16_t domain)
  33{
  34        return -1;
  35}
  36static 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 */
  47struct 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
  54extern struct xen_pci_frontend_ops *xen_pci_frontend;
  55
  56static 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}
  63static 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}
  68static 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}
  75static 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