1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Copyright (C) 2022 SiFive
6 * Vincent Chen <vincent.chen@sifive.com>
7 * Greentime Hu <greentime.hu@sifive.com>
10 #ifndef __KVM_VCPU_RISCV_VECTOR_H
11 #define __KVM_VCPU_RISCV_VECTOR_H
13 #include <linux/types.h>
15 #ifdef CONFIG_RISCV_ISA_V
16 #include <asm/vector.h>
17 #include <asm/kvm_host.h>
19 static __always_inline
void __kvm_riscv_vector_save(struct kvm_cpu_context
*context
)
21 __riscv_v_vstate_save(&context
->vector
, context
->vector
.datap
);
24 static __always_inline
void __kvm_riscv_vector_restore(struct kvm_cpu_context
*context
)
26 __riscv_v_vstate_restore(&context
->vector
, context
->vector
.datap
);
29 void kvm_riscv_vcpu_vector_reset(struct kvm_vcpu
*vcpu
);
30 void kvm_riscv_vcpu_guest_vector_save(struct kvm_cpu_context
*cntx
,
32 void kvm_riscv_vcpu_guest_vector_restore(struct kvm_cpu_context
*cntx
,
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 struct kvm_cpu_context
*cntx
);
38 void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu
*vcpu
);
41 struct kvm_cpu_context
;
43 static inline void kvm_riscv_vcpu_vector_reset(struct kvm_vcpu
*vcpu
)
47 static inline void kvm_riscv_vcpu_guest_vector_save(struct kvm_cpu_context
*cntx
,
52 static inline void kvm_riscv_vcpu_guest_vector_restore(struct kvm_cpu_context
*cntx
,
57 static inline void kvm_riscv_vcpu_host_vector_save(struct kvm_cpu_context
*cntx
)
61 static inline void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context
*cntx
)
65 static inline int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu
*vcpu
,
66 struct kvm_cpu_context
*cntx
)
71 static inline void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu
*vcpu
)
76 int kvm_riscv_vcpu_get_reg_vector(struct kvm_vcpu
*vcpu
,
77 const struct kvm_one_reg
*reg
);
78 int kvm_riscv_vcpu_set_reg_vector(struct kvm_vcpu
*vcpu
,
79 const struct kvm_one_reg
*reg
);