]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Removed obsolete SCSI buffer size checks, scsi_emulate_analyze() increases buffer...
authorToni Wilen <twilen@winuae.net>
Mon, 1 Sep 2014 14:31:20 +0000 (17:31 +0300)
committerToni Wilen <twilen@winuae.net>
Mon, 1 Sep 2014 14:31:20 +0000 (17:31 +0300)
blkdev.cpp
scsi.cpp

index 7bc46e1bee040a07799285b2f37995763ba8fc97..2896b934d02b9b8217eabc8752c296e129dc1e81 100644 (file)
@@ -1223,8 +1223,6 @@ static int scsi_read_cd_data (int unitnum, uae_u8 *scsi_data, uae_u32 offset, ua
                *scsi_len = 0;
                return 0;
        } else {
-               if (len * di->bytespersector > SCSI_DEFAULT_DATA_BUFFER_SIZE)
-                       return -3;
                if (offset >= di->sectorspertrack * di->cylinders * di->trackspercylinder)
                        return -1;
                int v = cmd_readx (unitnum, scsi_data, offset, len) * di->bytespersector;
@@ -1548,8 +1546,6 @@ int scsi_cd_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len,
                                goto outofbounds;
                        if (v == -2)
                                goto readerr;
-                       if (v == -3)
-                               goto toolarge;
                } else {
                        goto notdatatrack;
                }
@@ -1583,8 +1579,6 @@ int scsi_cd_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len,
                                goto outofbounds;
                        if (v == -2)
                                goto readerr;
-                       if (v == -3)
-                               goto toolarge;
                } else {
                        goto notdatatrack;
                }
@@ -1606,8 +1600,6 @@ int scsi_cd_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len,
                                goto outofbounds;
                        if (v == -2)
                                goto readerr;
-                       if (v == -3)
-                               goto toolarge;
                } else {
                        goto notdatatrack;
                }
@@ -1988,14 +1980,6 @@ outofbounds:
                s[12] = 0x21; /* LOGICAL BLOCK OUT OF RANGE */
                ls = 0x12;
        break;
-toolarge:
-               write_log (_T("CDEMU: too large scsi data tranfer %d > %d\n"), len, dlen);
-               status = 2; /* CHECK CONDITION */
-               s[0] = 0x70;
-               s[2] = 2; /* NOT READY */
-               s[12] = 0x11; /* UNRECOVERED READ ERROR */
-               ls = 0x12;
-       break;
 errreq:
                lr = -1;
                status = 2; /* CHECK CONDITION */
index 32199c868d00299fa11e6091de16c6c2e812ec0a..e5cb5021b062b426b6b94cb47b259f6eee38d49d 100644 (file)
--- a/scsi.cpp
+++ b/scsi.cpp
@@ -63,7 +63,7 @@ static int scsi_data_dir(struct scsi_data *sd)
 
 void scsi_emulate_analyze (struct scsi_data *sd)
 {
-       int cmd_len, data_len, data_len2;
+       int cmd_len, data_len, data_len2, tmp_len;
 
        data_len = sd->data_len;
        data_len2 = 0;
@@ -71,30 +71,37 @@ void scsi_emulate_analyze (struct scsi_data *sd)
        sd->cmd_len = cmd_len;
        switch (sd->cmd[0])
        {
-       case 0x08:
+       case 0x08: // READ(6)
                data_len2 = sd->cmd[4] * sd->blocksize;
                scsi_grow_buffer(sd, data_len2);
        break;
-       case 0x28:
+       case 0x28: // READ(10)
                data_len2 = ((sd->cmd[7] << 8) | (sd->cmd[8] << 0)) * (uae_s64)sd->blocksize;
                scsi_grow_buffer(sd, data_len2);
        break;
-       case 0xa8:
+       case 0xa8: // READ(12)
                data_len2 = ((sd->cmd[6] << 24) | (sd->cmd[7] << 16) | (sd->cmd[8] << 8) | (sd->cmd[9] << 0)) * (uae_s64)sd->blocksize;
                scsi_grow_buffer(sd, data_len2);
        break;
-       case 0x0a:
+       case 0x0a: // WRITE(6)
                data_len = sd->cmd[4] * sd->blocksize;
                scsi_grow_buffer(sd, data_len);
        break;
-       case 0x2a:
+       case 0x2a: // WRITE(10)
                data_len = ((sd->cmd[7] << 8) | (sd->cmd[8] << 0)) * (uae_s64)sd->blocksize;
                scsi_grow_buffer(sd, data_len);
        break;
-       case 0xaa:
+       case 0xaa: // WRITE(12)
                data_len = ((sd->cmd[6] << 24) | (sd->cmd[7] << 16) | (sd->cmd[8] << 8) | (sd->cmd[9] << 0)) * (uae_s64)sd->blocksize;
                scsi_grow_buffer(sd, data_len);
        break;
+       case 0xbe: // READ CD
+       case 0xb9: // READ CD MSF
+               tmp_len = (sd->cmd[6] << 16) | (sd->cmd[7] << 8) | sd->cmd[8];
+               // max block transfer size, it is usually smaller.
+               tmp_len *= 2352 + 96;
+               scsi_grow_buffer(sd, tmp_len);
+       break;
        case 0x2f: // VERIFY
                if (sd->cmd[1] & 2) {
                        sd->data_len = ((sd->cmd[7] << 8) | (sd->cmd[8] << 0)) * (uae_s64)sd->blocksize;