PCI IRQ holding status is no longer set when the IRQ is set to edge (which is supposed to be when the IRQ is not shared).

This commit is contained in:
OBattler
2017-06-22 06:56:22 +02:00
parent 62a270c79f
commit 35575dcc7d

View File

@@ -69,7 +69,7 @@ void elcr_write(uint16_t port, uint8_t val, void *priv)
/* pclog("ELCR%i: WRITE %02X\n", port & 1, val); */
elcr[port & 1] = val;
printf("ELCR %i: %c %c %c %c %c %c %c %c\n", port & 1, (val & 1) ? 'L' : 'E', (val & 2) ? 'L' : 'E', (val & 4) ? 'L' : 'E', (val & 8) ? 'L' : 'E', (val & 0x10) ? 'L' : 'E', (val & 0x20) ? 'L' : 'E', (val & 0x40) ? 'L' : 'E', (val & 0x80) ? 'L' : 'E');
/* printf("ELCR %i: %c %c %c %c %c %c %c %c\n", port & 1, (val & 1) ? 'L' : 'E', (val & 2) ? 'L' : 'E', (val & 4) ? 'L' : 'E', (val & 8) ? 'L' : 'E', (val & 0x10) ? 'L' : 'E', (val & 0x20) ? 'L' : 'E', (val & 0x40) ? 'L' : 'E', (val & 0x80) ? 'L' : 'E'); */
}
uint8_t elcr_read(uint16_t port, void *priv)
@@ -193,9 +193,13 @@ void pci_set_irq(int card, int pci_int)
if (pci_irqs[irq] != PCI_IRQ_DISABLED/* && !pci_irq_active[card] */)
pci_issue_irq(pci_irqs[irq]);
/* pci_irq_active[card] = 1; */
/* If the IRQ is set to edge, there is no need to hold it. */
if (pci_irq_is_level(pci_irqs[irq])
{
pci_irq_hold[pci_irqs[irq]] |= (1 << card);
}
}
}
void pci_clear_irq(int card, int pci_int)
{