1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2019 Western Digital Corporation or its affiliates. 4 * 5 * Authors: 6 * Atish Patra <atish.patra@wdc.com> 7 */ 8 9 #ifndef __KVM_VCPU_RISCV_TIMER_H 10 #define __KVM_VCPU_RISCV_TIMER_H 11 12 #include <linux/hrtimer.h> 13 14 struct kvm_guest_timer { 15 /* Mult & Shift values to get nanoseconds from cycles */ 16 u32 nsec_mult; 17 u32 nsec_shift; 18 /* Time delta value */ 19 u64 time_delta; 20 }; 21 22 struct kvm_vcpu_timer { 23 /* Flag for whether init is done */ 24 bool init_done; 25 /* Flag for whether timer event is configured */ 26 bool next_set; 27 /* Next timer event cycles */ 28 u64 next_cycles; 29 /* Underlying hrtimer instance */ 30 struct hrtimer hrt; 31 }; 32 33 int kvm_riscv_vcpu_timer_next_event(struct kvm_vcpu *vcpu, u64 ncycles); 34 int kvm_riscv_vcpu_get_reg_timer(struct kvm_vcpu *vcpu, 35 const struct kvm_one_reg *reg); 36 int kvm_riscv_vcpu_set_reg_timer(struct kvm_vcpu *vcpu, 37 const struct kvm_one_reg *reg); 38 int kvm_riscv_vcpu_timer_init(struct kvm_vcpu *vcpu); 39 int kvm_riscv_vcpu_timer_deinit(struct kvm_vcpu *vcpu); 40 int kvm_riscv_vcpu_timer_reset(struct kvm_vcpu *vcpu); 41 void kvm_riscv_vcpu_timer_restore(struct kvm_vcpu *vcpu); 42 void kvm_riscv_guest_timer_init(struct kvm *kvm); 43 44 #endif 45