Merge pull request #320 from ddiss/xcopy_type_a0_sds_prep

test/xcopy: minor clean up and refactoring
This commit is contained in:
Bart Van Assche
2020-03-17 17:13:48 -07:00
committed by GitHub
2 changed files with 22 additions and 46 deletions
+19 -43
View File
@@ -2867,6 +2867,7 @@ int extendedcopy(struct scsi_device *sdev, struct iscsi_data *data, int status,
return ret; return ret;
} }
/* return the length for a give descriptor type, including any SD header */
int get_desc_len(enum ec_descr_type_code desc_type) int get_desc_len(enum ec_descr_type_code desc_type)
{ {
int desc_len = 0; int desc_len = 0;
@@ -2874,16 +2875,16 @@ int get_desc_len(enum ec_descr_type_code desc_type)
/* Segment Descriptors */ /* Segment Descriptors */
case BLK_TO_STRM_SEG_DESCR: case BLK_TO_STRM_SEG_DESCR:
case STRM_TO_BLK_SEG_DESCR: case STRM_TO_BLK_SEG_DESCR:
desc_len = 0x18; desc_len = 0x14 + SEG_DESC_SRC_INDEX_OFFSET;
break; break;
case BLK_TO_BLK_SEG_DESCR: case BLK_TO_BLK_SEG_DESCR:
desc_len = 0x1C; desc_len = 0x18 + SEG_DESC_SRC_INDEX_OFFSET;
break; break;
case STRM_TO_STRM_SEG_DESCR: case STRM_TO_STRM_SEG_DESCR:
desc_len = 0x14; desc_len = 0x10 + SEG_DESC_SRC_INDEX_OFFSET;
break; break;
/* Target Descriptors */ /* Target Descriptors */
case IPV6_TGT_DESCR: case IPV6_TGT_DESCR:
case IP_COPY_SVC_TGT_DESCR: case IP_COPY_SVC_TGT_DESCR:
desc_len = 64; desc_len = 64;
@@ -2946,12 +2947,11 @@ void populate_ident_tgt_desc(unsigned char *buf, struct scsi_device *dev)
scsi_free_scsi_task(inq_di_task); scsi_free_scsi_task(inq_di_task);
} }
int populate_tgt_desc(unsigned char *desc, enum ec_descr_type_code desc_type, int luid_type, int nul, int peripheral_type, int rel_init_port_id, int pad, struct scsi_device *dev) int populate_tgt_desc(unsigned char *desc, enum ec_descr_type_code desc_type, int luid_type, int nul, int peripheral_type, uint16_t rel_init_port_id, int pad, struct scsi_device *dev)
{ {
desc[0] = desc_type; desc[0] = desc_type;
desc[1] = (luid_type << 6) | (nul << 5) | peripheral_type; desc[1] = (luid_type << 6) | (nul << 5) | peripheral_type;
desc[2] = (rel_init_port_id >> 8) & 0xFF; scsi_set_uint16(&desc[2], rel_init_port_id);
desc[3] = rel_init_port_id & 0xFF;
if (desc_type == IDENT_DESCR_TGT_DESCR) if (desc_type == IDENT_DESCR_TGT_DESCR)
populate_ident_tgt_desc(desc+4, dev); populate_ident_tgt_desc(desc+4, dev);
@@ -2967,44 +2967,27 @@ int populate_tgt_desc(unsigned char *desc, enum ec_descr_type_code desc_type, in
return get_desc_len(desc_type); return get_desc_len(desc_type);
} }
int populate_seg_desc_hdr(unsigned char *hdr, enum ec_descr_type_code desc_type, int dc, int cat, int src_index, int dst_index) int populate_seg_desc_hdr(unsigned char *hdr, enum ec_descr_type_code desc_type, int dc, int cat, uint16_t src_index, uint16_t dst_index)
{ {
int desc_len = get_desc_len(desc_type); int desc_len = get_desc_len(desc_type);
hdr[0] = desc_type; hdr[0] = desc_type;
hdr[1] = ((dc << 1) | cat) & 0xFF; hdr[1] = ((dc << 1) | cat) & 0xFF;
hdr[2] = (desc_len >> 8) & 0xFF; /* don't account for the first 4 bytes in descriptor header */
hdr[3] = (desc_len - SEG_DESC_SRC_INDEX_OFFSET) & 0xFF; /* don't account for the first 4 bytes in descriptor header*/ scsi_set_uint16(&hdr[2], (desc_len - SEG_DESC_SRC_INDEX_OFFSET));
hdr[4] = (src_index >> 8) & 0xFF; scsi_set_uint16(&hdr[4], src_index);
hdr[5] = src_index & 0xFF; scsi_set_uint16(&hdr[6], dst_index);
hdr[6] = (dst_index >> 8) & 0xFF;
hdr[7] = dst_index & 0xFF;
return desc_len; return desc_len;
} }
int populate_seg_desc_b2b(unsigned char *desc, int dc, int cat, int src_index, int dst_index, int num_blks, uint64_t src_lba, uint64_t dst_lba) int populate_seg_desc_b2b(unsigned char *desc, int dc, int cat, int src_index, int dst_index, uint16_t num_blks, uint64_t src_lba, uint64_t dst_lba)
{ {
int desc_len = populate_seg_desc_hdr(desc, BLK_TO_BLK_SEG_DESCR, dc, cat, src_index, dst_index); int desc_len = populate_seg_desc_hdr(desc, BLK_TO_BLK_SEG_DESCR, dc, cat, src_index, dst_index);
desc[10] = (num_blks >> 8) & 0xFF; scsi_set_uint16(&desc[10], num_blks);
desc[11] = num_blks & 0xFF; scsi_set_uint64(&desc[12], src_lba);
desc[12] = (src_lba >> 56) & 0xFF; scsi_set_uint64(&desc[20], dst_lba);
desc[13] = (src_lba >> 48) & 0xFF;
desc[14] = (src_lba >> 40) & 0xFF;
desc[15] = (src_lba >> 32) & 0xFF;
desc[16] = (src_lba >> 24) & 0xFF;
desc[17] = (src_lba >> 16) & 0xFF;
desc[18] = (src_lba >> 8) & 0xFF;
desc[19] = src_lba & 0xFF;
desc[20] = (dst_lba >> 56) & 0xFF;
desc[21] = (dst_lba >> 48) & 0xFF;
desc[22] = (dst_lba >> 40) & 0xFF;
desc[23] = (dst_lba >> 32) & 0xFF;
desc[24] = (dst_lba >> 24) & 0xFF;
desc[25] = (dst_lba >> 16) & 0xFF;
desc[26] = (dst_lba >> 8) & 0xFF;
desc[27] = dst_lba & 0xFF;
return desc_len; return desc_len;
} }
@@ -3013,16 +2996,9 @@ void populate_param_header(unsigned char *buf, int list_id, int str, int list_id
{ {
buf[0] = list_id; buf[0] = list_id;
buf[1] = ((str & 1) << 5) | ((list_id_usage & 3) << 3) | (prio & 7); buf[1] = ((str & 1) << 5) | ((list_id_usage & 3) << 3) | (prio & 7);
buf[2] = (tgt_desc_len >> 8) & 0xFF; scsi_set_uint16(&buf[2], tgt_desc_len);
buf[3] = tgt_desc_len & 0xFF; scsi_set_uint32(&buf[8], seg_desc_len);
buf[8] = (seg_desc_len >> 24) & 0xFF; scsi_set_uint32(&buf[12], inline_data_len);
buf[9] = (seg_desc_len >> 16) & 0xFF;
buf[10] = (seg_desc_len >> 8) & 0xFF;
buf[11] = seg_desc_len & 0xFF;
buf[12] = (inline_data_len >> 24) & 0xFF;
buf[13] = (inline_data_len >> 16) & 0xFF;
buf[14] = (inline_data_len >> 8) & 0xFF;
buf[15] = inline_data_len & 0xFF;
} }
int receive_copy_results(struct scsi_task **task, struct scsi_device *sdev, int receive_copy_results(struct scsi_task **task, struct scsi_device *sdev,
+3 -3
View File
@@ -914,9 +914,9 @@ int clear_swp(struct scsi_device *sdev);
int extendedcopy(struct scsi_device *sdev, struct iscsi_data *data, int status, enum scsi_sense_key key, int *ascq, int num_ascq); int extendedcopy(struct scsi_device *sdev, struct iscsi_data *data, int status, enum scsi_sense_key key, int *ascq, int num_ascq);
int get_desc_len(enum ec_descr_type_code desc_type); int get_desc_len(enum ec_descr_type_code desc_type);
int populate_tgt_desc(unsigned char *desc, enum ec_descr_type_code desc_type, int luid_type, int nul, int peripheral_type, int rel_init_port_id, int pad, struct scsi_device *dev); int populate_tgt_desc(unsigned char *desc, enum ec_descr_type_code desc_type, int luid_type, int nul, int peripheral_type, uint16_t rel_init_port_id, int pad, struct scsi_device *dev);
int populate_seg_desc_hdr(unsigned char *hdr, enum ec_descr_type_code desc_type, int dc, int cat, int src_index, int dst_index); int populate_seg_desc_hdr(unsigned char *hdr, enum ec_descr_type_code desc_type, int dc, int cat, uint16_t src_index, uint16_t dst_index);
int populate_seg_desc_b2b(unsigned char *desc, int dc, int cat, int src_index, int dst_index, int num_blks, uint64_t src_lba, uint64_t dst_lba); int populate_seg_desc_b2b(unsigned char *desc, int dc, int cat, int src_index, int dst_index, uint16_t num_blks, uint64_t src_lba, uint64_t dst_lba);
void populate_param_header(unsigned char *buf, int list_id, int str, int list_id_usage, int prio, int tgt_desc_len, int seg_desc_len, int inline_data_len); void populate_param_header(unsigned char *buf, int list_id, int str, int list_id_usage, int prio, int tgt_desc_len, int seg_desc_len, int inline_data_len);
int receive_copy_results(struct scsi_task **task, struct scsi_device *sdev, int receive_copy_results(struct scsi_task **task, struct scsi_device *sdev,
enum scsi_copy_results_sa sa, int list_id, enum scsi_copy_results_sa sa, int list_id,