Fix hang with long ATAPI transfers.
This commit is contained in:
parent
5c9a1e9664
commit
103ebe5347
2 changed files with 7 additions and 1 deletions
|
|
@ -141,7 +141,7 @@ void atapi_process_packet(atapi_device_t *atapi_dev)
|
||||||
{
|
{
|
||||||
case ATAPI_STATE_COMMAND:
|
case ATAPI_STATE_COMMAND:
|
||||||
*atapi_dev->atastat = READY_STAT | (*atapi_dev->atastat & ERR_STAT);
|
*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;
|
atapi_dev->bus_state = BUS_CD | BUS_REQ;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -651,7 +651,10 @@ static int scsi_cd_command(uint8_t *cdb, void *p)
|
||||||
data->cdpos++;
|
data->cdpos++;
|
||||||
data->cdlen--;
|
data->cdlen--;
|
||||||
if (!data->cdlen)
|
if (!data->cdlen)
|
||||||
|
{
|
||||||
|
c++;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
readflash_set(READFLASH_HDC, data->id);
|
readflash_set(READFLASH_HDC, data->id);
|
||||||
|
|
||||||
|
|
@ -706,7 +709,10 @@ static int scsi_cd_command(uint8_t *cdb, void *p)
|
||||||
data->cdpos++;
|
data->cdpos++;
|
||||||
data->cdlen--;
|
data->cdlen--;
|
||||||
if (!data->cdlen)
|
if (!data->cdlen)
|
||||||
|
{
|
||||||
|
c++;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data->data_pos_read = 0;
|
data->data_pos_read = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue