X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Fpci.c;h=ab85aea13f10ca7bbe19c5a98557666e8963db5d;hb=4eb8163fe76127f9748caa43f8ffad1e4d739bb8;hp=606b38bc1366967c3601cf9b7e729269d00996d1;hpb=57164c930523141c4ef53782de214d2a9f468269;p=palacios.git diff --git a/palacios/src/devices/pci.c b/palacios/src/devices/pci.c index 606b38b..ab85aea 100644 --- a/palacios/src/devices/pci.c +++ b/palacios/src/devices/pci.c @@ -75,7 +75,8 @@ struct pci_bus { // Bitmap of the allocated device numbers uint8_t dev_map[MAX_BUS_DEVICES / 8]; - int (*raise_pci_irq)(struct vm_device * dev, uint_t intr_line); + int (*raise_pci_irq)(struct vm_device * dev, struct pci_device * pci_dev); + int (*lower_pci_irq)(struct vm_device * dev, struct pci_device * pci_dev); struct vm_device * irq_bridge_dev; }; @@ -705,12 +706,14 @@ static inline int init_bars(struct pci_device * pci_dev) { int v3_pci_set_irq_bridge(struct vm_device * pci_bus, int bus_num, - int (*raise_pci_irq)(struct vm_device * dev, uint_t intr_line), + int (*raise_pci_irq)(struct vm_device * dev, struct pci_device * pci_dev), + int (*lower_pci_irq)(struct vm_device * dev, struct pci_device * pci_dev), struct vm_device * bridge_dev) { struct pci_internal * pci_state = (struct pci_internal *)pci_bus->private_data; pci_state->bus_list[bus_num].raise_pci_irq = raise_pci_irq; + pci_state->bus_list[bus_num].lower_pci_irq = lower_pci_irq; pci_state->bus_list[bus_num].irq_bridge_dev = bridge_dev; return 0; @@ -720,7 +723,14 @@ int v3_pci_raise_irq(struct vm_device * pci_bus, int bus_num, struct pci_device struct pci_internal * pci_state = (struct pci_internal *)pci_bus->private_data; struct pci_bus * bus = &(pci_state->bus_list[bus_num]); - return bus->raise_pci_irq(bus->irq_bridge_dev, dev->config_header.intr_pin); + return bus->raise_pci_irq(bus->irq_bridge_dev, dev); +} + +int v3_pci_lower_irq(struct vm_device * pci_bus, int bus_num, struct pci_device * dev) { + struct pci_internal * pci_state = (struct pci_internal *)pci_bus->private_data; + struct pci_bus * bus = &(pci_state->bus_list[bus_num]); + + return bus->lower_pci_irq(bus->irq_bridge_dev, dev); } // if dev_num == -1, auto assign