pci-ats.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #ifndef LINUX_PCI_ATS_H
  2. #define LINUX_PCI_ATS_H
  3. #include <linux/pci.h>
  4. /* Address Translation Service */
  5. struct pci_ats {
  6. int pos; /* capability position */
  7. int stu; /* Smallest Translation Unit */
  8. int qdep; /* Invalidate Queue Depth */
  9. int ref_cnt; /* Physical Function reference count */
  10. unsigned int is_enabled:1; /* Enable bit is set */
  11. };
  12. #ifdef CONFIG_PCI_ATS
  13. extern int pci_enable_ats(struct pci_dev *dev, int ps);
  14. extern void pci_disable_ats(struct pci_dev *dev);
  15. extern int pci_ats_queue_depth(struct pci_dev *dev);
  16. /**
  17. * pci_ats_enabled - query the ATS status
  18. * @dev: the PCI device
  19. *
  20. * Returns 1 if ATS capability is enabled, or 0 if not.
  21. */
  22. static inline int pci_ats_enabled(struct pci_dev *dev)
  23. {
  24. return dev->ats && dev->ats->is_enabled;
  25. }
  26. #else /* CONFIG_PCI_ATS */
  27. static inline int pci_enable_ats(struct pci_dev *dev, int ps)
  28. {
  29. return -ENODEV;
  30. }
  31. static inline void pci_disable_ats(struct pci_dev *dev)
  32. {
  33. }
  34. static inline int pci_ats_queue_depth(struct pci_dev *dev)
  35. {
  36. return -ENODEV;
  37. }
  38. static inline int pci_ats_enabled(struct pci_dev *dev)
  39. {
  40. return 0;
  41. }
  42. #endif /* CONFIG_PCI_ATS */
  43. #ifdef CONFIG_PCI_PRI
  44. extern int pci_enable_pri(struct pci_dev *pdev, u32 reqs);
  45. extern void pci_disable_pri(struct pci_dev *pdev);
  46. extern bool pci_pri_enabled(struct pci_dev *pdev);
  47. extern int pci_reset_pri(struct pci_dev *pdev);
  48. extern bool pci_pri_stopped(struct pci_dev *pdev);
  49. extern int pci_pri_status(struct pci_dev *pdev);
  50. #else /* CONFIG_PCI_PRI */
  51. static inline int pci_enable_pri(struct pci_dev *pdev, u32 reqs)
  52. {
  53. return -ENODEV;
  54. }
  55. static inline void pci_disable_pri(struct pci_dev *pdev)
  56. {
  57. }
  58. static inline bool pci_pri_enabled(struct pci_dev *pdev)
  59. {
  60. return false;
  61. }
  62. static inline int pci_reset_pri(struct pci_dev *pdev)
  63. {
  64. return -ENODEV;
  65. }
  66. static inline bool pci_pri_stopped(struct pci_dev *pdev)
  67. {
  68. return true;
  69. }
  70. static inline int pci_pri_status(struct pci_dev *pdev)
  71. {
  72. return -ENODEV;
  73. }
  74. #endif /* CONFIG_PCI_PRI */
  75. #ifdef CONFIG_PCI_PASID
  76. extern int pci_enable_pasid(struct pci_dev *pdev, int features);
  77. extern void pci_disable_pasid(struct pci_dev *pdev);
  78. extern int pci_pasid_features(struct pci_dev *pdev);
  79. extern int pci_max_pasids(struct pci_dev *pdev);
  80. #else /* CONFIG_PCI_PASID */
  81. static inline int pci_enable_pasid(struct pci_dev *pdev, int features)
  82. {
  83. return -EINVAL;
  84. }
  85. static inline void pci_disable_pasid(struct pci_dev *pdev)
  86. {
  87. }
  88. static inline int pci_pasid_features(struct pci_dev *pdev)
  89. {
  90. return -EINVAL;
  91. }
  92. static inline int pci_max_pasids(struct pci_dev *pdev)
  93. {
  94. return -EINVAL;
  95. }
  96. #endif /* CONFIG_PCI_PASID */
  97. #endif /* LINUX_PCI_ATS_H*/