MCPcopy Create free account
hub / github.com/BlitterStudio/amiberry / scsi_cd_emulate

Function scsi_cd_emulate

src/blkdev.cpp:1432–2238  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1430}
1431
1432int scsi_cd_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len,
1433 uae_u8 *scsi_data, int *data_len, uae_u8 *r, int *reply_len, uae_u8 *s, int *sense_len, bool atapi)
1434{
1435 struct blkdevstate *st = &state[unitnum];
1436 uae_u32 len, offset;
1437 int lr = 0, ls = 0;
1438 int scsi_len = -1;
1439 int v;
1440 int status = 0;
1441 struct device_info di;
1442 uae_u8 cmd;
1443 int dlen, lun;
1444
1445 if (cmdbuf == NULL) {
1446 if (st->mediawaschanged) {
1447 st->mediawaschanged = false;
1448 return (0x28 << 8) | (0x00);
1449 }
1450 return 0;
1451 }
1452
1453 cmd = cmdbuf[0];
1454
1455 if (cmd == 0x03) {
1456 return 0;
1457 }
1458
1459 dlen = *data_len;
1460 *reply_len = *sense_len = 0;
1461
1462 if (log_scsiemu) {
1463 write_log (_T("CD SCSIEMU %d: %02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X CMDLEN=%d DATA=%p LEN=%d\n"), unitnum,
1464 cmdbuf[0], cmdbuf[1], cmdbuf[2], cmdbuf[3], cmdbuf[4], cmdbuf[5], cmdbuf[6],
1465 cmdbuf[7], cmdbuf[8], cmdbuf[9], cmdbuf[10], cmdbuf[11],
1466 scsi_cmd_len, scsi_data, dlen);
1467 }
1468
1469 lun = cmdbuf[1] >> 5;
1470 if (cmdbuf[0] != 0x03 && cmdbuf[0] != 0x12 && lun) {
1471 status = 2; /* CHECK CONDITION */
1472 s[0] = 0x70;
1473 s[2] = 5; /* ILLEGAL REQUEST */
1474 s[12] = 0x25; /* INVALID LUN */
1475 ls = 0x12;
1476 write_log (_T("CD SCSIEMU %d: CMD=%02X LUN=%d ignored\n"), unitnum, cmdbuf[0], lun);
1477 goto end;
1478 }
1479
1480 sys_command_info (unitnum, &di, 1);
1481
1482 switch (cmdbuf[0])
1483 {
1484 case 0x00: /* TEST UNIT READY */
1485 if (nodisk (&di))
1486 goto nodisk;
1487 scsi_len = 0;
1488 break;
1489 case 0x1e: /* PREVENT/ALLOW MEDIUM REMOVAL */

Callers 3

execscsicmd_directFunction · 0.85
scsi_emulate_cmdFunction · 0.85

Calls 15

sys_command_infoFunction · 0.85
uaFunction · 0.85
scsi_read_cd_daFunction · 0.85
scsi_read_cdFunction · 0.85
sys_command_cd_volumeFunction · 0.85
stopplayFunction · 0.85
gettocFunction · 0.85
scsi_read_cd_dataFunction · 0.85
sys_command_cd_tocFunction · 0.85
lsn2msfFunction · 0.85
addtocentryFunction · 0.85
sys_command_cd_qcodeFunction · 0.85

Tested by

no test coverage detected