From 579f13402d7a29e4c7d55018eadbae1973eb608b Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 28 Aug 2017 06:58:51 +0200 Subject: [PATCH] Primary and secondary IDE controller IRQ's can now be level-triggered on PCI boards if so configured. --- src/hdd/hdd_ide_at.c | 17 ++++++++++++++++- src/pci.h | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) 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