diff options
-rw-r--r-- | drivers/scsi/be2iscsi/be_iscsi.c | 8 | ||||
-rw-r--r-- | drivers/scsi/be2iscsi/be_main.c | 69 | ||||
-rw-r--r-- | drivers/scsi/be2iscsi/be_main.h | 50 | ||||
-rw-r--r-- | drivers/scsi/be2iscsi/be_mgmt.c | 139 | ||||
-rw-r--r-- | drivers/scsi/be2iscsi/be_mgmt.h | 8 |
5 files changed, 212 insertions, 62 deletions
diff --git a/drivers/scsi/be2iscsi/be_iscsi.c b/drivers/scsi/be2iscsi/be_iscsi.c index 3f41fc0b5712..2c458b39669c 100644 --- a/drivers/scsi/be2iscsi/be_iscsi.c +++ b/drivers/scsi/be2iscsi/be_iscsi.c | |||
@@ -936,6 +936,14 @@ static void beiscsi_set_params_for_offld(struct beiscsi_conn *beiscsi_conn, | |||
936 | session->initial_r2t_en); | 936 | session->initial_r2t_en); |
937 | AMAP_SET_BITS(struct amap_beiscsi_offload_params, imd, params, | 937 | AMAP_SET_BITS(struct amap_beiscsi_offload_params, imd, params, |
938 | session->imm_data_en); | 938 | session->imm_data_en); |
939 | AMAP_SET_BITS(struct amap_beiscsi_offload_params, | ||
940 | data_seq_inorder, params, | ||
941 | session->dataseq_inorder_en); | ||
942 | AMAP_SET_BITS(struct amap_beiscsi_offload_params, | ||
943 | pdu_seq_inorder, params, | ||
944 | session->pdu_inorder_en); | ||
945 | AMAP_SET_BITS(struct amap_beiscsi_offload_params, max_r2t, params, | ||
946 | session->max_r2t); | ||
939 | AMAP_SET_BITS(struct amap_beiscsi_offload_params, exp_statsn, params, | 947 | AMAP_SET_BITS(struct amap_beiscsi_offload_params, exp_statsn, params, |
940 | (conn->exp_statsn - 1)); | 948 | (conn->exp_statsn - 1)); |
941 | } | 949 | } |
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c index 6aef05f78449..9e669cec3424 100644 --- a/drivers/scsi/be2iscsi/be_main.c +++ b/drivers/scsi/be2iscsi/be_main.c | |||
@@ -4087,8 +4087,6 @@ beiscsi_offload_connection(struct beiscsi_conn *beiscsi_conn, | |||
4087 | struct beiscsi_offload_params *params) | 4087 | struct beiscsi_offload_params *params) |
4088 | { | 4088 | { |
4089 | struct wrb_handle *pwrb_handle; | 4089 | struct wrb_handle *pwrb_handle; |
4090 | struct iscsi_target_context_update_wrb *pwrb = NULL; | ||
4091 | struct be_mem_descriptor *mem_descr; | ||
4092 | struct beiscsi_hba *phba = beiscsi_conn->phba; | 4090 | struct beiscsi_hba *phba = beiscsi_conn->phba; |
4093 | struct iscsi_task *task = beiscsi_conn->task; | 4091 | struct iscsi_task *task = beiscsi_conn->task; |
4094 | struct iscsi_session *session = task->conn->session; | 4092 | struct iscsi_session *session = task->conn->session; |
@@ -4105,67 +4103,16 @@ beiscsi_offload_connection(struct beiscsi_conn *beiscsi_conn, | |||
4105 | 4103 | ||
4106 | pwrb_handle = alloc_wrb_handle(phba, (beiscsi_conn->beiscsi_conn_cid - | 4104 | pwrb_handle = alloc_wrb_handle(phba, (beiscsi_conn->beiscsi_conn_cid - |
4107 | phba->fw_config.iscsi_cid_start)); | 4105 | phba->fw_config.iscsi_cid_start)); |
4108 | pwrb = (struct iscsi_target_context_update_wrb *)pwrb_handle->pwrb; | ||
4109 | memset(pwrb, 0, sizeof(*pwrb)); | ||
4110 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
4111 | max_burst_length, pwrb, params->dw[offsetof | ||
4112 | (struct amap_beiscsi_offload_params, | ||
4113 | max_burst_length) / 32]); | ||
4114 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
4115 | max_send_data_segment_length, pwrb, | ||
4116 | params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
4117 | max_send_data_segment_length) / 32]); | ||
4118 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
4119 | first_burst_length, | ||
4120 | pwrb, | ||
4121 | params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
4122 | first_burst_length) / 32]); | ||
4123 | |||
4124 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, erl, pwrb, | ||
4125 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
4126 | erl) / 32] & OFFLD_PARAMS_ERL)); | ||
4127 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, dde, pwrb, | ||
4128 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
4129 | dde) / 32] & OFFLD_PARAMS_DDE) >> 2); | ||
4130 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, hde, pwrb, | ||
4131 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
4132 | hde) / 32] & OFFLD_PARAMS_HDE) >> 3); | ||
4133 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, ir2t, pwrb, | ||
4134 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
4135 | ir2t) / 32] & OFFLD_PARAMS_IR2T) >> 4); | ||
4136 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, imd, pwrb, | ||
4137 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
4138 | imd) / 32] & OFFLD_PARAMS_IMD) >> 5); | ||
4139 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, stat_sn, | ||
4140 | pwrb, | ||
4141 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
4142 | exp_statsn) / 32] + 1)); | ||
4143 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, type, pwrb, | ||
4144 | 0x7); | ||
4145 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, wrb_idx, | ||
4146 | pwrb, pwrb_handle->wrb_index); | ||
4147 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, ptr2nextwrb, | ||
4148 | pwrb, pwrb_handle->nxt_wrb_index); | ||
4149 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
4150 | session_state, pwrb, 0); | ||
4151 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, compltonack, | ||
4152 | pwrb, 1); | ||
4153 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, notpredblq, | ||
4154 | pwrb, 0); | ||
4155 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, mode, pwrb, | ||
4156 | 0); | ||
4157 | |||
4158 | mem_descr = phba->init_mem; | ||
4159 | mem_descr += ISCSI_MEM_GLOBAL_HEADER; | ||
4160 | 4106 | ||
4161 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | 4107 | /* Check for the adapter family */ |
4162 | pad_buffer_addr_hi, pwrb, | 4108 | if (chip_skh_r(phba->pcidev)) |
4163 | mem_descr->mem_array[0].bus_address.u.a32.address_hi); | 4109 | beiscsi_offload_cxn_v2(params, pwrb_handle); |
4164 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | 4110 | else |
4165 | pad_buffer_addr_lo, pwrb, | 4111 | beiscsi_offload_cxn_v0(params, pwrb_handle, |
4166 | mem_descr->mem_array[0].bus_address.u.a32.address_lo); | 4112 | phba->init_mem); |
4167 | 4113 | ||
4168 | be_dws_le_to_cpu(pwrb, sizeof(struct iscsi_target_context_update_wrb)); | 4114 | be_dws_le_to_cpu(pwrb_handle->pwrb, |
4115 | sizeof(struct iscsi_target_context_update_wrb)); | ||
4169 | 4116 | ||
4170 | doorbell |= beiscsi_conn->beiscsi_conn_cid & DB_WRB_POST_CID_MASK; | 4117 | doorbell |= beiscsi_conn->beiscsi_conn_cid & DB_WRB_POST_CID_MASK; |
4171 | doorbell |= (pwrb_handle->wrb_index & DB_DEF_PDU_WRB_INDEX_MASK) | 4118 | doorbell |= (pwrb_handle->wrb_index & DB_DEF_PDU_WRB_INDEX_MASK) |
diff --git a/drivers/scsi/be2iscsi/be_main.h b/drivers/scsi/be2iscsi/be_main.h index 8632927da1ef..0e730d1cd1af 100644 --- a/drivers/scsi/be2iscsi/be_main.h +++ b/drivers/scsi/be2iscsi/be_main.h | |||
@@ -469,6 +469,9 @@ struct beiscsi_offload_params { | |||
469 | #define OFFLD_PARAMS_HDE 0x00000008 | 469 | #define OFFLD_PARAMS_HDE 0x00000008 |
470 | #define OFFLD_PARAMS_IR2T 0x00000010 | 470 | #define OFFLD_PARAMS_IR2T 0x00000010 |
471 | #define OFFLD_PARAMS_IMD 0x00000020 | 471 | #define OFFLD_PARAMS_IMD 0x00000020 |
472 | #define OFFLD_PARAMS_DATA_SEQ_INORDER 0x00000040 | ||
473 | #define OFFLD_PARAMS_PDU_SEQ_INORDER 0x00000080 | ||
474 | #define OFFLD_PARAMS_MAX_R2T 0x00FFFF00 | ||
472 | 475 | ||
473 | /** | 476 | /** |
474 | * Pseudo amap definition in which each bit of the actual structure is defined | 477 | * Pseudo amap definition in which each bit of the actual structure is defined |
@@ -483,7 +486,10 @@ struct amap_beiscsi_offload_params { | |||
483 | u8 hde[1]; | 486 | u8 hde[1]; |
484 | u8 ir2t[1]; | 487 | u8 ir2t[1]; |
485 | u8 imd[1]; | 488 | u8 imd[1]; |
486 | u8 pad[26]; | 489 | u8 data_seq_inorder[1]; |
490 | u8 pdu_seq_inorder[1]; | ||
491 | u8 max_r2t[16]; | ||
492 | u8 pad[8]; | ||
487 | u8 exp_statsn[32]; | 493 | u8 exp_statsn[32]; |
488 | }; | 494 | }; |
489 | 495 | ||
@@ -785,6 +791,7 @@ struct iscsi_target_context_update_wrb { | |||
785 | * Pseudo amap definition in which each bit of the actual structure is defined | 791 | * Pseudo amap definition in which each bit of the actual structure is defined |
786 | * as a byte: used to calculate offset/shift/mask of each field | 792 | * as a byte: used to calculate offset/shift/mask of each field |
787 | */ | 793 | */ |
794 | #define BE_TGT_CTX_UPDT_CMD 0x07 | ||
788 | struct amap_iscsi_target_context_update_wrb { | 795 | struct amap_iscsi_target_context_update_wrb { |
789 | u8 lun[14]; /* DWORD 0 */ | 796 | u8 lun[14]; /* DWORD 0 */ |
790 | u8 lt; /* DWORD 0 */ | 797 | u8 lt; /* DWORD 0 */ |
@@ -830,6 +837,47 @@ struct amap_iscsi_target_context_update_wrb { | |||
830 | 837 | ||
831 | } __packed; | 838 | } __packed; |
832 | 839 | ||
840 | #define BEISCSI_MAX_RECV_DATASEG_LEN (64 * 1024) | ||
841 | #define BEISCSI_MAX_CXNS 1 | ||
842 | struct amap_iscsi_target_context_update_wrb_v2 { | ||
843 | u8 max_burst_length[24]; /* DWORD 0 */ | ||
844 | u8 rsvd0[3]; /* DWORD 0 */ | ||
845 | u8 type[5]; /* DWORD 0 */ | ||
846 | u8 ptr2nextwrb[8]; /* DWORD 1 */ | ||
847 | u8 wrb_idx[8]; /* DWORD 1 */ | ||
848 | u8 rsvd1[16]; /* DWORD 1 */ | ||
849 | u8 max_send_data_segment_length[24]; /* DWORD 2 */ | ||
850 | u8 rsvd2[8]; /* DWORD 2 */ | ||
851 | u8 first_burst_length[24]; /* DWORD 3 */ | ||
852 | u8 rsvd3[8]; /* DOWRD 3 */ | ||
853 | u8 max_r2t[16]; /* DWORD 4 */ | ||
854 | u8 rsvd4[10]; /* DWORD 4 */ | ||
855 | u8 hde; /* DWORD 4 */ | ||
856 | u8 dde; /* DWORD 4 */ | ||
857 | u8 erl[2]; /* DWORD 4 */ | ||
858 | u8 imd; /* DWORD 4 */ | ||
859 | u8 ir2t; /* DWORD 4 */ | ||
860 | u8 stat_sn[32]; /* DWORD 5 */ | ||
861 | u8 rsvd5[32]; /* DWORD 6 */ | ||
862 | u8 rsvd6[32]; /* DWORD 7 */ | ||
863 | u8 max_recv_dataseg_len[24]; /* DWORD 8 */ | ||
864 | u8 rsvd7[8]; /* DWORD 8 */ | ||
865 | u8 rsvd8[32]; /* DWORD 9 */ | ||
866 | u8 rsvd9[32]; /* DWORD 10 */ | ||
867 | u8 max_cxns[16]; /* DWORD 11 */ | ||
868 | u8 rsvd10[11]; /* DWORD 11*/ | ||
869 | u8 invld; /* DWORD 11 */ | ||
870 | u8 rsvd11;/* DWORD 11*/ | ||
871 | u8 dmsg; /* DWORD 11 */ | ||
872 | u8 data_seq_inorder; /* DWORD 11 */ | ||
873 | u8 pdu_seq_inorder; /* DWORD 11 */ | ||
874 | u8 rsvd12[32]; /*DWORD 12 */ | ||
875 | u8 rsvd13[32]; /* DWORD 13 */ | ||
876 | u8 rsvd14[32]; /* DWORD 14 */ | ||
877 | u8 rsvd15[32]; /* DWORD 15 */ | ||
878 | } __packed; | ||
879 | |||
880 | |||
833 | struct be_ring { | 881 | struct be_ring { |
834 | u32 pages; /* queue size in pages */ | 882 | u32 pages; /* queue size in pages */ |
835 | u32 id; /* queue id assigned by beklib */ | 883 | u32 id; /* queue id assigned by beklib */ |
diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c index 1ec1db3a1465..b96a159b12c3 100644 --- a/drivers/scsi/be2iscsi/be_mgmt.c +++ b/drivers/scsi/be2iscsi/be_mgmt.c | |||
@@ -1152,3 +1152,142 @@ beiscsi_drvr_ver_disp(struct device *dev, struct device_attribute *attr, | |||
1152 | { | 1152 | { |
1153 | return snprintf(buf, PAGE_SIZE, BE_NAME "\n"); | 1153 | return snprintf(buf, PAGE_SIZE, BE_NAME "\n"); |
1154 | } | 1154 | } |
1155 | |||
1156 | void beiscsi_offload_cxn_v0(struct beiscsi_offload_params *params, | ||
1157 | struct wrb_handle *pwrb_handle, | ||
1158 | struct be_mem_descriptor *mem_descr) | ||
1159 | { | ||
1160 | struct iscsi_wrb *pwrb = pwrb_handle->pwrb; | ||
1161 | |||
1162 | memset(pwrb, 0, sizeof(*pwrb)); | ||
1163 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
1164 | max_send_data_segment_length, pwrb, | ||
1165 | params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1166 | max_send_data_segment_length) / 32]); | ||
1167 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, type, pwrb, | ||
1168 | BE_TGT_CTX_UPDT_CMD); | ||
1169 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
1170 | first_burst_length, | ||
1171 | pwrb, | ||
1172 | params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1173 | first_burst_length) / 32]); | ||
1174 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, erl, pwrb, | ||
1175 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1176 | erl) / 32] & OFFLD_PARAMS_ERL)); | ||
1177 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, dde, pwrb, | ||
1178 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1179 | dde) / 32] & OFFLD_PARAMS_DDE) >> 2); | ||
1180 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, hde, pwrb, | ||
1181 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1182 | hde) / 32] & OFFLD_PARAMS_HDE) >> 3); | ||
1183 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, ir2t, pwrb, | ||
1184 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1185 | ir2t) / 32] & OFFLD_PARAMS_IR2T) >> 4); | ||
1186 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, imd, pwrb, | ||
1187 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1188 | imd) / 32] & OFFLD_PARAMS_IMD) >> 5); | ||
1189 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, stat_sn, | ||
1190 | pwrb, | ||
1191 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1192 | exp_statsn) / 32] + 1)); | ||
1193 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, wrb_idx, | ||
1194 | pwrb, pwrb_handle->wrb_index); | ||
1195 | |||
1196 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
1197 | max_burst_length, pwrb, params->dw[offsetof | ||
1198 | (struct amap_beiscsi_offload_params, | ||
1199 | max_burst_length) / 32]); | ||
1200 | |||
1201 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, ptr2nextwrb, | ||
1202 | pwrb, pwrb_handle->nxt_wrb_index); | ||
1203 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
1204 | session_state, pwrb, 0); | ||
1205 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, compltonack, | ||
1206 | pwrb, 1); | ||
1207 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, notpredblq, | ||
1208 | pwrb, 0); | ||
1209 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, mode, pwrb, | ||
1210 | 0); | ||
1211 | |||
1212 | mem_descr += ISCSI_MEM_GLOBAL_HEADER; | ||
1213 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
1214 | pad_buffer_addr_hi, pwrb, | ||
1215 | mem_descr->mem_array[0].bus_address.u.a32.address_hi); | ||
1216 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
1217 | pad_buffer_addr_lo, pwrb, | ||
1218 | mem_descr->mem_array[0].bus_address.u.a32.address_lo); | ||
1219 | } | ||
1220 | |||
1221 | void beiscsi_offload_cxn_v2(struct beiscsi_offload_params *params, | ||
1222 | struct wrb_handle *pwrb_handle) | ||
1223 | { | ||
1224 | struct iscsi_wrb *pwrb = pwrb_handle->pwrb; | ||
1225 | |||
1226 | memset(pwrb, 0, sizeof(*pwrb)); | ||
1227 | |||
1228 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb, | ||
1229 | max_burst_length, pwrb, params->dw[offsetof | ||
1230 | (struct amap_beiscsi_offload_params, | ||
1231 | max_burst_length) / 32]); | ||
1232 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, | ||
1233 | max_burst_length, pwrb, params->dw[offsetof | ||
1234 | (struct amap_beiscsi_offload_params, | ||
1235 | max_burst_length) / 32]); | ||
1236 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, | ||
1237 | type, pwrb, | ||
1238 | BE_TGT_CTX_UPDT_CMD); | ||
1239 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, | ||
1240 | ptr2nextwrb, | ||
1241 | pwrb, pwrb_handle->nxt_wrb_index); | ||
1242 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, wrb_idx, | ||
1243 | pwrb, pwrb_handle->wrb_index); | ||
1244 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, | ||
1245 | max_send_data_segment_length, pwrb, | ||
1246 | params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1247 | max_send_data_segment_length) / 32]); | ||
1248 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, | ||
1249 | first_burst_length, pwrb, | ||
1250 | params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1251 | first_burst_length) / 32]); | ||
1252 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, | ||
1253 | max_recv_dataseg_len, pwrb, BEISCSI_MAX_RECV_DATASEG_LEN); | ||
1254 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, | ||
1255 | max_cxns, pwrb, BEISCSI_MAX_CXNS); | ||
1256 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, erl, pwrb, | ||
1257 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1258 | erl) / 32] & OFFLD_PARAMS_ERL)); | ||
1259 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, dde, pwrb, | ||
1260 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1261 | dde) / 32] & OFFLD_PARAMS_DDE) >> 2); | ||
1262 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, hde, pwrb, | ||
1263 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1264 | hde) / 32] & OFFLD_PARAMS_HDE) >> 3); | ||
1265 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, | ||
1266 | ir2t, pwrb, | ||
1267 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1268 | ir2t) / 32] & OFFLD_PARAMS_IR2T) >> 4); | ||
1269 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, imd, pwrb, | ||
1270 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1271 | imd) / 32] & OFFLD_PARAMS_IMD) >> 5); | ||
1272 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, | ||
1273 | data_seq_inorder, | ||
1274 | pwrb, | ||
1275 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1276 | data_seq_inorder) / 32] & | ||
1277 | OFFLD_PARAMS_DATA_SEQ_INORDER) >> 6); | ||
1278 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, | ||
1279 | pdu_seq_inorder, | ||
1280 | pwrb, | ||
1281 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1282 | pdu_seq_inorder) / 32] & | ||
1283 | OFFLD_PARAMS_PDU_SEQ_INORDER) >> 7); | ||
1284 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, max_r2t, | ||
1285 | pwrb, | ||
1286 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1287 | max_r2t) / 32] & | ||
1288 | OFFLD_PARAMS_MAX_R2T) >> 8); | ||
1289 | AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, stat_sn, | ||
1290 | pwrb, | ||
1291 | (params->dw[offsetof(struct amap_beiscsi_offload_params, | ||
1292 | exp_statsn) / 32] + 1)); | ||
1293 | } | ||
diff --git a/drivers/scsi/be2iscsi/be_mgmt.h b/drivers/scsi/be2iscsi/be_mgmt.h index 291c68476c14..4ec61274e70c 100644 --- a/drivers/scsi/be2iscsi/be_mgmt.h +++ b/drivers/scsi/be2iscsi/be_mgmt.h | |||
@@ -304,4 +304,12 @@ int mgmt_set_vlan(struct beiscsi_hba *phba, uint16_t vlan_tag); | |||
304 | 304 | ||
305 | ssize_t beiscsi_drvr_ver_disp(struct device *dev, | 305 | ssize_t beiscsi_drvr_ver_disp(struct device *dev, |
306 | struct device_attribute *attr, char *buf); | 306 | struct device_attribute *attr, char *buf); |
307 | |||
308 | void beiscsi_offload_cxn_v0(struct beiscsi_offload_params *params, | ||
309 | struct wrb_handle *pwrb_handle, | ||
310 | struct be_mem_descriptor *mem_descr); | ||
311 | |||
312 | void beiscsi_offload_cxn_v2(struct beiscsi_offload_params *params, | ||
313 | struct wrb_handle *pwrb_handle); | ||
314 | |||
307 | #endif | 315 | #endif |