mirror of https://github.com/xqemu/xqemu.git
xics: Implement H_IPOLL
This adds support for the H_IPOLL hypercall which the guest uses to poll for a pending interrupt. This hypercall is mandatory for PAPR+ and there is no way for the guest to detect whether it is supported or not so just add it. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Acked-by: Alexander Graf <agraf@suse.de> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
11ad93f681
commit
075edbe3ba
|
@ -689,6 +689,18 @@ static target_ulong h_eoi(PowerPCCPU *cpu, sPAPREnvironment *spapr,
|
||||||
return H_SUCCESS;
|
return H_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static target_ulong h_ipoll(PowerPCCPU *cpu, sPAPREnvironment *spapr,
|
||||||
|
target_ulong opcode, target_ulong *args)
|
||||||
|
{
|
||||||
|
CPUState *cs = CPU(cpu);
|
||||||
|
ICPState *ss = &spapr->icp->ss[cs->cpu_index];
|
||||||
|
|
||||||
|
args[0] = ss->xirr;
|
||||||
|
args[1] = ss->mfrr;
|
||||||
|
|
||||||
|
return H_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static void rtas_set_xive(PowerPCCPU *cpu, sPAPREnvironment *spapr,
|
static void rtas_set_xive(PowerPCCPU *cpu, sPAPREnvironment *spapr,
|
||||||
uint32_t token,
|
uint32_t token,
|
||||||
uint32_t nargs, target_ulong args,
|
uint32_t nargs, target_ulong args,
|
||||||
|
@ -842,6 +854,7 @@ static void xics_realize(DeviceState *dev, Error **errp)
|
||||||
spapr_register_hypercall(H_IPI, h_ipi);
|
spapr_register_hypercall(H_IPI, h_ipi);
|
||||||
spapr_register_hypercall(H_XIRR, h_xirr);
|
spapr_register_hypercall(H_XIRR, h_xirr);
|
||||||
spapr_register_hypercall(H_EOI, h_eoi);
|
spapr_register_hypercall(H_EOI, h_eoi);
|
||||||
|
spapr_register_hypercall(H_IPOLL, h_ipoll);
|
||||||
|
|
||||||
object_property_set_bool(OBJECT(icp->ics), true, "realized", &error);
|
object_property_set_bool(OBJECT(icp->ics), true, "realized", &error);
|
||||||
if (error) {
|
if (error) {
|
||||||
|
|
Loading…
Reference in New Issue