scsi: Make scsi sense data build more clear

Change-Id: I072abaae2d00ab84d7322f3dadd8dd30608b1a1c
Signed-off-by: Ziye Yang <ziye.yang@intel.com>
This commit is contained in:
Ziye Yang 2016-10-09 15:03:43 +08:00 committed by Jim Harris
parent 379ebca018
commit 51b9664203
4 changed files with 16 additions and 40 deletions

View File

@ -255,7 +255,7 @@ void spdk_scsi_task_construct(struct spdk_scsi_task *task, uint32_t *owner_task_
void spdk_scsi_task_put(struct spdk_scsi_task *task);
void spdk_scsi_task_alloc_data(struct spdk_scsi_task *task, uint32_t alloc_len,
uint8_t **data);
int spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc,
void spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc,
int ascq);
void spdk_scsi_task_set_check_condition(struct spdk_scsi_task *task, int sk,
int asc, int ascq);

View File

@ -1801,10 +1801,10 @@ spdk_bdev_scsi_process_primary(struct spdk_bdev *bdev,
asc = 0x00;
ascq = 0x00;
data_len = spdk_scsi_task_build_sense_data(task, sk, asc, ascq);
spdk_scsi_task_build_sense_data(task, sk, asc, ascq);
/* omit SenseLength */
data_len -= 2;
data_len = task->sense_data_len - 2;
memcpy(data, &task->sense_data[2], data_len);
task->data_transferred = (uint64_t)data_len;
task->status = SPDK_SCSI_STATUS_GOOD;

View File

@ -131,24 +131,21 @@ spdk_scsi_task_alloc_data(struct spdk_scsi_task *task, uint32_t alloc_len,
memset(task->rbuf, 0, task->alloc_len);
}
int
void
spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, int ascq)
{
uint8_t *data;
uint8_t *cp;
int resp_code;
int hlen = 0, len, plen;
int total;
data = task->sense_data;
resp_code = 0x70; /* Current + Fixed format */
/* SenseLength */
memset(data, 0, 2);
hlen = 2;
/* Sense Data */
cp = &data[hlen];
cp = &data[2];
/* VALID(7) RESPONSE CODE(6-0) */
cp[0] = 0x80 | resp_code;
@ -158,9 +155,9 @@ spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, in
cp[2] = sk & 0xf;
/* INFORMATION */
memset(&cp[3], 0, 4);
/* ADDITIONAL SENSE LENGTH */
cp[7] = 0;
len = 8;
cp[7] = 10;
/* COMMAND-SPECIFIC INFORMATION */
memset(&cp[8], 0, 4);
@ -175,19 +172,10 @@ spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, in
cp[15] = 0;
cp[16] = 0;
cp[17] = 0;
/* Additional sense bytes */
plen = 18 - len;
/* ADDITIONAL SENSE LENGTH */
cp[7] = plen;
total = hlen + len + plen;
/* SenseLength */
to_be16(data, total - 2);
task->sense_data_len = total;
return total;
to_be16(data, 18);
task->sense_data_len = 20;
}
void

View File

@ -72,24 +72,21 @@ spdk_scsi_task_alloc_data(struct spdk_scsi_task *task, uint32_t alloc_len,
*data = task->rbuf;
}
int
void
spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, int ascq)
{
uint8_t *data;
uint8_t *cp;
int resp_code;
int hlen = 0, len, plen;
int total;
data = task->sense_data;
resp_code = 0x70; /* Current + Fixed format */
/* SenseLength */
memset(data, 0, 2);
hlen = 2;
/* Sense Data */
cp = &data[hlen];
cp = &data[2];
/* VALID(7) RESPONSE CODE(6-0) */
cp[0] = 0x80 | resp_code;
@ -99,9 +96,9 @@ spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, in
cp[2] = sk & 0xf;
/* INFORMATION */
memset(&cp[3], 0, 4);
/* ADDITIONAL SENSE LENGTH */
cp[7] = 0;
len = 8;
cp[7] = 10;
/* COMMAND-SPECIFIC INFORMATION */
memset(&cp[8], 0, 4);
@ -116,19 +113,10 @@ spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, in
cp[15] = 0;
cp[16] = 0;
cp[17] = 0;
/* Additional sense bytes */
plen = 18 - len;
/* ADDITIONAL SENSE LENGTH */
cp[7] = plen;
total = hlen + len + plen;
/* SenseLength */
to_be16(data, total - 2);
task->sense_data_len = total;
return total;
to_be16(data, 18);
task->sense_data_len = 20;
}
struct spdk_bdev_io *