mirror of https://gitee.com/openkylin/qemu.git
spapr_hcall: Split h_set_mode()
This moves H_SET_MODE_RESOURCE_LE handler to a separate function as there are other "resources" coming and this is going to become ugly. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: Tom Musta <tommusta@gmail.com> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
cd9adfdd77
commit
c4015bbd50
|
@ -712,46 +712,49 @@ static target_ulong h_logical_dcbf(PowerPCCPU *cpu, sPAPREnvironment *spapr,
|
||||||
return H_SUCCESS;
|
return H_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static target_ulong h_set_mode(PowerPCCPU *cpu, sPAPREnvironment *spapr,
|
static target_ulong h_set_mode_resouce_le(PowerPCCPU *cpu,
|
||||||
target_ulong opcode, target_ulong *args)
|
target_ulong mflags,
|
||||||
|
target_ulong value1,
|
||||||
|
target_ulong value2)
|
||||||
{
|
{
|
||||||
CPUState *cs;
|
CPUState *cs;
|
||||||
target_ulong mflags = args[0];
|
|
||||||
target_ulong resource = args[1];
|
|
||||||
target_ulong value1 = args[2];
|
|
||||||
target_ulong value2 = args[3];
|
|
||||||
target_ulong ret = H_P2;
|
|
||||||
|
|
||||||
if (resource == H_SET_MODE_RESOURCE_LE) {
|
|
||||||
if (value1) {
|
if (value1) {
|
||||||
ret = H_P3;
|
return H_P3;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
if (value2) {
|
if (value2) {
|
||||||
ret = H_P4;
|
return H_P4;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (mflags) {
|
switch (mflags) {
|
||||||
case H_SET_MODE_ENDIAN_BIG:
|
case H_SET_MODE_ENDIAN_BIG:
|
||||||
CPU_FOREACH(cs) {
|
CPU_FOREACH(cs) {
|
||||||
set_spr(cs, SPR_LPCR, 0, LPCR_ILE);
|
set_spr(cs, SPR_LPCR, 0, LPCR_ILE);
|
||||||
}
|
}
|
||||||
ret = H_SUCCESS;
|
return H_SUCCESS;
|
||||||
break;
|
|
||||||
|
|
||||||
case H_SET_MODE_ENDIAN_LITTLE:
|
case H_SET_MODE_ENDIAN_LITTLE:
|
||||||
CPU_FOREACH(cs) {
|
CPU_FOREACH(cs) {
|
||||||
set_spr(cs, SPR_LPCR, LPCR_ILE, LPCR_ILE);
|
set_spr(cs, SPR_LPCR, LPCR_ILE, LPCR_ILE);
|
||||||
}
|
}
|
||||||
ret = H_SUCCESS;
|
return H_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return H_UNSUPPORTED_FLAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
static target_ulong h_set_mode(PowerPCCPU *cpu, sPAPREnvironment *spapr,
|
||||||
|
target_ulong opcode, target_ulong *args)
|
||||||
|
{
|
||||||
|
target_ulong resource = args[1];
|
||||||
|
target_ulong ret = H_P2;
|
||||||
|
|
||||||
|
switch (resource) {
|
||||||
|
case H_SET_MODE_RESOURCE_LE:
|
||||||
|
ret = h_set_mode_resouce_le(cpu, args[0], args[2], args[3]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
|
||||||
ret = H_UNSUPPORTED_FLAG;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue