xref: /openbmc/linux/drivers/iommu/iommu-sva.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
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