| 1235 | } |
| 1236 | |
| 1237 | static void cdrom_run_command_run (void) |
| 1238 | { |
| 1239 | int len; |
| 1240 | |
| 1241 | cdrom_command_length = 0; |
| 1242 | cdrom_command_active = 0; |
| 1243 | |
| 1244 | memset (cdrom_result_buffer, 0, sizeof (cdrom_result_buffer)); |
| 1245 | |
| 1246 | if (cdrom_checksum_error || cdrom_unknown_command) { |
| 1247 | cdrom_result_buffer[0] = (cdrom_command & 0xf0) | 5; |
| 1248 | if (cdrom_checksum_error) |
| 1249 | cdrom_result_buffer[1] |= CH_ERR_CHECKSUM | cdrom_door; |
| 1250 | else if (cdrom_unknown_command) |
| 1251 | cdrom_result_buffer[1] |= CH_ERR_BADCOMMAND | cdrom_door; |
| 1252 | len = 2; |
| 1253 | cdrom_start_return_data (len); |
| 1254 | return; |
| 1255 | } |
| 1256 | |
| 1257 | switch (cdrom_command & 0x0f) |
| 1258 | { |
| 1259 | case 0: |
| 1260 | len = 1; |
| 1261 | cdrom_result_buffer[0] = cdrom_command; |
| 1262 | break; |
| 1263 | case 1: |
| 1264 | len = cdrom_command_stop (); |
| 1265 | break; |
| 1266 | case 2: |
| 1267 | len = cdrom_command_pause (); |
| 1268 | break; |
| 1269 | case 3: |
| 1270 | len = cdrom_command_unpause (); |
| 1271 | break; |
| 1272 | case 4: |
| 1273 | len = cdrom_command_multi (); |
| 1274 | break; |
| 1275 | case 5: |
| 1276 | len = cdrom_command_led (); |
| 1277 | break; |
| 1278 | case 6: |
| 1279 | len = cdrom_command_subq (); |
| 1280 | break; |
| 1281 | case 7: |
| 1282 | len = cdrom_command_status (); |
| 1283 | break; |
| 1284 | default: |
| 1285 | len = 0; |
| 1286 | break; |
| 1287 | } |
| 1288 | if (len == 0) { |
| 1289 | set_status(CDINTERRUPT_DRIVEXMIT); |
| 1290 | return; |
| 1291 | } |
| 1292 | cdrom_start_return_data (len); |
| 1293 | } |
| 1294 |
no test coverage detected