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 10 #ifndef __KVM_VCPU_RISCV_VECTOR_H 11 #define __KVM_VCPU_RISCV_VECTOR_H 12 13 #include <linux/types.h> 14 15 #ifdef CONFIG_RISCV_ISA_V 16 #include <asm/vector.h> 17 #include <asm/kvm_host.h> 18 19 static __always_inline void __kvm_riscv_vector_save(struct kvm_cpu_context *context) 20 { 21 __riscv_v_vstate_save(&context->vector, context->vector.datap); 22 } 23 24 static __always_inline void __kvm_riscv_vector_restore(struct kvm_cpu_context *context) 25 { 26 __riscv_v_vstate_restore(&context->vector, context->vector.datap); 27 } 28 29 void kvm_riscv_vcpu_vector_reset(struct kvm_vcpu *vcpu); 30 void kvm_riscv_vcpu_guest_vector_save(struct kvm_cpu_context *cntx, 31 unsigned long *isa); 32 void kvm_riscv_vcpu_guest_vector_restore(struct kvm_cpu_context *cntx, 33 unsigned long *isa); 34 void kvm_riscv_vcpu_host_vector_save(struct kvm_cpu_context *cntx); 35 void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context *cntx); 36 int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu); 37 void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu *vcpu); 38 #else 39 40 struct kvm_cpu_context; 41 42 static inline void kvm_riscv_vcpu_vector_reset(struct kvm_vcpu *vcpu) 43 { 44 } 45 46 static inline void kvm_riscv_vcpu_guest_vector_save(struct kvm_cpu_context *cntx, 47 unsigned long *isa) 48 { 49 } 50 51 static inline void kvm_riscv_vcpu_guest_vector_restore(struct kvm_cpu_context *cntx, 52 unsigned long *isa) 53 { 54 } 55 56 static inline void kvm_riscv_vcpu_host_vector_save(struct kvm_cpu_context *cntx) 57 { 58 } 59 60 static inline void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context *cntx) 61 { 62 } 63 64 static inline int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu) 65 { 66 return 0; 67 } 68 69 static inline void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu *vcpu) 70 { 71 } 72 #endif 73 74 int kvm_riscv_vcpu_get_reg_vector(struct kvm_vcpu *vcpu, 75 const struct kvm_one_reg *reg); 76 int kvm_riscv_vcpu_set_reg_vector(struct kvm_vcpu *vcpu, 77 const struct kvm_one_reg *reg); 78 #endif 79