Loading hw/scsi-bus.c +18 −5 Original line number Diff line number Diff line Loading @@ -801,26 +801,39 @@ static int ata_passthrough_16_xfer_size(SCSIDevice *dev, uint8_t *buf) return xfer * unit; } static int scsi_req_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) uint32_t scsi_data_cdb_length(uint8_t *buf) { if ((buf[0] >> 5) == 0 && buf[4] == 0) { return 256; } else { return scsi_cdb_length(buf); } } uint32_t scsi_cdb_length(uint8_t *buf) { switch (buf[0] >> 5) { case 0: cmd->xfer = buf[4]; return buf[4]; break; case 1: case 2: cmd->xfer = lduw_be_p(&buf[7]); return lduw_be_p(&buf[7]); break; case 4: cmd->xfer = ldl_be_p(&buf[10]) & 0xffffffffULL; return ldl_be_p(&buf[10]) & 0xffffffffULL; break; case 5: cmd->xfer = ldl_be_p(&buf[6]) & 0xffffffffULL; return ldl_be_p(&buf[6]) & 0xffffffffULL; break; default: return -1; } } static int scsi_req_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) { cmd->xfer = scsi_cdb_length(buf); switch (buf[0]) { case TEST_UNIT_READY: case REWIND: Loading hw/scsi.h +2 −0 Original line number Diff line number Diff line Loading @@ -218,6 +218,8 @@ extern const struct SCSISense sense_code_WRITE_PROTECTED; #define SENSE_CODE(x) sense_code_ ## x uint32_t scsi_data_cdb_length(uint8_t *buf); uint32_t scsi_cdb_length(uint8_t *buf); int scsi_sense_valid(SCSISense sense); int scsi_build_sense(uint8_t *in_buf, int in_len, uint8_t *buf, int len, bool fixed); Loading Loading
hw/scsi-bus.c +18 −5 Original line number Diff line number Diff line Loading @@ -801,26 +801,39 @@ static int ata_passthrough_16_xfer_size(SCSIDevice *dev, uint8_t *buf) return xfer * unit; } static int scsi_req_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) uint32_t scsi_data_cdb_length(uint8_t *buf) { if ((buf[0] >> 5) == 0 && buf[4] == 0) { return 256; } else { return scsi_cdb_length(buf); } } uint32_t scsi_cdb_length(uint8_t *buf) { switch (buf[0] >> 5) { case 0: cmd->xfer = buf[4]; return buf[4]; break; case 1: case 2: cmd->xfer = lduw_be_p(&buf[7]); return lduw_be_p(&buf[7]); break; case 4: cmd->xfer = ldl_be_p(&buf[10]) & 0xffffffffULL; return ldl_be_p(&buf[10]) & 0xffffffffULL; break; case 5: cmd->xfer = ldl_be_p(&buf[6]) & 0xffffffffULL; return ldl_be_p(&buf[6]) & 0xffffffffULL; break; default: return -1; } } static int scsi_req_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) { cmd->xfer = scsi_cdb_length(buf); switch (buf[0]) { case TEST_UNIT_READY: case REWIND: Loading
hw/scsi.h +2 −0 Original line number Diff line number Diff line Loading @@ -218,6 +218,8 @@ extern const struct SCSISense sense_code_WRITE_PROTECTED; #define SENSE_CODE(x) sense_code_ ## x uint32_t scsi_data_cdb_length(uint8_t *buf); uint32_t scsi_cdb_length(uint8_t *buf); int scsi_sense_valid(SCSISense sense); int scsi_build_sense(uint8_t *in_buf, int in_len, uint8_t *buf, int len, bool fixed); Loading