mirror of https://github.com/xemu-project/xemu.git
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;
|
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 {
|
static struct rtas_call {
|
||||||
const char *name;
|
const char *name;
|
||||||
spapr_rtas_fn fn;
|
spapr_rtas_fn fn;
|
||||||
|
@ -345,6 +388,10 @@ static void core_rtas_register_types(void)
|
||||||
rtas_query_cpu_stopped_state);
|
rtas_query_cpu_stopped_state);
|
||||||
spapr_rtas_register("start-cpu", rtas_start_cpu);
|
spapr_rtas_register("start-cpu", rtas_start_cpu);
|
||||||
spapr_rtas_register("stop-self", rtas_stop_self);
|
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)
|
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_HW_ERROR -1
|
||||||
#define RTAS_OUT_BUSY -2
|
#define RTAS_OUT_BUSY -2
|
||||||
#define RTAS_OUT_PARAM_ERROR -3
|
#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)
|
static inline uint64_t ppc64_phys_to_real(uint64_t addr)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue