| extern crate kvm_sys; |
| extern crate protobuf; |
| include!(concat!(env!("OUT_DIR"), "/proto_include.rs")); |
| |
| /// Converts protobuf representation of CpuId data into KVM format. |
| pub fn cpuid_proto_to_kvm(entry: &CpuidEntry) -> kvm_sys::kvm_cpuid_entry2 { |
| // Safe: C structures are expected to be zero-initialized. |
| let mut e: kvm_sys::kvm_cpuid_entry2 = unsafe { std::mem::zeroed() }; |
| e.function = entry.function; |
| if entry.has_index { |
| e.flags = kvm_sys::KVM_CPUID_FLAG_SIGNIFCANT_INDEX; |
| } |
| e.index = entry.index; |
| e.eax = entry.eax; |
| e.ebx = entry.ebx; |
| e.ecx = entry.ecx; |
| e.edx = entry.edx; |
| |
| e |
| } |
| |
| /// Converts KVM representation of CpuId data into protobuf format. |
| pub fn cpuid_kvm_to_proto(entry: &kvm_sys::kvm_cpuid_entry2) -> CpuidEntry { |
| let mut e = CpuidEntry::new(); |
| e.function = entry.function; |
| e.has_index = entry.flags & kvm_sys::KVM_CPUID_FLAG_SIGNIFCANT_INDEX != 0; |
| e.index = entry.index; |
| e.eax = entry.eax; |
| e.ebx = entry.ebx; |
| e.ecx = entry.ecx; |
| e.edx = entry.edx; |
| |
| e |
| } |