kvm_bindings/x86_64/
nested.rs1use crate::KVM_STATE_NESTED_SVM_VMCB_SIZE;
8use crate::{KVM_STATE_NESTED_VMX_VMCS_SIZE, kvm_nested_state__bindgen_ty_1};
9use core::mem;
10
11#[derive(Clone, Copy)]
16#[cfg_attr(feature = "serde", derive(zerocopy::Immutable, zerocopy::FromBytes))]
17#[repr(C)]
18pub union kvm_nested_state__data {
19 pub vmx: kvm_vmx_nested_state_data,
20 pub svm: kvm_svm_nested_state_data,
21}
22
23impl Default for kvm_nested_state__data {
24 fn default() -> Self {
25 unsafe { mem::zeroed() }
27 }
28}
29
30#[derive(Clone, Copy)]
31#[cfg_attr(
32 feature = "serde",
33 derive(zerocopy::IntoBytes, zerocopy::Immutable, zerocopy::FromBytes)
34)]
35#[repr(C)]
36pub struct kvm_vmx_nested_state_data {
37 pub vmcs12: [u8; KVM_STATE_NESTED_VMX_VMCS_SIZE as usize],
38 pub shadow_vmcs12: [u8; KVM_STATE_NESTED_VMX_VMCS_SIZE as usize],
39}
40
41#[derive(Clone, Copy)]
42#[cfg_attr(
43 feature = "serde",
44 derive(zerocopy::IntoBytes, zerocopy::Immutable, zerocopy::FromBytes)
45)]
46#[repr(C)]
47pub struct kvm_svm_nested_state_data {
48 pub vmcb12: [u8; KVM_STATE_NESTED_SVM_VMCB_SIZE as usize],
49}
50
51#[derive(Clone, Copy)]
67#[cfg_attr(
68 feature = "serde",
69 derive(zerocopy::IntoBytes, zerocopy::Immutable, zerocopy::FromBytes)
70)]
71#[repr(C)]
72#[non_exhaustive] pub struct KvmNestedStateBuffer {
74 pub flags: u16,
75 pub format: u16,
76 pub size: u32,
77 pub hdr: kvm_nested_state__bindgen_ty_1,
78 pub data: kvm_nested_state__data,
79}
80
81impl KvmNestedStateBuffer {
82 pub fn empty() -> Self {
86 let mut this: KvmNestedStateBuffer = unsafe { mem::zeroed() };
88 this.size = size_of::<Self>() as u32;
91 this
92 }
93}
94
95impl Default for KvmNestedStateBuffer {
96 fn default() -> Self {
97 Self::empty()
98 }
99}
100
101#[cfg(test)]
102mod tests {
103 use super::*;
104
105 use crate::kvm_nested_state as kvm_nested_state_raw_binding;
106
107 #[test]
108 fn test_layout() {
109 assert_eq!(
110 align_of::<kvm_nested_state_raw_binding>(),
111 align_of::<KvmNestedStateBuffer>()
112 );
113 assert!(size_of::<KvmNestedStateBuffer>() > size_of::<kvm_nested_state_raw_binding>());
114 assert_eq!(size_of::<KvmNestedStateBuffer>(), 8320);
116 }
117}