[SeaBIOS] [Qemu-devel] [PATCH v5 for-2.3 23/28] hw/pxb: add map_irq func

Michael S. Tsirkin mst at redhat.com
Mon Mar 16 16:27:52 CET 2015


On Mon, Mar 16, 2015 at 02:11:45PM +0200, Marcel Apfelbaum wrote:
> On 03/10/2015 06:43 PM, Michael S. Tsirkin wrote:
> >On Tue, Mar 10, 2015 at 05:32:09PM +0200, Marcel Apfelbaum wrote:
> >>The bios does not index the pxb slot number when
> >>it computes the IRQ because it resides on bus 0
> >>and not on the current bus.
> >>However Qemu routes the irq through bus 0 and adds
> >>the pxb slot to the IRQ computation.
> >>
> >>Synchronize between bios and Qemu by canceling
> >>pxb's effect.
> >>
> >>Signed-off-by: Marcel Apfelbaum <marcel at redhat.com>
> >>---
> >>  hw/pci-bridge/pci_expander_bridge.c | 20 +++++++++++++++++++-
> >>  1 file changed, 19 insertions(+), 1 deletion(-)
> >>
> >>diff --git a/hw/pci-bridge/pci_expander_bridge.c b/hw/pci-bridge/pci_expander_bridge.c
> >>index 941f3c8..87515c1 100644
> >>--- a/hw/pci-bridge/pci_expander_bridge.c
> >>+++ b/hw/pci-bridge/pci_expander_bridge.c
> >>@@ -92,6 +92,24 @@ static const TypeInfo pxb_host_info = {
> >>      .class_init    = pxb_host_class_init,
> >>  };
> >>
> >>+
> >>+static int pxb_map_irq_fn(PCIDevice *pci_dev, int pin)
> >>+{
> >>+    PCIDevice *pxb = pci_dev->bus->parent_dev;
> >>+
> >>+    /*
> >>+     * The bios does not index the pxb slot number when
> >>+     * it computes the IRQ because it resides on bus 0
> >>+     * and not on the current bus.
> >>+     * However QEMU routes the irq through bus 0 and adds
> >>+     * the pxb slot to the IRQ computation.
> >
> >I know it's QEMU but which function exactly?
> PXB device with is a PCI host-bridge device.
> 
> Thanks,
> Marcel

right, so pls tweak the comment to say so.

> >
> >>+     *
> >>+     * Synchronize between bios and QEMU by canceling
> >>+     * pxb's effect.
> >>+     */
> >>+    return pin - PCI_SLOT(pxb->devfn);
> >>+}
> >>+
> >>  static int pxb_dev_initfn(PCIDevice *dev)
> >>  {
> >>      PXBDev *pxb = PXB_DEV(dev);
> >>@@ -118,7 +136,7 @@ static int pxb_dev_initfn(PCIDevice *dev)
> >>      bus->parent_dev = dev;
> >>      bus->address_space_mem = dev->bus->address_space_mem;
> >>      bus->address_space_io = dev->bus->address_space_io;
> >>-    bus->map_irq = pci_swizzle_map_irq_fn;
> >>+    bus->map_irq = pxb_map_irq_fn;
> >>
> >>      bds = qdev_create(BUS(bus), "pci-bridge");
> >>      bds->id = dev_name;
> >>--
> >>2.1.0



More information about the SeaBIOS mailing list