Lines Matching refs:run
157 int kvm_emu_iocsr(larch_inst inst, struct kvm_run *run, struct kvm_vcpu *vcpu)
170 run->iocsr_io.phys_addr = addr;
171 run->iocsr_io.is_write = 0;
177 run->iocsr_io.len = 1;
180 run->iocsr_io.len = 2;
183 run->iocsr_io.len = 4;
186 run->iocsr_io.len = 8;
189 run->iocsr_io.len = 1;
190 run->iocsr_io.is_write = 1;
193 run->iocsr_io.len = 2;
194 run->iocsr_io.is_write = 1;
197 run->iocsr_io.len = 4;
198 run->iocsr_io.is_write = 1;
201 run->iocsr_io.len = 8;
202 run->iocsr_io.is_write = 1;
208 if (run->iocsr_io.is_write) {
210 ret = kvm_io_bus_write(vcpu, KVM_IOCSR_BUS, addr, run->iocsr_io.len, val);
217 memcpy(run->iocsr_io.data, val, run->iocsr_io.len);
219 trace_kvm_iocsr(KVM_TRACE_IOCSR_WRITE, run->iocsr_io.len, addr, val);
222 ret = kvm_io_bus_read(vcpu, KVM_IOCSR_BUS, addr, run->iocsr_io.len, val);
231 trace_kvm_iocsr(KVM_TRACE_IOCSR_READ, run->iocsr_io.len, addr, NULL);
237 int kvm_complete_iocsr_read(struct kvm_vcpu *vcpu, struct kvm_run *run)
242 switch (run->iocsr_io.len) {
244 *gpr = *(s8 *)run->iocsr_io.data;
247 *gpr = *(s16 *)run->iocsr_io.data;
250 *gpr = *(s32 *)run->iocsr_io.data;
253 *gpr = *(s64 *)run->iocsr_io.data;
257 run->iocsr_io.len, vcpu->arch.badv);
281 struct kvm_run *run = vcpu->run;
308 er = kvm_emu_iocsr(inst, run, vcpu);
356 vcpu->run->exit_reason = KVM_EXIT_MMIO;
359 vcpu->run->exit_reason = KVM_EXIT_LOONGARCH_IOCSR;
373 struct kvm_run *run = vcpu->run;
375 run->mmio.phys_addr = vcpu->arch.badv;
387 run->mmio.len = 4;
390 run->mmio.len = 8;
402 run->mmio.len = 1;
406 run->mmio.len = 1;
409 run->mmio.len = 2;
413 run->mmio.len = 2;
416 run->mmio.len = 4;
420 run->mmio.len = 4;
423 run->mmio.len = 8;
436 run->mmio.len = 1;
439 run->mmio.len = 1;
443 run->mmio.len = 2;
446 run->mmio.len = 2;
450 run->mmio.len = 4;
453 run->mmio.len = 4;
457 run->mmio.len = 8;
469 trace_kvm_mmio(KVM_TRACE_MMIO_READ, run->mmio.len, run->mmio.phys_addr, NULL);
478 run->mmio.len, &vcpu->arch.gprs[rd]);
488 run->mmio.is_write = 0;
501 int kvm_complete_mmio_read(struct kvm_vcpu *vcpu, struct kvm_run *run)
508 switch (run->mmio.len) {
511 *gpr = *(s8 *)run->mmio.data;
513 *gpr = *(u8 *)run->mmio.data;
517 *gpr = *(s16 *)run->mmio.data;
519 *gpr = *(u16 *)run->mmio.data;
523 *gpr = *(s32 *)run->mmio.data;
525 *gpr = *(u32 *)run->mmio.data;
528 *gpr = *(s64 *)run->mmio.data;
532 run->mmio.len, vcpu->arch.badv);
537 trace_kvm_mmio(KVM_TRACE_MMIO_READ, run->mmio.len,
538 run->mmio.phys_addr, run->mmio.data);
548 struct kvm_run *run = vcpu->run;
549 void *data = run->mmio.data;
559 run->mmio.phys_addr = vcpu->arch.badv;
568 run->mmio.len = 4;
572 run->mmio.len = 8;
587 run->mmio.len = 1;
591 run->mmio.len = 2;
595 run->mmio.len = 4;
599 run->mmio.len = 8;
613 run->mmio.len = 1;
617 run->mmio.len = 2;
621 run->mmio.len = 4;
625 run->mmio.len = 8;
638 trace_kvm_mmio(KVM_TRACE_MMIO_WRITE, run->mmio.len, run->mmio.phys_addr, data);
646 ret = kvm_io_bus_write(vcpu, KVM_MMIO_BUS, vcpu->arch.badv, run->mmio.len, data);
651 run->mmio.is_write = 1;
671 struct kvm_run *run = vcpu->run;
700 run->exit_reason = KVM_EXIT_MMIO;
720 int kvm_complete_user_service(struct kvm_vcpu *vcpu, struct kvm_run *run)
723 kvm_write_reg(vcpu, LOONGARCH_GPR_A0, run->hypercall.ret);
738 struct kvm_run *run = vcpu->run;
752 run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
895 vcpu->run->exit_reason = KVM_EXIT_HYPERCALL;
896 vcpu->run->hypercall.nr = KVM_HCALL_USER_SERVICE;
897 vcpu->run->hypercall.args[0] = kvm_read_reg(vcpu, LOONGARCH_GPR_A0);
898 vcpu->run->hypercall.args[1] = kvm_read_reg(vcpu, LOONGARCH_GPR_A1);
899 vcpu->run->hypercall.args[2] = kvm_read_reg(vcpu, LOONGARCH_GPR_A2);
900 vcpu->run->hypercall.args[3] = kvm_read_reg(vcpu, LOONGARCH_GPR_A3);
901 vcpu->run->hypercall.args[4] = kvm_read_reg(vcpu, LOONGARCH_GPR_A4);
902 vcpu->run->hypercall.args[5] = kvm_read_reg(vcpu, LOONGARCH_GPR_A5);
903 vcpu->run->hypercall.flags = 0;
907 vcpu->run->hypercall.ret = KVM_HCALL_INVALID_CODE;
913 vcpu->run->exit_reason = KVM_EXIT_DEBUG;