From 4730922c524c1304705e1a3f194764cb503db670 Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 23 Feb 2022 22:19:39 +0100 Subject: [PATCH] SEEK command on ATAPI devices no longer returns READY status bit set, should fix ATAPI device misdetection as hard disk on FreeBSD. --- src/disk/hdc_ide.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c index babb5e1b6..dd115a329 100644 --- a/src/disk/hdc_ide.c +++ b/src/disk/hdc_ide.c @@ -2106,6 +2106,23 @@ ide_board_callback(void *priv) } +static void +atapi_error_no_read(ide_t *ide) +{ + ide->command = 0; + if (ide->type == IDE_ATAPI) { + ide->sc->status = ERR_STAT | DSC_STAT; + ide->sc->error = ABRT_ERR; + ide->sc->pos = 0; + } else { + ide->atastat = ERR_STAT | DSC_STAT; + ide->error = ABRT_ERR; + ide->pos = 0; + } + ide_irq_raise(ide); +} + + static void ide_callback(void *priv) { @@ -2117,8 +2134,10 @@ ide_callback(void *priv) if (((ide->command >= WIN_RECAL) && (ide->command <= 0x1F)) || ((ide->command >= WIN_SEEK) && (ide->command <= 0x7F))) { - if (ide->type != IDE_HDD) - goto abort_cmd; + if (ide->type != IDE_HDD) { + atapi_error_no_ready(ide); + return; + } if ((ide->command >= WIN_SEEK) && (ide->command <= 0x7F) && !ide->lba) { if ((ide->cylinder >= ide->tracks) || (ide->head >= ide->hpc) || !ide->sector || (ide->sector > ide->spt))