kvm_vcpu_vector.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (C) 2022 SiFive
  4. *
  5. * Authors:
  6. * Vincent Chen <vincent.chen@sifive.com>
  7. * Greentime Hu <greentime.hu@sifive.com>
  8. */
  9. #ifndef __KVM_VCPU_RISCV_VECTOR_H
  10. #define __KVM_VCPU_RISCV_VECTOR_H
  11. #include <linux/types.h>
  12. #ifdef CONFIG_RISCV_ISA_V
  13. #include <asm/vector.h>
  14. #include <asm/kvm_host.h>
  15. static __always_inline void __kvm_riscv_vector_save(struct kvm_cpu_context *context)
  16. {
  17. __riscv_v_vstate_save(&context->vector, context->vector.datap);
  18. }
  19. static __always_inline void __kvm_riscv_vector_restore(struct kvm_cpu_context *context)
  20. {
  21. __riscv_v_vstate_restore(&context->vector, context->vector.datap);
  22. }
  23. void kvm_riscv_vcpu_vector_reset(struct kvm_vcpu *vcpu);
  24. void kvm_riscv_vcpu_guest_vector_save(struct kvm_cpu_context *cntx,
  25. unsigned long *isa);
  26. void kvm_riscv_vcpu_guest_vector_restore(struct kvm_cpu_context *cntx,
  27. unsigned long *isa);
  28. void kvm_riscv_vcpu_host_vector_save(struct kvm_cpu_context *cntx);
  29. void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context *cntx);
  30. int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu,
  31. struct kvm_cpu_context *cntx);
  32. void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu *vcpu);
  33. #else
  34. struct kvm_cpu_context;
  35. static inline void kvm_riscv_vcpu_vector_reset(struct kvm_vcpu *vcpu)
  36. {
  37. }
  38. static inline void kvm_riscv_vcpu_guest_vector_save(struct kvm_cpu_context *cntx,
  39. unsigned long *isa)
  40. {
  41. }
  42. static inline void kvm_riscv_vcpu_guest_vector_restore(struct kvm_cpu_context *cntx,
  43. unsigned long *isa)
  44. {
  45. }
  46. static inline void kvm_riscv_vcpu_host_vector_save(struct kvm_cpu_context *cntx)
  47. {
  48. }
  49. static inline void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context *cntx)
  50. {
  51. }
  52. static inline int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu,
  53. struct kvm_cpu_context *cntx)
  54. {
  55. return 0;
  56. }
  57. static inline void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu *vcpu)
  58. {
  59. }
  60. #endif
  61. int kvm_riscv_vcpu_get_reg_vector(struct kvm_vcpu *vcpu,
  62. const struct kvm_one_reg *reg);
  63. int kvm_riscv_vcpu_set_reg_vector(struct kvm_vcpu *vcpu,
  64. const struct kvm_one_reg *reg);
  65. #endif