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