[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