Support READ DEFECT DATA command
authorMichael McMaster <michael@codesrc.com>
Mon, 4 Nov 2019 09:18:38 +0000 (19:18 +1000)
committerMichael McMaster <michael@codesrc.com>
Mon, 4 Nov 2019 09:18:38 +0000 (19:18 +1000)
src/firmware/disk.c

index 315db1c42760ec1073ad5183dbcf6b323f7a80d5..773ffd3415a783f54501d7ee3c89cbeed6c4c8a8 100755 (executable)
@@ -524,11 +524,21 @@ int scsiDiskCommand()
        else if (unlikely(command == 0x37))\r
        {\r
                // READ DEFECT DATA\r
-               scsiDev.status = CHECK_CONDITION;\r
-               scsiDev.target->sense.code = NO_SENSE;\r
-               scsiDev.target->sense.asc = DEFECT_LIST_NOT_FOUND;\r
-               scsiDev.phase = STATUS;\r
+               uint32_t allocLength = (((uint16_t)scsiDev.cdb[7]) << 8) |\r
+                       scsiDev.cdb[8];\r
+\r
+               scsiDev.data[0] = 0;\r
+               scsiDev.data[1] = scsiDev.cdb[1];\r
+               scsiDev.data[2] = 0;\r
+               scsiDev.data[3] = 0;\r
+               scsiDev.dataLen = 4;\r
 \r
+               if (scsiDev.dataLen > allocLength)\r
+               {\r
+                       scsiDev.dataLen = allocLength;\r
+               }\r
+\r
+               scsiDev.phase = DATA_IN;\r
        }\r
        else\r
        {\r