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