1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3 * SVA library for IOMMU drivers
4 */
5 #ifndef _IOMMU_SVA_H
6 #define _IOMMU_SVA_H
7
8 #include <linux/mm_types.h>
9
10 /* I/O Page fault */
11 struct device;
12 struct iommu_fault;
13 struct iopf_queue;
14
15 #ifdef CONFIG_IOMMU_SVA
16 int iommu_queue_iopf(struct iommu_fault *fault, void *cookie);
17
18 int iopf_queue_add_device(struct iopf_queue *queue, struct device *dev);
19 int iopf_queue_remove_device(struct iopf_queue *queue,
20 struct device *dev);
21 int iopf_queue_flush_dev(struct device *dev);
22 struct iopf_queue *iopf_queue_alloc(const char *name);
23 void iopf_queue_free(struct iopf_queue *queue);
24 int iopf_queue_discard_partial(struct iopf_queue *queue);
25 enum iommu_page_response_code
26 iommu_sva_handle_iopf(struct iommu_fault *fault, void *data);
27
28 #else /* CONFIG_IOMMU_SVA */
iommu_queue_iopf(struct iommu_fault * fault,void * cookie)29 static inline int iommu_queue_iopf(struct iommu_fault *fault, void *cookie)
30 {
31 return -ENODEV;
32 }
33
iopf_queue_add_device(struct iopf_queue * queue,struct device * dev)34 static inline int iopf_queue_add_device(struct iopf_queue *queue,
35 struct device *dev)
36 {
37 return -ENODEV;
38 }
39
iopf_queue_remove_device(struct iopf_queue * queue,struct device * dev)40 static inline int iopf_queue_remove_device(struct iopf_queue *queue,
41 struct device *dev)
42 {
43 return -ENODEV;
44 }
45
iopf_queue_flush_dev(struct device * dev)46 static inline int iopf_queue_flush_dev(struct device *dev)
47 {
48 return -ENODEV;
49 }
50
iopf_queue_alloc(const char * name)51 static inline struct iopf_queue *iopf_queue_alloc(const char *name)
52 {
53 return NULL;
54 }
55
iopf_queue_free(struct iopf_queue * queue)56 static inline void iopf_queue_free(struct iopf_queue *queue)
57 {
58 }
59
iopf_queue_discard_partial(struct iopf_queue * queue)60 static inline int iopf_queue_discard_partial(struct iopf_queue *queue)
61 {
62 return -ENODEV;
63 }
64
65 static inline enum iommu_page_response_code
iommu_sva_handle_iopf(struct iommu_fault * fault,void * data)66 iommu_sva_handle_iopf(struct iommu_fault *fault, void *data)
67 {
68 return IOMMU_PAGE_RESP_INVALID;
69 }
70 #endif /* CONFIG_IOMMU_SVA */
71 #endif /* _IOMMU_SVA_H */
72