Remove commands not supported by magneto-optical drives.
This commit is contained in:
@@ -1319,20 +1319,6 @@ do_command(void *p, uint8_t *cdb)
|
||||
data_command_finish(dev, len, len, cdb[4], 0);
|
||||
break;
|
||||
|
||||
case GPCMD_MECHANISM_STATUS:
|
||||
set_phase(dev, SCSI_PHASE_DATA_IN);
|
||||
len = (cdb[7] << 16) | (cdb[8] << 8) | cdb[9];
|
||||
|
||||
buf_alloc(dev, 8);
|
||||
|
||||
set_buf_len(dev, BufLen, &len);
|
||||
|
||||
memset(dev->buffer, 0, 8);
|
||||
dev->buffer[5] = 1;
|
||||
|
||||
data_command_finish(dev, 8, 8, len, 0);
|
||||
break;
|
||||
|
||||
case GPCMD_READ_6:
|
||||
case GPCMD_READ_10:
|
||||
case GPCMD_READ_12:
|
||||
@@ -1501,68 +1487,6 @@ do_command(void *p, uint8_t *cdb)
|
||||
ui_sb_icon_update(SB_MO | dev->id, 0);
|
||||
return;
|
||||
|
||||
case GPCMD_WRITE_SAME_10:
|
||||
set_phase(dev, SCSI_PHASE_DATA_OUT);
|
||||
alloc_length = 512;
|
||||
|
||||
if ((cdb[1] & 6) == 6) {
|
||||
invalid_field(dev);
|
||||
return;
|
||||
}
|
||||
|
||||
if (dev->drv->read_only) {
|
||||
write_protected(dev);
|
||||
return;
|
||||
}
|
||||
|
||||
dev->sector_len = (cdb[7] << 8) | cdb[8];
|
||||
dev->sector_pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5];
|
||||
|
||||
#if 0
|
||||
if ((dev->sector_pos >= dev->drv->medium_size) ||
|
||||
((dev->sector_pos + dev->sector_len - 1) >= dev->drv->medium_size)) {
|
||||
#else
|
||||
if ((dev->sector_pos >= dev->drv->medium_size)) {
|
||||
#endif
|
||||
lba_out_of_range(dev);
|
||||
return;
|
||||
}
|
||||
|
||||
if (! dev->sector_len) {
|
||||
set_phase(dev, SCSI_PHASE_STATUS);
|
||||
DBGLOG(1, "MO %i: All done - callback set\n", dev->id);
|
||||
dev->packet_status = PHASE_COMPLETE;
|
||||
dev->callback = 20LL * MO_TIME;
|
||||
|
||||
set_callback(dev);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we are writing all blocks in one go for DMA, why
|
||||
* not also for PIO, it should NOT matter anyway, this
|
||||
* step should be identical and only the way the data
|
||||
* written is transferred to the host should be different.
|
||||
*/
|
||||
max_len = dev->sector_len;
|
||||
dev->requested_blocks = max_len;
|
||||
|
||||
dev->packet_len = max_len * alloc_length;
|
||||
buf_alloc(dev, dev->packet_len);
|
||||
|
||||
dev->requested_blocks = max_len;
|
||||
dev->packet_len = alloc_length;
|
||||
|
||||
set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len);
|
||||
|
||||
data_command_finish(dev, dev->packet_len, 512, dev->packet_len, 1);
|
||||
|
||||
if (dev->packet_status != PHASE_COMPLETE)
|
||||
ui_sb_icon_update(SB_MO | dev->id, 1);
|
||||
else
|
||||
ui_sb_icon_update(SB_MO | dev->id, 0);
|
||||
return;
|
||||
|
||||
case GPCMD_MODE_SENSE_6:
|
||||
case GPCMD_MODE_SENSE_10:
|
||||
set_phase(dev, SCSI_PHASE_DATA_IN);
|
||||
@@ -1793,60 +1717,6 @@ atapi_out:
|
||||
data_command_finish(dev, len, len, len, 0);
|
||||
break;
|
||||
|
||||
case GPCMD_READ_FORMAT_CAPACITIES:
|
||||
len = (cdb[7] << 8) | cdb[8];
|
||||
|
||||
buf_alloc(dev, len);
|
||||
memset(dev->buffer, 0, len);
|
||||
|
||||
pos = 0;
|
||||
|
||||
/* List header */
|
||||
dev->buffer[pos++] = 0;
|
||||
dev->buffer[pos++] = 0;
|
||||
dev->buffer[pos++] = 0;
|
||||
if (dev->drv->f != NULL)
|
||||
dev->buffer[pos++] = 16;
|
||||
else
|
||||
dev->buffer[pos++] = 8;
|
||||
|
||||
if (dev->drv->f != NULL) {
|
||||
dev->buffer[pos++] = (dev->drv->medium_size >> 24) & 0xff;
|
||||
dev->buffer[pos++] = (dev->drv->medium_size >> 16) & 0xff;
|
||||
dev->buffer[pos++] = (dev->drv->medium_size >> 8) & 0xff;
|
||||
dev->buffer[pos++] = dev->drv->medium_size & 0xff;
|
||||
dev->buffer[pos++] = 2; /* Current medium capacity */
|
||||
dev->buffer[pos++] = 0;
|
||||
dev->buffer[pos++] = (dev->drv->sector_size >> 8) & 0xff;
|
||||
dev->buffer[pos++] = dev->drv->sector_size & 0xff;
|
||||
} else {
|
||||
dev->buffer[pos++] = (MO_SECTORS_GIGAMO2 >> 24) & 0xff;
|
||||
dev->buffer[pos++] = (MO_SECTORS_GIGAMO2 >> 16) & 0xff;
|
||||
dev->buffer[pos++] = (MO_SECTORS_GIGAMO2 >> 8) & 0xff;
|
||||
dev->buffer[pos++] = MO_SECTORS_GIGAMO2 & 0xff;
|
||||
dev->buffer[pos++] = 3; /* Maximum medium capacity */
|
||||
dev->buffer[pos++] = 0;
|
||||
dev->buffer[pos++] = (MO_BPS_GIGAMO2 >> 8) & 0xff;
|
||||
dev->buffer[pos++] = MO_BPS_GIGAMO2 & 0xff;
|
||||
}
|
||||
|
||||
if (dev->drv->f != NULL) {
|
||||
/* Formattable capacity descriptor */
|
||||
dev->buffer[pos++] = (dev->drv->medium_size >> 24) & 0xff;
|
||||
dev->buffer[pos++] = (dev->drv->medium_size >> 16) & 0xff;
|
||||
dev->buffer[pos++] = (dev->drv->medium_size >> 8) & 0xff;
|
||||
dev->buffer[pos++] = dev->drv->medium_size & 0xff;
|
||||
dev->buffer[pos++] = 0;
|
||||
dev->buffer[pos++] = 0;
|
||||
dev->buffer[pos++] = (dev->drv->sector_size >> 8) & 0xff;
|
||||
dev->buffer[pos++] = dev->drv->sector_size & 0xff;
|
||||
}
|
||||
|
||||
set_buf_len(dev, BufLen, &len);
|
||||
|
||||
data_command_finish(dev, len, len, len, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
illegal_opcode(dev);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user