pci-ats.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. int pci_enable_ats(struct pci_dev *dev, int ps);
  14. void pci_disable_ats(struct pci_dev *dev);
  15. 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. int pci_enable_pri(struct pci_dev *pdev, u32 reqs);
  45. void pci_disable_pri(struct pci_dev *pdev);
  46. int pci_reset_pri(struct pci_dev *pdev);
  47. #else /* CONFIG_PCI_PRI */
  48. static inline int pci_enable_pri(struct pci_dev *pdev, u32 reqs)
  49. {
  50. return -ENODEV;
  51. }
  52. static inline void pci_disable_pri(struct pci_dev *pdev)
  53. {
  54. }
  55. static inline int pci_reset_pri(struct pci_dev *pdev)
  56. {
  57. return -ENODEV;
  58. }
  59. #endif /* CONFIG_PCI_PRI */
  60. #ifdef CONFIG_PCI_PASID
  61. int pci_enable_pasid(struct pci_dev *pdev, int features);
  62. void pci_disable_pasid(struct pci_dev *pdev);
  63. int pci_pasid_features(struct pci_dev *pdev);
  64. int pci_max_pasids(struct pci_dev *pdev);
  65. #else /* CONFIG_PCI_PASID */
  66. static inline int pci_enable_pasid(struct pci_dev *pdev, int features)
  67. {
  68. return -EINVAL;
  69. }
  70. static inline void pci_disable_pasid(struct pci_dev *pdev)
  71. {
  72. }
  73. static inline int pci_pasid_features(struct pci_dev *pdev)
  74. {
  75. return -EINVAL;
  76. }
  77. static inline int pci_max_pasids(struct pci_dev *pdev)
  78. {
  79. return -EINVAL;
  80. }
  81. #endif /* CONFIG_PCI_PASID */
  82. #endif /* LINUX_PCI_ATS_H*/