• 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