|  | #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*/ |