From cc9a2de4782ab8ab37e3d0a586e595a0f012c3c0 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 6 Nov 2022 17:13:37 +0100 Subject: [PATCH] Fixed ATAPI device status after the DEVICE DIAGNOSTICS command, fixes CD-ROM detection on FreeBSD 2.x, fixes #1992. --- src/disk/hdc_ide.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c index a488d8aa2..13a36355e 100644 --- a/src/disk/hdc_ide.c +++ b/src/disk/hdc_ide.c @@ -2090,18 +2090,27 @@ ide_board_callback(void *priv) #endif dev->ide[0]->atastat = DRDY_STAT | DSC_STAT; - if (dev->ide[0]->type == IDE_ATAPI) - dev->ide[0]->sc->status = DRDY_STAT | DSC_STAT; + if (dev->ide[0]->type == IDE_ATAPI) { + if (dev->ide[0]->sc->pad0) + dev->ide[0]->sc->status = DRDY_STAT | DSC_STAT; + else + dev->ide[0]->sc->status = 0; + } dev->ide[1]->atastat = DRDY_STAT | DSC_STAT; - if (dev->ide[1]->type == IDE_ATAPI) - dev->ide[1]->sc->status = DRDY_STAT | DSC_STAT; + if (dev->ide[1]->type == IDE_ATAPI) { + if (dev->ide[1]->sc->pad0) + dev->ide[1]->sc->status = DRDY_STAT | DSC_STAT; + else + dev->ide[1]->sc->status = 0; + } dev->cur_dev &= ~1; if (dev->diag) { dev->diag = 0; - ide_irq_raise(dev->ide[0]); + if ((dev->ide[0]->type != IDE_ATAPI) || dev->ide[0]->sc->pad0) + ide_irq_raise(dev->ide[0]); } }