blob: 79a18fe03cc83525920ff46e9ccae4d8b9873397 [file] [log] [blame]
Elliott Hughes180edef2023-11-02 00:08:05 +00001/*
2 * This file is auto-generated. Modifications will be lost.
3 *
4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5 * for more information.
6 */
Christopher Ferris8b7fdc92023-02-21 13:36:32 -08007#ifndef _UAPI_IOMMUFD_H
8#define _UAPI_IOMMUFD_H
9#include <linux/types.h>
10#include <linux/ioctl.h>
11#define IOMMUFD_TYPE (';')
12enum {
13 IOMMUFD_CMD_BASE = 0x80,
14 IOMMUFD_CMD_DESTROY = IOMMUFD_CMD_BASE,
15 IOMMUFD_CMD_IOAS_ALLOC,
16 IOMMUFD_CMD_IOAS_ALLOW_IOVAS,
17 IOMMUFD_CMD_IOAS_COPY,
18 IOMMUFD_CMD_IOAS_IOVA_RANGES,
19 IOMMUFD_CMD_IOAS_MAP,
20 IOMMUFD_CMD_IOAS_UNMAP,
21 IOMMUFD_CMD_OPTION,
22 IOMMUFD_CMD_VFIO_IOAS,
Christopher Ferris67d1e5e2023-10-31 13:36:37 -070023 IOMMUFD_CMD_HWPT_ALLOC,
24 IOMMUFD_CMD_GET_HW_INFO,
Christopher Ferris8b7fdc92023-02-21 13:36:32 -080025};
26struct iommu_destroy {
27 __u32 size;
28 __u32 id;
29};
30#define IOMMU_DESTROY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_DESTROY)
31struct iommu_ioas_alloc {
32 __u32 size;
33 __u32 flags;
34 __u32 out_ioas_id;
35};
36#define IOMMU_IOAS_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_ALLOC)
37struct iommu_iova_range {
38 __aligned_u64 start;
39 __aligned_u64 last;
40};
41struct iommu_ioas_iova_ranges {
42 __u32 size;
43 __u32 ioas_id;
44 __u32 num_iovas;
45 __u32 __reserved;
46 __aligned_u64 allowed_iovas;
47 __aligned_u64 out_iova_alignment;
48};
49#define IOMMU_IOAS_IOVA_RANGES _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_IOVA_RANGES)
50struct iommu_ioas_allow_iovas {
51 __u32 size;
52 __u32 ioas_id;
53 __u32 num_iovas;
54 __u32 __reserved;
55 __aligned_u64 allowed_iovas;
56};
57#define IOMMU_IOAS_ALLOW_IOVAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_ALLOW_IOVAS)
58enum iommufd_ioas_map_flags {
59 IOMMU_IOAS_MAP_FIXED_IOVA = 1 << 0,
60 IOMMU_IOAS_MAP_WRITEABLE = 1 << 1,
61 IOMMU_IOAS_MAP_READABLE = 1 << 2,
62};
63struct iommu_ioas_map {
64 __u32 size;
65 __u32 flags;
66 __u32 ioas_id;
67 __u32 __reserved;
68 __aligned_u64 user_va;
69 __aligned_u64 length;
70 __aligned_u64 iova;
71};
72#define IOMMU_IOAS_MAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_MAP)
73struct iommu_ioas_copy {
74 __u32 size;
75 __u32 flags;
76 __u32 dst_ioas_id;
77 __u32 src_ioas_id;
78 __aligned_u64 length;
79 __aligned_u64 dst_iova;
80 __aligned_u64 src_iova;
81};
82#define IOMMU_IOAS_COPY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_COPY)
83struct iommu_ioas_unmap {
84 __u32 size;
85 __u32 ioas_id;
86 __aligned_u64 iova;
87 __aligned_u64 length;
88};
89#define IOMMU_IOAS_UNMAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_UNMAP)
90enum iommufd_option {
91 IOMMU_OPTION_RLIMIT_MODE = 0,
92 IOMMU_OPTION_HUGE_PAGES = 1,
93};
94enum iommufd_option_ops {
95 IOMMU_OPTION_OP_SET = 0,
96 IOMMU_OPTION_OP_GET = 1,
97};
98struct iommu_option {
99 __u32 size;
100 __u32 option_id;
101 __u16 op;
102 __u16 __reserved;
103 __u32 object_id;
104 __aligned_u64 val64;
105};
106#define IOMMU_OPTION _IO(IOMMUFD_TYPE, IOMMUFD_CMD_OPTION)
107enum iommufd_vfio_ioas_op {
108 IOMMU_VFIO_IOAS_GET = 0,
109 IOMMU_VFIO_IOAS_SET = 1,
110 IOMMU_VFIO_IOAS_CLEAR = 2,
111};
112struct iommu_vfio_ioas {
113 __u32 size;
114 __u32 ioas_id;
115 __u16 op;
116 __u16 __reserved;
117};
118#define IOMMU_VFIO_IOAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VFIO_IOAS)
Christopher Ferris67d1e5e2023-10-31 13:36:37 -0700119struct iommu_hwpt_alloc {
120 __u32 size;
121 __u32 flags;
122 __u32 dev_id;
123 __u32 pt_id;
124 __u32 out_hwpt_id;
125 __u32 __reserved;
126};
127#define IOMMU_HWPT_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_HWPT_ALLOC)
128struct iommu_hw_info_vtd {
129 __u32 flags;
130 __u32 __reserved;
131 __aligned_u64 cap_reg;
132 __aligned_u64 ecap_reg;
133};
134enum iommu_hw_info_type {
135 IOMMU_HW_INFO_TYPE_NONE,
136 IOMMU_HW_INFO_TYPE_INTEL_VTD,
137};
138struct iommu_hw_info {
139 __u32 size;
140 __u32 flags;
141 __u32 dev_id;
142 __u32 data_len;
143 __aligned_u64 data_uptr;
144 __u32 out_data_type;
145 __u32 __reserved;
146};
147#define IOMMU_GET_HW_INFO _IO(IOMMUFD_TYPE, IOMMUFD_CMD_GET_HW_INFO)
Christopher Ferris8b7fdc92023-02-21 13:36:32 -0800148#endif