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:
parent
379ebca018
commit
51b9664203
@ -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_put(struct spdk_scsi_task *task);
|
||||||
void spdk_scsi_task_alloc_data(struct spdk_scsi_task *task, uint32_t alloc_len,
|
void spdk_scsi_task_alloc_data(struct spdk_scsi_task *task, uint32_t alloc_len,
|
||||||
uint8_t **data);
|
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);
|
int ascq);
|
||||||
void spdk_scsi_task_set_check_condition(struct spdk_scsi_task *task, int sk,
|
void spdk_scsi_task_set_check_condition(struct spdk_scsi_task *task, int sk,
|
||||||
int asc, int ascq);
|
int asc, int ascq);
|
||||||
|
@ -1801,10 +1801,10 @@ spdk_bdev_scsi_process_primary(struct spdk_bdev *bdev,
|
|||||||
asc = 0x00;
|
asc = 0x00;
|
||||||
ascq = 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 */
|
/* omit SenseLength */
|
||||||
data_len -= 2;
|
data_len = task->sense_data_len - 2;
|
||||||
memcpy(data, &task->sense_data[2], data_len);
|
memcpy(data, &task->sense_data[2], data_len);
|
||||||
task->data_transferred = (uint64_t)data_len;
|
task->data_transferred = (uint64_t)data_len;
|
||||||
task->status = SPDK_SCSI_STATUS_GOOD;
|
task->status = SPDK_SCSI_STATUS_GOOD;
|
||||||
|
@ -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);
|
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)
|
spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, int ascq)
|
||||||
{
|
{
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
uint8_t *cp;
|
uint8_t *cp;
|
||||||
int resp_code;
|
int resp_code;
|
||||||
int hlen = 0, len, plen;
|
|
||||||
int total;
|
|
||||||
|
|
||||||
data = task->sense_data;
|
data = task->sense_data;
|
||||||
resp_code = 0x70; /* Current + Fixed format */
|
resp_code = 0x70; /* Current + Fixed format */
|
||||||
|
|
||||||
/* SenseLength */
|
/* SenseLength */
|
||||||
memset(data, 0, 2);
|
memset(data, 0, 2);
|
||||||
hlen = 2;
|
|
||||||
|
|
||||||
/* Sense Data */
|
/* Sense Data */
|
||||||
cp = &data[hlen];
|
cp = &data[2];
|
||||||
|
|
||||||
/* VALID(7) RESPONSE CODE(6-0) */
|
/* VALID(7) RESPONSE CODE(6-0) */
|
||||||
cp[0] = 0x80 | resp_code;
|
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;
|
cp[2] = sk & 0xf;
|
||||||
/* INFORMATION */
|
/* INFORMATION */
|
||||||
memset(&cp[3], 0, 4);
|
memset(&cp[3], 0, 4);
|
||||||
|
|
||||||
/* ADDITIONAL SENSE LENGTH */
|
/* ADDITIONAL SENSE LENGTH */
|
||||||
cp[7] = 0;
|
cp[7] = 10;
|
||||||
len = 8;
|
|
||||||
|
|
||||||
/* COMMAND-SPECIFIC INFORMATION */
|
/* COMMAND-SPECIFIC INFORMATION */
|
||||||
memset(&cp[8], 0, 4);
|
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[15] = 0;
|
||||||
cp[16] = 0;
|
cp[16] = 0;
|
||||||
cp[17] = 0;
|
cp[17] = 0;
|
||||||
/* Additional sense bytes */
|
|
||||||
plen = 18 - len;
|
|
||||||
|
|
||||||
/* ADDITIONAL SENSE LENGTH */
|
|
||||||
cp[7] = plen;
|
|
||||||
|
|
||||||
total = hlen + len + plen;
|
|
||||||
|
|
||||||
/* SenseLength */
|
/* SenseLength */
|
||||||
to_be16(data, total - 2);
|
to_be16(data, 18);
|
||||||
task->sense_data_len = total;
|
task->sense_data_len = 20;
|
||||||
|
|
||||||
return total;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -72,24 +72,21 @@ spdk_scsi_task_alloc_data(struct spdk_scsi_task *task, uint32_t alloc_len,
|
|||||||
*data = task->rbuf;
|
*data = task->rbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
void
|
||||||
spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, int ascq)
|
spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, int ascq)
|
||||||
{
|
{
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
uint8_t *cp;
|
uint8_t *cp;
|
||||||
int resp_code;
|
int resp_code;
|
||||||
int hlen = 0, len, plen;
|
|
||||||
int total;
|
|
||||||
|
|
||||||
data = task->sense_data;
|
data = task->sense_data;
|
||||||
resp_code = 0x70; /* Current + Fixed format */
|
resp_code = 0x70; /* Current + Fixed format */
|
||||||
|
|
||||||
/* SenseLength */
|
/* SenseLength */
|
||||||
memset(data, 0, 2);
|
memset(data, 0, 2);
|
||||||
hlen = 2;
|
|
||||||
|
|
||||||
/* Sense Data */
|
/* Sense Data */
|
||||||
cp = &data[hlen];
|
cp = &data[2];
|
||||||
|
|
||||||
/* VALID(7) RESPONSE CODE(6-0) */
|
/* VALID(7) RESPONSE CODE(6-0) */
|
||||||
cp[0] = 0x80 | resp_code;
|
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;
|
cp[2] = sk & 0xf;
|
||||||
/* INFORMATION */
|
/* INFORMATION */
|
||||||
memset(&cp[3], 0, 4);
|
memset(&cp[3], 0, 4);
|
||||||
|
|
||||||
/* ADDITIONAL SENSE LENGTH */
|
/* ADDITIONAL SENSE LENGTH */
|
||||||
cp[7] = 0;
|
cp[7] = 10;
|
||||||
len = 8;
|
|
||||||
|
|
||||||
/* COMMAND-SPECIFIC INFORMATION */
|
/* COMMAND-SPECIFIC INFORMATION */
|
||||||
memset(&cp[8], 0, 4);
|
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[15] = 0;
|
||||||
cp[16] = 0;
|
cp[16] = 0;
|
||||||
cp[17] = 0;
|
cp[17] = 0;
|
||||||
/* Additional sense bytes */
|
|
||||||
plen = 18 - len;
|
|
||||||
|
|
||||||
/* ADDITIONAL SENSE LENGTH */
|
|
||||||
cp[7] = plen;
|
|
||||||
|
|
||||||
total = hlen + len + plen;
|
|
||||||
|
|
||||||
/* SenseLength */
|
/* SenseLength */
|
||||||
to_be16(data, total - 2);
|
to_be16(data, 18);
|
||||||
task->sense_data_len = total;
|
task->sense_data_len = 20;
|
||||||
|
|
||||||
return total;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct spdk_bdev_io *
|
struct spdk_bdev_io *
|
||||||
|
Loading…
Reference in New Issue
Block a user