On Thu, Dec 21, 2017 at 9:20 AM, Mark Cave-Ayland <mark.cave-ayl...@ilande.co.uk> wrote: > After the previous refactoring it is now possible to use separate functions > to improve the clarity of the interrupt paths. > > Signed-off-by: Mark Cave-Ayland <mark.cave-ayl...@ilande.co.uk>
Reviewed-by: Artyom Tarasenko <atar4q...@gmail.com> > --- > hw/pci-host/apb.c | 45 ++++++++++++++++++++------------------------- > 1 file changed, 20 insertions(+), 25 deletions(-) > > diff --git a/hw/pci-host/apb.c b/hw/pci-host/apb.c > index 6c20285b04..3ebb9dc304 100644 > --- a/hw/pci-host/apb.c > +++ b/hw/pci-host/apb.c > @@ -517,32 +517,27 @@ static int pci_apb_map_irq(PCIDevice *pci_dev, int > irq_num) > return irq_num; > } > > -static int pci_pbm_map_irq(PCIDevice *pci_dev, int irq_num) > +static int pci_pbmA_map_irq(PCIDevice *pci_dev, int irq_num) > { > - PBMPCIBridge *br = PBM_PCI_BRIDGE(pci_bridge_get_device( > - PCI_BUS(qdev_get_parent_bus(DEVICE(pci_dev))))); > - > - int bus_offset; > - if (br->busA) { > - bus_offset = 0x0; > + /* The on-board devices have fixed (legacy) OBIO intnos */ > + switch (PCI_SLOT(pci_dev->devfn)) { > + case 1: > + /* Onboard NIC */ > + return 0x21; > + case 3: > + /* Onboard IDE */ > + return 0x20; > + default: > + /* Normal intno, fall through */ > + break; > + } > > - /* The on-board devices have fixed (legacy) OBIO intnos */ > - switch (PCI_SLOT(pci_dev->devfn)) { > - case 1: > - /* Onboard NIC */ > - return 0x21; > - case 3: > - /* Onboard IDE */ > - return 0x20; > + return ((PCI_SLOT(pci_dev->devfn) << 2) + irq_num) & 0x1f; > +} > > - default: > - /* Normal intno, fall through */ > - break; > - } > - } else { > - bus_offset = 0x10; > - } > - return (bus_offset + (PCI_SLOT(pci_dev->devfn) << 2) + irq_num) & 0x1f; > +static int pci_pbmB_map_irq(PCIDevice *pci_dev, int irq_num) > +{ > + return (0x10 + (PCI_SLOT(pci_dev->devfn) << 2) + irq_num) & 0x1f; > } > > static void pci_apb_set_irq(void *opaque, int irq_num, int level) > @@ -673,13 +668,13 @@ static void pci_pbm_realize(DeviceState *dev, Error > **errp) > pci_dev = pci_create_multifunction(phb->bus, PCI_DEVFN(1, 0), true, > TYPE_PBM_PCI_BRIDGE); > s->bridgeB = PCI_BRIDGE(pci_dev); > - pci_bridge_map_irq(s->bridgeB, "pciB", pci_pbm_map_irq); > + pci_bridge_map_irq(s->bridgeB, "pciB", pci_pbmB_map_irq); > qdev_init_nofail(&pci_dev->qdev); > > pci_dev = pci_create_multifunction(phb->bus, PCI_DEVFN(1, 1), true, > TYPE_PBM_PCI_BRIDGE); > s->bridgeA = PCI_BRIDGE(pci_dev); > - pci_bridge_map_irq(s->bridgeA, "pciA", pci_pbm_map_irq); > + pci_bridge_map_irq(s->bridgeA, "pciA", pci_pbmA_map_irq); > qdev_prop_set_bit(DEVICE(pci_dev), "busA", true); > qdev_init_nofail(&pci_dev->qdev); > } > -- > 2.11.0 > -- Regards, Artyom Tarasenko SPARC and PPC PReP under qemu blog: http://tyom.blogspot.com/search/label/qemu