diff options
Diffstat (limited to 'sys/arm64/vmm/vmm_dev_machdep.c')
| -rw-r--r-- | sys/arm64/vmm/vmm_dev_machdep.c | 43 | 
1 files changed, 29 insertions, 14 deletions
| diff --git a/sys/arm64/vmm/vmm_dev_machdep.c b/sys/arm64/vmm/vmm_dev_machdep.c index 926a74fa528b..29d14e1ba952 100644 --- a/sys/arm64/vmm/vmm_dev_machdep.c +++ b/sys/arm64/vmm/vmm_dev_machdep.c @@ -68,19 +68,13 @@ int  vmmdev_machdep_ioctl(struct vm *vm, struct vcpu *vcpu, u_long cmd, caddr_t data,      int fflag, struct thread *td)  { -	struct vm_run *vmrun; -	struct vm_vgic_version *vgv; -	struct vm_vgic_descr *vgic; -	struct vm_irq *vi; -	struct vm_exception *vmexc; -	struct vm_gla2gpa *gg; -	struct vm_msi *vmsi;  	int error;  	error = 0;  	switch (cmd) {  	case VM_RUN: {  		struct vm_exit *vme; +		struct vm_run *vmrun;  		vmrun = (struct vm_run *)data;  		vme = vm_exitinfo(vcpu); @@ -94,41 +88,62 @@ vmmdev_machdep_ioctl(struct vm *vm, struct vcpu *vcpu, u_long cmd, caddr_t data,  			break;  		break;  	} -	case VM_INJECT_EXCEPTION: +	case VM_INJECT_EXCEPTION: { +		struct vm_exception *vmexc; +  		vmexc = (struct vm_exception *)data;  		error = vm_inject_exception(vcpu, vmexc->esr, vmexc->far);  		break; -	case VM_GLA2GPA_NOFAULT: +	} +	case VM_GLA2GPA_NOFAULT: { +		struct vm_gla2gpa *gg; +  		gg = (struct vm_gla2gpa *)data;  		error = vm_gla2gpa_nofault(vcpu, &gg->paging, gg->gla,  		    gg->prot, &gg->gpa, &gg->fault);  		KASSERT(error == 0 || error == EFAULT,  		    ("%s: vm_gla2gpa unknown error %d", __func__, error));  		break; -	case VM_GET_VGIC_VERSION: +	} +	case VM_GET_VGIC_VERSION: { +		struct vm_vgic_version *vgv; +  		vgv = (struct vm_vgic_version *)data;  		/* TODO: Query the vgic driver for this */  		vgv->version = 3;  		vgv->flags = 0;  		error = 0;  		break; -	case VM_ATTACH_VGIC: +	} +	case VM_ATTACH_VGIC: { +		struct vm_vgic_descr *vgic; +  		vgic = (struct vm_vgic_descr *)data;  		error = vm_attach_vgic(vm, vgic);  		break; -	case VM_RAISE_MSI: +	} +	case VM_RAISE_MSI: { +		struct vm_msi *vmsi; +  		vmsi = (struct vm_msi *)data;  		error = vm_raise_msi(vm, vmsi->msg, vmsi->addr, vmsi->bus,  		    vmsi->slot, vmsi->func);  		break; -	case VM_ASSERT_IRQ: +	} +	case VM_ASSERT_IRQ: { +		struct vm_irq *vi; +  		vi = (struct vm_irq *)data;  		error = vm_assert_irq(vm, vi->irq);  		break; -	case VM_DEASSERT_IRQ: +	} +	case VM_DEASSERT_IRQ: { +		struct vm_irq *vi; +  		vi = (struct vm_irq *)data;  		error = vm_deassert_irq(vm, vi->irq);  		break; +	}  	default:  		error = ENOTTY;  		break; | 
