pci-ats.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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_IOV
  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_IOV */
  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_IOV */
  43. #endif /* LINUX_PCI_ATS_H*/