Lines Matching refs:irq
300 ext = li->irq.ext; in __deliver_pfault_init()
302 li->irq.ext.ext_params2 = 0; in __deliver_pfault_init()
340 mchk = li->irq.mchk; in __deliver_machine_check()
343 memset(&li->irq.mchk, 0, sizeof(mchk)); in __deliver_machine_check()
416 prefix = li->irq.prefix; in __deliver_set_prefix()
417 li->irq.prefix.address = 0; in __deliver_set_prefix()
465 extcall = li->irq.extcall; in __deliver_external_call()
466 li->irq.extcall.code = 0; in __deliver_external_call()
494 pgm_info = li->irq.pgm; in __deliver_prog()
496 memset(&li->irq.pgm, 0, sizeof(pgm_info)); in __deliver_prog()
909 memset(&li->irq, 0, sizeof(li->irq)); in kvm_s390_clear_local_irqs()
958 static int __inject_prog(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) in __inject_prog() argument
962 VCPU_EVENT(vcpu, 3, "inject: program irq code 0x%x", irq->u.pgm.code); in __inject_prog()
964 irq->u.pgm.code, 0); in __inject_prog()
966 if (irq->u.pgm.code == PGM_PER) { in __inject_prog()
967 li->irq.pgm.code |= PGM_PER; in __inject_prog()
969 li->irq.pgm.per_address = irq->u.pgm.per_address; in __inject_prog()
970 li->irq.pgm.per_code = irq->u.pgm.per_code; in __inject_prog()
971 li->irq.pgm.per_atmid = irq->u.pgm.per_atmid; in __inject_prog()
972 li->irq.pgm.per_access_id = irq->u.pgm.per_access_id; in __inject_prog()
973 } else if (!(irq->u.pgm.code & PGM_PER)) { in __inject_prog()
974 li->irq.pgm.code = (li->irq.pgm.code & PGM_PER) | in __inject_prog()
975 irq->u.pgm.code; in __inject_prog()
977 li->irq.pgm.trans_exc_code = irq->u.pgm.trans_exc_code; in __inject_prog()
978 li->irq.pgm.mon_code = irq->u.pgm.mon_code; in __inject_prog()
979 li->irq.pgm.data_exc_code = irq->u.pgm.data_exc_code; in __inject_prog()
980 li->irq.pgm.mon_class_nr = irq->u.pgm.mon_class_nr; in __inject_prog()
981 li->irq.pgm.exc_access_id = irq->u.pgm.exc_access_id; in __inject_prog()
982 li->irq.pgm.op_access_id = irq->u.pgm.op_access_id; in __inject_prog()
984 li->irq.pgm = irq->u.pgm; in __inject_prog()
990 static int __inject_pfault_init(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) in __inject_pfault_init() argument
995 irq->u.ext.ext_params2); in __inject_pfault_init()
997 irq->u.ext.ext_params, in __inject_pfault_init()
998 irq->u.ext.ext_params2); in __inject_pfault_init()
1000 li->irq.ext = irq->u.ext; in __inject_pfault_init()
1021 static int __inject_extcall(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) in __inject_extcall() argument
1024 struct kvm_s390_extcall_info *extcall = &li->irq.extcall; in __inject_extcall()
1025 uint16_t src_id = irq->u.extcall.code; in __inject_extcall()
1041 *extcall = irq->u.extcall; in __inject_extcall()
1046 static int __inject_set_prefix(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) in __inject_set_prefix() argument
1049 struct kvm_s390_prefix_info *prefix = &li->irq.prefix; in __inject_set_prefix()
1052 irq->u.prefix.address); in __inject_set_prefix()
1054 irq->u.prefix.address, 0); in __inject_set_prefix()
1059 *prefix = irq->u.prefix; in __inject_set_prefix()
1065 static int __inject_sigp_stop(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) in __inject_sigp_stop() argument
1068 struct kvm_s390_stop_info *stop = &li->irq.stop; in __inject_sigp_stop()
1073 if (irq->u.stop.flags & ~KVM_S390_STOP_SUPP_FLAGS) in __inject_sigp_stop()
1077 if (irq->u.stop.flags & KVM_S390_STOP_FLAG_STORE_STATUS) in __inject_sigp_stop()
1085 stop->flags = irq->u.stop.flags; in __inject_sigp_stop()
1091 struct kvm_s390_irq *irq) in __inject_sigp_restart() argument
1103 struct kvm_s390_irq *irq) in __inject_sigp_emergency() argument
1108 irq->u.emerg.code); in __inject_sigp_emergency()
1110 irq->u.emerg.code, 0); in __inject_sigp_emergency()
1113 if (kvm_get_vcpu_by_id(vcpu->kvm, irq->u.emerg.code) == NULL) in __inject_sigp_emergency()
1116 set_bit(irq->u.emerg.code, li->sigp_emerg_pending); in __inject_sigp_emergency()
1122 static int __inject_mchk(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) in __inject_mchk() argument
1125 struct kvm_s390_mchk_info *mchk = &li->irq.mchk; in __inject_mchk()
1128 irq->u.mchk.mcic); in __inject_mchk()
1130 irq->u.mchk.mcic); in __inject_mchk()
1140 mchk->cr14 |= irq->u.mchk.cr14; in __inject_mchk()
1141 mchk->mcic |= irq->u.mchk.mcic; in __inject_mchk()
1142 mchk->ext_damage_code |= irq->u.mchk.ext_damage_code; in __inject_mchk()
1143 mchk->failing_storage_address = irq->u.mchk.failing_storage_address; in __inject_mchk()
1144 memcpy(&mchk->fixed_logout, &irq->u.mchk.fixed_logout, in __inject_mchk()
1462 struct kvm_s390_irq *irq) in s390int_to_s390irq() argument
1464 irq->type = s390int->type; in s390int_to_s390irq()
1465 switch (irq->type) { in s390int_to_s390irq()
1469 irq->u.pgm.code = s390int->parm; in s390int_to_s390irq()
1472 irq->u.prefix.address = s390int->parm; in s390int_to_s390irq()
1475 irq->u.stop.flags = s390int->parm; in s390int_to_s390irq()
1480 irq->u.extcall.code = s390int->parm; in s390int_to_s390irq()
1485 irq->u.emerg.code = s390int->parm; in s390int_to_s390irq()
1488 irq->u.mchk.mcic = s390int->parm64; in s390int_to_s390irq()
1506 li->irq.stop.flags = 0; in kvm_s390_clear_stop_irq()
1511 static int do_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) in do_inject_vcpu() argument
1515 switch (irq->type) { in do_inject_vcpu()
1517 rc = __inject_prog(vcpu, irq); in do_inject_vcpu()
1520 rc = __inject_set_prefix(vcpu, irq); in do_inject_vcpu()
1523 rc = __inject_sigp_stop(vcpu, irq); in do_inject_vcpu()
1526 rc = __inject_sigp_restart(vcpu, irq); in do_inject_vcpu()
1535 rc = __inject_extcall(vcpu, irq); in do_inject_vcpu()
1538 rc = __inject_sigp_emergency(vcpu, irq); in do_inject_vcpu()
1541 rc = __inject_mchk(vcpu, irq); in do_inject_vcpu()
1544 rc = __inject_pfault_init(vcpu, irq); in do_inject_vcpu()
1556 int kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) in kvm_s390_inject_vcpu() argument
1562 rc = do_inject_vcpu(vcpu, irq); in kvm_s390_inject_vcpu()
1580 struct kvm_s390_irq *irq) in inti_to_irq() argument
1582 irq->type = inti->type; in inti_to_irq()
1587 irq->u.ext = inti->ext; in inti_to_irq()
1590 irq->u.io = inti->io; in inti_to_irq()
1616 struct kvm_s390_irq *irq; in get_all_floating_irqs() local
1655 irq = (struct kvm_s390_irq *) &buf[n]; in get_all_floating_irqs()
1656 irq->type = KVM_S390_INT_SERVICE; in get_all_floating_irqs()
1657 irq->u.ext = fi->srv_signal; in get_all_floating_irqs()
1666 irq = (struct kvm_s390_irq *) &buf[n]; in get_all_floating_irqs()
1667 irq->type = KVM_S390_MCHK; in get_all_floating_irqs()
1668 irq->u.mchk = fi->mchk; in get_all_floating_irqs()
2163 struct kvm_s390_irq *irq, in store_local_irq() argument
2169 irq->type = KVM_S390_MCHK; in store_local_irq()
2170 irq->u.mchk = li->irq.mchk; in store_local_irq()
2173 irq->type = KVM_S390_PROGRAM_INT; in store_local_irq()
2174 irq->u.pgm = li->irq.pgm; in store_local_irq()
2177 irq->type = KVM_S390_INT_PFAULT_INIT; in store_local_irq()
2178 irq->u.ext = li->irq.ext; in store_local_irq()
2181 irq->type = KVM_S390_INT_EXTERNAL_CALL; in store_local_irq()
2182 irq->u.extcall = li->irq.extcall; in store_local_irq()
2185 irq->type = KVM_S390_INT_CLOCK_COMP; in store_local_irq()
2188 irq->type = KVM_S390_INT_CPU_TIMER; in store_local_irq()
2191 irq->type = KVM_S390_SIGP_STOP; in store_local_irq()
2192 irq->u.stop = li->irq.stop; in store_local_irq()
2195 irq->type = KVM_S390_RESTART; in store_local_irq()
2198 irq->type = KVM_S390_SIGP_SET_PREFIX; in store_local_irq()
2199 irq->u.prefix = li->irq.prefix; in store_local_irq()
2210 struct kvm_s390_irq irq; in kvm_s390_get_irq_state() local
2222 memset(&irq, 0, sizeof(irq)); in kvm_s390_get_irq_state()
2225 if (n + sizeof(irq) > len) in kvm_s390_get_irq_state()
2227 store_local_irq(&vcpu->arch.local_int, &irq, irq_type); in kvm_s390_get_irq_state()
2228 if (copy_to_user(&buf[n], &irq, sizeof(irq))) in kvm_s390_get_irq_state()
2230 n += sizeof(irq); in kvm_s390_get_irq_state()
2235 memset(&irq, 0, sizeof(irq)); in kvm_s390_get_irq_state()
2236 if (n + sizeof(irq) > len) in kvm_s390_get_irq_state()
2238 irq.type = KVM_S390_INT_EMERGENCY; in kvm_s390_get_irq_state()
2239 irq.u.emerg.code = cpuaddr; in kvm_s390_get_irq_state()
2240 if (copy_to_user(&buf[n], &irq, sizeof(irq))) in kvm_s390_get_irq_state()
2242 n += sizeof(irq); in kvm_s390_get_irq_state()
2249 if (n + sizeof(irq) > len) in kvm_s390_get_irq_state()
2251 memset(&irq, 0, sizeof(irq)); in kvm_s390_get_irq_state()
2252 irq.type = KVM_S390_INT_EXTERNAL_CALL; in kvm_s390_get_irq_state()
2253 irq.u.extcall.code = sigp_ctrl & SIGP_CTRL_SCN_MASK; in kvm_s390_get_irq_state()
2254 if (copy_to_user(&buf[n], &irq, sizeof(irq))) in kvm_s390_get_irq_state()
2256 n += sizeof(irq); in kvm_s390_get_irq_state()