1#![allow(clippy::missing_safety_doc)]
4#![allow(clippy::ptr_offset_with_cast)] #![allow(clippy::undocumented_unsafe_blocks)]
6#![allow(clippy::upper_case_acronyms)]
7#![allow(non_upper_case_globals)]
8#![allow(non_camel_case_types)]
9#![allow(non_snake_case)]
10#![allow(dead_code)]
11
12use zerocopy::FromBytes;
14use zerocopy::Immutable;
15use zerocopy::IntoBytes;
16use zerocopy::KnownLayout;
17
18pub const VFIO_PCI_ACPI_NTFY_IRQ_INDEX: std::os::raw::c_uint = 5;
20
21#[repr(C)]
22#[derive(Debug, Default)]
23pub struct vfio_acpi_dsm {
24 pub argsz: u32,
25 pub padding: u32,
26 pub args: __IncompleteArrayField<u8>,
27}
28
29#[repr(C)]
30#[derive(Debug, Default, Copy, Clone)]
31pub struct vfio_acpi_notify_eventfd {
32 pub notify_eventfd: i32,
33 pub reserved: u32,
34}
35
36#[repr(C)]
37#[derive(Debug, Default)]
38pub struct vfio_region_info_with_cap {
39 pub region_info: vfio_region_info,
40 pub cap_info: __IncompleteArrayField<u8>,
41}
42
43#[repr(C)]
46#[derive(Debug, Default, Copy, Clone, FromBytes, Immutable, IntoBytes, KnownLayout)]
47pub struct vfio_iommu_type1_info_cap_iova_range_header {
48 pub header: vfio_info_cap_header,
49 pub nr_iovas: u32,
50 pub reserved: u32,
51}
52
53pub const VFIO_PKVM_PVIOMMU: u32 = 30;
54
55#[repr(C)]
56#[derive(Default)]
57pub struct __IncompleteArrayField<T>(::std::marker::PhantomData<T>, [T; 0]);
58impl<T> __IncompleteArrayField<T> {
59 #[inline]
60 pub const fn new() -> Self {
61 __IncompleteArrayField(::std::marker::PhantomData, [])
62 }
63 #[inline]
64 pub fn as_ptr(&self) -> *const T {
65 self as *const _ as *const T
66 }
67 #[inline]
68 pub fn as_mut_ptr(&mut self) -> *mut T {
69 self as *mut _ as *mut T
70 }
71 #[inline]
72 pub unsafe fn as_slice(&self, len: usize) -> &[T] {
73 ::std::slice::from_raw_parts(self.as_ptr(), len)
74 }
75 #[inline]
76 pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] {
77 ::std::slice::from_raw_parts_mut(self.as_mut_ptr(), len)
78 }
79}
80impl<T> ::std::fmt::Debug for __IncompleteArrayField<T> {
81 fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
82 fmt.write_str("__IncompleteArrayField")
83 }
84}
85pub const VFIO_API_VERSION: u32 = 0;
86pub const VFIO_TYPE1_IOMMU: u32 = 1;
87pub const VFIO_SPAPR_TCE_IOMMU: u32 = 2;
88pub const VFIO_TYPE1v2_IOMMU: u32 = 3;
89pub const VFIO_DMA_CC_IOMMU: u32 = 4;
90pub const VFIO_EEH: u32 = 5;
91pub const VFIO_TYPE1_NESTING_IOMMU: u32 = 6;
92pub const VFIO_SPAPR_TCE_v2_IOMMU: u32 = 7;
93pub const VFIO_NOIOMMU_IOMMU: u32 = 8;
94pub const VFIO_UNMAP_ALL: u32 = 9;
95pub const VFIO_UPDATE_VADDR: u32 = 10;
96pub const VFIO_TYPE: u32 = 59;
97pub const VFIO_BASE: u32 = 100;
98pub const VFIO_GROUP_FLAGS_VIABLE: u32 = 1;
99pub const VFIO_GROUP_FLAGS_CONTAINER_SET: u32 = 2;
100pub const VFIO_DEVICE_FLAGS_RESET: u32 = 1;
101pub const VFIO_DEVICE_FLAGS_PCI: u32 = 2;
102pub const VFIO_DEVICE_FLAGS_PLATFORM: u32 = 4;
103pub const VFIO_DEVICE_FLAGS_AMBA: u32 = 8;
104pub const VFIO_DEVICE_FLAGS_CCW: u32 = 16;
105pub const VFIO_DEVICE_FLAGS_AP: u32 = 32;
106pub const VFIO_DEVICE_FLAGS_FSL_MC: u32 = 64;
107pub const VFIO_DEVICE_FLAGS_CAPS: u32 = 128;
108pub const VFIO_DEVICE_FLAGS_CDX: u32 = 256;
109pub const VFIO_DEVICE_INFO_CAP_ZPCI_BASE: u32 = 1;
110pub const VFIO_DEVICE_INFO_CAP_ZPCI_GROUP: u32 = 2;
111pub const VFIO_DEVICE_INFO_CAP_ZPCI_UTIL: u32 = 3;
112pub const VFIO_DEVICE_INFO_CAP_ZPCI_PFIP: u32 = 4;
113pub const VFIO_DEVICE_INFO_CAP_PCI_ATOMIC_COMP: u32 = 5;
114pub const VFIO_PCI_ATOMIC_COMP32: u32 = 1;
115pub const VFIO_PCI_ATOMIC_COMP64: u32 = 2;
116pub const VFIO_PCI_ATOMIC_COMP128: u32 = 4;
117pub const VFIO_REGION_INFO_FLAG_READ: u32 = 1;
118pub const VFIO_REGION_INFO_FLAG_WRITE: u32 = 2;
119pub const VFIO_REGION_INFO_FLAG_MMAP: u32 = 4;
120pub const VFIO_REGION_INFO_FLAG_CAPS: u32 = 8;
121pub const VFIO_REGION_INFO_CAP_SPARSE_MMAP: u32 = 1;
122pub const VFIO_REGION_INFO_CAP_TYPE: u32 = 2;
123pub const VFIO_REGION_TYPE_PCI_VENDOR_TYPE: u32 = 2147483648;
124pub const VFIO_REGION_TYPE_PCI_VENDOR_MASK: u32 = 65535;
125pub const VFIO_REGION_TYPE_GFX: u32 = 1;
126pub const VFIO_REGION_TYPE_CCW: u32 = 2;
127pub const VFIO_REGION_TYPE_MIGRATION_DEPRECATED: u32 = 3;
128pub const VFIO_REGION_SUBTYPE_INTEL_IGD_OPREGION: u32 = 1;
129pub const VFIO_REGION_SUBTYPE_INTEL_IGD_HOST_CFG: u32 = 2;
130pub const VFIO_REGION_SUBTYPE_INTEL_IGD_LPC_CFG: u32 = 3;
131pub const VFIO_REGION_SUBTYPE_NVIDIA_NVLINK2_RAM: u32 = 1;
132pub const VFIO_REGION_SUBTYPE_IBM_NVLINK2_ATSD: u32 = 1;
133pub const VFIO_REGION_SUBTYPE_GFX_EDID: u32 = 1;
134pub const VFIO_DEVICE_GFX_LINK_STATE_UP: u32 = 1;
135pub const VFIO_DEVICE_GFX_LINK_STATE_DOWN: u32 = 2;
136pub const VFIO_REGION_SUBTYPE_CCW_ASYNC_CMD: u32 = 1;
137pub const VFIO_REGION_SUBTYPE_CCW_SCHIB: u32 = 2;
138pub const VFIO_REGION_SUBTYPE_CCW_CRW: u32 = 3;
139pub const VFIO_REGION_SUBTYPE_MIGRATION_DEPRECATED: u32 = 1;
140pub const VFIO_DEVICE_STATE_V1_STOP: u32 = 0;
141pub const VFIO_DEVICE_STATE_V1_RUNNING: u32 = 1;
142pub const VFIO_DEVICE_STATE_V1_SAVING: u32 = 2;
143pub const VFIO_DEVICE_STATE_V1_RESUMING: u32 = 4;
144pub const VFIO_DEVICE_STATE_MASK: u32 = 7;
145pub const VFIO_REGION_INFO_CAP_MSIX_MAPPABLE: u32 = 3;
146pub const VFIO_REGION_INFO_CAP_NVLINK2_SSATGT: u32 = 4;
147pub const VFIO_REGION_INFO_CAP_NVLINK2_LNKSPD: u32 = 5;
148pub const VFIO_IRQ_INFO_EVENTFD: u32 = 1;
149pub const VFIO_IRQ_INFO_MASKABLE: u32 = 2;
150pub const VFIO_IRQ_INFO_AUTOMASKED: u32 = 4;
151pub const VFIO_IRQ_INFO_NORESIZE: u32 = 8;
152pub const VFIO_IRQ_SET_DATA_NONE: u32 = 1;
153pub const VFIO_IRQ_SET_DATA_BOOL: u32 = 2;
154pub const VFIO_IRQ_SET_DATA_EVENTFD: u32 = 4;
155pub const VFIO_IRQ_SET_ACTION_MASK: u32 = 8;
156pub const VFIO_IRQ_SET_ACTION_UNMASK: u32 = 16;
157pub const VFIO_IRQ_SET_ACTION_TRIGGER: u32 = 32;
158pub const VFIO_IRQ_SET_DATA_TYPE_MASK: u32 = 7;
159pub const VFIO_IRQ_SET_ACTION_TYPE_MASK: u32 = 56;
160pub const VFIO_PCI_DEVID_OWNED: u32 = 0;
161pub const VFIO_PCI_DEVID_NOT_OWNED: i32 = -1;
162pub const VFIO_PCI_HOT_RESET_FLAG_DEV_ID: u32 = 1;
163pub const VFIO_PCI_HOT_RESET_FLAG_DEV_ID_OWNED: u32 = 2;
164pub const VFIO_GFX_PLANE_TYPE_PROBE: u32 = 1;
165pub const VFIO_GFX_PLANE_TYPE_DMABUF: u32 = 2;
166pub const VFIO_GFX_PLANE_TYPE_REGION: u32 = 4;
167pub const VFIO_DEVICE_IOEVENTFD_8: u32 = 1;
168pub const VFIO_DEVICE_IOEVENTFD_16: u32 = 2;
169pub const VFIO_DEVICE_IOEVENTFD_32: u32 = 4;
170pub const VFIO_DEVICE_IOEVENTFD_64: u32 = 8;
171pub const VFIO_DEVICE_IOEVENTFD_SIZE_MASK: u32 = 15;
172pub const VFIO_DEVICE_FEATURE_MASK: u32 = 65535;
173pub const VFIO_DEVICE_FEATURE_GET: u32 = 65536;
174pub const VFIO_DEVICE_FEATURE_SET: u32 = 131072;
175pub const VFIO_DEVICE_FEATURE_PROBE: u32 = 262144;
176pub const VFIO_DEVICE_FEATURE_PCI_VF_TOKEN: u32 = 0;
177pub const VFIO_MIGRATION_STOP_COPY: u32 = 1;
178pub const VFIO_MIGRATION_P2P: u32 = 2;
179pub const VFIO_MIGRATION_PRE_COPY: u32 = 4;
180pub const VFIO_DEVICE_FEATURE_MIGRATION: u32 = 1;
181pub const VFIO_DEVICE_FEATURE_MIG_DEVICE_STATE: u32 = 2;
182pub const VFIO_DEVICE_FEATURE_LOW_POWER_ENTRY: u32 = 3;
183pub const VFIO_DEVICE_FEATURE_LOW_POWER_ENTRY_WITH_WAKEUP: u32 = 4;
184pub const VFIO_DEVICE_FEATURE_LOW_POWER_EXIT: u32 = 5;
185pub const VFIO_DEVICE_FEATURE_DMA_LOGGING_START: u32 = 6;
186pub const VFIO_DEVICE_FEATURE_DMA_LOGGING_STOP: u32 = 7;
187pub const VFIO_DEVICE_FEATURE_DMA_LOGGING_REPORT: u32 = 8;
188pub const VFIO_DEVICE_FEATURE_MIG_DATA_SIZE: u32 = 9;
189pub const VFIO_DEVICE_FEATURE_CLEAR_MASTER: u32 = 0;
190pub const VFIO_DEVICE_FEATURE_SET_MASTER: u32 = 1;
191pub const VFIO_DEVICE_FEATURE_BUS_MASTER: u32 = 10;
192pub const VFIO_IOMMU_INFO_PGSIZES: u32 = 1;
193pub const VFIO_IOMMU_INFO_CAPS: u32 = 2;
194pub const VFIO_IOMMU_TYPE1_INFO_CAP_IOVA_RANGE: u32 = 1;
195pub const VFIO_IOMMU_TYPE1_INFO_CAP_MIGRATION: u32 = 2;
196pub const VFIO_IOMMU_TYPE1_INFO_DMA_AVAIL: u32 = 3;
197pub const VFIO_DMA_MAP_FLAG_READ: u32 = 1;
198pub const VFIO_DMA_MAP_FLAG_WRITE: u32 = 2;
199pub const VFIO_DMA_MAP_FLAG_VADDR: u32 = 4;
200pub const VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP: u32 = 1;
201pub const VFIO_DMA_UNMAP_FLAG_ALL: u32 = 2;
202pub const VFIO_DMA_UNMAP_FLAG_VADDR: u32 = 4;
203pub const VFIO_IOMMU_DIRTY_PAGES_FLAG_START: u32 = 1;
204pub const VFIO_IOMMU_DIRTY_PAGES_FLAG_STOP: u32 = 2;
205pub const VFIO_IOMMU_DIRTY_PAGES_FLAG_GET_BITMAP: u32 = 4;
206pub const VFIO_IOMMU_SPAPR_INFO_DDW: u32 = 1;
207pub const VFIO_EEH_PE_DISABLE: u32 = 0;
208pub const VFIO_EEH_PE_ENABLE: u32 = 1;
209pub const VFIO_EEH_PE_UNFREEZE_IO: u32 = 2;
210pub const VFIO_EEH_PE_UNFREEZE_DMA: u32 = 3;
211pub const VFIO_EEH_PE_GET_STATE: u32 = 4;
212pub const VFIO_EEH_PE_STATE_NORMAL: u32 = 0;
213pub const VFIO_EEH_PE_STATE_RESET: u32 = 1;
214pub const VFIO_EEH_PE_STATE_STOPPED: u32 = 2;
215pub const VFIO_EEH_PE_STATE_STOPPED_DMA: u32 = 4;
216pub const VFIO_EEH_PE_STATE_UNAVAIL: u32 = 5;
217pub const VFIO_EEH_PE_RESET_DEACTIVATE: u32 = 5;
218pub const VFIO_EEH_PE_RESET_HOT: u32 = 6;
219pub const VFIO_EEH_PE_RESET_FUNDAMENTAL: u32 = 7;
220pub const VFIO_EEH_PE_CONFIGURE: u32 = 8;
221pub const VFIO_EEH_PE_INJECT_ERR: u32 = 9;
222#[repr(C)]
223#[derive(Debug, Default, Copy, Clone, FromBytes, Immutable, IntoBytes, KnownLayout)]
224pub struct vfio_info_cap_header {
225 pub id: u16,
226 pub version: u16,
227 pub next: u32,
228}
229#[repr(C)]
230#[derive(Debug, Default, Copy, Clone)]
231pub struct vfio_group_status {
232 pub argsz: u32,
233 pub flags: u32,
234}
235#[repr(C)]
236#[derive(Debug, Default, Copy, Clone)]
237pub struct vfio_device_info {
238 pub argsz: u32,
239 pub flags: u32,
240 pub num_regions: u32,
241 pub num_irqs: u32,
242 pub cap_offset: u32,
243 pub pad: u32,
244}
245#[repr(C)]
246#[derive(Debug, Default, Copy, Clone)]
247pub struct vfio_device_info_cap_pci_atomic_comp {
248 pub header: vfio_info_cap_header,
249 pub flags: u32,
250 pub reserved: u32,
251}
252#[repr(C)]
253#[derive(Debug, Default, Copy, Clone)]
254pub struct vfio_region_info {
255 pub argsz: u32,
256 pub flags: u32,
257 pub index: u32,
258 pub cap_offset: u32,
259 pub size: u64,
260 pub offset: u64,
261}
262#[repr(C)]
263#[derive(Debug, Default, Copy, Clone)]
264pub struct vfio_region_sparse_mmap_area {
265 pub offset: u64,
266 pub size: u64,
267}
268#[repr(C)]
269#[derive(Debug, Default)]
270pub struct vfio_region_info_cap_sparse_mmap {
271 pub header: vfio_info_cap_header,
272 pub nr_areas: u32,
273 pub reserved: u32,
274 pub areas: __IncompleteArrayField<vfio_region_sparse_mmap_area>,
275}
276#[repr(C)]
277#[derive(Debug, Default, Copy, Clone)]
278pub struct vfio_region_info_cap_type {
279 pub header: vfio_info_cap_header,
280 pub type_: u32,
281 pub subtype: u32,
282}
283#[repr(C)]
284#[derive(Debug, Default, Copy, Clone)]
285pub struct vfio_region_gfx_edid {
286 pub edid_offset: u32,
287 pub edid_max_size: u32,
288 pub edid_size: u32,
289 pub max_xres: u32,
290 pub max_yres: u32,
291 pub link_state: u32,
292}
293#[repr(C)]
294#[derive(Debug, Default, Copy, Clone)]
295pub struct vfio_device_migration_info {
296 pub device_state: u32,
297 pub reserved: u32,
298 pub pending_bytes: u64,
299 pub data_offset: u64,
300 pub data_size: u64,
301}
302#[repr(C)]
303#[derive(Debug, Default, Copy, Clone)]
304pub struct vfio_region_info_cap_nvlink2_ssatgt {
305 pub header: vfio_info_cap_header,
306 pub tgt: u64,
307}
308#[repr(C)]
309#[derive(Debug, Default, Copy, Clone)]
310pub struct vfio_region_info_cap_nvlink2_lnkspd {
311 pub header: vfio_info_cap_header,
312 pub link_speed: u32,
313 pub __pad: u32,
314}
315#[repr(C)]
316#[derive(Debug, Default, Copy, Clone)]
317pub struct vfio_irq_info {
318 pub argsz: u32,
319 pub flags: u32,
320 pub index: u32,
321 pub count: u32,
322}
323#[repr(C)]
324#[derive(Debug, Default)]
325pub struct vfio_irq_set {
326 pub argsz: u32,
327 pub flags: u32,
328 pub index: u32,
329 pub start: u32,
330 pub count: u32,
331 pub data: __IncompleteArrayField<u8>,
332}
333pub const VFIO_PCI_BAR0_REGION_INDEX: _bindgen_ty_1 = 0;
334pub const VFIO_PCI_BAR1_REGION_INDEX: _bindgen_ty_1 = 1;
335pub const VFIO_PCI_BAR2_REGION_INDEX: _bindgen_ty_1 = 2;
336pub const VFIO_PCI_BAR3_REGION_INDEX: _bindgen_ty_1 = 3;
337pub const VFIO_PCI_BAR4_REGION_INDEX: _bindgen_ty_1 = 4;
338pub const VFIO_PCI_BAR5_REGION_INDEX: _bindgen_ty_1 = 5;
339pub const VFIO_PCI_ROM_REGION_INDEX: _bindgen_ty_1 = 6;
340pub const VFIO_PCI_CONFIG_REGION_INDEX: _bindgen_ty_1 = 7;
341pub const VFIO_PCI_VGA_REGION_INDEX: _bindgen_ty_1 = 8;
342pub const VFIO_PCI_NUM_REGIONS: _bindgen_ty_1 = 9;
343pub type _bindgen_ty_1 = ::std::os::raw::c_uint;
344pub const VFIO_PCI_INTX_IRQ_INDEX: _bindgen_ty_2 = 0;
345pub const VFIO_PCI_MSI_IRQ_INDEX: _bindgen_ty_2 = 1;
346pub const VFIO_PCI_MSIX_IRQ_INDEX: _bindgen_ty_2 = 2;
347pub const VFIO_PCI_ERR_IRQ_INDEX: _bindgen_ty_2 = 3;
348pub const VFIO_PCI_REQ_IRQ_INDEX: _bindgen_ty_2 = 4;
349pub const VFIO_PCI_NUM_IRQS: _bindgen_ty_2 = 5;
350pub type _bindgen_ty_2 = ::std::os::raw::c_uint;
351pub const VFIO_CCW_CONFIG_REGION_INDEX: _bindgen_ty_3 = 0;
352pub const VFIO_CCW_NUM_REGIONS: _bindgen_ty_3 = 1;
353pub type _bindgen_ty_3 = ::std::os::raw::c_uint;
354pub const VFIO_CCW_IO_IRQ_INDEX: _bindgen_ty_4 = 0;
355pub const VFIO_CCW_CRW_IRQ_INDEX: _bindgen_ty_4 = 1;
356pub const VFIO_CCW_REQ_IRQ_INDEX: _bindgen_ty_4 = 2;
357pub const VFIO_CCW_NUM_IRQS: _bindgen_ty_4 = 3;
358pub type _bindgen_ty_4 = ::std::os::raw::c_uint;
359pub const VFIO_AP_REQ_IRQ_INDEX: _bindgen_ty_5 = 0;
360pub const VFIO_AP_NUM_IRQS: _bindgen_ty_5 = 1;
361pub type _bindgen_ty_5 = ::std::os::raw::c_uint;
362#[repr(C)]
363#[derive(Copy, Clone)]
364pub struct vfio_pci_dependent_device {
365 pub __bindgen_anon_1: vfio_pci_dependent_device__bindgen_ty_1,
366 pub segment: u16,
367 pub bus: u8,
368 pub devfn: u8,
369}
370#[repr(C)]
371#[derive(Copy, Clone)]
372pub union vfio_pci_dependent_device__bindgen_ty_1 {
373 pub group_id: u32,
374 pub devid: u32,
375}
376impl Default for vfio_pci_dependent_device__bindgen_ty_1 {
377 fn default() -> Self {
378 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
379 unsafe {
380 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
381 s.assume_init()
382 }
383 }
384}
385impl Default for vfio_pci_dependent_device {
386 fn default() -> Self {
387 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
388 unsafe {
389 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
390 s.assume_init()
391 }
392 }
393}
394#[repr(C)]
395pub struct vfio_pci_hot_reset_info {
396 pub argsz: u32,
397 pub flags: u32,
398 pub count: u32,
399 pub devices: __IncompleteArrayField<vfio_pci_dependent_device>,
400}
401impl Default for vfio_pci_hot_reset_info {
402 fn default() -> Self {
403 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
404 unsafe {
405 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
406 s.assume_init()
407 }
408 }
409}
410#[repr(C)]
411#[derive(Debug, Default)]
412pub struct vfio_pci_hot_reset {
413 pub argsz: u32,
414 pub flags: u32,
415 pub count: u32,
416 pub group_fds: __IncompleteArrayField<i32>,
417}
418#[repr(C)]
419#[derive(Copy, Clone)]
420pub struct vfio_device_gfx_plane_info {
421 pub argsz: u32,
422 pub flags: u32,
423 pub drm_plane_type: u32,
424 pub drm_format: u32,
425 pub drm_format_mod: u64,
426 pub width: u32,
427 pub height: u32,
428 pub stride: u32,
429 pub size: u32,
430 pub x_pos: u32,
431 pub y_pos: u32,
432 pub x_hot: u32,
433 pub y_hot: u32,
434 pub __bindgen_anon_1: vfio_device_gfx_plane_info__bindgen_ty_1,
435 pub reserved: u32,
436}
437#[repr(C)]
438#[derive(Copy, Clone)]
439pub union vfio_device_gfx_plane_info__bindgen_ty_1 {
440 pub region_index: u32,
441 pub dmabuf_id: u32,
442}
443impl Default for vfio_device_gfx_plane_info__bindgen_ty_1 {
444 fn default() -> Self {
445 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
446 unsafe {
447 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
448 s.assume_init()
449 }
450 }
451}
452impl Default for vfio_device_gfx_plane_info {
453 fn default() -> Self {
454 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
455 unsafe {
456 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
457 s.assume_init()
458 }
459 }
460}
461#[repr(C)]
462#[derive(Debug, Default, Copy, Clone)]
463pub struct vfio_device_ioeventfd {
464 pub argsz: u32,
465 pub flags: u32,
466 pub offset: u64,
467 pub data: u64,
468 pub fd: i32,
469 pub reserved: u32,
470}
471#[repr(C)]
472#[derive(Debug, Default)]
473pub struct vfio_device_feature {
474 pub argsz: u32,
475 pub flags: u32,
476 pub data: __IncompleteArrayField<u8>,
477}
478#[repr(C)]
479#[derive(Debug, Default, Copy, Clone)]
480pub struct vfio_device_bind_iommufd {
481 pub argsz: u32,
482 pub flags: u32,
483 pub iommufd: i32,
484 pub out_devid: u32,
485}
486#[repr(C)]
487#[derive(Debug, Default, Copy, Clone)]
488pub struct vfio_device_attach_iommufd_pt {
489 pub argsz: u32,
490 pub flags: u32,
491 pub pt_id: u32,
492}
493#[repr(C)]
494#[derive(Debug, Default, Copy, Clone)]
495pub struct vfio_device_detach_iommufd_pt {
496 pub argsz: u32,
497 pub flags: u32,
498}
499#[repr(C)]
500#[derive(Debug, Default, Copy, Clone)]
501pub struct vfio_device_feature_migration {
502 pub flags: u64,
503}
504#[repr(C)]
505#[derive(Debug, Default, Copy, Clone)]
506pub struct vfio_device_feature_mig_state {
507 pub device_state: u32,
508 pub data_fd: i32,
509}
510pub const vfio_device_mig_state_VFIO_DEVICE_STATE_ERROR: vfio_device_mig_state = 0;
511pub const vfio_device_mig_state_VFIO_DEVICE_STATE_STOP: vfio_device_mig_state = 1;
512pub const vfio_device_mig_state_VFIO_DEVICE_STATE_RUNNING: vfio_device_mig_state = 2;
513pub const vfio_device_mig_state_VFIO_DEVICE_STATE_STOP_COPY: vfio_device_mig_state = 3;
514pub const vfio_device_mig_state_VFIO_DEVICE_STATE_RESUMING: vfio_device_mig_state = 4;
515pub const vfio_device_mig_state_VFIO_DEVICE_STATE_RUNNING_P2P: vfio_device_mig_state = 5;
516pub const vfio_device_mig_state_VFIO_DEVICE_STATE_PRE_COPY: vfio_device_mig_state = 6;
517pub const vfio_device_mig_state_VFIO_DEVICE_STATE_PRE_COPY_P2P: vfio_device_mig_state = 7;
518pub const vfio_device_mig_state_VFIO_DEVICE_STATE_NR: vfio_device_mig_state = 8;
519pub type vfio_device_mig_state = ::std::os::raw::c_uint;
520#[repr(C)]
521#[derive(Debug, Default, Copy, Clone)]
522pub struct vfio_precopy_info {
523 pub argsz: u32,
524 pub flags: u32,
525 pub initial_bytes: u64,
526 pub dirty_bytes: u64,
527}
528#[repr(C)]
529#[derive(Debug, Default, Copy, Clone)]
530pub struct vfio_device_low_power_entry_with_wakeup {
531 pub wakeup_eventfd: i32,
532 pub reserved: u32,
533}
534#[repr(C)]
535#[derive(Debug, Default, Copy, Clone)]
536pub struct vfio_device_feature_dma_logging_control {
537 pub page_size: u64,
538 pub num_ranges: u32,
539 pub __reserved: u32,
540 pub ranges: u64,
541}
542#[repr(C)]
543#[derive(Debug, Default, Copy, Clone)]
544pub struct vfio_device_feature_dma_logging_range {
545 pub iova: u64,
546 pub length: u64,
547}
548#[repr(C)]
549#[derive(Debug, Default, Copy, Clone)]
550pub struct vfio_device_feature_dma_logging_report {
551 pub iova: u64,
552 pub length: u64,
553 pub page_size: u64,
554 pub bitmap: u64,
555}
556#[repr(C)]
557#[derive(Debug, Default, Copy, Clone)]
558pub struct vfio_device_feature_mig_data_size {
559 pub stop_copy_length: u64,
560}
561#[repr(C)]
562#[derive(Debug, Default, Copy, Clone)]
563pub struct vfio_device_feature_bus_master {
564 pub op: u32,
565}
566#[repr(C)]
567#[derive(Debug, Default, Copy, Clone)]
568pub struct vfio_iommu_type1_info {
569 pub argsz: u32,
570 pub flags: u32,
571 pub iova_pgsizes: u64,
572 pub cap_offset: u32,
573 pub pad: u32,
574}
575#[repr(C)]
576#[derive(Debug, Default, Copy, Clone, FromBytes, Immutable, IntoBytes, KnownLayout)]
577pub struct vfio_iova_range {
578 pub start: u64,
579 pub end: u64,
580}
581#[repr(C)]
582#[derive(Debug, Default)]
583pub struct vfio_iommu_type1_info_cap_iova_range {
584 pub header: vfio_info_cap_header,
585 pub nr_iovas: u32,
586 pub reserved: u32,
587 pub iova_ranges: __IncompleteArrayField<vfio_iova_range>,
588}
589#[repr(C)]
590#[derive(Debug, Default, Copy, Clone)]
591pub struct vfio_iommu_type1_info_cap_migration {
592 pub header: vfio_info_cap_header,
593 pub flags: u32,
594 pub pgsize_bitmap: u64,
595 pub max_dirty_bitmap_size: u64,
596}
597#[repr(C)]
598#[derive(Debug, Default, Copy, Clone)]
599pub struct vfio_iommu_type1_info_dma_avail {
600 pub header: vfio_info_cap_header,
601 pub avail: u32,
602}
603#[repr(C)]
604#[derive(Debug, Default, Copy, Clone)]
605pub struct vfio_iommu_type1_dma_map {
606 pub argsz: u32,
607 pub flags: u32,
608 pub vaddr: u64,
609 pub iova: u64,
610 pub size: u64,
611}
612#[repr(C)]
613#[derive(Debug, Copy, Clone)]
614pub struct vfio_bitmap {
615 pub pgsize: u64,
616 pub size: u64,
617 pub data: *mut u64,
618}
619impl Default for vfio_bitmap {
620 fn default() -> Self {
621 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
622 unsafe {
623 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
624 s.assume_init()
625 }
626 }
627}
628#[repr(C)]
629#[derive(Debug, Default)]
630pub struct vfio_iommu_type1_dma_unmap {
631 pub argsz: u32,
632 pub flags: u32,
633 pub iova: u64,
634 pub size: u64,
635 pub data: __IncompleteArrayField<u8>,
636}
637#[repr(C)]
638#[derive(Debug, Default)]
639pub struct vfio_iommu_type1_dirty_bitmap {
640 pub argsz: u32,
641 pub flags: u32,
642 pub data: __IncompleteArrayField<u8>,
643}
644#[repr(C)]
645#[derive(Debug, Copy, Clone)]
646pub struct vfio_iommu_type1_dirty_bitmap_get {
647 pub iova: u64,
648 pub size: u64,
649 pub bitmap: vfio_bitmap,
650}
651impl Default for vfio_iommu_type1_dirty_bitmap_get {
652 fn default() -> Self {
653 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
654 unsafe {
655 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
656 s.assume_init()
657 }
658 }
659}
660#[repr(C)]
661#[derive(Debug, Default, Copy, Clone)]
662pub struct vfio_iommu_spapr_tce_ddw_info {
663 pub pgsizes: u64,
664 pub max_dynamic_windows_supported: u32,
665 pub levels: u32,
666}
667#[repr(C)]
668#[derive(Debug, Default, Copy, Clone)]
669pub struct vfio_iommu_spapr_tce_info {
670 pub argsz: u32,
671 pub flags: u32,
672 pub dma32_window_start: u32,
673 pub dma32_window_size: u32,
674 pub ddw: vfio_iommu_spapr_tce_ddw_info,
675}
676#[repr(C)]
677#[derive(Debug, Default, Copy, Clone)]
678pub struct vfio_eeh_pe_err {
679 pub type_: u32,
680 pub func: u32,
681 pub addr: u64,
682 pub mask: u64,
683}
684#[repr(C)]
685#[derive(Copy, Clone)]
686pub struct vfio_eeh_pe_op {
687 pub argsz: u32,
688 pub flags: u32,
689 pub op: u32,
690 pub __bindgen_anon_1: vfio_eeh_pe_op__bindgen_ty_1,
691}
692#[repr(C)]
693#[derive(Copy, Clone)]
694pub union vfio_eeh_pe_op__bindgen_ty_1 {
695 pub err: vfio_eeh_pe_err,
696}
697impl Default for vfio_eeh_pe_op__bindgen_ty_1 {
698 fn default() -> Self {
699 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
700 unsafe {
701 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
702 s.assume_init()
703 }
704 }
705}
706impl Default for vfio_eeh_pe_op {
707 fn default() -> Self {
708 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
709 unsafe {
710 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
711 s.assume_init()
712 }
713 }
714}
715#[repr(C)]
716#[derive(Debug, Default, Copy, Clone)]
717pub struct vfio_iommu_spapr_register_memory {
718 pub argsz: u32,
719 pub flags: u32,
720 pub vaddr: u64,
721 pub size: u64,
722}
723#[repr(C)]
724#[derive(Debug, Default, Copy, Clone)]
725pub struct vfio_iommu_spapr_tce_create {
726 pub argsz: u32,
727 pub flags: u32,
728 pub page_shift: u32,
729 pub __resv1: u32,
730 pub window_size: u64,
731 pub levels: u32,
732 pub __resv2: u32,
733 pub start_addr: u64,
734}
735#[repr(C)]
736#[derive(Debug, Default, Copy, Clone)]
737pub struct vfio_iommu_spapr_tce_remove {
738 pub argsz: u32,
739 pub flags: u32,
740 pub start_addr: u64,
741}