[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