pci.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. int __init pci_xen_initial_domain(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 int __init pci_xen_initial_domain(void)
  22. {
  23. return -1;
  24. }
  25. static inline int xen_find_device_domain_owner(struct pci_dev *dev)
  26. {
  27. return -1;
  28. }
  29. static inline int xen_register_device_domain_owner(struct pci_dev *dev,
  30. uint16_t domain)
  31. {
  32. return -1;
  33. }
  34. static inline int xen_unregister_device_domain_owner(struct pci_dev *dev)
  35. {
  36. return -1;
  37. }
  38. #endif
  39. #if defined(CONFIG_PCI_MSI)
  40. #if defined(CONFIG_PCI_XEN)
  41. /* The drivers/pci/xen-pcifront.c sets this structure to
  42. * its own functions.
  43. */
  44. struct xen_pci_frontend_ops {
  45. int (*enable_msi)(struct pci_dev *dev, int vectors[]);
  46. void (*disable_msi)(struct pci_dev *dev);
  47. int (*enable_msix)(struct pci_dev *dev, int vectors[], int nvec);
  48. void (*disable_msix)(struct pci_dev *dev);
  49. };
  50. extern struct xen_pci_frontend_ops *xen_pci_frontend;
  51. static inline int xen_pci_frontend_enable_msi(struct pci_dev *dev,
  52. int vectors[])
  53. {
  54. if (xen_pci_frontend && xen_pci_frontend->enable_msi)
  55. return xen_pci_frontend->enable_msi(dev, vectors);
  56. return -ENODEV;
  57. }
  58. static inline void xen_pci_frontend_disable_msi(struct pci_dev *dev)
  59. {
  60. if (xen_pci_frontend && xen_pci_frontend->disable_msi)
  61. xen_pci_frontend->disable_msi(dev);
  62. }
  63. static inline int xen_pci_frontend_enable_msix(struct pci_dev *dev,
  64. int vectors[], int nvec)
  65. {
  66. if (xen_pci_frontend && xen_pci_frontend->enable_msix)
  67. return xen_pci_frontend->enable_msix(dev, vectors, nvec);
  68. return -ENODEV;
  69. }
  70. static inline void xen_pci_frontend_disable_msix(struct pci_dev *dev)
  71. {
  72. if (xen_pci_frontend && xen_pci_frontend->disable_msix)
  73. xen_pci_frontend->disable_msix(dev);
  74. }
  75. #endif /* CONFIG_PCI_XEN */
  76. #endif /* CONFIG_PCI_MSI */
  77. #endif /* _ASM_X86_XEN_PCI_H */