| #ifndef LINUX_PCI_ATS_H | |
| #define LINUX_PCI_ATS_H | |
| #include <linux/pci.h> | |
| /* Address Translation Service */ | |
| struct pci_ats { | |
| int pos; /* capability position */ | |
| int stu; /* Smallest Translation Unit */ | |
| int qdep; /* Invalidate Queue Depth */ | |
| int ref_cnt; /* Physical Function reference count */ | |
| unsigned int is_enabled:1; /* Enable bit is set */ | |
| }; | |
| #ifdef CONFIG_PCI_ATS | |
| extern int pci_enable_ats(struct pci_dev *dev, int ps); | |
| extern void pci_disable_ats(struct pci_dev *dev); | |
| extern int pci_ats_queue_depth(struct pci_dev *dev); | |
| /** | |
| * pci_ats_enabled - query the ATS status | |
| * @dev: the PCI device | |
| * | |
| * Returns 1 if ATS capability is enabled, or 0 if not. | |
| */ | |
| static inline int pci_ats_enabled(struct pci_dev *dev) | |
| { | |
| return dev->ats && dev->ats->is_enabled; | |
| } | |
| #else /* CONFIG_PCI_ATS */ | |
| static inline int pci_enable_ats(struct pci_dev *dev, int ps) | |
| { | |
| return -ENODEV; | |
| } | |
| static inline void pci_disable_ats(struct pci_dev *dev) | |
| { | |
| } | |
| static inline int pci_ats_queue_depth(struct pci_dev *dev) | |
| { | |
| return -ENODEV; | |
| } | |
| static inline int pci_ats_enabled(struct pci_dev *dev) | |
| { | |
| return 0; | |
| } | |
| #endif /* CONFIG_PCI_ATS */ | |
| #ifdef CONFIG_PCI_PRI | |
| extern int pci_enable_pri(struct pci_dev *pdev, u32 reqs); | |
| extern void pci_disable_pri(struct pci_dev *pdev); | |
| extern bool pci_pri_enabled(struct pci_dev *pdev); | |
| extern int pci_reset_pri(struct pci_dev *pdev); | |
| extern bool pci_pri_stopped(struct pci_dev *pdev); | |
| extern int pci_pri_status(struct pci_dev *pdev); | |
| #else /* CONFIG_PCI_PRI */ | |
| static inline int pci_enable_pri(struct pci_dev *pdev, u32 reqs) | |
| { | |
| return -ENODEV; | |
| } | |
| static inline void pci_disable_pri(struct pci_dev *pdev) | |
| { | |
| } | |
| static inline bool pci_pri_enabled(struct pci_dev *pdev) | |
| { | |
| return false; | |
| } | |
| static inline int pci_reset_pri(struct pci_dev *pdev) | |
| { | |
| return -ENODEV; | |
| } | |
| static inline bool pci_pri_stopped(struct pci_dev *pdev) | |
| { | |
| return true; | |
| } | |
| static inline int pci_pri_status(struct pci_dev *pdev) | |
| { | |
| return -ENODEV; | |
| } | |
| #endif /* CONFIG_PCI_PRI */ | |
| #ifdef CONFIG_PCI_PASID | |
| extern int pci_enable_pasid(struct pci_dev *pdev, int features); | |
| extern void pci_disable_pasid(struct pci_dev *pdev); | |
| extern int pci_pasid_features(struct pci_dev *pdev); | |
| extern int pci_max_pasids(struct pci_dev *pdev); | |
| #else /* CONFIG_PCI_PASID */ | |
| static inline int pci_enable_pasid(struct pci_dev *pdev, int features) | |
| { | |
| return -EINVAL; | |
| } | |
| static inline void pci_disable_pasid(struct pci_dev *pdev) | |
| { | |
| } | |
| static inline int pci_pasid_features(struct pci_dev *pdev) | |
| { | |
| return -EINVAL; | |
| } | |
| static inline int pci_max_pasids(struct pci_dev *pdev) | |
| { | |
| return -EINVAL; | |
| } | |
| #endif /* CONFIG_PCI_PASID */ | |
| #endif /* LINUX_PCI_ATS_H*/ |