From 103ebe5347e52359d34d3a62cca5cbb5f42c6e23 Mon Sep 17 00:00:00 2001 From: SarahW Date: Sun, 18 Feb 2018 12:33:31 +0000 Subject: [PATCH] Fix hang with long ATAPI transfers. --- src/ide_atapi.c | 2 +- src/scsi_cd.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ide_atapi.c b/src/ide_atapi.c index 1faa977..b916898 100644 --- a/src/ide_atapi.c +++ b/src/ide_atapi.c @@ -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; diff --git a/src/scsi_cd.c b/src/scsi_cd.c index 3ba4b60..0f0ceb7 100644 --- a/src/scsi_cd.c +++ b/src/scsi_cd.c @@ -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;