SEEK command on ATAPI devices no longer returns READY status bit set, should fix ATAPI device misdetection as hard disk on FreeBSD.

This commit is contained in:
OBattler
2022-02-23 22:19:39 +01:00
parent 960cae34d4
commit 4730922c52

View File

@@ -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))