• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  ****************************************************************************
3  ***
4  ***   This header was automatically generated from a Linux kernel header
5  ***   of the same name, to make information necessary for userspace to
6  ***   call into the kernel available to libc.  It contains only constants,
7  ***   structures, and macros generated from the original header, and thus,
8  ***   contains no copyrightable information.
9  ***
10  ***   To edit the content of this header, modify the corresponding
11  ***   source file (e.g. under external/kernel-headers/original/) then
12  ***   run bionic/libc/kernel/tools/update_all.py
13  ***
14  ***   Any manual change here will be lost the next time this script will
15  ***   be run. You've been warned!
16  ***
17  ****************************************************************************
18  ****************************************************************************/
19 #ifndef _UAPI_IOMMUFD_H
20 #define _UAPI_IOMMUFD_H
21 #include <linux/types.h>
22 #include <linux/ioctl.h>
23 #define IOMMUFD_TYPE (';')
24 enum {
25   IOMMUFD_CMD_BASE = 0x80,
26   IOMMUFD_CMD_DESTROY = IOMMUFD_CMD_BASE,
27   IOMMUFD_CMD_IOAS_ALLOC,
28   IOMMUFD_CMD_IOAS_ALLOW_IOVAS,
29   IOMMUFD_CMD_IOAS_COPY,
30   IOMMUFD_CMD_IOAS_IOVA_RANGES,
31   IOMMUFD_CMD_IOAS_MAP,
32   IOMMUFD_CMD_IOAS_UNMAP,
33   IOMMUFD_CMD_OPTION,
34   IOMMUFD_CMD_VFIO_IOAS,
35 };
36 struct iommu_destroy {
37   __u32 size;
38   __u32 id;
39 };
40 #define IOMMU_DESTROY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_DESTROY)
41 struct iommu_ioas_alloc {
42   __u32 size;
43   __u32 flags;
44   __u32 out_ioas_id;
45 };
46 #define IOMMU_IOAS_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_ALLOC)
47 struct iommu_iova_range {
48   __aligned_u64 start;
49   __aligned_u64 last;
50 };
51 struct iommu_ioas_iova_ranges {
52   __u32 size;
53   __u32 ioas_id;
54   __u32 num_iovas;
55   __u32 __reserved;
56   __aligned_u64 allowed_iovas;
57   __aligned_u64 out_iova_alignment;
58 };
59 #define IOMMU_IOAS_IOVA_RANGES _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_IOVA_RANGES)
60 struct iommu_ioas_allow_iovas {
61   __u32 size;
62   __u32 ioas_id;
63   __u32 num_iovas;
64   __u32 __reserved;
65   __aligned_u64 allowed_iovas;
66 };
67 #define IOMMU_IOAS_ALLOW_IOVAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_ALLOW_IOVAS)
68 enum iommufd_ioas_map_flags {
69   IOMMU_IOAS_MAP_FIXED_IOVA = 1 << 0,
70   IOMMU_IOAS_MAP_WRITEABLE = 1 << 1,
71   IOMMU_IOAS_MAP_READABLE = 1 << 2,
72 };
73 struct iommu_ioas_map {
74   __u32 size;
75   __u32 flags;
76   __u32 ioas_id;
77   __u32 __reserved;
78   __aligned_u64 user_va;
79   __aligned_u64 length;
80   __aligned_u64 iova;
81 };
82 #define IOMMU_IOAS_MAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_MAP)
83 struct iommu_ioas_copy {
84   __u32 size;
85   __u32 flags;
86   __u32 dst_ioas_id;
87   __u32 src_ioas_id;
88   __aligned_u64 length;
89   __aligned_u64 dst_iova;
90   __aligned_u64 src_iova;
91 };
92 #define IOMMU_IOAS_COPY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_COPY)
93 struct iommu_ioas_unmap {
94   __u32 size;
95   __u32 ioas_id;
96   __aligned_u64 iova;
97   __aligned_u64 length;
98 };
99 #define IOMMU_IOAS_UNMAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_UNMAP)
100 enum iommufd_option {
101   IOMMU_OPTION_RLIMIT_MODE = 0,
102   IOMMU_OPTION_HUGE_PAGES = 1,
103 };
104 enum iommufd_option_ops {
105   IOMMU_OPTION_OP_SET = 0,
106   IOMMU_OPTION_OP_GET = 1,
107 };
108 struct iommu_option {
109   __u32 size;
110   __u32 option_id;
111   __u16 op;
112   __u16 __reserved;
113   __u32 object_id;
114   __aligned_u64 val64;
115 };
116 #define IOMMU_OPTION _IO(IOMMUFD_TYPE, IOMMUFD_CMD_OPTION)
117 enum iommufd_vfio_ioas_op {
118   IOMMU_VFIO_IOAS_GET = 0,
119   IOMMU_VFIO_IOAS_SET = 1,
120   IOMMU_VFIO_IOAS_CLEAR = 2,
121 };
122 struct iommu_vfio_ioas {
123   __u32 size;
124   __u32 ioas_id;
125   __u16 op;
126   __u16 __reserved;
127 };
128 #define IOMMU_VFIO_IOAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VFIO_IOAS)
129 #endif
130