mirror of
https://github.com/qemu/qemu.git
synced 2024-11-26 12:23:36 +08:00
spapr-rtas: add ibm, (get|set)-system-parameter
This adds very basic handlers for ibm,get-system-parameter and ibm,set-system-parameter RTAS calls. The only parameter handled at the moment is "platform-processor-diagnostics-run-mode" which is always disabled and does not support changing. This is expected to make "ppc64_cpu --run-mode=1" happy. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> [agraf: s/papameter/parameter/g] Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
a64d325df1
commit
3ada6b1137
@ -224,6 +224,49 @@ static void rtas_stop_self(PowerPCCPU *cpu, sPAPREnvironment *spapr,
|
||||
env->msr = 0;
|
||||
}
|
||||
|
||||
#define DIAGNOSTICS_RUN_MODE 42
|
||||
|
||||
static void rtas_ibm_get_system_parameter(PowerPCCPU *cpu,
|
||||
sPAPREnvironment *spapr,
|
||||
uint32_t token, uint32_t nargs,
|
||||
target_ulong args,
|
||||
uint32_t nret, target_ulong rets)
|
||||
{
|
||||
target_ulong parameter = rtas_ld(args, 0);
|
||||
target_ulong buffer = rtas_ld(args, 1);
|
||||
target_ulong length = rtas_ld(args, 2);
|
||||
target_ulong ret = RTAS_OUT_NOT_SUPPORTED;
|
||||
|
||||
switch (parameter) {
|
||||
case DIAGNOSTICS_RUN_MODE:
|
||||
if (length == 1) {
|
||||
rtas_st(buffer, 0, 0);
|
||||
ret = RTAS_OUT_SUCCESS;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
rtas_st(rets, 0, ret);
|
||||
}
|
||||
|
||||
static void rtas_ibm_set_system_parameter(PowerPCCPU *cpu,
|
||||
sPAPREnvironment *spapr,
|
||||
uint32_t token, uint32_t nargs,
|
||||
target_ulong args,
|
||||
uint32_t nret, target_ulong rets)
|
||||
{
|
||||
target_ulong parameter = rtas_ld(args, 0);
|
||||
target_ulong ret = RTAS_OUT_NOT_SUPPORTED;
|
||||
|
||||
switch (parameter) {
|
||||
case DIAGNOSTICS_RUN_MODE:
|
||||
ret = RTAS_OUT_NOT_AUTHORIZED;
|
||||
break;
|
||||
}
|
||||
|
||||
rtas_st(rets, 0, ret);
|
||||
}
|
||||
|
||||
static struct rtas_call {
|
||||
const char *name;
|
||||
spapr_rtas_fn fn;
|
||||
@ -345,6 +388,10 @@ static void core_rtas_register_types(void)
|
||||
rtas_query_cpu_stopped_state);
|
||||
spapr_rtas_register("start-cpu", rtas_start_cpu);
|
||||
spapr_rtas_register("stop-self", rtas_stop_self);
|
||||
spapr_rtas_register("ibm,get-system-parameter",
|
||||
rtas_ibm_get_system_parameter);
|
||||
spapr_rtas_register("ibm,set-system-parameter",
|
||||
rtas_ibm_set_system_parameter);
|
||||
}
|
||||
|
||||
type_init(core_rtas_register_types)
|
||||
|
@ -338,6 +338,8 @@ static inline int spapr_allocate_lsi(int hint)
|
||||
#define RTAS_OUT_HW_ERROR -1
|
||||
#define RTAS_OUT_BUSY -2
|
||||
#define RTAS_OUT_PARAM_ERROR -3
|
||||
#define RTAS_OUT_NOT_SUPPORTED -3
|
||||
#define RTAS_OUT_NOT_AUTHORIZED -9002
|
||||
|
||||
static inline uint64_t ppc64_phys_to_real(uint64_t addr)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user