Lines Matching full:run

27 	int (*func)(struct kvm_vcpu *vcpu, struct kvm_run *run, ulong insn);
30 static int truly_illegal_insn(struct kvm_vcpu *vcpu, struct kvm_run *run, in truly_illegal_insn() argument
46 static int truly_virtual_insn(struct kvm_vcpu *vcpu, struct kvm_run *run, in truly_virtual_insn() argument
76 static int wfi_insn(struct kvm_vcpu *vcpu, struct kvm_run *run, ulong insn) in wfi_insn() argument
83 static int wrs_insn(struct kvm_vcpu *vcpu, struct kvm_run *run, ulong insn) in wrs_insn() argument
123 * @run: The VCPU run struct containing the CSR data
127 int kvm_riscv_vcpu_csr_return(struct kvm_vcpu *vcpu, struct kvm_run *run) in kvm_riscv_vcpu_csr_return() argument
139 run->riscv_csr.ret_value); in kvm_riscv_vcpu_csr_return()
147 static int csr_insn(struct kvm_vcpu *vcpu, struct kvm_run *run, ulong insn) in csr_insn() argument
191 run->riscv_csr.csr_num = csr_num; in csr_insn()
192 run->riscv_csr.new_value = new_val; in csr_insn()
193 run->riscv_csr.write_mask = wr_mask; in csr_insn()
194 run->riscv_csr.ret_value = 0; in csr_insn()
211 run->riscv_csr.ret_value = val; in csr_insn()
213 kvm_riscv_vcpu_csr_return(vcpu, run); in csr_insn()
223 run->exit_reason = KVM_EXIT_RISCV_CSR; in csr_insn()
272 static int system_opcode_insn(struct kvm_vcpu *vcpu, struct kvm_run *run, in system_opcode_insn() argument
281 rc = ifn->func(vcpu, run, insn); in system_opcode_insn()
288 return truly_illegal_insn(vcpu, run, insn); in system_opcode_insn()
290 return truly_virtual_insn(vcpu, run, insn); in system_opcode_insn()
305 * @run: The VCPU run struct containing the mmio data
308 * Returns > 0 to continue run-loop
309 * Returns 0 to exit run-loop and handle in user-space.
310 * Returns < 0 to report failure and exit run-loop
312 int kvm_riscv_vcpu_virtual_insn(struct kvm_vcpu *vcpu, struct kvm_run *run, in kvm_riscv_vcpu_virtual_insn() argument
332 return truly_illegal_insn(vcpu, run, insn); in kvm_riscv_vcpu_virtual_insn()
337 return system_opcode_insn(vcpu, run, insn); in kvm_riscv_vcpu_virtual_insn()
339 return truly_illegal_insn(vcpu, run, insn); in kvm_riscv_vcpu_virtual_insn()
347 * @run: The VCPU run struct containing the mmio data
351 * Returns > 0 to continue run-loop
352 * Returns 0 to exit run-loop and handle in user-space.
353 * Returns < 0 to report failure and exit run-loop
355 int kvm_riscv_vcpu_mmio_load(struct kvm_vcpu *vcpu, struct kvm_run *run, in kvm_riscv_vcpu_mmio_load() argument
445 run->mmio.is_write = false; in kvm_riscv_vcpu_mmio_load()
446 run->mmio.phys_addr = fault_addr; in kvm_riscv_vcpu_mmio_load()
447 run->mmio.len = len; in kvm_riscv_vcpu_mmio_load()
452 memcpy(run->mmio.data, data_buf, len); in kvm_riscv_vcpu_mmio_load()
454 kvm_riscv_vcpu_mmio_return(vcpu, run); in kvm_riscv_vcpu_mmio_load()
460 run->exit_reason = KVM_EXIT_MMIO; in kvm_riscv_vcpu_mmio_load()
469 * @run: The VCPU run struct containing the mmio data
473 * Returns > 0 to continue run-loop
474 * Returns 0 to exit run-loop and handle in user-space.
475 * Returns < 0 to report failure and exit run-loop
477 int kvm_riscv_vcpu_mmio_store(struct kvm_vcpu *vcpu, struct kvm_run *run, in kvm_riscv_vcpu_mmio_store() argument
562 *((u8 *)run->mmio.data) = data8; in kvm_riscv_vcpu_mmio_store()
565 *((u16 *)run->mmio.data) = data16; in kvm_riscv_vcpu_mmio_store()
568 *((u32 *)run->mmio.data) = data32; in kvm_riscv_vcpu_mmio_store()
571 *((u64 *)run->mmio.data) = data64; in kvm_riscv_vcpu_mmio_store()
578 run->mmio.is_write = true; in kvm_riscv_vcpu_mmio_store()
579 run->mmio.phys_addr = fault_addr; in kvm_riscv_vcpu_mmio_store()
580 run->mmio.len = len; in kvm_riscv_vcpu_mmio_store()
584 fault_addr, len, run->mmio.data)) { in kvm_riscv_vcpu_mmio_store()
587 kvm_riscv_vcpu_mmio_return(vcpu, run); in kvm_riscv_vcpu_mmio_store()
593 run->exit_reason = KVM_EXIT_MMIO; in kvm_riscv_vcpu_mmio_store()
603 * @run: The VCPU run struct containing the mmio data
605 int kvm_riscv_vcpu_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run) in kvm_riscv_vcpu_mmio_return() argument
620 if (run->mmio.is_write) in kvm_riscv_vcpu_mmio_return()
628 data8 = *((u8 *)run->mmio.data); in kvm_riscv_vcpu_mmio_return()
633 data16 = *((u16 *)run->mmio.data); in kvm_riscv_vcpu_mmio_return()
638 data32 = *((u32 *)run->mmio.data); in kvm_riscv_vcpu_mmio_return()
643 data64 = *((u64 *)run->mmio.data); in kvm_riscv_vcpu_mmio_return()