1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef LINUX_PCI_ATS_H
3  #define LINUX_PCI_ATS_H
4  
5  #include <linux/pci.h>
6  
7  #ifdef CONFIG_PCI_ATS
8  /* Address Translation Service */
9  bool pci_ats_supported(struct pci_dev *dev);
10  int pci_enable_ats(struct pci_dev *dev, int ps);
11  int pci_prepare_ats(struct pci_dev *dev, int ps);
12  void pci_disable_ats(struct pci_dev *dev);
13  int pci_ats_queue_depth(struct pci_dev *dev);
14  int pci_ats_page_aligned(struct pci_dev *dev);
15  #else /* CONFIG_PCI_ATS */
pci_ats_supported(struct pci_dev * d)16  static inline bool pci_ats_supported(struct pci_dev *d)
17  { return false; }
pci_enable_ats(struct pci_dev * d,int ps)18  static inline int pci_enable_ats(struct pci_dev *d, int ps)
19  { return -ENODEV; }
pci_prepare_ats(struct pci_dev * dev,int ps)20  static inline int pci_prepare_ats(struct pci_dev *dev, int ps)
21  { return -ENODEV; }
pci_disable_ats(struct pci_dev * d)22  static inline void pci_disable_ats(struct pci_dev *d) { }
pci_ats_queue_depth(struct pci_dev * d)23  static inline int pci_ats_queue_depth(struct pci_dev *d)
24  { return -ENODEV; }
pci_ats_page_aligned(struct pci_dev * dev)25  static inline int pci_ats_page_aligned(struct pci_dev *dev)
26  { return 0; }
27  #endif /* CONFIG_PCI_ATS */
28  
29  #ifdef CONFIG_PCI_PRI
30  int pci_enable_pri(struct pci_dev *pdev, u32 reqs);
31  void pci_disable_pri(struct pci_dev *pdev);
32  int pci_reset_pri(struct pci_dev *pdev);
33  int pci_prg_resp_pasid_required(struct pci_dev *pdev);
34  bool pci_pri_supported(struct pci_dev *pdev);
35  #else
pci_pri_supported(struct pci_dev * pdev)36  static inline bool pci_pri_supported(struct pci_dev *pdev)
37  { return false; }
38  #endif /* CONFIG_PCI_PRI */
39  
40  #ifdef CONFIG_PCI_PASID
41  int pci_enable_pasid(struct pci_dev *pdev, int features);
42  void pci_disable_pasid(struct pci_dev *pdev);
43  int pci_pasid_features(struct pci_dev *pdev);
44  int pci_max_pasids(struct pci_dev *pdev);
45  #else /* CONFIG_PCI_PASID */
pci_enable_pasid(struct pci_dev * pdev,int features)46  static inline int pci_enable_pasid(struct pci_dev *pdev, int features)
47  { return -EINVAL; }
pci_disable_pasid(struct pci_dev * pdev)48  static inline void pci_disable_pasid(struct pci_dev *pdev) { }
pci_pasid_features(struct pci_dev * pdev)49  static inline int pci_pasid_features(struct pci_dev *pdev)
50  { return -EINVAL; }
pci_max_pasids(struct pci_dev * pdev)51  static inline int pci_max_pasids(struct pci_dev *pdev)
52  { return -EINVAL; }
53  #endif /* CONFIG_PCI_PASID */
54  
55  #endif /* LINUX_PCI_ATS_H */
56