diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h index b6b46323dc..1cdfe5edaf 100644 --- a/target-s390x/cpu.h +++ b/target-s390x/cpu.h @@ -864,6 +864,7 @@ struct sysib_322 { #define SK_F (0x1 << 3) #define SK_ACC_MASK (0xf << 4) +/* SIGP order codes */ #define SIGP_SENSE 0x01 #define SIGP_EXTERNAL_CALL 0x02 #define SIGP_EMERGENCY 0x03 @@ -877,7 +878,13 @@ struct sysib_322 { #define SIGP_STORE_STATUS_ADDR 0x0e #define SIGP_SET_ARCH 0x12 -/* cpu status bits */ +/* SIGP condition codes */ +#define SIGP_CC_ORDER_CODE_ACCEPTED 0 +#define SIGP_CC_STATUS_STORED 1 +#define SIGP_CC_BUSY 2 +#define SIGP_CC_NOT_OPERATIONAL 3 + +/* SIGP status bits */ #define SIGP_STAT_EQUIPMENT_CHECK 0x80000000UL #define SIGP_STAT_INCORRECT_STATE 0x00000200UL #define SIGP_STAT_INVALID_PARAMETER 0x00000100UL diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c index d7c57d9338..3f7e9adfe1 100644 --- a/target-s390x/kvm.c +++ b/target-s390x/kvm.c @@ -1178,37 +1178,37 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1) cpu_addr = env->regs[ipa1 & 0x0f]; target_cpu = s390_cpu_addr2state(cpu_addr); if (target_cpu == NULL) { - cc = 3; /* not operational */ + cc = SIGP_CC_NOT_OPERATIONAL; goto out; } switch (order_code) { case SIGP_START: run_on_cpu(CPU(target_cpu), sigp_cpu_start, CPU(target_cpu)); - cc = 0; + cc = SIGP_CC_ORDER_CODE_ACCEPTED; break; case SIGP_RESTART: run_on_cpu(CPU(target_cpu), sigp_cpu_restart, CPU(target_cpu)); - cc = 0; + cc = SIGP_CC_ORDER_CODE_ACCEPTED; break; case SIGP_SET_ARCH: *statusreg &= 0xffffffff00000000UL; *statusreg |= SIGP_STAT_INVALID_PARAMETER; - cc = 1; /* status stored */ + cc = SIGP_CC_STATUS_STORED; break; case SIGP_INITIAL_CPU_RESET: run_on_cpu(CPU(target_cpu), sigp_initial_cpu_reset, CPU(target_cpu)); - cc = 0; + cc = SIGP_CC_ORDER_CODE_ACCEPTED; break; case SIGP_CPU_RESET: run_on_cpu(CPU(target_cpu), sigp_cpu_reset, CPU(target_cpu)); - cc = 0; + cc = SIGP_CC_ORDER_CODE_ACCEPTED; break; default: DPRINTF("KVM: unknown SIGP: 0x%x\n", order_code); *statusreg &= 0xffffffff00000000UL; *statusreg |= SIGP_STAT_INVALID_ORDER; - cc = 1; /* status stored */ + cc = SIGP_CC_STATUS_STORED; break; } diff --git a/target-s390x/misc_helper.c b/target-s390x/misc_helper.c index 1c3df8e018..e1007fa35b 100644 --- a/target-s390x/misc_helper.c +++ b/target-s390x/misc_helper.c @@ -456,7 +456,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0, uint32_t HELPER(sigp)(CPUS390XState *env, uint64_t order_code, uint32_t r1, uint64_t cpu_addr) { - int cc = 0; + int cc = SIGP_CC_ORDER_CODE_ACCEPTED; HELPER_LOG("%s: %016" PRIx64 " %08x %016" PRIx64 "\n", __func__, order_code, r1, cpu_addr); @@ -490,7 +490,7 @@ uint32_t HELPER(sigp)(CPUS390XState *env, uint64_t order_code, uint32_t r1, default: /* unknown sigp */ fprintf(stderr, "XXX unknown sigp: 0x%" PRIx64 "\n", order_code); - cc = 3; + cc = SIGP_CC_NOT_OPERATIONAL; } return cc;