Lines Matching refs:id

526 static bool index_to_params(u64 id, struct coproc_params *params)  in index_to_params()  argument
528 switch (id & KVM_REG_SIZE_MASK) { in index_to_params()
531 if (id & ~(KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK in index_to_params()
540 params->CRn = ((id & KVM_REG_ARM_32_CRN_MASK) in index_to_params()
542 params->CRm = ((id & KVM_REG_ARM_CRM_MASK) in index_to_params()
544 params->Op1 = ((id & KVM_REG_ARM_OPC1_MASK) in index_to_params()
546 params->Op2 = ((id & KVM_REG_ARM_32_OPC2_MASK) in index_to_params()
551 if (id & ~(KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK in index_to_params()
558 params->CRn = ((id & KVM_REG_ARM_CRM_MASK) in index_to_params()
560 params->Op1 = ((id & KVM_REG_ARM_OPC1_MASK) in index_to_params()
572 u64 id) in index_to_coproc_reg() argument
579 if ((id & KVM_REG_ARM_COPROC_MASK) >> KVM_REG_ARM_COPROC_SHIFT != 15) in index_to_coproc_reg()
582 if (!index_to_params(id, &params)) in index_to_coproc_reg()
672 static int reg_from_user(void *val, const void __user *uaddr, u64 id) in reg_from_user() argument
674 if (copy_from_user(val, uaddr, KVM_REG_SIZE(id)) != 0) in reg_from_user()
683 static int reg_to_user(void __user *uaddr, const void *val, u64 id) in reg_to_user() argument
685 if (copy_to_user(uaddr, val, KVM_REG_SIZE(id)) != 0) in reg_to_user()
690 static int get_invariant_cp15(u64 id, void __user *uaddr) in get_invariant_cp15() argument
696 if (!index_to_params(id, &params)) in get_invariant_cp15()
704 if (KVM_REG_SIZE(id) == 4) { in get_invariant_cp15()
707 ret = reg_to_user(uaddr, &val, id); in get_invariant_cp15()
708 } else if (KVM_REG_SIZE(id) == 8) { in get_invariant_cp15()
709 ret = reg_to_user(uaddr, &r->val, id); in get_invariant_cp15()
714 static int set_invariant_cp15(u64 id, void __user *uaddr) in set_invariant_cp15() argument
721 if (!index_to_params(id, &params)) in set_invariant_cp15()
728 if (KVM_REG_SIZE(id) == 4) { in set_invariant_cp15()
731 err = reg_from_user(&val32, uaddr, id); in set_invariant_cp15()
734 } else if (KVM_REG_SIZE(id) == 8) { in set_invariant_cp15()
735 err = reg_from_user(&val, uaddr, id); in set_invariant_cp15()
790 static int demux_c15_get(u64 id, void __user *uaddr) in demux_c15_get() argument
796 if (id & ~(KVM_REG_ARCH_MASK|KVM_REG_SIZE_MASK|KVM_REG_ARM_COPROC_MASK in demux_c15_get()
800 switch (id & KVM_REG_ARM_DEMUX_ID_MASK) { in demux_c15_get()
802 if (KVM_REG_SIZE(id) != 4) in demux_c15_get()
804 val = (id & KVM_REG_ARM_DEMUX_VAL_MASK) in demux_c15_get()
815 static int demux_c15_set(u64 id, void __user *uaddr) in demux_c15_set() argument
821 if (id & ~(KVM_REG_ARCH_MASK|KVM_REG_SIZE_MASK|KVM_REG_ARM_COPROC_MASK in demux_c15_set()
825 switch (id & KVM_REG_ARM_DEMUX_ID_MASK) { in demux_c15_set()
827 if (KVM_REG_SIZE(id) != 4) in demux_c15_set()
829 val = (id & KVM_REG_ARM_DEMUX_VAL_MASK) in demux_c15_set()
891 static int vfp_get_reg(const struct kvm_vcpu *vcpu, u64 id, void __user *uaddr) in vfp_get_reg() argument
893 u32 vfpid = (id & KVM_REG_ARM_VFP_MASK); in vfp_get_reg()
897 if (id & ~(KVM_REG_ARCH_MASK|KVM_REG_SIZE_MASK|KVM_REG_ARM_COPROC_MASK in vfp_get_reg()
902 if (KVM_REG_SIZE(id) != 8) in vfp_get_reg()
905 id); in vfp_get_reg()
909 if (KVM_REG_SIZE(id) != 4) in vfp_get_reg()
914 return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpexc, id); in vfp_get_reg()
916 return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpscr, id); in vfp_get_reg()
918 return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpinst, id); in vfp_get_reg()
920 return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpinst2, id); in vfp_get_reg()
923 return reg_to_user(uaddr, &val, id); in vfp_get_reg()
926 return reg_to_user(uaddr, &val, id); in vfp_get_reg()
929 return reg_to_user(uaddr, &val, id); in vfp_get_reg()
935 static int vfp_set_reg(struct kvm_vcpu *vcpu, u64 id, const void __user *uaddr) in vfp_set_reg() argument
937 u32 vfpid = (id & KVM_REG_ARM_VFP_MASK); in vfp_set_reg()
941 if (id & ~(KVM_REG_ARCH_MASK|KVM_REG_SIZE_MASK|KVM_REG_ARM_COPROC_MASK in vfp_set_reg()
946 if (KVM_REG_SIZE(id) != 8) in vfp_set_reg()
949 uaddr, id); in vfp_set_reg()
953 if (KVM_REG_SIZE(id) != 4) in vfp_set_reg()
958 return reg_from_user(&vcpu->arch.vfp_guest.fpexc, uaddr, id); in vfp_set_reg()
960 return reg_from_user(&vcpu->arch.vfp_guest.fpscr, uaddr, id); in vfp_set_reg()
962 return reg_from_user(&vcpu->arch.vfp_guest.fpinst, uaddr, id); in vfp_set_reg()
964 return reg_from_user(&vcpu->arch.vfp_guest.fpinst2, uaddr, id); in vfp_set_reg()
967 if (reg_from_user(&val, uaddr, id)) in vfp_set_reg()
973 if (reg_from_user(&val, uaddr, id)) in vfp_set_reg()
979 if (reg_from_user(&val, uaddr, id)) in vfp_set_reg()
999 static int vfp_get_reg(const struct kvm_vcpu *vcpu, u64 id, void __user *uaddr) in vfp_get_reg() argument
1004 static int vfp_set_reg(struct kvm_vcpu *vcpu, u64 id, const void __user *uaddr) in vfp_set_reg() argument
1016 if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_DEMUX) in kvm_arm_coproc_get_reg()
1017 return demux_c15_get(reg->id, uaddr); in kvm_arm_coproc_get_reg()
1019 if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_VFP) in kvm_arm_coproc_get_reg()
1020 return vfp_get_reg(vcpu, reg->id, uaddr); in kvm_arm_coproc_get_reg()
1022 r = index_to_coproc_reg(vcpu, reg->id); in kvm_arm_coproc_get_reg()
1024 return get_invariant_cp15(reg->id, uaddr); in kvm_arm_coproc_get_reg()
1027 if (KVM_REG_SIZE(reg->id) == 8) { in kvm_arm_coproc_get_reg()
1031 ret = reg_to_user(uaddr, &val, reg->id); in kvm_arm_coproc_get_reg()
1032 } else if (KVM_REG_SIZE(reg->id) == 4) { in kvm_arm_coproc_get_reg()
1033 ret = reg_to_user(uaddr, &vcpu->arch.cp15[r->reg], reg->id); in kvm_arm_coproc_get_reg()
1045 if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_DEMUX) in kvm_arm_coproc_set_reg()
1046 return demux_c15_set(reg->id, uaddr); in kvm_arm_coproc_set_reg()
1048 if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_VFP) in kvm_arm_coproc_set_reg()
1049 return vfp_set_reg(vcpu, reg->id, uaddr); in kvm_arm_coproc_set_reg()
1051 r = index_to_coproc_reg(vcpu, reg->id); in kvm_arm_coproc_set_reg()
1053 return set_invariant_cp15(reg->id, uaddr); in kvm_arm_coproc_set_reg()
1056 if (KVM_REG_SIZE(reg->id) == 8) { in kvm_arm_coproc_set_reg()
1059 ret = reg_from_user(&val, uaddr, reg->id); in kvm_arm_coproc_set_reg()
1062 } else if (KVM_REG_SIZE(reg->id) == 4) { in kvm_arm_coproc_set_reg()
1063 ret = reg_from_user(&vcpu->arch.cp15[r->reg], uaddr, reg->id); in kvm_arm_coproc_set_reg()