Revision cd7a0f4c target-s390x/kvm.c
b/target-s390x/kvm.c | ||
---|---|---|
597 | 597 |
return 0; |
598 | 598 |
} |
599 | 599 |
|
600 |
static int s390_store_status(CPUS390XState *env, uint32_t parameter) |
|
601 |
{ |
|
602 |
/* XXX */ |
|
603 |
fprintf(stderr, "XXX SIGP store status\n"); |
|
604 |
return -1; |
|
605 |
} |
|
606 |
|
|
607 | 600 |
static int s390_cpu_initial_reset(S390CPU *cpu) |
608 | 601 |
{ |
609 | 602 |
CPUState *cs = CPU(cpu); |
... | ... | |
629 | 622 |
{ |
630 | 623 |
CPUS390XState *env = &cpu->env; |
631 | 624 |
uint8_t order_code; |
632 |
uint32_t parameter; |
|
633 | 625 |
uint16_t cpu_addr; |
634 |
uint8_t t; |
|
635 | 626 |
int r = -1; |
636 | 627 |
S390CPU *target_cpu; |
637 |
CPUS390XState *target_env; |
|
638 | 628 |
|
639 | 629 |
cpu_synchronize_state(CPU(cpu)); |
640 | 630 |
|
... | ... | |
645 | 635 |
} |
646 | 636 |
order_code += (run->s390_sieic.ipb & 0x0fff0000) >> 16; |
647 | 637 |
|
648 |
/* get parameters */ |
|
649 |
t = (ipa1 & 0xf0) >> 4; |
|
650 |
if (!(t % 2)) { |
|
651 |
t++; |
|
652 |
} |
|
653 |
|
|
654 |
parameter = env->regs[t] & 0x7ffffe00; |
|
655 | 638 |
cpu_addr = env->regs[ipa1 & 0x0f]; |
656 |
|
|
657 | 639 |
target_cpu = s390_cpu_addr2state(cpu_addr); |
658 | 640 |
if (target_cpu == NULL) { |
659 | 641 |
goto out; |
660 | 642 |
} |
661 |
target_env = &target_cpu->env; |
|
662 | 643 |
|
663 | 644 |
switch (order_code) { |
664 | 645 |
case SIGP_RESTART: |
665 | 646 |
r = kvm_s390_cpu_restart(target_cpu); |
666 | 647 |
break; |
667 |
case SIGP_STORE_STATUS_ADDR: |
|
668 |
r = s390_store_status(target_env, parameter); |
|
669 |
break; |
|
670 | 648 |
case SIGP_SET_ARCH: |
671 | 649 |
/* make the caller panic */ |
672 | 650 |
return -1; |
Also available in: Unified diff