• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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  */
7 #ifndef _UAPIVFIO_H
8 #define _UAPIVFIO_H
9 #include <linux/types.h>
10 #include <linux/ioctl.h>
11 #define VFIO_API_VERSION 0
12 #define VFIO_TYPE1_IOMMU 1
13 #define VFIO_SPAPR_TCE_IOMMU 2
14 #define VFIO_TYPE1v2_IOMMU 3
15 #define VFIO_DMA_CC_IOMMU 4
16 #define VFIO_EEH 5
17 #define VFIO_TYPE1_NESTING_IOMMU 6
18 #define VFIO_SPAPR_TCE_v2_IOMMU 7
19 #define VFIO_NOIOMMU_IOMMU 8
20 #define VFIO_UNMAP_ALL 9
21 #define VFIO_UPDATE_VADDR 10
22 #define VFIO_TYPE (';')
23 #define VFIO_BASE 100
24 struct vfio_info_cap_header {
25   __u16 id;
26   __u16 version;
27   __u32 next;
28 };
29 #define VFIO_GET_API_VERSION _IO(VFIO_TYPE, VFIO_BASE + 0)
30 #define VFIO_CHECK_EXTENSION _IO(VFIO_TYPE, VFIO_BASE + 1)
31 #define VFIO_SET_IOMMU _IO(VFIO_TYPE, VFIO_BASE + 2)
32 struct vfio_group_status {
33   __u32 argsz;
34   __u32 flags;
35 #define VFIO_GROUP_FLAGS_VIABLE (1 << 0)
36 #define VFIO_GROUP_FLAGS_CONTAINER_SET (1 << 1)
37 };
38 #define VFIO_GROUP_GET_STATUS _IO(VFIO_TYPE, VFIO_BASE + 3)
39 #define VFIO_GROUP_SET_CONTAINER _IO(VFIO_TYPE, VFIO_BASE + 4)
40 #define VFIO_GROUP_UNSET_CONTAINER _IO(VFIO_TYPE, VFIO_BASE + 5)
41 #define VFIO_GROUP_GET_DEVICE_FD _IO(VFIO_TYPE, VFIO_BASE + 6)
42 struct vfio_device_info {
43   __u32 argsz;
44   __u32 flags;
45 #define VFIO_DEVICE_FLAGS_RESET (1 << 0)
46 #define VFIO_DEVICE_FLAGS_PCI (1 << 1)
47 #define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2)
48 #define VFIO_DEVICE_FLAGS_AMBA (1 << 3)
49 #define VFIO_DEVICE_FLAGS_CCW (1 << 4)
50 #define VFIO_DEVICE_FLAGS_AP (1 << 5)
51 #define VFIO_DEVICE_FLAGS_FSL_MC (1 << 6)
52 #define VFIO_DEVICE_FLAGS_CAPS (1 << 7)
53 #define VFIO_DEVICE_FLAGS_CDX (1 << 8)
54   __u32 num_regions;
55   __u32 num_irqs;
56   __u32 cap_offset;
57   __u32 pad;
58 };
59 #define VFIO_DEVICE_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 7)
60 #define VFIO_DEVICE_API_PCI_STRING "vfio-pci"
61 #define VFIO_DEVICE_API_PLATFORM_STRING "vfio-platform"
62 #define VFIO_DEVICE_API_AMBA_STRING "vfio-amba"
63 #define VFIO_DEVICE_API_CCW_STRING "vfio-ccw"
64 #define VFIO_DEVICE_API_AP_STRING "vfio-ap"
65 #define VFIO_DEVICE_INFO_CAP_ZPCI_BASE 1
66 #define VFIO_DEVICE_INFO_CAP_ZPCI_GROUP 2
67 #define VFIO_DEVICE_INFO_CAP_ZPCI_UTIL 3
68 #define VFIO_DEVICE_INFO_CAP_ZPCI_PFIP 4
69 #define VFIO_DEVICE_INFO_CAP_PCI_ATOMIC_COMP 5
70 struct vfio_device_info_cap_pci_atomic_comp {
71   struct vfio_info_cap_header header;
72   __u32 flags;
73 #define VFIO_PCI_ATOMIC_COMP32 (1 << 0)
74 #define VFIO_PCI_ATOMIC_COMP64 (1 << 1)
75 #define VFIO_PCI_ATOMIC_COMP128 (1 << 2)
76   __u32 reserved;
77 };
78 struct vfio_region_info {
79   __u32 argsz;
80   __u32 flags;
81 #define VFIO_REGION_INFO_FLAG_READ (1 << 0)
82 #define VFIO_REGION_INFO_FLAG_WRITE (1 << 1)
83 #define VFIO_REGION_INFO_FLAG_MMAP (1 << 2)
84 #define VFIO_REGION_INFO_FLAG_CAPS (1 << 3)
85   __u32 index;
86   __u32 cap_offset;
87   __aligned_u64 size;
88   __aligned_u64 offset;
89 };
90 #define VFIO_DEVICE_GET_REGION_INFO _IO(VFIO_TYPE, VFIO_BASE + 8)
91 #define VFIO_REGION_INFO_CAP_SPARSE_MMAP 1
92 struct vfio_region_sparse_mmap_area {
93   __aligned_u64 offset;
94   __aligned_u64 size;
95 };
96 struct vfio_region_info_cap_sparse_mmap {
97   struct vfio_info_cap_header header;
98   __u32 nr_areas;
99   __u32 reserved;
100   struct vfio_region_sparse_mmap_area areas[];
101 };
102 #define VFIO_REGION_INFO_CAP_TYPE 2
103 struct vfio_region_info_cap_type {
104   struct vfio_info_cap_header header;
105   __u32 type;
106   __u32 subtype;
107 };
108 #define VFIO_REGION_TYPE_PCI_VENDOR_TYPE (1 << 31)
109 #define VFIO_REGION_TYPE_PCI_VENDOR_MASK (0xffff)
110 #define VFIO_REGION_TYPE_GFX (1)
111 #define VFIO_REGION_TYPE_CCW (2)
112 #define VFIO_REGION_TYPE_MIGRATION_DEPRECATED (3)
113 #define VFIO_REGION_SUBTYPE_INTEL_IGD_OPREGION (1)
114 #define VFIO_REGION_SUBTYPE_INTEL_IGD_HOST_CFG (2)
115 #define VFIO_REGION_SUBTYPE_INTEL_IGD_LPC_CFG (3)
116 #define VFIO_REGION_SUBTYPE_NVIDIA_NVLINK2_RAM (1)
117 #define VFIO_REGION_SUBTYPE_IBM_NVLINK2_ATSD (1)
118 #define VFIO_REGION_SUBTYPE_GFX_EDID (1)
119 struct vfio_region_gfx_edid {
120   __u32 edid_offset;
121   __u32 edid_max_size;
122   __u32 edid_size;
123   __u32 max_xres;
124   __u32 max_yres;
125   __u32 link_state;
126 #define VFIO_DEVICE_GFX_LINK_STATE_UP 1
127 #define VFIO_DEVICE_GFX_LINK_STATE_DOWN 2
128 };
129 #define VFIO_REGION_SUBTYPE_CCW_ASYNC_CMD (1)
130 #define VFIO_REGION_SUBTYPE_CCW_SCHIB (2)
131 #define VFIO_REGION_SUBTYPE_CCW_CRW (3)
132 #define VFIO_REGION_SUBTYPE_MIGRATION_DEPRECATED (1)
133 struct vfio_device_migration_info {
134   __u32 device_state;
135 #define VFIO_DEVICE_STATE_V1_STOP (0)
136 #define VFIO_DEVICE_STATE_V1_RUNNING (1 << 0)
137 #define VFIO_DEVICE_STATE_V1_SAVING (1 << 1)
138 #define VFIO_DEVICE_STATE_V1_RESUMING (1 << 2)
139 #define VFIO_DEVICE_STATE_MASK (VFIO_DEVICE_STATE_V1_RUNNING | VFIO_DEVICE_STATE_V1_SAVING | VFIO_DEVICE_STATE_V1_RESUMING)
140 #define VFIO_DEVICE_STATE_VALID(state) (state & VFIO_DEVICE_STATE_V1_RESUMING ? (state & VFIO_DEVICE_STATE_MASK) == VFIO_DEVICE_STATE_V1_RESUMING : 1)
141 #define VFIO_DEVICE_STATE_IS_ERROR(state) ((state & VFIO_DEVICE_STATE_MASK) == (VFIO_DEVICE_STATE_V1_SAVING | VFIO_DEVICE_STATE_V1_RESUMING))
142 #define VFIO_DEVICE_STATE_SET_ERROR(state) ((state & ~VFIO_DEVICE_STATE_MASK) | VFIO_DEVICE_STATE_V1_SAVING | VFIO_DEVICE_STATE_V1_RESUMING)
143   __u32 reserved;
144   __aligned_u64 pending_bytes;
145   __aligned_u64 data_offset;
146   __aligned_u64 data_size;
147 };
148 #define VFIO_REGION_INFO_CAP_MSIX_MAPPABLE 3
149 #define VFIO_REGION_INFO_CAP_NVLINK2_SSATGT 4
150 struct vfio_region_info_cap_nvlink2_ssatgt {
151   struct vfio_info_cap_header header;
152   __aligned_u64 tgt;
153 };
154 #define VFIO_REGION_INFO_CAP_NVLINK2_LNKSPD 5
155 struct vfio_region_info_cap_nvlink2_lnkspd {
156   struct vfio_info_cap_header header;
157   __u32 link_speed;
158   __u32 __pad;
159 };
160 struct vfio_irq_info {
161   __u32 argsz;
162   __u32 flags;
163 #define VFIO_IRQ_INFO_EVENTFD (1 << 0)
164 #define VFIO_IRQ_INFO_MASKABLE (1 << 1)
165 #define VFIO_IRQ_INFO_AUTOMASKED (1 << 2)
166 #define VFIO_IRQ_INFO_NORESIZE (1 << 3)
167   __u32 index;
168   __u32 count;
169 };
170 #define VFIO_DEVICE_GET_IRQ_INFO _IO(VFIO_TYPE, VFIO_BASE + 9)
171 struct vfio_irq_set {
172   __u32 argsz;
173   __u32 flags;
174 #define VFIO_IRQ_SET_DATA_NONE (1 << 0)
175 #define VFIO_IRQ_SET_DATA_BOOL (1 << 1)
176 #define VFIO_IRQ_SET_DATA_EVENTFD (1 << 2)
177 #define VFIO_IRQ_SET_ACTION_MASK (1 << 3)
178 #define VFIO_IRQ_SET_ACTION_UNMASK (1 << 4)
179 #define VFIO_IRQ_SET_ACTION_TRIGGER (1 << 5)
180   __u32 index;
181   __u32 start;
182   __u32 count;
183   __u8 data[];
184 };
185 #define VFIO_DEVICE_SET_IRQS _IO(VFIO_TYPE, VFIO_BASE + 10)
186 #define VFIO_IRQ_SET_DATA_TYPE_MASK (VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_DATA_BOOL | VFIO_IRQ_SET_DATA_EVENTFD)
187 #define VFIO_IRQ_SET_ACTION_TYPE_MASK (VFIO_IRQ_SET_ACTION_MASK | VFIO_IRQ_SET_ACTION_UNMASK | VFIO_IRQ_SET_ACTION_TRIGGER)
188 #define VFIO_DEVICE_RESET _IO(VFIO_TYPE, VFIO_BASE + 11)
189 enum {
190   VFIO_PCI_BAR0_REGION_INDEX,
191   VFIO_PCI_BAR1_REGION_INDEX,
192   VFIO_PCI_BAR2_REGION_INDEX,
193   VFIO_PCI_BAR3_REGION_INDEX,
194   VFIO_PCI_BAR4_REGION_INDEX,
195   VFIO_PCI_BAR5_REGION_INDEX,
196   VFIO_PCI_ROM_REGION_INDEX,
197   VFIO_PCI_CONFIG_REGION_INDEX,
198   VFIO_PCI_VGA_REGION_INDEX,
199   VFIO_PCI_NUM_REGIONS = 9
200 };
201 enum {
202   VFIO_PCI_INTX_IRQ_INDEX,
203   VFIO_PCI_MSI_IRQ_INDEX,
204   VFIO_PCI_MSIX_IRQ_INDEX,
205   VFIO_PCI_ERR_IRQ_INDEX,
206   VFIO_PCI_REQ_IRQ_INDEX,
207   VFIO_PCI_NUM_IRQS
208 };
209 enum {
210   VFIO_CCW_CONFIG_REGION_INDEX,
211   VFIO_CCW_NUM_REGIONS
212 };
213 enum {
214   VFIO_CCW_IO_IRQ_INDEX,
215   VFIO_CCW_CRW_IRQ_INDEX,
216   VFIO_CCW_REQ_IRQ_INDEX,
217   VFIO_CCW_NUM_IRQS
218 };
219 enum {
220   VFIO_AP_REQ_IRQ_INDEX,
221   VFIO_AP_NUM_IRQS
222 };
223 struct vfio_pci_dependent_device {
224   union {
225     __u32 group_id;
226     __u32 devid;
227 #define VFIO_PCI_DEVID_OWNED 0
228 #define VFIO_PCI_DEVID_NOT_OWNED - 1
229   };
230   __u16 segment;
231   __u8 bus;
232   __u8 devfn;
233 };
234 struct vfio_pci_hot_reset_info {
235   __u32 argsz;
236   __u32 flags;
237 #define VFIO_PCI_HOT_RESET_FLAG_DEV_ID (1 << 0)
238 #define VFIO_PCI_HOT_RESET_FLAG_DEV_ID_OWNED (1 << 1)
239   __u32 count;
240   struct vfio_pci_dependent_device devices[];
241 };
242 #define VFIO_DEVICE_GET_PCI_HOT_RESET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)
243 struct vfio_pci_hot_reset {
244   __u32 argsz;
245   __u32 flags;
246   __u32 count;
247   __s32 group_fds[];
248 };
249 #define VFIO_DEVICE_PCI_HOT_RESET _IO(VFIO_TYPE, VFIO_BASE + 13)
250 struct vfio_device_gfx_plane_info {
251   __u32 argsz;
252   __u32 flags;
253 #define VFIO_GFX_PLANE_TYPE_PROBE (1 << 0)
254 #define VFIO_GFX_PLANE_TYPE_DMABUF (1 << 1)
255 #define VFIO_GFX_PLANE_TYPE_REGION (1 << 2)
256   __u32 drm_plane_type;
257   __u32 drm_format;
258   __aligned_u64 drm_format_mod;
259   __u32 width;
260   __u32 height;
261   __u32 stride;
262   __u32 size;
263   __u32 x_pos;
264   __u32 y_pos;
265   __u32 x_hot;
266   __u32 y_hot;
267   union {
268     __u32 region_index;
269     __u32 dmabuf_id;
270   };
271   __u32 reserved;
272 };
273 #define VFIO_DEVICE_QUERY_GFX_PLANE _IO(VFIO_TYPE, VFIO_BASE + 14)
274 #define VFIO_DEVICE_GET_GFX_DMABUF _IO(VFIO_TYPE, VFIO_BASE + 15)
275 struct vfio_device_ioeventfd {
276   __u32 argsz;
277   __u32 flags;
278 #define VFIO_DEVICE_IOEVENTFD_8 (1 << 0)
279 #define VFIO_DEVICE_IOEVENTFD_16 (1 << 1)
280 #define VFIO_DEVICE_IOEVENTFD_32 (1 << 2)
281 #define VFIO_DEVICE_IOEVENTFD_64 (1 << 3)
282 #define VFIO_DEVICE_IOEVENTFD_SIZE_MASK (0xf)
283   __aligned_u64 offset;
284   __aligned_u64 data;
285   __s32 fd;
286   __u32 reserved;
287 };
288 #define VFIO_DEVICE_IOEVENTFD _IO(VFIO_TYPE, VFIO_BASE + 16)
289 struct vfio_device_feature {
290   __u32 argsz;
291   __u32 flags;
292 #define VFIO_DEVICE_FEATURE_MASK (0xffff)
293 #define VFIO_DEVICE_FEATURE_GET (1 << 16)
294 #define VFIO_DEVICE_FEATURE_SET (1 << 17)
295 #define VFIO_DEVICE_FEATURE_PROBE (1 << 18)
296   __u8 data[];
297 };
298 #define VFIO_DEVICE_FEATURE _IO(VFIO_TYPE, VFIO_BASE + 17)
299 struct vfio_device_bind_iommufd {
300   __u32 argsz;
301   __u32 flags;
302   __s32 iommufd;
303   __u32 out_devid;
304 };
305 #define VFIO_DEVICE_BIND_IOMMUFD _IO(VFIO_TYPE, VFIO_BASE + 18)
306 struct vfio_device_attach_iommufd_pt {
307   __u32 argsz;
308   __u32 flags;
309   __u32 pt_id;
310 };
311 #define VFIO_DEVICE_ATTACH_IOMMUFD_PT _IO(VFIO_TYPE, VFIO_BASE + 19)
312 struct vfio_device_detach_iommufd_pt {
313   __u32 argsz;
314   __u32 flags;
315 };
316 #define VFIO_DEVICE_DETACH_IOMMUFD_PT _IO(VFIO_TYPE, VFIO_BASE + 20)
317 #define VFIO_DEVICE_FEATURE_PCI_VF_TOKEN (0)
318 struct vfio_device_feature_migration {
319   __aligned_u64 flags;
320 #define VFIO_MIGRATION_STOP_COPY (1 << 0)
321 #define VFIO_MIGRATION_P2P (1 << 1)
322 #define VFIO_MIGRATION_PRE_COPY (1 << 2)
323 };
324 #define VFIO_DEVICE_FEATURE_MIGRATION 1
325 struct vfio_device_feature_mig_state {
326   __u32 device_state;
327   __s32 data_fd;
328 };
329 #define VFIO_DEVICE_FEATURE_MIG_DEVICE_STATE 2
330 enum vfio_device_mig_state {
331   VFIO_DEVICE_STATE_ERROR = 0,
332   VFIO_DEVICE_STATE_STOP = 1,
333   VFIO_DEVICE_STATE_RUNNING = 2,
334   VFIO_DEVICE_STATE_STOP_COPY = 3,
335   VFIO_DEVICE_STATE_RESUMING = 4,
336   VFIO_DEVICE_STATE_RUNNING_P2P = 5,
337   VFIO_DEVICE_STATE_PRE_COPY = 6,
338   VFIO_DEVICE_STATE_PRE_COPY_P2P = 7,
339   VFIO_DEVICE_STATE_NR,
340 };
341 struct vfio_precopy_info {
342   __u32 argsz;
343   __u32 flags;
344   __aligned_u64 initial_bytes;
345   __aligned_u64 dirty_bytes;
346 };
347 #define VFIO_MIG_GET_PRECOPY_INFO _IO(VFIO_TYPE, VFIO_BASE + 21)
348 #define VFIO_DEVICE_FEATURE_LOW_POWER_ENTRY 3
349 struct vfio_device_low_power_entry_with_wakeup {
350   __s32 wakeup_eventfd;
351   __u32 reserved;
352 };
353 #define VFIO_DEVICE_FEATURE_LOW_POWER_ENTRY_WITH_WAKEUP 4
354 #define VFIO_DEVICE_FEATURE_LOW_POWER_EXIT 5
355 struct vfio_device_feature_dma_logging_control {
356   __aligned_u64 page_size;
357   __u32 num_ranges;
358   __u32 __reserved;
359   __aligned_u64 ranges;
360 };
361 struct vfio_device_feature_dma_logging_range {
362   __aligned_u64 iova;
363   __aligned_u64 length;
364 };
365 #define VFIO_DEVICE_FEATURE_DMA_LOGGING_START 6
366 #define VFIO_DEVICE_FEATURE_DMA_LOGGING_STOP 7
367 struct vfio_device_feature_dma_logging_report {
368   __aligned_u64 iova;
369   __aligned_u64 length;
370   __aligned_u64 page_size;
371   __aligned_u64 bitmap;
372 };
373 #define VFIO_DEVICE_FEATURE_DMA_LOGGING_REPORT 8
374 struct vfio_device_feature_mig_data_size {
375   __aligned_u64 stop_copy_length;
376 };
377 #define VFIO_DEVICE_FEATURE_MIG_DATA_SIZE 9
378 struct vfio_device_feature_bus_master {
379   __u32 op;
380 #define VFIO_DEVICE_FEATURE_CLEAR_MASTER 0
381 #define VFIO_DEVICE_FEATURE_SET_MASTER 1
382 };
383 #define VFIO_DEVICE_FEATURE_BUS_MASTER 10
384 struct vfio_iommu_type1_info {
385   __u32 argsz;
386   __u32 flags;
387 #define VFIO_IOMMU_INFO_PGSIZES (1 << 0)
388 #define VFIO_IOMMU_INFO_CAPS (1 << 1)
389   __aligned_u64 iova_pgsizes;
390   __u32 cap_offset;
391   __u32 pad;
392 };
393 #define VFIO_IOMMU_TYPE1_INFO_CAP_IOVA_RANGE 1
394 struct vfio_iova_range {
395   __u64 start;
396   __u64 end;
397 };
398 struct vfio_iommu_type1_info_cap_iova_range {
399   struct vfio_info_cap_header header;
400   __u32 nr_iovas;
401   __u32 reserved;
402   struct vfio_iova_range iova_ranges[];
403 };
404 #define VFIO_IOMMU_TYPE1_INFO_CAP_MIGRATION 2
405 struct vfio_iommu_type1_info_cap_migration {
406   struct vfio_info_cap_header header;
407   __u32 flags;
408   __u64 pgsize_bitmap;
409   __u64 max_dirty_bitmap_size;
410 };
411 #define VFIO_IOMMU_TYPE1_INFO_DMA_AVAIL 3
412 struct vfio_iommu_type1_info_dma_avail {
413   struct vfio_info_cap_header header;
414   __u32 avail;
415 };
416 #define VFIO_IOMMU_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)
417 struct vfio_iommu_type1_dma_map {
418   __u32 argsz;
419   __u32 flags;
420 #define VFIO_DMA_MAP_FLAG_READ (1 << 0)
421 #define VFIO_DMA_MAP_FLAG_WRITE (1 << 1)
422 #define VFIO_DMA_MAP_FLAG_VADDR (1 << 2)
423   __u64 vaddr;
424   __u64 iova;
425   __u64 size;
426 };
427 #define VFIO_IOMMU_MAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 13)
428 struct vfio_bitmap {
429   __u64 pgsize;
430   __u64 size;
431   __u64  * data;
432 };
433 struct vfio_iommu_type1_dma_unmap {
434   __u32 argsz;
435   __u32 flags;
436 #define VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP (1 << 0)
437 #define VFIO_DMA_UNMAP_FLAG_ALL (1 << 1)
438 #define VFIO_DMA_UNMAP_FLAG_VADDR (1 << 2)
439   __u64 iova;
440   __u64 size;
441   __u8 data[];
442 };
443 #define VFIO_IOMMU_UNMAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 14)
444 #define VFIO_IOMMU_ENABLE _IO(VFIO_TYPE, VFIO_BASE + 15)
445 #define VFIO_IOMMU_DISABLE _IO(VFIO_TYPE, VFIO_BASE + 16)
446 struct vfio_iommu_type1_dirty_bitmap {
447   __u32 argsz;
448   __u32 flags;
449 #define VFIO_IOMMU_DIRTY_PAGES_FLAG_START (1 << 0)
450 #define VFIO_IOMMU_DIRTY_PAGES_FLAG_STOP (1 << 1)
451 #define VFIO_IOMMU_DIRTY_PAGES_FLAG_GET_BITMAP (1 << 2)
452   __u8 data[];
453 };
454 struct vfio_iommu_type1_dirty_bitmap_get {
455   __u64 iova;
456   __u64 size;
457   struct vfio_bitmap bitmap;
458 };
459 #define VFIO_IOMMU_DIRTY_PAGES _IO(VFIO_TYPE, VFIO_BASE + 17)
460 struct vfio_iommu_spapr_tce_ddw_info {
461   __u64 pgsizes;
462   __u32 max_dynamic_windows_supported;
463   __u32 levels;
464 };
465 struct vfio_iommu_spapr_tce_info {
466   __u32 argsz;
467   __u32 flags;
468 #define VFIO_IOMMU_SPAPR_INFO_DDW (1 << 0)
469   __u32 dma32_window_start;
470   __u32 dma32_window_size;
471   struct vfio_iommu_spapr_tce_ddw_info ddw;
472 };
473 #define VFIO_IOMMU_SPAPR_TCE_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)
474 struct vfio_eeh_pe_err {
475   __u32 type;
476   __u32 func;
477   __u64 addr;
478   __u64 mask;
479 };
480 struct vfio_eeh_pe_op {
481   __u32 argsz;
482   __u32 flags;
483   __u32 op;
484   union {
485     struct vfio_eeh_pe_err err;
486   };
487 };
488 #define VFIO_EEH_PE_DISABLE 0
489 #define VFIO_EEH_PE_ENABLE 1
490 #define VFIO_EEH_PE_UNFREEZE_IO 2
491 #define VFIO_EEH_PE_UNFREEZE_DMA 3
492 #define VFIO_EEH_PE_GET_STATE 4
493 #define VFIO_EEH_PE_STATE_NORMAL 0
494 #define VFIO_EEH_PE_STATE_RESET 1
495 #define VFIO_EEH_PE_STATE_STOPPED 2
496 #define VFIO_EEH_PE_STATE_STOPPED_DMA 4
497 #define VFIO_EEH_PE_STATE_UNAVAIL 5
498 #define VFIO_EEH_PE_RESET_DEACTIVATE 5
499 #define VFIO_EEH_PE_RESET_HOT 6
500 #define VFIO_EEH_PE_RESET_FUNDAMENTAL 7
501 #define VFIO_EEH_PE_CONFIGURE 8
502 #define VFIO_EEH_PE_INJECT_ERR 9
503 #define VFIO_EEH_PE_OP _IO(VFIO_TYPE, VFIO_BASE + 21)
504 struct vfio_iommu_spapr_register_memory {
505   __u32 argsz;
506   __u32 flags;
507   __u64 vaddr;
508   __u64 size;
509 };
510 #define VFIO_IOMMU_SPAPR_REGISTER_MEMORY _IO(VFIO_TYPE, VFIO_BASE + 17)
511 #define VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY _IO(VFIO_TYPE, VFIO_BASE + 18)
512 struct vfio_iommu_spapr_tce_create {
513   __u32 argsz;
514   __u32 flags;
515   __u32 page_shift;
516   __u32 __resv1;
517   __u64 window_size;
518   __u32 levels;
519   __u32 __resv2;
520   __u64 start_addr;
521 };
522 #define VFIO_IOMMU_SPAPR_TCE_CREATE _IO(VFIO_TYPE, VFIO_BASE + 19)
523 struct vfio_iommu_spapr_tce_remove {
524   __u32 argsz;
525   __u32 flags;
526   __u64 start_addr;
527 };
528 #define VFIO_IOMMU_SPAPR_TCE_REMOVE _IO(VFIO_TYPE, VFIO_BASE + 20)
529 #endif
530