kvm_vcpu_timer.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. #ifndef __KVM_VCPU_RISCV_TIMER_H
  9. #define __KVM_VCPU_RISCV_TIMER_H
  10. #include <linux/hrtimer.h>
  11. struct kvm_guest_timer {
  12. /* Mult & Shift values to get nanoseconds from cycles */
  13. u32 nsec_mult;
  14. u32 nsec_shift;
  15. /* Time delta value */
  16. u64 time_delta;
  17. };
  18. struct kvm_vcpu_timer {
  19. /* Flag for whether init is done */
  20. bool init_done;
  21. /* Flag for whether timer event is configured */
  22. bool next_set;
  23. /* Next timer event cycles */
  24. u64 next_cycles;
  25. /* Underlying hrtimer instance */
  26. struct hrtimer hrt;
  27. };
  28. int kvm_riscv_vcpu_timer_next_event(struct kvm_vcpu *vcpu, u64 ncycles);
  29. int kvm_riscv_vcpu_get_reg_timer(struct kvm_vcpu *vcpu,
  30. const struct kvm_one_reg *reg);
  31. int kvm_riscv_vcpu_set_reg_timer(struct kvm_vcpu *vcpu,
  32. const struct kvm_one_reg *reg);
  33. int kvm_riscv_vcpu_timer_init(struct kvm_vcpu *vcpu);
  34. int kvm_riscv_vcpu_timer_deinit(struct kvm_vcpu *vcpu);
  35. int kvm_riscv_vcpu_timer_reset(struct kvm_vcpu *vcpu);
  36. void kvm_riscv_vcpu_timer_restore(struct kvm_vcpu *vcpu);
  37. int kvm_riscv_guest_timer_init(struct kvm *kvm);
  38. #endif