This will be used by PHB hotplug in order to create the "interrupt-map" property of the PHB node.
Reviewed-by: Cédric Le Goater <c...@kaod.org> Signed-off-by: Greg Kurz <gr...@kaod.org> --- v4: - return phandle via a pointer --- hw/ppc/spapr_irq.c | 26 ++++++++++++++++++++++++++ include/hw/ppc/spapr_irq.h | 2 ++ 2 files changed, 28 insertions(+) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index b8d725e251ba..31495033c37c 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -692,6 +692,32 @@ void spapr_irq_reset(sPAPRMachineState *spapr, Error **errp) } } +int spapr_irq_get_phandle(sPAPRMachineState *spapr, void *fdt, + uint32_t *phandle, Error **errp) +{ + const char *nodename = spapr->irq->get_nodename(spapr); + int offset, ph; + + offset = fdt_subnode_offset(fdt, 0, nodename); + if (offset < 0) { + error_setg(errp, "Can't find node \"%s\": %s", nodename, + fdt_strerror(offset)); + return -1; + } + + ph = fdt_get_phandle(fdt, offset); + if (!ph) { + error_setg(errp, "Can't get phandle of node \"%s\"", nodename); + return -1; + } + + if (phandle) { + *phandle = ph; + } + + return 0; +} + /* * XICS legacy routines - to deprecate one day */ diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index ad7127355441..4b3303ef4f6a 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -62,6 +62,8 @@ void spapr_irq_free(sPAPRMachineState *spapr, int irq, int num); qemu_irq spapr_qirq(sPAPRMachineState *spapr, int irq); int spapr_irq_post_load(sPAPRMachineState *spapr, int version_id); void spapr_irq_reset(sPAPRMachineState *spapr, Error **errp); +int spapr_irq_get_phandle(sPAPRMachineState *spapr, void *fdt, + uint32_t *phandle, Error **errp); /* * XICS legacy routines