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 */
9bool pci_ats_supported(struct pci_dev *dev);
10int pci_enable_ats(struct pci_dev *dev, int ps);
11void pci_disable_ats(struct pci_dev *dev);
12int pci_ats_queue_depth(struct pci_dev *dev);
13int pci_ats_page_aligned(struct pci_dev *dev);
14#else /* CONFIG_PCI_ATS */
15static inline bool pci_ats_supported(struct pci_dev *d)
16{ return false; }
17static inline int pci_enable_ats(struct pci_dev *d, int ps)
18{ return -ENODEV; }
19static inline void pci_disable_ats(struct pci_dev *d) { }
20static inline int pci_ats_queue_depth(struct pci_dev *d)
21{ return -ENODEV; }
22static inline int pci_ats_page_aligned(struct pci_dev *dev)
23{ return 0; }
24#endif /* CONFIG_PCI_ATS */
25
26#ifdef CONFIG_PCI_PRI
27int pci_enable_pri(struct pci_dev *pdev, u32 reqs);
28void pci_disable_pri(struct pci_dev *pdev);
29int pci_reset_pri(struct pci_dev *pdev);
30int pci_prg_resp_pasid_required(struct pci_dev *pdev);
31bool pci_pri_supported(struct pci_dev *pdev);
32#else
33static inline bool pci_pri_supported(struct pci_dev *pdev)
34{ return false; }
35#endif /* CONFIG_PCI_PRI */
36
37#ifdef CONFIG_PCI_PASID
38int pci_enable_pasid(struct pci_dev *pdev, int features);
39void pci_disable_pasid(struct pci_dev *pdev);
40int pci_pasid_features(struct pci_dev *pdev);
41int pci_max_pasids(struct pci_dev *pdev);
42#else /* CONFIG_PCI_PASID */
43static inline int pci_enable_pasid(struct pci_dev *pdev, int features)
44{ return -EINVAL; }
45static inline void pci_disable_pasid(struct pci_dev *pdev) { }
46static inline int pci_pasid_features(struct pci_dev *pdev)
47{ return -EINVAL; }
48static inline int pci_max_pasids(struct pci_dev *pdev)
49{ return -EINVAL; }
50#endif /* CONFIG_PCI_PASID */
51
52#endif /* LINUX_PCI_ATS_H */
53