mirror of https://github.com/xemu-project/xemu.git
ppc/pnv: make pnv_ics_get() use the chip8->phbs[] array
The function is working today by getting all the child objects of the chip, interacting with each of them to check whether the child is a PHB, and then doing what needs to be done. We have all the chip PHBs in the phbs[] array so interacting with all child objects is unneeded. Open code pnv_ics_get_phb_ics() into pnv_ics_get() and remove both pnv_ics_get_phb_ics() and the ForeachPhb3Args struct. Reviewed-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Message-Id: <20220621173436.165912-5-danielhb413@gmail.com>
This commit is contained in:
parent
792e8bb629
commit
da6be50136
38
hw/ppc/pnv.c
38
hw/ppc/pnv.c
|
@ -1950,44 +1950,28 @@ PowerPCCPU *pnv_chip_find_cpu(PnvChip *chip, uint32_t pir)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct ForeachPhb3Args {
|
|
||||||
int irq;
|
|
||||||
ICSState *ics;
|
|
||||||
} ForeachPhb3Args;
|
|
||||||
|
|
||||||
static int pnv_ics_get_child(Object *child, void *opaque)
|
|
||||||
{
|
|
||||||
ForeachPhb3Args *args = opaque;
|
|
||||||
PnvPHB3 *phb3 = (PnvPHB3 *) object_dynamic_cast(child, TYPE_PNV_PHB3);
|
|
||||||
|
|
||||||
if (phb3) {
|
|
||||||
if (ics_valid_irq(&phb3->lsis, args->irq)) {
|
|
||||||
args->ics = &phb3->lsis;
|
|
||||||
}
|
|
||||||
if (ics_valid_irq(ICS(&phb3->msis), args->irq)) {
|
|
||||||
args->ics = ICS(&phb3->msis);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return args->ics ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ICSState *pnv_ics_get(XICSFabric *xi, int irq)
|
static ICSState *pnv_ics_get(XICSFabric *xi, int irq)
|
||||||
{
|
{
|
||||||
PnvMachineState *pnv = PNV_MACHINE(xi);
|
PnvMachineState *pnv = PNV_MACHINE(xi);
|
||||||
ForeachPhb3Args args = { irq, NULL };
|
int i, j;
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < pnv->num_chips; i++) {
|
for (i = 0; i < pnv->num_chips; i++) {
|
||||||
PnvChip *chip = pnv->chips[i];
|
|
||||||
Pnv8Chip *chip8 = PNV8_CHIP(pnv->chips[i]);
|
Pnv8Chip *chip8 = PNV8_CHIP(pnv->chips[i]);
|
||||||
|
|
||||||
if (ics_valid_irq(&chip8->psi.ics, irq)) {
|
if (ics_valid_irq(&chip8->psi.ics, irq)) {
|
||||||
return &chip8->psi.ics;
|
return &chip8->psi.ics;
|
||||||
}
|
}
|
||||||
|
|
||||||
object_child_foreach(OBJECT(chip), pnv_ics_get_child, &args);
|
for (j = 0; j < chip8->num_phbs; j++) {
|
||||||
if (args.ics) {
|
PnvPHB3 *phb3 = &chip8->phbs[j];
|
||||||
return args.ics;
|
|
||||||
|
if (ics_valid_irq(&phb3->lsis, irq)) {
|
||||||
|
return &phb3->lsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ics_valid_irq(ICS(&phb3->msis), irq)) {
|
||||||
|
return ICS(&phb3->msis);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue