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