1
2
3
4
5
6
7#ifndef __LINUX_IOMMU_H
8#define __LINUX_IOMMU_H
9
10#include <linux/scatterlist.h>
11#include <linux/device.h>
12#include <linux/types.h>
13#include <linux/errno.h>
14#include <linux/err.h>
15#include <linux/of.h>
16#include <linux/ioasid.h>
17#include <uapi/linux/iommu.h>
18
19#define IOMMU_READ (1 << 0)
20#define IOMMU_WRITE (1 << 1)
21#define IOMMU_CACHE (1 << 2)
22#define IOMMU_NOEXEC (1 << 3)
23#define IOMMU_MMIO (1 << 4)
24
25
26
27
28
29
30
31
32
33#define IOMMU_PRIV (1 << 5)
34
35struct iommu_ops;
36struct iommu_group;
37struct bus_type;
38struct device;
39struct iommu_domain;
40struct notifier_block;
41struct iommu_sva;
42struct iommu_fault_event;
43
44
45#define IOMMU_FAULT_READ 0x0
46#define IOMMU_FAULT_WRITE 0x1
47
48typedef int (*iommu_fault_handler_t)(struct iommu_domain *,
49 struct device *, unsigned long, int, void *);
50typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
51
52struct iommu_domain_geometry {
53 dma_addr_t aperture_start;
54 dma_addr_t aperture_end;
55 bool force_aperture;
56};
57
58
59#define __IOMMU_DOMAIN_PAGING (1U << 0)
60#define __IOMMU_DOMAIN_DMA_API (1U << 1)
61
62#define __IOMMU_DOMAIN_PT (1U << 2)
63
64
65
66
67
68
69
70
71
72
73
74
75
76#define IOMMU_DOMAIN_BLOCKED (0U)
77#define IOMMU_DOMAIN_IDENTITY (__IOMMU_DOMAIN_PT)
78#define IOMMU_DOMAIN_UNMANAGED (__IOMMU_DOMAIN_PAGING)
79#define IOMMU_DOMAIN_DMA (__IOMMU_DOMAIN_PAGING | \
80 __IOMMU_DOMAIN_DMA_API)
81
82struct iommu_domain {
83 unsigned type;
84 const struct iommu_ops *ops;
85 unsigned long pgsize_bitmap;
86 iommu_fault_handler_t handler;
87 void *handler_token;
88 struct iommu_domain_geometry geometry;
89 void *iova_cookie;
90};
91
92enum iommu_cap {
93 IOMMU_CAP_CACHE_COHERENCY,
94
95 IOMMU_CAP_INTR_REMAP,
96 IOMMU_CAP_NOEXEC,
97};
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112enum iommu_attr {
113 DOMAIN_ATTR_GEOMETRY,
114 DOMAIN_ATTR_PAGING,
115 DOMAIN_ATTR_WINDOWS,
116 DOMAIN_ATTR_FSL_PAMU_STASH,
117 DOMAIN_ATTR_FSL_PAMU_ENABLE,
118 DOMAIN_ATTR_FSL_PAMUV1,
119 DOMAIN_ATTR_NESTING,
120 DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE,
121 DOMAIN_ATTR_MAX,
122};
123
124
125enum iommu_resv_type {
126
127 IOMMU_RESV_DIRECT,
128
129
130
131
132
133 IOMMU_RESV_DIRECT_RELAXABLE,
134
135 IOMMU_RESV_RESERVED,
136
137 IOMMU_RESV_MSI,
138
139 IOMMU_RESV_SW_MSI,
140};
141
142
143
144
145
146
147
148
149
150struct iommu_resv_region {
151 struct list_head list;
152 phys_addr_t start;
153 size_t length;
154 int prot;
155 enum iommu_resv_type type;
156};
157
158
159enum iommu_dev_features {
160 IOMMU_DEV_FEAT_AUX,
161 IOMMU_DEV_FEAT_SVA,
162};
163
164#define IOMMU_PASID_INVALID (-1U)
165
166#ifdef CONFIG_IOMMU_API
167
168
169
170
171
172
173
174
175
176
177
178
179struct iommu_iotlb_gather {
180 unsigned long start;
181 unsigned long end;
182 size_t pgsize;
183};
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233struct iommu_ops {
234 bool (*capable)(enum iommu_cap);
235
236
237 struct iommu_domain *(*domain_alloc)(unsigned iommu_domain_type);
238 void (*domain_free)(struct iommu_domain *);
239
240 int (*attach_dev)(struct iommu_domain *domain, struct device *dev);
241 void (*detach_dev)(struct iommu_domain *domain, struct device *dev);
242 int (*map)(struct iommu_domain *domain, unsigned long iova,
243 phys_addr_t paddr, size_t size, int prot, gfp_t gfp);
244 size_t (*unmap)(struct iommu_domain *domain, unsigned long iova,
245 size_t size, struct iommu_iotlb_gather *iotlb_gather);
246 void (*flush_iotlb_all)(struct iommu_domain *domain);
247 void (*iotlb_sync_map)(struct iommu_domain *domain);
248 void (*iotlb_sync)(struct iommu_domain *domain,
249 struct iommu_iotlb_gather *iotlb_gather);
250 phys_addr_t (*iova_to_phys)(struct iommu_domain *domain, dma_addr_t iova);
251 struct iommu_device *(*probe_device)(struct device *dev);
252 void (*release_device)(struct device *dev);
253 void (*probe_finalize)(struct device *dev);
254 struct iommu_group *(*device_group)(struct device *dev);
255 int (*domain_get_attr)(struct iommu_domain *domain,
256 enum iommu_attr attr, void *data);
257 int (*domain_set_attr)(struct iommu_domain *domain,
258 enum iommu_attr attr, void *data);
259
260
261 void (*get_resv_regions)(struct device *dev, struct list_head *list);
262 void (*put_resv_regions)(struct device *dev, struct list_head *list);
263 void (*apply_resv_region)(struct device *dev,
264 struct iommu_domain *domain,
265 struct iommu_resv_region *region);
266
267
268 int (*domain_window_enable)(struct iommu_domain *domain, u32 wnd_nr,
269 phys_addr_t paddr, u64 size, int prot);
270 void (*domain_window_disable)(struct iommu_domain *domain, u32 wnd_nr);
271
272 int (*of_xlate)(struct device *dev, struct of_phandle_args *args);
273 bool (*is_attach_deferred)(struct iommu_domain *domain, struct device *dev);
274
275
276 bool (*dev_has_feat)(struct device *dev, enum iommu_dev_features f);
277 bool (*dev_feat_enabled)(struct device *dev, enum iommu_dev_features f);
278 int (*dev_enable_feat)(struct device *dev, enum iommu_dev_features f);
279 int (*dev_disable_feat)(struct device *dev, enum iommu_dev_features f);
280
281
282 int (*aux_attach_dev)(struct iommu_domain *domain, struct device *dev);
283 void (*aux_detach_dev)(struct iommu_domain *domain, struct device *dev);
284 int (*aux_get_pasid)(struct iommu_domain *domain, struct device *dev);
285
286 struct iommu_sva *(*sva_bind)(struct device *dev, struct mm_struct *mm,
287 void *drvdata);
288 void (*sva_unbind)(struct iommu_sva *handle);
289 u32 (*sva_get_pasid)(struct iommu_sva *handle);
290
291 int (*page_response)(struct device *dev,
292 struct iommu_fault_event *evt,
293 struct iommu_page_response *msg);
294 int (*cache_invalidate)(struct iommu_domain *domain, struct device *dev,
295 struct iommu_cache_invalidate_info *inv_info);
296 int (*sva_bind_gpasid)(struct iommu_domain *domain,
297 struct device *dev, struct iommu_gpasid_bind_data *data);
298
299 int (*sva_unbind_gpasid)(struct device *dev, u32 pasid);
300
301 int (*def_domain_type)(struct device *dev);
302
303 unsigned long pgsize_bitmap;
304 struct module *owner;
305};
306
307
308
309
310
311
312
313
314struct iommu_device {
315 struct list_head list;
316 const struct iommu_ops *ops;
317 struct fwnode_handle *fwnode;
318 struct device *dev;
319};
320
321
322
323
324
325
326
327
328
329
330struct iommu_fault_event {
331 struct iommu_fault fault;
332 struct list_head list;
333};
334
335
336
337
338
339
340
341
342struct iommu_fault_param {
343 iommu_dev_fault_handler_t handler;
344 void *data;
345 struct list_head faults;
346 struct mutex lock;
347};
348
349
350
351
352
353
354
355
356
357
358
359
360struct dev_iommu {
361 struct mutex lock;
362 struct iommu_fault_param *fault_param;
363 struct iommu_fwspec *fwspec;
364 struct iommu_device *iommu_dev;
365 void *priv;
366};
367
368int iommu_device_register(struct iommu_device *iommu);
369void iommu_device_unregister(struct iommu_device *iommu);
370int iommu_device_sysfs_add(struct iommu_device *iommu,
371 struct device *parent,
372 const struct attribute_group **groups,
373 const char *fmt, ...) __printf(4, 5);
374void iommu_device_sysfs_remove(struct iommu_device *iommu);
375int iommu_device_link(struct iommu_device *iommu, struct device *link);
376void iommu_device_unlink(struct iommu_device *iommu, struct device *link);
377
378static inline void __iommu_device_set_ops(struct iommu_device *iommu,
379 const struct iommu_ops *ops)
380{
381 iommu->ops = ops;
382}
383
384#define iommu_device_set_ops(iommu, ops) \
385do { \
386 struct iommu_ops *__ops = (struct iommu_ops *)(ops); \
387 __ops->owner = THIS_MODULE; \
388 __iommu_device_set_ops(iommu, __ops); \
389} while (0)
390
391static inline void iommu_device_set_fwnode(struct iommu_device *iommu,
392 struct fwnode_handle *fwnode)
393{
394 iommu->fwnode = fwnode;
395}
396
397static inline struct iommu_device *dev_to_iommu_device(struct device *dev)
398{
399 return (struct iommu_device *)dev_get_drvdata(dev);
400}
401
402static inline void iommu_iotlb_gather_init(struct iommu_iotlb_gather *gather)
403{
404 *gather = (struct iommu_iotlb_gather) {
405 .start = ULONG_MAX,
406 };
407}
408
409#define IOMMU_GROUP_NOTIFY_ADD_DEVICE 1
410#define IOMMU_GROUP_NOTIFY_DEL_DEVICE 2
411#define IOMMU_GROUP_NOTIFY_BIND_DRIVER 3
412#define IOMMU_GROUP_NOTIFY_BOUND_DRIVER 4
413#define IOMMU_GROUP_NOTIFY_UNBIND_DRIVER 5
414#define IOMMU_GROUP_NOTIFY_UNBOUND_DRIVER 6
415
416extern int bus_set_iommu(struct bus_type *bus, const struct iommu_ops *ops);
417extern int bus_iommu_probe(struct bus_type *bus);
418extern bool iommu_present(struct bus_type *bus);
419extern bool iommu_capable(struct bus_type *bus, enum iommu_cap cap);
420extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus);
421extern struct iommu_group *iommu_group_get_by_id(int id);
422extern void iommu_domain_free(struct iommu_domain *domain);
423extern int iommu_attach_device(struct iommu_domain *domain,
424 struct device *dev);
425extern void iommu_detach_device(struct iommu_domain *domain,
426 struct device *dev);
427extern int iommu_uapi_cache_invalidate(struct iommu_domain *domain,
428 struct device *dev,
429 void __user *uinfo);
430
431extern int iommu_uapi_sva_bind_gpasid(struct iommu_domain *domain,
432 struct device *dev, void __user *udata);
433extern int iommu_uapi_sva_unbind_gpasid(struct iommu_domain *domain,
434 struct device *dev, void __user *udata);
435extern int iommu_sva_unbind_gpasid(struct iommu_domain *domain,
436 struct device *dev, ioasid_t pasid);
437extern struct iommu_domain *iommu_get_domain_for_dev(struct device *dev);
438extern struct iommu_domain *iommu_get_dma_domain(struct device *dev);
439extern int iommu_map(struct iommu_domain *domain, unsigned long iova,
440 phys_addr_t paddr, size_t size, int prot);
441extern int iommu_map_atomic(struct iommu_domain *domain, unsigned long iova,
442 phys_addr_t paddr, size_t size, int prot);
443extern size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova,
444 size_t size);
445extern size_t iommu_unmap_fast(struct iommu_domain *domain,
446 unsigned long iova, size_t size,
447 struct iommu_iotlb_gather *iotlb_gather);
448extern size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
449 struct scatterlist *sg,unsigned int nents, int prot);
450extern size_t iommu_map_sg_atomic(struct iommu_domain *domain,
451 unsigned long iova, struct scatterlist *sg,
452 unsigned int nents, int prot);
453extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova);
454extern void iommu_set_fault_handler(struct iommu_domain *domain,
455 iommu_fault_handler_t handler, void *token);
456
457extern void iommu_get_resv_regions(struct device *dev, struct list_head *list);
458extern void iommu_put_resv_regions(struct device *dev, struct list_head *list);
459extern void generic_iommu_put_resv_regions(struct device *dev,
460 struct list_head *list);
461extern void iommu_set_default_passthrough(bool cmd_line);
462extern void iommu_set_default_translated(bool cmd_line);
463extern bool iommu_default_passthrough(void);
464extern struct iommu_resv_region *
465iommu_alloc_resv_region(phys_addr_t start, size_t length, int prot,
466 enum iommu_resv_type type);
467extern int iommu_get_group_resv_regions(struct iommu_group *group,
468 struct list_head *head);
469
470extern int iommu_attach_group(struct iommu_domain *domain,
471 struct iommu_group *group);
472extern void iommu_detach_group(struct iommu_domain *domain,
473 struct iommu_group *group);
474extern struct iommu_group *iommu_group_alloc(void);
475extern void *iommu_group_get_iommudata(struct iommu_group *group);
476extern void iommu_group_set_iommudata(struct iommu_group *group,
477 void *iommu_data,
478 void (*release)(void *iommu_data));
479extern int iommu_group_set_name(struct iommu_group *group, const char *name);
480extern int iommu_group_add_device(struct iommu_group *group,
481 struct device *dev);
482extern void iommu_group_remove_device(struct device *dev);
483extern int iommu_group_for_each_dev(struct iommu_group *group, void *data,
484 int (*fn)(struct device *, void *));
485extern struct iommu_group *iommu_group_get(struct device *dev);
486extern struct iommu_group *iommu_group_ref_get(struct iommu_group *group);
487extern void iommu_group_put(struct iommu_group *group);
488extern int iommu_group_register_notifier(struct iommu_group *group,
489 struct notifier_block *nb);
490extern int iommu_group_unregister_notifier(struct iommu_group *group,
491 struct notifier_block *nb);
492extern int iommu_register_device_fault_handler(struct device *dev,
493 iommu_dev_fault_handler_t handler,
494 void *data);
495
496extern int iommu_unregister_device_fault_handler(struct device *dev);
497
498extern int iommu_report_device_fault(struct device *dev,
499 struct iommu_fault_event *evt);
500extern int iommu_page_response(struct device *dev,
501 struct iommu_page_response *msg);
502
503extern int iommu_group_id(struct iommu_group *group);
504extern struct iommu_domain *iommu_group_default_domain(struct iommu_group *);
505
506extern int iommu_domain_get_attr(struct iommu_domain *domain, enum iommu_attr,
507 void *data);
508extern int iommu_domain_set_attr(struct iommu_domain *domain, enum iommu_attr,
509 void *data);
510
511
512extern int iommu_domain_window_enable(struct iommu_domain *domain, u32 wnd_nr,
513 phys_addr_t offset, u64 size,
514 int prot);
515extern void iommu_domain_window_disable(struct iommu_domain *domain, u32 wnd_nr);
516
517extern int report_iommu_fault(struct iommu_domain *domain, struct device *dev,
518 unsigned long iova, int flags);
519
520static inline void iommu_flush_iotlb_all(struct iommu_domain *domain)
521{
522 if (domain->ops->flush_iotlb_all)
523 domain->ops->flush_iotlb_all(domain);
524}
525
526static inline void iommu_iotlb_sync(struct iommu_domain *domain,
527 struct iommu_iotlb_gather *iotlb_gather)
528{
529 if (domain->ops->iotlb_sync)
530 domain->ops->iotlb_sync(domain, iotlb_gather);
531
532 iommu_iotlb_gather_init(iotlb_gather);
533}
534
535static inline void iommu_iotlb_gather_add_page(struct iommu_domain *domain,
536 struct iommu_iotlb_gather *gather,
537 unsigned long iova, size_t size)
538{
539 unsigned long start = iova, end = start + size;
540
541
542
543
544
545
546 if (gather->pgsize != size ||
547 end < gather->start || start > gather->end) {
548 if (gather->pgsize)
549 iommu_iotlb_sync(domain, gather);
550 gather->pgsize = size;
551 }
552
553 if (gather->end < end)
554 gather->end = end;
555
556 if (gather->start > start)
557 gather->start = start;
558}
559
560
561extern struct iommu_group *pci_device_group(struct device *dev);
562
563extern struct iommu_group *generic_device_group(struct device *dev);
564
565struct iommu_group *fsl_mc_device_group(struct device *dev);
566
567
568
569
570
571
572
573
574
575
576struct iommu_fwspec {
577 const struct iommu_ops *ops;
578 struct fwnode_handle *iommu_fwnode;
579 u32 flags;
580 u32 num_pasid_bits;
581 unsigned int num_ids;
582 u32 ids[];
583};
584
585
586#define IOMMU_FWSPEC_PCI_RC_ATS (1 << 0)
587
588
589
590
591struct iommu_sva {
592 struct device *dev;
593};
594
595int iommu_fwspec_init(struct device *dev, struct fwnode_handle *iommu_fwnode,
596 const struct iommu_ops *ops);
597void iommu_fwspec_free(struct device *dev);
598int iommu_fwspec_add_ids(struct device *dev, u32 *ids, int num_ids);
599const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode);
600
601static inline struct iommu_fwspec *dev_iommu_fwspec_get(struct device *dev)
602{
603 if (dev->iommu)
604 return dev->iommu->fwspec;
605 else
606 return NULL;
607}
608
609static inline void dev_iommu_fwspec_set(struct device *dev,
610 struct iommu_fwspec *fwspec)
611{
612 dev->iommu->fwspec = fwspec;
613}
614
615static inline void *dev_iommu_priv_get(struct device *dev)
616{
617 return dev->iommu->priv;
618}
619
620static inline void dev_iommu_priv_set(struct device *dev, void *priv)
621{
622 dev->iommu->priv = priv;
623}
624
625int iommu_probe_device(struct device *dev);
626void iommu_release_device(struct device *dev);
627
628bool iommu_dev_has_feature(struct device *dev, enum iommu_dev_features f);
629int iommu_dev_enable_feature(struct device *dev, enum iommu_dev_features f);
630int iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features f);
631bool iommu_dev_feature_enabled(struct device *dev, enum iommu_dev_features f);
632int iommu_aux_attach_device(struct iommu_domain *domain, struct device *dev);
633void iommu_aux_detach_device(struct iommu_domain *domain, struct device *dev);
634int iommu_aux_get_pasid(struct iommu_domain *domain, struct device *dev);
635
636struct iommu_sva *iommu_sva_bind_device(struct device *dev,
637 struct mm_struct *mm,
638 void *drvdata);
639void iommu_sva_unbind_device(struct iommu_sva *handle);
640u32 iommu_sva_get_pasid(struct iommu_sva *handle);
641
642#else
643
644struct iommu_ops {};
645struct iommu_group {};
646struct iommu_fwspec {};
647struct iommu_device {};
648struct iommu_fault_param {};
649struct iommu_iotlb_gather {};
650
651static inline bool iommu_present(struct bus_type *bus)
652{
653 return false;
654}
655
656static inline bool iommu_capable(struct bus_type *bus, enum iommu_cap cap)
657{
658 return false;
659}
660
661static inline struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
662{
663 return NULL;
664}
665
666static inline struct iommu_group *iommu_group_get_by_id(int id)
667{
668 return NULL;
669}
670
671static inline void iommu_domain_free(struct iommu_domain *domain)
672{
673}
674
675static inline int iommu_attach_device(struct iommu_domain *domain,
676 struct device *dev)
677{
678 return -ENODEV;
679}
680
681static inline void iommu_detach_device(struct iommu_domain *domain,
682 struct device *dev)
683{
684}
685
686static inline struct iommu_domain *iommu_get_domain_for_dev(struct device *dev)
687{
688 return NULL;
689}
690
691static inline int iommu_map(struct iommu_domain *domain, unsigned long iova,
692 phys_addr_t paddr, size_t size, int prot)
693{
694 return -ENODEV;
695}
696
697static inline int iommu_map_atomic(struct iommu_domain *domain,
698 unsigned long iova, phys_addr_t paddr,
699 size_t size, int prot)
700{
701 return -ENODEV;
702}
703
704static inline size_t iommu_unmap(struct iommu_domain *domain,
705 unsigned long iova, size_t size)
706{
707 return 0;
708}
709
710static inline size_t iommu_unmap_fast(struct iommu_domain *domain,
711 unsigned long iova, int gfp_order,
712 struct iommu_iotlb_gather *iotlb_gather)
713{
714 return 0;
715}
716
717static inline size_t iommu_map_sg(struct iommu_domain *domain,
718 unsigned long iova, struct scatterlist *sg,
719 unsigned int nents, int prot)
720{
721 return 0;
722}
723
724static inline size_t iommu_map_sg_atomic(struct iommu_domain *domain,
725 unsigned long iova, struct scatterlist *sg,
726 unsigned int nents, int prot)
727{
728 return 0;
729}
730
731static inline void iommu_flush_iotlb_all(struct iommu_domain *domain)
732{
733}
734
735static inline void iommu_iotlb_sync(struct iommu_domain *domain,
736 struct iommu_iotlb_gather *iotlb_gather)
737{
738}
739
740static inline int iommu_domain_window_enable(struct iommu_domain *domain,
741 u32 wnd_nr, phys_addr_t paddr,
742 u64 size, int prot)
743{
744 return -ENODEV;
745}
746
747static inline void iommu_domain_window_disable(struct iommu_domain *domain,
748 u32 wnd_nr)
749{
750}
751
752static inline phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
753{
754 return 0;
755}
756
757static inline void iommu_set_fault_handler(struct iommu_domain *domain,
758 iommu_fault_handler_t handler, void *token)
759{
760}
761
762static inline void iommu_get_resv_regions(struct device *dev,
763 struct list_head *list)
764{
765}
766
767static inline void iommu_put_resv_regions(struct device *dev,
768 struct list_head *list)
769{
770}
771
772static inline int iommu_get_group_resv_regions(struct iommu_group *group,
773 struct list_head *head)
774{
775 return -ENODEV;
776}
777
778static inline void iommu_set_default_passthrough(bool cmd_line)
779{
780}
781
782static inline void iommu_set_default_translated(bool cmd_line)
783{
784}
785
786static inline bool iommu_default_passthrough(void)
787{
788 return true;
789}
790
791static inline int iommu_attach_group(struct iommu_domain *domain,
792 struct iommu_group *group)
793{
794 return -ENODEV;
795}
796
797static inline void iommu_detach_group(struct iommu_domain *domain,
798 struct iommu_group *group)
799{
800}
801
802static inline struct iommu_group *iommu_group_alloc(void)
803{
804 return ERR_PTR(-ENODEV);
805}
806
807static inline void *iommu_group_get_iommudata(struct iommu_group *group)
808{
809 return NULL;
810}
811
812static inline void iommu_group_set_iommudata(struct iommu_group *group,
813 void *iommu_data,
814 void (*release)(void *iommu_data))
815{
816}
817
818static inline int iommu_group_set_name(struct iommu_group *group,
819 const char *name)
820{
821 return -ENODEV;
822}
823
824static inline int iommu_group_add_device(struct iommu_group *group,
825 struct device *dev)
826{
827 return -ENODEV;
828}
829
830static inline void iommu_group_remove_device(struct device *dev)
831{
832}
833
834static inline int iommu_group_for_each_dev(struct iommu_group *group,
835 void *data,
836 int (*fn)(struct device *, void *))
837{
838 return -ENODEV;
839}
840
841static inline struct iommu_group *iommu_group_get(struct device *dev)
842{
843 return NULL;
844}
845
846static inline void iommu_group_put(struct iommu_group *group)
847{
848}
849
850static inline int iommu_group_register_notifier(struct iommu_group *group,
851 struct notifier_block *nb)
852{
853 return -ENODEV;
854}
855
856static inline int iommu_group_unregister_notifier(struct iommu_group *group,
857 struct notifier_block *nb)
858{
859 return 0;
860}
861
862static inline
863int iommu_register_device_fault_handler(struct device *dev,
864 iommu_dev_fault_handler_t handler,
865 void *data)
866{
867 return -ENODEV;
868}
869
870static inline int iommu_unregister_device_fault_handler(struct device *dev)
871{
872 return 0;
873}
874
875static inline
876int iommu_report_device_fault(struct device *dev, struct iommu_fault_event *evt)
877{
878 return -ENODEV;
879}
880
881static inline int iommu_page_response(struct device *dev,
882 struct iommu_page_response *msg)
883{
884 return -ENODEV;
885}
886
887static inline int iommu_group_id(struct iommu_group *group)
888{
889 return -ENODEV;
890}
891
892static inline int iommu_domain_get_attr(struct iommu_domain *domain,
893 enum iommu_attr attr, void *data)
894{
895 return -EINVAL;
896}
897
898static inline int iommu_domain_set_attr(struct iommu_domain *domain,
899 enum iommu_attr attr, void *data)
900{
901 return -EINVAL;
902}
903
904static inline int iommu_device_register(struct iommu_device *iommu)
905{
906 return -ENODEV;
907}
908
909static inline void iommu_device_set_ops(struct iommu_device *iommu,
910 const struct iommu_ops *ops)
911{
912}
913
914static inline void iommu_device_set_fwnode(struct iommu_device *iommu,
915 struct fwnode_handle *fwnode)
916{
917}
918
919static inline struct iommu_device *dev_to_iommu_device(struct device *dev)
920{
921 return NULL;
922}
923
924static inline void iommu_iotlb_gather_init(struct iommu_iotlb_gather *gather)
925{
926}
927
928static inline void iommu_iotlb_gather_add_page(struct iommu_domain *domain,
929 struct iommu_iotlb_gather *gather,
930 unsigned long iova, size_t size)
931{
932}
933
934static inline void iommu_device_unregister(struct iommu_device *iommu)
935{
936}
937
938static inline int iommu_device_sysfs_add(struct iommu_device *iommu,
939 struct device *parent,
940 const struct attribute_group **groups,
941 const char *fmt, ...)
942{
943 return -ENODEV;
944}
945
946static inline void iommu_device_sysfs_remove(struct iommu_device *iommu)
947{
948}
949
950static inline int iommu_device_link(struct device *dev, struct device *link)
951{
952 return -EINVAL;
953}
954
955static inline void iommu_device_unlink(struct device *dev, struct device *link)
956{
957}
958
959static inline int iommu_fwspec_init(struct device *dev,
960 struct fwnode_handle *iommu_fwnode,
961 const struct iommu_ops *ops)
962{
963 return -ENODEV;
964}
965
966static inline void iommu_fwspec_free(struct device *dev)
967{
968}
969
970static inline int iommu_fwspec_add_ids(struct device *dev, u32 *ids,
971 int num_ids)
972{
973 return -ENODEV;
974}
975
976static inline
977const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode)
978{
979 return NULL;
980}
981
982static inline bool
983iommu_dev_has_feature(struct device *dev, enum iommu_dev_features feat)
984{
985 return false;
986}
987
988static inline bool
989iommu_dev_feature_enabled(struct device *dev, enum iommu_dev_features feat)
990{
991 return false;
992}
993
994static inline int
995iommu_dev_enable_feature(struct device *dev, enum iommu_dev_features feat)
996{
997 return -ENODEV;
998}
999
1000static inline int
1001iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features feat)
1002{
1003 return -ENODEV;
1004}
1005
1006static inline int
1007iommu_aux_attach_device(struct iommu_domain *domain, struct device *dev)
1008{
1009 return -ENODEV;
1010}
1011
1012static inline void
1013iommu_aux_detach_device(struct iommu_domain *domain, struct device *dev)
1014{
1015}
1016
1017static inline int
1018iommu_aux_get_pasid(struct iommu_domain *domain, struct device *dev)
1019{
1020 return -ENODEV;
1021}
1022
1023static inline struct iommu_sva *
1024iommu_sva_bind_device(struct device *dev, struct mm_struct *mm, void *drvdata)
1025{
1026 return NULL;
1027}
1028
1029static inline void iommu_sva_unbind_device(struct iommu_sva *handle)
1030{
1031}
1032
1033static inline u32 iommu_sva_get_pasid(struct iommu_sva *handle)
1034{
1035 return IOMMU_PASID_INVALID;
1036}
1037
1038static inline int
1039iommu_uapi_cache_invalidate(struct iommu_domain *domain,
1040 struct device *dev,
1041 struct iommu_cache_invalidate_info *inv_info)
1042{
1043 return -ENODEV;
1044}
1045
1046static inline int iommu_uapi_sva_bind_gpasid(struct iommu_domain *domain,
1047 struct device *dev, void __user *udata)
1048{
1049 return -ENODEV;
1050}
1051
1052static inline int iommu_uapi_sva_unbind_gpasid(struct iommu_domain *domain,
1053 struct device *dev, void __user *udata)
1054{
1055 return -ENODEV;
1056}
1057
1058static inline int iommu_sva_unbind_gpasid(struct iommu_domain *domain,
1059 struct device *dev,
1060 ioasid_t pasid)
1061{
1062 return -ENODEV;
1063}
1064
1065static inline struct iommu_fwspec *dev_iommu_fwspec_get(struct device *dev)
1066{
1067 return NULL;
1068}
1069#endif
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081static inline size_t iommu_map_sgtable(struct iommu_domain *domain,
1082 unsigned long iova, struct sg_table *sgt, int prot)
1083{
1084 return iommu_map_sg(domain, iova, sgt->sgl, sgt->orig_nents, prot);
1085}
1086
1087#ifdef CONFIG_IOMMU_DEBUGFS
1088extern struct dentry *iommu_debugfs_dir;
1089void iommu_debugfs_setup(void);
1090#else
1091static inline void iommu_debugfs_setup(void) {}
1092#endif
1093
1094#endif
1095