[SeaBIOS] [Qemu-devel] [PATCH v5 for-2.3 23/28] hw/pxb: add map_irq func
Marcel Apfelbaum
marcel at redhat.com
Mon Mar 16 13:11:45 CET 2015
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
>
>> + *
>> + * 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