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