diff --git a/src/hdd/hdd_ide_at.c b/src/hdd/hdd_ide_at.c index 0544d8610..fbc256540 100644 --- a/src/hdd/hdd_ide_at.c +++ b/src/hdd/hdd_ide_at.c @@ -28,6 +28,7 @@ #include "hdd_image.h" #include "../io.h" #include "../pic.h" +#include "../pci.h" #include "../timer.h" #include "../cdrom.h" #include "../scsi/scsi.h" @@ -171,7 +172,21 @@ void ide_irq_raise(IDE *ide) if (!(ide->fdisk&2)) { - picint(1 << ide_irq[ide->board]); + if (PCI && (ide->board < 2)) + { + if (pci_irq_is_level(ide_irq[ide->board])) + { + picintlevel(1 << ide_irq[ide->board]); + } + else + { + picint(1 << ide_irq[ide->board]); + } + } + else + { + picint(1 << ide_irq[ide->board]); + } if (ide->board < 2) { diff --git a/src/pci.h b/src/pci.h index f1cecc952..7f1e69857 100644 --- a/src/pci.h +++ b/src/pci.h @@ -8,6 +8,7 @@ void pci_set_irq_routing(int card, int irq); void pci_set_card_routing(int card, int pci_int); void pci_set_irq(int card, int pci_int); void pci_clear_irq(int card, int pci_int); +int pci_irq_is_level(int irq); #define PCI_REG_COMMAND 0x04