pci.h 1.8 KB

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