pci.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #ifndef _ASM_X86_XEN_PCI_H
  2. #define _ASM_X86_XEN_PCI_H
  3. #if defined(CONFIG_PCI_XEN)
  4. extern int __init pci_xen_init(void);
  5. extern int __init pci_xen_hvm_init(void);
  6. #define pci_xen 1
  7. #else
  8. #define pci_xen 0
  9. #define pci_xen_init (0)
  10. static inline int pci_xen_hvm_init(void)
  11. {
  12. return -1;
  13. }
  14. #endif
  15. #if defined(CONFIG_XEN_DOM0)
  16. void __init xen_setup_pirqs(void);
  17. int xen_find_device_domain_owner(struct pci_dev *dev);
  18. int xen_register_device_domain_owner(struct pci_dev *dev, uint16_t domain);
  19. int xen_unregister_device_domain_owner(struct pci_dev *dev);
  20. #else
  21. static inline void __init xen_setup_pirqs(void)
  22. {
  23. }
  24. static inline int xen_find_device_domain_owner(struct pci_dev *dev)
  25. {
  26. return -1;
  27. }
  28. static inline int xen_register_device_domain_owner(struct pci_dev *dev,
  29. uint16_t domain)
  30. {
  31. return -1;
  32. }
  33. static inline int xen_unregister_device_domain_owner(struct pci_dev *dev)
  34. {
  35. return -1;
  36. }
  37. #endif
  38. #if defined(CONFIG_PCI_MSI)
  39. #if defined(CONFIG_PCI_XEN)
  40. /* The drivers/pci/xen-pcifront.c sets this structure to
  41. * its own functions.
  42. */
  43. struct xen_pci_frontend_ops {
  44. int (*enable_msi)(struct pci_dev *dev, int vectors[]);
  45. void (*disable_msi)(struct pci_dev *dev);
  46. int (*enable_msix)(struct pci_dev *dev, int vectors[], int nvec);
  47. void (*disable_msix)(struct pci_dev *dev);
  48. };
  49. extern struct xen_pci_frontend_ops *xen_pci_frontend;
  50. static inline int xen_pci_frontend_enable_msi(struct pci_dev *dev,
  51. int vectors[])
  52. {
  53. if (xen_pci_frontend && xen_pci_frontend->enable_msi)
  54. return xen_pci_frontend->enable_msi(dev, vectors);
  55. return -ENODEV;
  56. }
  57. static inline void xen_pci_frontend_disable_msi(struct pci_dev *dev)
  58. {
  59. if (xen_pci_frontend && xen_pci_frontend->disable_msi)
  60. xen_pci_frontend->disable_msi(dev);
  61. }
  62. static inline int xen_pci_frontend_enable_msix(struct pci_dev *dev,
  63. int vectors[], int nvec)
  64. {
  65. if (xen_pci_frontend && xen_pci_frontend->enable_msix)
  66. return xen_pci_frontend->enable_msix(dev, vectors, nvec);
  67. return -ENODEV;
  68. }
  69. static inline void xen_pci_frontend_disable_msix(struct pci_dev *dev)
  70. {
  71. if (xen_pci_frontend && xen_pci_frontend->disable_msix)
  72. xen_pci_frontend->disable_msix(dev);
  73. }
  74. #endif /* CONFIG_PCI_XEN */
  75. #endif /* CONFIG_PCI_MSI */
  76. #endif /* _ASM_X86_XEN_PCI_H */