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 19static __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 24static __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 29void kvm_riscv_vcpu_vector_reset(struct kvm_vcpu *vcpu); 30void kvm_riscv_vcpu_guest_vector_save(struct kvm_cpu_context *cntx, 31 unsigned long *isa); 32void kvm_riscv_vcpu_guest_vector_restore(struct kvm_cpu_context *cntx, 33 unsigned long *isa); 34void kvm_riscv_vcpu_host_vector_save(struct kvm_cpu_context *cntx); 35void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context *cntx); 36int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu, 37 struct kvm_cpu_context *cntx); 38void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu *vcpu); 39#else 40 41struct kvm_cpu_context; 42 43static inline void kvm_riscv_vcpu_vector_reset(struct kvm_vcpu *vcpu) 44{ 45} 46 47static inline void kvm_riscv_vcpu_guest_vector_save(struct kvm_cpu_context *cntx, 48 unsigned long *isa) 49{ 50} 51 52static inline void kvm_riscv_vcpu_guest_vector_restore(struct kvm_cpu_context *cntx, 53 unsigned long *isa) 54{ 55} 56 57static inline void kvm_riscv_vcpu_host_vector_save(struct kvm_cpu_context *cntx) 58{ 59} 60 61static inline void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context *cntx) 62{ 63} 64 65static inline int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu, 66 struct kvm_cpu_context *cntx) 67{ 68 return 0; 69} 70 71static inline void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu *vcpu) 72{ 73} 74#endif 75 76int kvm_riscv_vcpu_get_reg_vector(struct kvm_vcpu *vcpu, 77 const struct kvm_one_reg *reg); 78int kvm_riscv_vcpu_set_reg_vector(struct kvm_vcpu *vcpu, 79 const struct kvm_one_reg *reg); 80#endif 81