diff options
Diffstat (limited to 'crosvm_plugin/src/lib.rs')
-rw-r--r-- | crosvm_plugin/src/lib.rs | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/crosvm_plugin/src/lib.rs b/crosvm_plugin/src/lib.rs index 8fd9623..ac6b358 100644 --- a/crosvm_plugin/src/lib.rs +++ b/crosvm_plugin/src/lib.rs @@ -45,8 +45,9 @@ use sys_util::ScmSocket; use kvm::dirty_log_bitmap_size; use kvm_sys::{ - kvm_cpuid_entry2, kvm_debugregs, kvm_fpu, kvm_ioapic_state, kvm_lapic_state, kvm_mp_state, - kvm_msr_entry, kvm_pic_state, kvm_pit_state2, kvm_regs, kvm_sregs, kvm_vcpu_events, kvm_xcrs, + kvm_clock_data, kvm_cpuid_entry2, kvm_debugregs, kvm_fpu, kvm_ioapic_state, kvm_lapic_state, + kvm_mp_state, kvm_msr_entry, kvm_pic_state, kvm_pit_state2, kvm_regs, kvm_sregs, + kvm_vcpu_events, kvm_xcrs, }; use plugin_proto::*; @@ -151,6 +152,8 @@ enum Stat { SetIoapicState, GetPitState, SetPitState, + GetClock, + SetClock, SetIdentityMapAddr, PauseVcpus, Start, @@ -1356,6 +1359,30 @@ pub unsafe extern "C" fn crosvm_set_pit_state( } #[no_mangle] +pub unsafe extern "C" fn crosvm_get_clock( + this: *mut crosvm, + clock_data: *mut kvm_clock_data, +) -> c_int { + let _u = STATS.record(Stat::GetClock); + let this = &mut *this; + let state = from_raw_parts_mut(clock_data as *mut u8, size_of::<kvm_clock_data>()); + let ret = this.get_state(MainRequest_StateSet::CLOCK, state); + to_crosvm_rc(ret) +} + +#[no_mangle] +pub unsafe extern "C" fn crosvm_set_clock( + this: *mut crosvm, + clock_data: *const kvm_clock_data, +) -> c_int { + let _u = STATS.record(Stat::SetClock); + let this = &mut *this; + let state = from_raw_parts(clock_data as *mut u8, size_of::<kvm_clock_data>()); + let ret = this.set_state(MainRequest_StateSet::CLOCK, state); + to_crosvm_rc(ret) +} + +#[no_mangle] pub unsafe extern "C" fn crosvm_set_identity_map_addr(self_: *mut crosvm, addr: u32) -> c_int { let _u = STATS.record(Stat::SetIdentityMapAddr); let self_ = &mut (*self_); |