1 #ifndef LINUX_PCI_ATS_H 2 #define LINUX_PCI_ATS_H 3 4 #include <linux/pci.h> 5 6 /* Address Translation Service */ 7 struct 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 17 int pci_enable_ats(struct pci_dev *dev, int ps); 18 void pci_disable_ats(struct pci_dev *dev); 19 int 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 */ 27 static 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 34 static inline int pci_enable_ats(struct pci_dev *dev, int ps) 35 { 36 return -ENODEV; 37 } 38 39 static inline void pci_disable_ats(struct pci_dev *dev) 40 { 41 } 42 43 static inline int pci_ats_queue_depth(struct pci_dev *dev) 44 { 45 return -ENODEV; 46 } 47 48 static 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 57 int pci_enable_pri(struct pci_dev *pdev, u32 reqs); 58 void pci_disable_pri(struct pci_dev *pdev); 59 int pci_reset_pri(struct pci_dev *pdev); 60 61 #else /* CONFIG_PCI_PRI */ 62 63 static inline int pci_enable_pri(struct pci_dev *pdev, u32 reqs) 64 { 65 return -ENODEV; 66 } 67 68 static inline void pci_disable_pri(struct pci_dev *pdev) 69 { 70 } 71 72 static 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 81 int pci_enable_pasid(struct pci_dev *pdev, int features); 82 void pci_disable_pasid(struct pci_dev *pdev); 83 int pci_pasid_features(struct pci_dev *pdev); 84 int pci_max_pasids(struct pci_dev *pdev); 85 86 #else /* CONFIG_PCI_PASID */ 87 88 static inline int pci_enable_pasid(struct pci_dev *pdev, int features) 89 { 90 return -EINVAL; 91 } 92 93 static inline void pci_disable_pasid(struct pci_dev *pdev) 94 { 95 } 96 97 static inline int pci_pasid_features(struct pci_dev *pdev) 98 { 99 return -EINVAL; 100 } 101 102 static 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