diff options
Diffstat (limited to 'plugin_proto/src/lib.rs')
-rw-r--r-- | plugin_proto/src/lib.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/plugin_proto/src/lib.rs b/plugin_proto/src/lib.rs index 7f0d66c..c28635a 100644 --- a/plugin_proto/src/lib.rs +++ b/plugin_proto/src/lib.rs @@ -1,2 +1,34 @@ extern crate protobuf; +extern crate kvm_sys; 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 +} |