[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 5/7] scsi: introduce scsi_cdb_length and scsi_data_c
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 5/7] scsi: introduce scsi_cdb_length and scsi_data_cdb_length |
Date: |
Fri, 21 Sep 2012 16:52:47 +0200 |
Signed-off-by: Paolo Bonzini <address@hidden>
---
hw/scsi-bus.c | 23 ++++++++++++++++++-----
hw/scsi.h | 2 ++
2 file modificati, 20 inserzioni(+), 5 rimozioni(-)
diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c
index 4981a02..058d3b2 100644
--- a/hw/scsi-bus.c
+++ b/hw/scsi-bus.c
@@ -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:
diff --git a/hw/scsi.h b/hw/scsi.h
index 1aeee46..b8f7357 100644
--- a/hw/scsi.h
+++ b/hw/scsi.h
@@ -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);
--
1.7.12
- [Qemu-devel] [PULL 0/7] SCSI patches for 2012-09-21, Paolo Bonzini, 2012/09/21
- [Qemu-devel] [PATCH 2/7] iSCSI: We dont need to explicitely call qemu_notify_event() any more, Paolo Bonzini, 2012/09/21
- [Qemu-devel] [PATCH 3/7] scsi-disk: introduce check_lba_range, Paolo Bonzini, 2012/09/21
- [Qemu-devel] [PATCH 4/7] scsi-disk: fix check for out-of-range LBA, Paolo Bonzini, 2012/09/21
- [Qemu-devel] [PATCH 1/7] iSCSI: We need to support SG_IO also from iscsi_ioctl(), Paolo Bonzini, 2012/09/21
- [Qemu-devel] [PATCH 6/7] scsi-disk: use scsi_data_cdb_length, Paolo Bonzini, 2012/09/21
- [Qemu-devel] [PATCH 5/7] scsi: introduce scsi_cdb_length and scsi_data_cdb_length,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 7/7] SCSI: Standard INQUIRY data should report HiSup flag as set., Paolo Bonzini, 2012/09/21
- Re: [Qemu-devel] [PULL 0/7] SCSI patches for 2012-09-21, Anthony Liguori, 2012/09/25