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