Fix hang with long ATAPI transfers.

This commit is contained in:
SarahW 2018-02-18 12:33:31 +00:00
commit 103ebe5347
2 changed files with 7 additions and 1 deletions

View file

@ -141,7 +141,7 @@ void atapi_process_packet(atapi_device_t *atapi_dev)
{
case ATAPI_STATE_COMMAND:
*atapi_dev->atastat = READY_STAT | (*atapi_dev->atastat & ERR_STAT);
atapi_dev->max_transfer_len = *atapi_dev->cylinder;
atapi_dev->max_transfer_len = (*atapi_dev->cylinder) & ~1;
atapi_dev->bus_state = BUS_CD | BUS_REQ;
break;

View file

@ -651,7 +651,10 @@ static int scsi_cd_command(uint8_t *cdb, void *p)
data->cdpos++;
data->cdlen--;
if (!data->cdlen)
{
c++;
break;
}
}
readflash_set(READFLASH_HDC, data->id);
@ -706,7 +709,10 @@ static int scsi_cd_command(uint8_t *cdb, void *p)
data->cdpos++;
data->cdlen--;
if (!data->cdlen)
{
c++;
break;
}
}
data->data_pos_read = 0;