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_IOV 16 17 extern int pci_enable_ats(struct pci_dev *dev, int ps); 18 extern void pci_disable_ats(struct pci_dev *dev); 19 extern 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_IOV */ 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_IOV */ 54 55 #ifdef CONFIG_PCI_PRI 56 57 extern int pci_enable_pri(struct pci_dev *pdev, u32 reqs); 58 extern void pci_disable_pri(struct pci_dev *pdev); 59 extern bool pci_pri_enabled(struct pci_dev *pdev); 60 extern int pci_reset_pri(struct pci_dev *pdev); 61 extern bool pci_pri_stopped(struct pci_dev *pdev); 62 extern int pci_pri_status(struct pci_dev *pdev); 63 64 #else /* CONFIG_PCI_PRI */ 65 66 static inline int pci_enable_pri(struct pci_dev *pdev, u32 reqs) 67 { 68 return -ENODEV; 69 } 70 71 static inline void pci_disable_pri(struct pci_dev *pdev) 72 { 73 } 74 75 static inline bool pci_pri_enabled(struct pci_dev *pdev) 76 { 77 return false; 78 } 79 80 static inline int pci_reset_pri(struct pci_dev *pdev) 81 { 82 return -ENODEV; 83 } 84 85 static inline bool pci_pri_stopped(struct pci_dev *pdev) 86 { 87 return true; 88 } 89 90 static inline int pci_pri_status(struct pci_dev *pdev) 91 { 92 return -ENODEV; 93 } 94 #endif /* CONFIG_PCI_PRI */ 95 96 #ifdef CONFIG_PCI_PASID 97 98 extern int pci_enable_pasid(struct pci_dev *pdev, int features); 99 extern void pci_disable_pasid(struct pci_dev *pdev); 100 extern int pci_pasid_features(struct pci_dev *pdev); 101 extern int pci_max_pasids(struct pci_dev *pdev); 102 103 #else /* CONFIG_PCI_PASID */ 104 105 static inline int pci_enable_pasid(struct pci_dev *pdev, int features) 106 { 107 return -EINVAL; 108 } 109 110 static inline void pci_disable_pasid(struct pci_dev *pdev) 111 { 112 } 113 114 static inline int pci_pasid_features(struct pci_dev *pdev) 115 { 116 return -EINVAL; 117 } 118 119 static inline int pci_max_pasids(struct pci_dev *pdev) 120 { 121 return -EINVAL; 122 } 123 124 #endif /* CONFIG_PCI_PASID */ 125 126 127 #endif /* LINUX_PCI_ATS_H*/ 128