mirror of
https://github.com/qemu/qemu.git
synced 2024-11-28 22:33:36 +08:00
pci: introduce pci_swizzle_map_irq_fn() for standardized interrupt pin swizzle
Introduce pci_swizzle_map_irq_fn() for interrupt pin swizzle which is standardized. PCI bridge swizzle is common logic, by introducing this function duplicated swizzle logic will be avoided later. [jbaron@redhat.com: drop opaque argument] Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Jason Baron <jbaron@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
9e38f56183
commit
91e5615984
18
hw/pci.c
18
hw/pci.c
@ -1155,6 +1155,24 @@ void pci_device_set_intx_routing_notifier(PCIDevice *dev,
|
||||
dev->intx_routing_notifier = notifier;
|
||||
}
|
||||
|
||||
/*
|
||||
* PCI-to-PCI bridge specification
|
||||
* 9.1: Interrupt routing. Table 9-1
|
||||
*
|
||||
* the PCI Express Base Specification, Revision 2.1
|
||||
* 2.2.8.1: INTx interrutp signaling - Rules
|
||||
* the Implementation Note
|
||||
* Table 2-20
|
||||
*/
|
||||
/*
|
||||
* 0 <= pin <= 3 0 = INTA, 1 = INTB, 2 = INTC, 3 = INTD
|
||||
* 0-origin unlike PCI interrupt pin register.
|
||||
*/
|
||||
int pci_swizzle_map_irq_fn(PCIDevice *pci_dev, int pin)
|
||||
{
|
||||
return (pin + PCI_SLOT(pci_dev->devfn)) % PCI_NUM_PINS;
|
||||
}
|
||||
|
||||
/***********************************************************/
|
||||
/* monitor info on PCI */
|
||||
|
||||
|
2
hw/pci.h
2
hw/pci.h
@ -318,6 +318,8 @@ void pci_bus_irqs(PCIBus *bus, pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
|
||||
void *irq_opaque, int nirq);
|
||||
int pci_bus_get_irq_level(PCIBus *bus, int irq_num);
|
||||
void pci_bus_hotplug(PCIBus *bus, pci_hotplug_fn hotplug, DeviceState *dev);
|
||||
/* 0 <= pin <= 3 0 = INTA, 1 = INTB, 2 = INTC, 3 = INTD */
|
||||
int pci_swizzle_map_irq_fn(PCIDevice *pci_dev, int pin);
|
||||
PCIBus *pci_register_bus(DeviceState *parent, const char *name,
|
||||
pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
|
||||
void *irq_opaque,
|
||||
|
Loading…
Reference in New Issue
Block a user