at v5.2 1572 lines 51 kB view raw
1/* QLogic qed NIC Driver 2 * Copyright (c) 2015-2017 QLogic Corporation 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: 9 * 10 * Redistribution and use in source and binary forms, with or 11 * without modification, are permitted provided that the following 12 * conditions are met: 13 * 14 * - Redistributions of source code must retain the above 15 * copyright notice, this list of conditions and the following 16 * disclaimer. 17 * 18 * - Redistributions in binary form must reproduce the above 19 * copyright notice, this list of conditions and the following 20 * disclaimer in the documentation and /or other materials 21 * provided with the distribution. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 * SOFTWARE. 31 */ 32 33#ifndef __ISCSI_COMMON__ 34#define __ISCSI_COMMON__ 35 36/**********************/ 37/* ISCSI FW CONSTANTS */ 38/**********************/ 39 40/* iSCSI HSI constants */ 41#define ISCSI_DEFAULT_MTU (1500) 42 43/* KWQ (kernel work queue) layer codes */ 44#define ISCSI_SLOW_PATH_LAYER_CODE (6) 45 46/* iSCSI parameter defaults */ 47#define ISCSI_DEFAULT_HEADER_DIGEST (0) 48#define ISCSI_DEFAULT_DATA_DIGEST (0) 49#define ISCSI_DEFAULT_INITIAL_R2T (1) 50#define ISCSI_DEFAULT_IMMEDIATE_DATA (1) 51#define ISCSI_DEFAULT_MAX_PDU_LENGTH (0x2000) 52#define ISCSI_DEFAULT_FIRST_BURST_LENGTH (0x10000) 53#define ISCSI_DEFAULT_MAX_BURST_LENGTH (0x40000) 54#define ISCSI_DEFAULT_MAX_OUTSTANDING_R2T (1) 55 56/* iSCSI parameter limits */ 57#define ISCSI_MIN_VAL_MAX_PDU_LENGTH (0x200) 58#define ISCSI_MAX_VAL_MAX_PDU_LENGTH (0xffffff) 59#define ISCSI_MIN_VAL_BURST_LENGTH (0x200) 60#define ISCSI_MAX_VAL_BURST_LENGTH (0xffffff) 61#define ISCSI_MIN_VAL_MAX_OUTSTANDING_R2T (1) 62#define ISCSI_MAX_VAL_MAX_OUTSTANDING_R2T (0xff) 63 64#define ISCSI_AHS_CNTL_SIZE 4 65 66#define ISCSI_WQE_NUM_SGES_SLOWIO (0xf) 67 68/* iSCSI reserved params */ 69#define ISCSI_ITT_ALL_ONES (0xffffffff) 70#define ISCSI_TTT_ALL_ONES (0xffffffff) 71 72#define ISCSI_OPTION_1_OFF_CHIP_TCP 1 73#define ISCSI_OPTION_2_ON_CHIP_TCP 2 74 75#define ISCSI_INITIATOR_MODE 0 76#define ISCSI_TARGET_MODE 1 77 78/* iSCSI request op codes */ 79#define ISCSI_OPCODE_NOP_OUT (0) 80#define ISCSI_OPCODE_SCSI_CMD (1) 81#define ISCSI_OPCODE_TMF_REQUEST (2) 82#define ISCSI_OPCODE_LOGIN_REQUEST (3) 83#define ISCSI_OPCODE_TEXT_REQUEST (4) 84#define ISCSI_OPCODE_DATA_OUT (5) 85#define ISCSI_OPCODE_LOGOUT_REQUEST (6) 86 87/* iSCSI response/messages op codes */ 88#define ISCSI_OPCODE_NOP_IN (0x20) 89#define ISCSI_OPCODE_SCSI_RESPONSE (0x21) 90#define ISCSI_OPCODE_TMF_RESPONSE (0x22) 91#define ISCSI_OPCODE_LOGIN_RESPONSE (0x23) 92#define ISCSI_OPCODE_TEXT_RESPONSE (0x24) 93#define ISCSI_OPCODE_DATA_IN (0x25) 94#define ISCSI_OPCODE_LOGOUT_RESPONSE (0x26) 95#define ISCSI_OPCODE_R2T (0x31) 96#define ISCSI_OPCODE_ASYNC_MSG (0x32) 97#define ISCSI_OPCODE_REJECT (0x3f) 98 99/* iSCSI stages */ 100#define ISCSI_STAGE_SECURITY_NEGOTIATION (0) 101#define ISCSI_STAGE_LOGIN_OPERATIONAL_NEGOTIATION (1) 102#define ISCSI_STAGE_FULL_FEATURE_PHASE (3) 103 104/* iSCSI CQE errors */ 105#define CQE_ERROR_BITMAP_DATA_DIGEST (0x08) 106#define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN (0x10) 107#define CQE_ERROR_BITMAP_DATA_TRUNCATED (0x20) 108 109/* Union of data bd_opaque/ tq_tid */ 110union bd_opaque_tq_union { 111 __le16 bd_opaque; 112 __le16 tq_tid; 113}; 114 115/* ISCSI SGL entry */ 116struct cqe_error_bitmap { 117 u8 cqe_error_status_bits; 118#define CQE_ERROR_BITMAP_DIF_ERR_BITS_MASK 0x7 119#define CQE_ERROR_BITMAP_DIF_ERR_BITS_SHIFT 0 120#define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_MASK 0x1 121#define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_SHIFT 3 122#define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_MASK 0x1 123#define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_SHIFT 4 124#define CQE_ERROR_BITMAP_DATA_TRUNCATED_ERR_MASK 0x1 125#define CQE_ERROR_BITMAP_DATA_TRUNCATED_ERR_SHIFT 5 126#define CQE_ERROR_BITMAP_UNDER_RUN_ERR_MASK 0x1 127#define CQE_ERROR_BITMAP_UNDER_RUN_ERR_SHIFT 6 128#define CQE_ERROR_BITMAP_RESERVED2_MASK 0x1 129#define CQE_ERROR_BITMAP_RESERVED2_SHIFT 7 130}; 131 132union cqe_error_status { 133 u8 error_status; 134 struct cqe_error_bitmap error_bits; 135}; 136 137/* iSCSI Login Response PDU header */ 138struct data_hdr { 139 __le32 data[12]; 140}; 141 142struct lun_mapper_addr_reserved { 143 struct regpair lun_mapper_addr; 144 u8 reserved0[8]; 145}; 146 147/* rdif conetxt for dif on immediate */ 148struct dif_on_immediate_params { 149 __le32 initial_ref_tag; 150 __le16 application_tag; 151 __le16 application_tag_mask; 152 __le16 flags1; 153#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_GUARD_MASK 0x1 154#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_GUARD_SHIFT 0 155#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_APP_TAG_MASK 0x1 156#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_APP_TAG_SHIFT 1 157#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_REF_TAG_MASK 0x1 158#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_REF_TAG_SHIFT 2 159#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_GUARD_MASK 0x1 160#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_GUARD_SHIFT 3 161#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_MASK 0x1 162#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_SHIFT 4 163#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_MASK 0x1 164#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_SHIFT 5 165#define DIF_ON_IMMEDIATE_PARAMS_INTERVAL_SIZE_MASK 0x1 166#define DIF_ON_IMMEDIATE_PARAMS_INTERVAL_SIZE_SHIFT 6 167#define DIF_ON_IMMEDIATE_PARAMS_NETWORK_INTERFACE_MASK 0x1 168#define DIF_ON_IMMEDIATE_PARAMS_NETWORK_INTERFACE_SHIFT 7 169#define DIF_ON_IMMEDIATE_PARAMS_HOST_INTERFACE_MASK 0x3 170#define DIF_ON_IMMEDIATE_PARAMS_HOST_INTERFACE_SHIFT 8 171#define DIF_ON_IMMEDIATE_PARAMS_REF_TAG_MASK_MASK 0xF 172#define DIF_ON_IMMEDIATE_PARAMS_REF_TAG_MASK_SHIFT 10 173#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_WITH_MASK_MASK 0x1 174#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_WITH_MASK_SHIFT 14 175#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_WITH_MASK_MASK 0x1 176#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_WITH_MASK_SHIFT 15 177 u8 flags0; 178#define DIF_ON_IMMEDIATE_PARAMS_RESERVED_MASK 0x1 179#define DIF_ON_IMMEDIATE_PARAMS_RESERVED_SHIFT 0 180#define DIF_ON_IMMEDIATE_PARAMS_IGNORE_APP_TAG_MASK 0x1 181#define DIF_ON_IMMEDIATE_PARAMS_IGNORE_APP_TAG_SHIFT 1 182#define DIF_ON_IMMEDIATE_PARAMS_INITIAL_REF_TAG_IS_VALID_MASK 0x1 183#define DIF_ON_IMMEDIATE_PARAMS_INITIAL_REF_TAG_IS_VALID_SHIFT 2 184#define DIF_ON_IMMEDIATE_PARAMS_HOST_GUARD_TYPE_MASK 0x1 185#define DIF_ON_IMMEDIATE_PARAMS_HOST_GUARD_TYPE_SHIFT 3 186#define DIF_ON_IMMEDIATE_PARAMS_PROTECTION_TYPE_MASK 0x3 187#define DIF_ON_IMMEDIATE_PARAMS_PROTECTION_TYPE_SHIFT 4 188#define DIF_ON_IMMEDIATE_PARAMS_CRC_SEED_MASK 0x1 189#define DIF_ON_IMMEDIATE_PARAMS_CRC_SEED_SHIFT 6 190#define DIF_ON_IMMEDIATE_PARAMS_KEEP_REF_TAG_CONST_MASK 0x1 191#define DIF_ON_IMMEDIATE_PARAMS_KEEP_REF_TAG_CONST_SHIFT 7 192 u8 reserved_zero[5]; 193}; 194 195/* iSCSI dif on immediate mode attributes union */ 196union dif_configuration_params { 197 struct lun_mapper_addr_reserved lun_mapper_address; 198 struct dif_on_immediate_params def_dif_conf; 199}; 200 201/* Union of data/r2t sequence number */ 202union iscsi_seq_num { 203 __le16 data_sn; 204 __le16 r2t_sn; 205}; 206 207/* iSCSI DIF flags */ 208struct iscsi_dif_flags { 209 u8 flags; 210#define ISCSI_DIF_FLAGS_PROT_INTERVAL_SIZE_LOG_MASK 0xF 211#define ISCSI_DIF_FLAGS_PROT_INTERVAL_SIZE_LOG_SHIFT 0 212#define ISCSI_DIF_FLAGS_DIF_TO_PEER_MASK 0x1 213#define ISCSI_DIF_FLAGS_DIF_TO_PEER_SHIFT 4 214#define ISCSI_DIF_FLAGS_HOST_INTERFACE_MASK 0x7 215#define ISCSI_DIF_FLAGS_HOST_INTERFACE_SHIFT 5 216}; 217 218/* The iscsi storm task context of Ystorm */ 219struct ystorm_iscsi_task_state { 220 struct scsi_cached_sges data_desc; 221 struct scsi_sgl_params sgl_params; 222 __le32 exp_r2t_sn; 223 __le32 buffer_offset; 224 union iscsi_seq_num seq_num; 225 struct iscsi_dif_flags dif_flags; 226 u8 flags; 227#define YSTORM_ISCSI_TASK_STATE_LOCAL_COMP_MASK 0x1 228#define YSTORM_ISCSI_TASK_STATE_LOCAL_COMP_SHIFT 0 229#define YSTORM_ISCSI_TASK_STATE_SLOW_IO_MASK 0x1 230#define YSTORM_ISCSI_TASK_STATE_SLOW_IO_SHIFT 1 231#define YSTORM_ISCSI_TASK_STATE_SET_DIF_OFFSET_MASK 0x1 232#define YSTORM_ISCSI_TASK_STATE_SET_DIF_OFFSET_SHIFT 2 233#define YSTORM_ISCSI_TASK_STATE_RESERVED0_MASK 0x1F 234#define YSTORM_ISCSI_TASK_STATE_RESERVED0_SHIFT 3 235}; 236 237/* The iscsi storm task context of Ystorm */ 238struct ystorm_iscsi_task_rxmit_opt { 239 __le32 fast_rxmit_sge_offset; 240 __le32 scan_start_buffer_offset; 241 __le32 fast_rxmit_buffer_offset; 242 u8 scan_start_sgl_index; 243 u8 fast_rxmit_sgl_index; 244 __le16 reserved; 245}; 246 247/* iSCSI Common PDU header */ 248struct iscsi_common_hdr { 249 u8 hdr_status; 250 u8 hdr_response; 251 u8 hdr_flags; 252 u8 hdr_first_byte; 253#define ISCSI_COMMON_HDR_OPCODE_MASK 0x3F 254#define ISCSI_COMMON_HDR_OPCODE_SHIFT 0 255#define ISCSI_COMMON_HDR_IMM_MASK 0x1 256#define ISCSI_COMMON_HDR_IMM_SHIFT 6 257#define ISCSI_COMMON_HDR_RSRV_MASK 0x1 258#define ISCSI_COMMON_HDR_RSRV_SHIFT 7 259 __le32 hdr_second_dword; 260#define ISCSI_COMMON_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 261#define ISCSI_COMMON_HDR_DATA_SEG_LEN_SHIFT 0 262#define ISCSI_COMMON_HDR_TOTAL_AHS_LEN_MASK 0xFF 263#define ISCSI_COMMON_HDR_TOTAL_AHS_LEN_SHIFT 24 264 struct regpair lun_reserved; 265 __le32 itt; 266 __le32 ttt; 267 __le32 cmdstat_sn; 268 __le32 exp_statcmd_sn; 269 __le32 max_cmd_sn; 270 __le32 data[3]; 271}; 272 273/* iSCSI Command PDU header */ 274struct iscsi_cmd_hdr { 275 __le16 reserved1; 276 u8 flags_attr; 277#define ISCSI_CMD_HDR_ATTR_MASK 0x7 278#define ISCSI_CMD_HDR_ATTR_SHIFT 0 279#define ISCSI_CMD_HDR_RSRV_MASK 0x3 280#define ISCSI_CMD_HDR_RSRV_SHIFT 3 281#define ISCSI_CMD_HDR_WRITE_MASK 0x1 282#define ISCSI_CMD_HDR_WRITE_SHIFT 5 283#define ISCSI_CMD_HDR_READ_MASK 0x1 284#define ISCSI_CMD_HDR_READ_SHIFT 6 285#define ISCSI_CMD_HDR_FINAL_MASK 0x1 286#define ISCSI_CMD_HDR_FINAL_SHIFT 7 287 u8 hdr_first_byte; 288#define ISCSI_CMD_HDR_OPCODE_MASK 0x3F 289#define ISCSI_CMD_HDR_OPCODE_SHIFT 0 290#define ISCSI_CMD_HDR_IMM_MASK 0x1 291#define ISCSI_CMD_HDR_IMM_SHIFT 6 292#define ISCSI_CMD_HDR_RSRV1_MASK 0x1 293#define ISCSI_CMD_HDR_RSRV1_SHIFT 7 294 __le32 hdr_second_dword; 295#define ISCSI_CMD_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 296#define ISCSI_CMD_HDR_DATA_SEG_LEN_SHIFT 0 297#define ISCSI_CMD_HDR_TOTAL_AHS_LEN_MASK 0xFF 298#define ISCSI_CMD_HDR_TOTAL_AHS_LEN_SHIFT 24 299 struct regpair lun; 300 __le32 itt; 301 __le32 expected_transfer_length; 302 __le32 cmd_sn; 303 __le32 exp_stat_sn; 304 __le32 cdb[4]; 305}; 306 307/* iSCSI Command PDU header with Extended CDB (Initiator Mode) */ 308struct iscsi_ext_cdb_cmd_hdr { 309 __le16 reserved1; 310 u8 flags_attr; 311#define ISCSI_EXT_CDB_CMD_HDR_ATTR_MASK 0x7 312#define ISCSI_EXT_CDB_CMD_HDR_ATTR_SHIFT 0 313#define ISCSI_EXT_CDB_CMD_HDR_RSRV_MASK 0x3 314#define ISCSI_EXT_CDB_CMD_HDR_RSRV_SHIFT 3 315#define ISCSI_EXT_CDB_CMD_HDR_WRITE_MASK 0x1 316#define ISCSI_EXT_CDB_CMD_HDR_WRITE_SHIFT 5 317#define ISCSI_EXT_CDB_CMD_HDR_READ_MASK 0x1 318#define ISCSI_EXT_CDB_CMD_HDR_READ_SHIFT 6 319#define ISCSI_EXT_CDB_CMD_HDR_FINAL_MASK 0x1 320#define ISCSI_EXT_CDB_CMD_HDR_FINAL_SHIFT 7 321 u8 opcode; 322 __le32 hdr_second_dword; 323#define ISCSI_EXT_CDB_CMD_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 324#define ISCSI_EXT_CDB_CMD_HDR_DATA_SEG_LEN_SHIFT 0 325#define ISCSI_EXT_CDB_CMD_HDR_CDB_SIZE_MASK 0xFF 326#define ISCSI_EXT_CDB_CMD_HDR_CDB_SIZE_SHIFT 24 327 struct regpair lun; 328 __le32 itt; 329 __le32 expected_transfer_length; 330 __le32 cmd_sn; 331 __le32 exp_stat_sn; 332 struct scsi_sge cdb_sge; 333}; 334 335/* iSCSI login request PDU header */ 336struct iscsi_login_req_hdr { 337 u8 version_min; 338 u8 version_max; 339 u8 flags_attr; 340#define ISCSI_LOGIN_REQ_HDR_NSG_MASK 0x3 341#define ISCSI_LOGIN_REQ_HDR_NSG_SHIFT 0 342#define ISCSI_LOGIN_REQ_HDR_CSG_MASK 0x3 343#define ISCSI_LOGIN_REQ_HDR_CSG_SHIFT 2 344#define ISCSI_LOGIN_REQ_HDR_RSRV_MASK 0x3 345#define ISCSI_LOGIN_REQ_HDR_RSRV_SHIFT 4 346#define ISCSI_LOGIN_REQ_HDR_C_MASK 0x1 347#define ISCSI_LOGIN_REQ_HDR_C_SHIFT 6 348#define ISCSI_LOGIN_REQ_HDR_T_MASK 0x1 349#define ISCSI_LOGIN_REQ_HDR_T_SHIFT 7 350 u8 opcode; 351 __le32 hdr_second_dword; 352#define ISCSI_LOGIN_REQ_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 353#define ISCSI_LOGIN_REQ_HDR_DATA_SEG_LEN_SHIFT 0 354#define ISCSI_LOGIN_REQ_HDR_TOTAL_AHS_LEN_MASK 0xFF 355#define ISCSI_LOGIN_REQ_HDR_TOTAL_AHS_LEN_SHIFT 24 356 __le32 isid_tabc; 357 __le16 tsih; 358 __le16 isid_d; 359 __le32 itt; 360 __le16 reserved1; 361 __le16 cid; 362 __le32 cmd_sn; 363 __le32 exp_stat_sn; 364 __le32 reserved2[4]; 365}; 366 367/* iSCSI logout request PDU header */ 368struct iscsi_logout_req_hdr { 369 __le16 reserved0; 370 u8 reason_code; 371 u8 opcode; 372 __le32 reserved1; 373 __le32 reserved2[2]; 374 __le32 itt; 375 __le16 reserved3; 376 __le16 cid; 377 __le32 cmd_sn; 378 __le32 exp_stat_sn; 379 __le32 reserved4[4]; 380}; 381 382/* iSCSI Data-out PDU header */ 383struct iscsi_data_out_hdr { 384 __le16 reserved1; 385 u8 flags_attr; 386#define ISCSI_DATA_OUT_HDR_RSRV_MASK 0x7F 387#define ISCSI_DATA_OUT_HDR_RSRV_SHIFT 0 388#define ISCSI_DATA_OUT_HDR_FINAL_MASK 0x1 389#define ISCSI_DATA_OUT_HDR_FINAL_SHIFT 7 390 u8 opcode; 391 __le32 reserved2; 392 struct regpair lun; 393 __le32 itt; 394 __le32 ttt; 395 __le32 reserved3; 396 __le32 exp_stat_sn; 397 __le32 reserved4; 398 __le32 data_sn; 399 __le32 buffer_offset; 400 __le32 reserved5; 401}; 402 403/* iSCSI Data-in PDU header */ 404struct iscsi_data_in_hdr { 405 u8 status_rsvd; 406 u8 reserved1; 407 u8 flags; 408#define ISCSI_DATA_IN_HDR_STATUS_MASK 0x1 409#define ISCSI_DATA_IN_HDR_STATUS_SHIFT 0 410#define ISCSI_DATA_IN_HDR_UNDERFLOW_MASK 0x1 411#define ISCSI_DATA_IN_HDR_UNDERFLOW_SHIFT 1 412#define ISCSI_DATA_IN_HDR_OVERFLOW_MASK 0x1 413#define ISCSI_DATA_IN_HDR_OVERFLOW_SHIFT 2 414#define ISCSI_DATA_IN_HDR_RSRV_MASK 0x7 415#define ISCSI_DATA_IN_HDR_RSRV_SHIFT 3 416#define ISCSI_DATA_IN_HDR_ACK_MASK 0x1 417#define ISCSI_DATA_IN_HDR_ACK_SHIFT 6 418#define ISCSI_DATA_IN_HDR_FINAL_MASK 0x1 419#define ISCSI_DATA_IN_HDR_FINAL_SHIFT 7 420 u8 opcode; 421 __le32 reserved2; 422 struct regpair lun; 423 __le32 itt; 424 __le32 ttt; 425 __le32 stat_sn; 426 __le32 exp_cmd_sn; 427 __le32 max_cmd_sn; 428 __le32 data_sn; 429 __le32 buffer_offset; 430 __le32 residual_count; 431}; 432 433/* iSCSI R2T PDU header */ 434struct iscsi_r2t_hdr { 435 u8 reserved0[3]; 436 u8 opcode; 437 __le32 reserved2; 438 struct regpair lun; 439 __le32 itt; 440 __le32 ttt; 441 __le32 stat_sn; 442 __le32 exp_cmd_sn; 443 __le32 max_cmd_sn; 444 __le32 r2t_sn; 445 __le32 buffer_offset; 446 __le32 desired_data_trns_len; 447}; 448 449/* iSCSI NOP-out PDU header */ 450struct iscsi_nop_out_hdr { 451 __le16 reserved1; 452 u8 flags_attr; 453#define ISCSI_NOP_OUT_HDR_RSRV_MASK 0x7F 454#define ISCSI_NOP_OUT_HDR_RSRV_SHIFT 0 455#define ISCSI_NOP_OUT_HDR_CONST1_MASK 0x1 456#define ISCSI_NOP_OUT_HDR_CONST1_SHIFT 7 457 u8 opcode; 458 __le32 reserved2; 459 struct regpair lun; 460 __le32 itt; 461 __le32 ttt; 462 __le32 cmd_sn; 463 __le32 exp_stat_sn; 464 __le32 reserved3; 465 __le32 reserved4; 466 __le32 reserved5; 467 __le32 reserved6; 468}; 469 470/* iSCSI NOP-in PDU header */ 471struct iscsi_nop_in_hdr { 472 __le16 reserved0; 473 u8 flags_attr; 474#define ISCSI_NOP_IN_HDR_RSRV_MASK 0x7F 475#define ISCSI_NOP_IN_HDR_RSRV_SHIFT 0 476#define ISCSI_NOP_IN_HDR_CONST1_MASK 0x1 477#define ISCSI_NOP_IN_HDR_CONST1_SHIFT 7 478 u8 opcode; 479 __le32 hdr_second_dword; 480#define ISCSI_NOP_IN_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 481#define ISCSI_NOP_IN_HDR_DATA_SEG_LEN_SHIFT 0 482#define ISCSI_NOP_IN_HDR_TOTAL_AHS_LEN_MASK 0xFF 483#define ISCSI_NOP_IN_HDR_TOTAL_AHS_LEN_SHIFT 24 484 struct regpair lun; 485 __le32 itt; 486 __le32 ttt; 487 __le32 stat_sn; 488 __le32 exp_cmd_sn; 489 __le32 max_cmd_sn; 490 __le32 reserved5; 491 __le32 reserved6; 492 __le32 reserved7; 493}; 494 495/* iSCSI Login Response PDU header */ 496struct iscsi_login_response_hdr { 497 u8 version_active; 498 u8 version_max; 499 u8 flags_attr; 500#define ISCSI_LOGIN_RESPONSE_HDR_NSG_MASK 0x3 501#define ISCSI_LOGIN_RESPONSE_HDR_NSG_SHIFT 0 502#define ISCSI_LOGIN_RESPONSE_HDR_CSG_MASK 0x3 503#define ISCSI_LOGIN_RESPONSE_HDR_CSG_SHIFT 2 504#define ISCSI_LOGIN_RESPONSE_HDR_RSRV_MASK 0x3 505#define ISCSI_LOGIN_RESPONSE_HDR_RSRV_SHIFT 4 506#define ISCSI_LOGIN_RESPONSE_HDR_C_MASK 0x1 507#define ISCSI_LOGIN_RESPONSE_HDR_C_SHIFT 6 508#define ISCSI_LOGIN_RESPONSE_HDR_T_MASK 0x1 509#define ISCSI_LOGIN_RESPONSE_HDR_T_SHIFT 7 510 u8 opcode; 511 __le32 hdr_second_dword; 512#define ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 513#define ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0 514#define ISCSI_LOGIN_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF 515#define ISCSI_LOGIN_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24 516 __le32 isid_tabc; 517 __le16 tsih; 518 __le16 isid_d; 519 __le32 itt; 520 __le32 reserved1; 521 __le32 stat_sn; 522 __le32 exp_cmd_sn; 523 __le32 max_cmd_sn; 524 __le16 reserved2; 525 u8 status_detail; 526 u8 status_class; 527 __le32 reserved4[2]; 528}; 529 530/* iSCSI Logout Response PDU header */ 531struct iscsi_logout_response_hdr { 532 u8 reserved1; 533 u8 response; 534 u8 flags; 535 u8 opcode; 536 __le32 hdr_second_dword; 537#define ISCSI_LOGOUT_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 538#define ISCSI_LOGOUT_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0 539#define ISCSI_LOGOUT_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF 540#define ISCSI_LOGOUT_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24 541 __le32 reserved2[2]; 542 __le32 itt; 543 __le32 reserved3; 544 __le32 stat_sn; 545 __le32 exp_cmd_sn; 546 __le32 max_cmd_sn; 547 __le32 reserved4; 548 __le16 time_2_retain; 549 __le16 time_2_wait; 550 __le32 reserved5[1]; 551}; 552 553/* iSCSI Text Request PDU header */ 554struct iscsi_text_request_hdr { 555 __le16 reserved0; 556 u8 flags_attr; 557#define ISCSI_TEXT_REQUEST_HDR_RSRV_MASK 0x3F 558#define ISCSI_TEXT_REQUEST_HDR_RSRV_SHIFT 0 559#define ISCSI_TEXT_REQUEST_HDR_C_MASK 0x1 560#define ISCSI_TEXT_REQUEST_HDR_C_SHIFT 6 561#define ISCSI_TEXT_REQUEST_HDR_F_MASK 0x1 562#define ISCSI_TEXT_REQUEST_HDR_F_SHIFT 7 563 u8 opcode; 564 __le32 hdr_second_dword; 565#define ISCSI_TEXT_REQUEST_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 566#define ISCSI_TEXT_REQUEST_HDR_DATA_SEG_LEN_SHIFT 0 567#define ISCSI_TEXT_REQUEST_HDR_TOTAL_AHS_LEN_MASK 0xFF 568#define ISCSI_TEXT_REQUEST_HDR_TOTAL_AHS_LEN_SHIFT 24 569 struct regpair lun; 570 __le32 itt; 571 __le32 ttt; 572 __le32 cmd_sn; 573 __le32 exp_stat_sn; 574 __le32 reserved4[4]; 575}; 576 577/* iSCSI Text Response PDU header */ 578struct iscsi_text_response_hdr { 579 __le16 reserved1; 580 u8 flags; 581#define ISCSI_TEXT_RESPONSE_HDR_RSRV_MASK 0x3F 582#define ISCSI_TEXT_RESPONSE_HDR_RSRV_SHIFT 0 583#define ISCSI_TEXT_RESPONSE_HDR_C_MASK 0x1 584#define ISCSI_TEXT_RESPONSE_HDR_C_SHIFT 6 585#define ISCSI_TEXT_RESPONSE_HDR_F_MASK 0x1 586#define ISCSI_TEXT_RESPONSE_HDR_F_SHIFT 7 587 u8 opcode; 588 __le32 hdr_second_dword; 589#define ISCSI_TEXT_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 590#define ISCSI_TEXT_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0 591#define ISCSI_TEXT_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF 592#define ISCSI_TEXT_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24 593 struct regpair lun; 594 __le32 itt; 595 __le32 ttt; 596 __le32 stat_sn; 597 __le32 exp_cmd_sn; 598 __le32 max_cmd_sn; 599 __le32 reserved4[3]; 600}; 601 602/* iSCSI TMF Request PDU header */ 603struct iscsi_tmf_request_hdr { 604 __le16 reserved0; 605 u8 function; 606 u8 opcode; 607 __le32 hdr_second_dword; 608#define ISCSI_TMF_REQUEST_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 609#define ISCSI_TMF_REQUEST_HDR_DATA_SEG_LEN_SHIFT 0 610#define ISCSI_TMF_REQUEST_HDR_TOTAL_AHS_LEN_MASK 0xFF 611#define ISCSI_TMF_REQUEST_HDR_TOTAL_AHS_LEN_SHIFT 24 612 struct regpair lun; 613 __le32 itt; 614 __le32 rtt; 615 __le32 cmd_sn; 616 __le32 exp_stat_sn; 617 __le32 ref_cmd_sn; 618 __le32 exp_data_sn; 619 __le32 reserved4[2]; 620}; 621 622struct iscsi_tmf_response_hdr { 623 u8 reserved2; 624 u8 hdr_response; 625 u8 hdr_flags; 626 u8 opcode; 627 __le32 hdr_second_dword; 628#define ISCSI_TMF_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 629#define ISCSI_TMF_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0 630#define ISCSI_TMF_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF 631#define ISCSI_TMF_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24 632 struct regpair reserved0; 633 __le32 itt; 634 __le32 reserved1; 635 __le32 stat_sn; 636 __le32 exp_cmd_sn; 637 __le32 max_cmd_sn; 638 __le32 reserved4[3]; 639}; 640 641/* iSCSI Response PDU header */ 642struct iscsi_response_hdr { 643 u8 hdr_status; 644 u8 hdr_response; 645 u8 hdr_flags; 646 u8 opcode; 647 __le32 hdr_second_dword; 648#define ISCSI_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 649#define ISCSI_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0 650#define ISCSI_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF 651#define ISCSI_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24 652 struct regpair lun; 653 __le32 itt; 654 __le32 snack_tag; 655 __le32 stat_sn; 656 __le32 exp_cmd_sn; 657 __le32 max_cmd_sn; 658 __le32 exp_data_sn; 659 __le32 bi_residual_count; 660 __le32 residual_count; 661}; 662 663/* iSCSI Reject PDU header */ 664struct iscsi_reject_hdr { 665 u8 reserved4; 666 u8 hdr_reason; 667 u8 hdr_flags; 668 u8 opcode; 669 __le32 hdr_second_dword; 670#define ISCSI_REJECT_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 671#define ISCSI_REJECT_HDR_DATA_SEG_LEN_SHIFT 0 672#define ISCSI_REJECT_HDR_TOTAL_AHS_LEN_MASK 0xFF 673#define ISCSI_REJECT_HDR_TOTAL_AHS_LEN_SHIFT 24 674 struct regpair reserved0; 675 __le32 all_ones; 676 __le32 reserved2; 677 __le32 stat_sn; 678 __le32 exp_cmd_sn; 679 __le32 max_cmd_sn; 680 __le32 data_sn; 681 __le32 reserved3[2]; 682}; 683 684/* iSCSI Asynchronous Message PDU header */ 685struct iscsi_async_msg_hdr { 686 __le16 reserved0; 687 u8 flags_attr; 688#define ISCSI_ASYNC_MSG_HDR_RSRV_MASK 0x7F 689#define ISCSI_ASYNC_MSG_HDR_RSRV_SHIFT 0 690#define ISCSI_ASYNC_MSG_HDR_CONST1_MASK 0x1 691#define ISCSI_ASYNC_MSG_HDR_CONST1_SHIFT 7 692 u8 opcode; 693 __le32 hdr_second_dword; 694#define ISCSI_ASYNC_MSG_HDR_DATA_SEG_LEN_MASK 0xFFFFFF 695#define ISCSI_ASYNC_MSG_HDR_DATA_SEG_LEN_SHIFT 0 696#define ISCSI_ASYNC_MSG_HDR_TOTAL_AHS_LEN_MASK 0xFF 697#define ISCSI_ASYNC_MSG_HDR_TOTAL_AHS_LEN_SHIFT 24 698 struct regpair lun; 699 __le32 all_ones; 700 __le32 reserved1; 701 __le32 stat_sn; 702 __le32 exp_cmd_sn; 703 __le32 max_cmd_sn; 704 __le16 param1_rsrv; 705 u8 async_vcode; 706 u8 async_event; 707 __le16 param3_rsrv; 708 __le16 param2_rsrv; 709 __le32 reserved7; 710}; 711 712/* PDU header part of Ystorm task context */ 713union iscsi_task_hdr { 714 struct iscsi_common_hdr common; 715 struct data_hdr data; 716 struct iscsi_cmd_hdr cmd; 717 struct iscsi_ext_cdb_cmd_hdr ext_cdb_cmd; 718 struct iscsi_login_req_hdr login_req; 719 struct iscsi_logout_req_hdr logout_req; 720 struct iscsi_data_out_hdr data_out; 721 struct iscsi_data_in_hdr data_in; 722 struct iscsi_r2t_hdr r2t; 723 struct iscsi_nop_out_hdr nop_out; 724 struct iscsi_nop_in_hdr nop_in; 725 struct iscsi_login_response_hdr login_response; 726 struct iscsi_logout_response_hdr logout_response; 727 struct iscsi_text_request_hdr text_request; 728 struct iscsi_text_response_hdr text_response; 729 struct iscsi_tmf_request_hdr tmf_request; 730 struct iscsi_tmf_response_hdr tmf_response; 731 struct iscsi_response_hdr response; 732 struct iscsi_reject_hdr reject; 733 struct iscsi_async_msg_hdr async_msg; 734}; 735 736/* The iscsi storm task context of Ystorm */ 737struct ystorm_iscsi_task_st_ctx { 738 struct ystorm_iscsi_task_state state; 739 struct ystorm_iscsi_task_rxmit_opt rxmit_opt; 740 union iscsi_task_hdr pdu_hdr; 741}; 742 743struct e4_ystorm_iscsi_task_ag_ctx { 744 u8 reserved; 745 u8 byte1; 746 __le16 word0; 747 u8 flags0; 748#define E4_YSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK 0xF 749#define E4_YSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT 0 750#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK 0x1 751#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT 4 752#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1 753#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5 754#define E4_YSTORM_ISCSI_TASK_AG_CTX_VALID_MASK 0x1 755#define E4_YSTORM_ISCSI_TASK_AG_CTX_VALID_SHIFT 6 756#define E4_YSTORM_ISCSI_TASK_AG_CTX_TTT_VALID_MASK 0x1 /* bit3 */ 757#define E4_YSTORM_ISCSI_TASK_AG_CTX_TTT_VALID_SHIFT 7 758 u8 flags1; 759#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0_MASK 0x3 760#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT 0 761#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3 762#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 2 763#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF2SPECIAL_MASK 0x3 764#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF2SPECIAL_SHIFT 4 765#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK 0x1 766#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT 6 767#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1 768#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 7 769 u8 flags2; 770#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK 0x1 771#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT 0 772#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1 773#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 1 774#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1 775#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 2 776#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1 777#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 3 778#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1 779#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 4 780#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1 781#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 5 782#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1 783#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 6 784#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1 785#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 7 786 u8 byte2; 787 __le32 TTT; 788 u8 byte3; 789 u8 byte4; 790 __le16 word1; 791}; 792 793struct e4_mstorm_iscsi_task_ag_ctx { 794 u8 cdu_validation; 795 u8 byte1; 796 __le16 task_cid; 797 u8 flags0; 798#define E4_MSTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF 799#define E4_MSTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0 800#define E4_MSTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1 801#define E4_MSTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4 802#define E4_MSTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_MASK 0x1 803#define E4_MSTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_SHIFT 5 804#define E4_MSTORM_ISCSI_TASK_AG_CTX_VALID_MASK 0x1 805#define E4_MSTORM_ISCSI_TASK_AG_CTX_VALID_SHIFT 6 806#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_FLAG_MASK 0x1 807#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_FLAG_SHIFT 7 808 u8 flags1; 809#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_MASK 0x3 810#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_SHIFT 0 811#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3 812#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 2 813#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2_MASK 0x3 814#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT 4 815#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_EN_MASK 0x1 816#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_EN_SHIFT 6 817#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1 818#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 7 819 u8 flags2; 820#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK 0x1 821#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT 0 822#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1 823#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 1 824#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1 825#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 2 826#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1 827#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 3 828#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1 829#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 4 830#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1 831#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 5 832#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1 833#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 6 834#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1 835#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 7 836 u8 byte2; 837 __le32 reg0; 838 u8 byte3; 839 u8 byte4; 840 __le16 word1; 841}; 842 843struct e4_ustorm_iscsi_task_ag_ctx { 844 u8 reserved; 845 u8 state; 846 __le16 icid; 847 u8 flags0; 848#define E4_USTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF 849#define E4_USTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0 850#define E4_USTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1 851#define E4_USTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4 852#define E4_USTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_MASK 0x1 853#define E4_USTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_SHIFT 5 854#define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_MASK 0x3 855#define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_SHIFT 6 856 u8 flags1; 857#define E4_USTORM_ISCSI_TASK_AG_CTX_RESERVED1_MASK 0x3 858#define E4_USTORM_ISCSI_TASK_AG_CTX_RESERVED1_SHIFT 0 859#define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_MASK 0x3 860#define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_SHIFT 2 861#define E4_USTORM_ISCSI_TASK_AG_CTX_CF3_MASK 0x3 862#define E4_USTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT 4 863#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_MASK 0x3 864#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_SHIFT 6 865 u8 flags2; 866#define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_EN_MASK 0x1 867#define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_EN_SHIFT 0 868#define E4_USTORM_ISCSI_TASK_AG_CTX_DISABLE_DATA_ACKED_MASK 0x1 869#define E4_USTORM_ISCSI_TASK_AG_CTX_DISABLE_DATA_ACKED_SHIFT 1 870#define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_EN_MASK 0x1 871#define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_EN_SHIFT 2 872#define E4_USTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK 0x1 873#define E4_USTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT 3 874#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_EN_MASK 0x1 875#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_EN_SHIFT 4 876#define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_MASK 0x1 877#define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_SHIFT 5 878#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1 879#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 6 880#define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_MASK 0x1 881#define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_SHIFT 7 882 u8 flags3; 883#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1 884#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 0 885#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1 886#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 1 887#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1 888#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 2 889#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1 890#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 3 891#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_TYPE_MASK 0xF 892#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_TYPE_SHIFT 4 893 __le32 dif_err_intervals; 894 __le32 dif_error_1st_interval; 895 __le32 rcv_cont_len; 896 __le32 exp_cont_len; 897 __le32 total_data_acked; 898 __le32 exp_data_acked; 899 u8 byte2; 900 u8 byte3; 901 __le16 word1; 902 __le16 next_tid; 903 __le16 word3; 904 __le32 hdr_residual_count; 905 __le32 exp_r2t_sn; 906}; 907 908/* The iscsi storm task context of Mstorm */ 909struct mstorm_iscsi_task_st_ctx { 910 struct scsi_cached_sges data_desc; 911 struct scsi_sgl_params sgl_params; 912 __le32 rem_task_size; 913 __le32 data_buffer_offset; 914 u8 task_type; 915 struct iscsi_dif_flags dif_flags; 916 __le16 dif_task_icid; 917 struct regpair sense_db; 918 __le32 expected_itt; 919 __le32 reserved1; 920}; 921 922struct iscsi_reg1 { 923 __le32 reg1_map; 924#define ISCSI_REG1_NUM_SGES_MASK 0xF 925#define ISCSI_REG1_NUM_SGES_SHIFT 0 926#define ISCSI_REG1_RESERVED1_MASK 0xFFFFFFF 927#define ISCSI_REG1_RESERVED1_SHIFT 4 928}; 929 930struct tqe_opaque { 931 __le16 opaque[2]; 932}; 933 934/* The iscsi storm task context of Ustorm */ 935struct ustorm_iscsi_task_st_ctx { 936 __le32 rem_rcv_len; 937 __le32 exp_data_transfer_len; 938 __le32 exp_data_sn; 939 struct regpair lun; 940 struct iscsi_reg1 reg1; 941 u8 flags2; 942#define USTORM_ISCSI_TASK_ST_CTX_AHS_EXIST_MASK 0x1 943#define USTORM_ISCSI_TASK_ST_CTX_AHS_EXIST_SHIFT 0 944#define USTORM_ISCSI_TASK_ST_CTX_RESERVED1_MASK 0x7F 945#define USTORM_ISCSI_TASK_ST_CTX_RESERVED1_SHIFT 1 946 struct iscsi_dif_flags dif_flags; 947 __le16 reserved3; 948 struct tqe_opaque tqe_opaque_list; 949 __le32 reserved5; 950 __le32 reserved6; 951 __le32 reserved7; 952 u8 task_type; 953 u8 error_flags; 954#define USTORM_ISCSI_TASK_ST_CTX_DATA_DIGEST_ERROR_MASK 0x1 955#define USTORM_ISCSI_TASK_ST_CTX_DATA_DIGEST_ERROR_SHIFT 0 956#define USTORM_ISCSI_TASK_ST_CTX_DATA_TRUNCATED_ERROR_MASK 0x1 957#define USTORM_ISCSI_TASK_ST_CTX_DATA_TRUNCATED_ERROR_SHIFT 1 958#define USTORM_ISCSI_TASK_ST_CTX_UNDER_RUN_ERROR_MASK 0x1 959#define USTORM_ISCSI_TASK_ST_CTX_UNDER_RUN_ERROR_SHIFT 2 960#define USTORM_ISCSI_TASK_ST_CTX_RESERVED8_MASK 0x1F 961#define USTORM_ISCSI_TASK_ST_CTX_RESERVED8_SHIFT 3 962 u8 flags; 963#define USTORM_ISCSI_TASK_ST_CTX_CQE_WRITE_MASK 0x3 964#define USTORM_ISCSI_TASK_ST_CTX_CQE_WRITE_SHIFT 0 965#define USTORM_ISCSI_TASK_ST_CTX_LOCAL_COMP_MASK 0x1 966#define USTORM_ISCSI_TASK_ST_CTX_LOCAL_COMP_SHIFT 2 967#define USTORM_ISCSI_TASK_ST_CTX_Q0_R2TQE_WRITE_MASK 0x1 968#define USTORM_ISCSI_TASK_ST_CTX_Q0_R2TQE_WRITE_SHIFT 3 969#define USTORM_ISCSI_TASK_ST_CTX_TOTAL_DATA_ACKED_DONE_MASK 0x1 970#define USTORM_ISCSI_TASK_ST_CTX_TOTAL_DATA_ACKED_DONE_SHIFT 4 971#define USTORM_ISCSI_TASK_ST_CTX_HQ_SCANNED_DONE_MASK 0x1 972#define USTORM_ISCSI_TASK_ST_CTX_HQ_SCANNED_DONE_SHIFT 5 973#define USTORM_ISCSI_TASK_ST_CTX_R2T2RECV_DONE_MASK 0x1 974#define USTORM_ISCSI_TASK_ST_CTX_R2T2RECV_DONE_SHIFT 6 975#define USTORM_ISCSI_TASK_ST_CTX_RESERVED0_MASK 0x1 976#define USTORM_ISCSI_TASK_ST_CTX_RESERVED0_SHIFT 7 977 u8 cq_rss_number; 978}; 979 980/* iscsi task context */ 981struct e4_iscsi_task_context { 982 struct ystorm_iscsi_task_st_ctx ystorm_st_context; 983 struct e4_ystorm_iscsi_task_ag_ctx ystorm_ag_context; 984 struct regpair ystorm_ag_padding[2]; 985 struct tdif_task_context tdif_context; 986 struct e4_mstorm_iscsi_task_ag_ctx mstorm_ag_context; 987 struct regpair mstorm_ag_padding[2]; 988 struct e4_ustorm_iscsi_task_ag_ctx ustorm_ag_context; 989 struct mstorm_iscsi_task_st_ctx mstorm_st_context; 990 struct ustorm_iscsi_task_st_ctx ustorm_st_context; 991 struct rdif_task_context rdif_context; 992}; 993 994/* iSCSI connection offload params passed by driver to FW in ISCSI offload 995 * ramrod. 996 */ 997struct iscsi_conn_offload_params { 998 struct regpair sq_pbl_addr; 999 struct regpair r2tq_pbl_addr; 1000 struct regpair xhq_pbl_addr; 1001 struct regpair uhq_pbl_addr; 1002 __le32 initial_ack; 1003 __le16 physical_q0; 1004 __le16 physical_q1; 1005 u8 flags; 1006#define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_MASK 0x1 1007#define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_SHIFT 0 1008#define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_MASK 0x1 1009#define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_SHIFT 1 1010#define ISCSI_CONN_OFFLOAD_PARAMS_RESTRICTED_MODE_MASK 0x1 1011#define ISCSI_CONN_OFFLOAD_PARAMS_RESTRICTED_MODE_SHIFT 2 1012#define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_MASK 0x1F 1013#define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_SHIFT 3 1014 u8 pbl_page_size_log; 1015 u8 pbe_page_size_log; 1016 u8 default_cq; 1017 __le32 stat_sn; 1018}; 1019 1020/* iSCSI connection statistics */ 1021struct iscsi_conn_stats_params { 1022 struct regpair iscsi_tcp_tx_packets_cnt; 1023 struct regpair iscsi_tcp_tx_bytes_cnt; 1024 struct regpair iscsi_tcp_tx_rxmit_cnt; 1025 struct regpair iscsi_tcp_rx_packets_cnt; 1026 struct regpair iscsi_tcp_rx_bytes_cnt; 1027 struct regpair iscsi_tcp_rx_dup_ack_cnt; 1028 __le32 iscsi_tcp_rx_chksum_err_cnt; 1029 __le32 reserved; 1030}; 1031 1032/* spe message header */ 1033struct iscsi_slow_path_hdr { 1034 u8 op_code; 1035 u8 flags; 1036#define ISCSI_SLOW_PATH_HDR_RESERVED0_MASK 0xF 1037#define ISCSI_SLOW_PATH_HDR_RESERVED0_SHIFT 0 1038#define ISCSI_SLOW_PATH_HDR_LAYER_CODE_MASK 0x7 1039#define ISCSI_SLOW_PATH_HDR_LAYER_CODE_SHIFT 4 1040#define ISCSI_SLOW_PATH_HDR_RESERVED1_MASK 0x1 1041#define ISCSI_SLOW_PATH_HDR_RESERVED1_SHIFT 7 1042}; 1043 1044/* iSCSI connection update params passed by driver to FW in ISCSI update 1045 *ramrod. 1046 */ 1047struct iscsi_conn_update_ramrod_params { 1048 struct iscsi_slow_path_hdr hdr; 1049 __le16 conn_id; 1050 __le32 fw_cid; 1051 u8 flags; 1052#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_MASK 0x1 1053#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_SHIFT 0 1054#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_MASK 0x1 1055#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_SHIFT 1 1056#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_MASK 0x1 1057#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_SHIFT 2 1058#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_MASK 0x1 1059#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_SHIFT 3 1060#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_BLOCK_SIZE_MASK 0x1 1061#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_BLOCK_SIZE_SHIFT 4 1062#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_HOST_EN_MASK 0x1 1063#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_HOST_EN_SHIFT 5 1064#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_IMM_EN_MASK 0x1 1065#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_IMM_EN_SHIFT 6 1066#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_LUN_MAPPER_EN_MASK 0x1 1067#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_LUN_MAPPER_EN_SHIFT 7 1068 u8 reserved0[3]; 1069 __le32 max_seq_size; 1070 __le32 max_send_pdu_length; 1071 __le32 max_recv_pdu_length; 1072 __le32 first_seq_length; 1073 __le32 exp_stat_sn; 1074 union dif_configuration_params dif_on_imme_params; 1075}; 1076 1077/* iSCSI CQ element */ 1078struct iscsi_cqe_common { 1079 __le16 conn_id; 1080 u8 cqe_type; 1081 union cqe_error_status error_bitmap; 1082 __le32 reserved[3]; 1083 union iscsi_task_hdr iscsi_hdr; 1084}; 1085 1086/* iSCSI CQ element */ 1087struct iscsi_cqe_solicited { 1088 __le16 conn_id; 1089 u8 cqe_type; 1090 union cqe_error_status error_bitmap; 1091 __le16 itid; 1092 u8 task_type; 1093 u8 fw_dbg_field; 1094 u8 caused_conn_err; 1095 u8 reserved0[3]; 1096 __le32 data_truncated_bytes; 1097 union iscsi_task_hdr iscsi_hdr; 1098}; 1099 1100/* iSCSI CQ element */ 1101struct iscsi_cqe_unsolicited { 1102 __le16 conn_id; 1103 u8 cqe_type; 1104 union cqe_error_status error_bitmap; 1105 __le16 reserved0; 1106 u8 reserved1; 1107 u8 unsol_cqe_type; 1108 __le16 rqe_opaque; 1109 __le16 reserved2[3]; 1110 union iscsi_task_hdr iscsi_hdr; 1111}; 1112 1113/* iSCSI CQ element */ 1114union iscsi_cqe { 1115 struct iscsi_cqe_common cqe_common; 1116 struct iscsi_cqe_solicited cqe_solicited; 1117 struct iscsi_cqe_unsolicited cqe_unsolicited; 1118}; 1119 1120/* iSCSI CQE type */ 1121enum iscsi_cqes_type { 1122 ISCSI_CQE_TYPE_SOLICITED = 1, 1123 ISCSI_CQE_TYPE_UNSOLICITED, 1124 ISCSI_CQE_TYPE_SOLICITED_WITH_SENSE, 1125 ISCSI_CQE_TYPE_TASK_CLEANUP, 1126 ISCSI_CQE_TYPE_DUMMY, 1127 MAX_ISCSI_CQES_TYPE 1128}; 1129 1130/* iSCSI CQE type */ 1131enum iscsi_cqe_unsolicited_type { 1132 ISCSI_CQE_UNSOLICITED_NONE, 1133 ISCSI_CQE_UNSOLICITED_SINGLE, 1134 ISCSI_CQE_UNSOLICITED_FIRST, 1135 ISCSI_CQE_UNSOLICITED_MIDDLE, 1136 ISCSI_CQE_UNSOLICITED_LAST, 1137 MAX_ISCSI_CQE_UNSOLICITED_TYPE 1138}; 1139 1140/* iscsi debug modes */ 1141struct iscsi_debug_modes { 1142 u8 flags; 1143#define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_MASK 0x1 1144#define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_SHIFT 0 1145#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_MASK 0x1 1146#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_SHIFT 1 1147#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_MASK 0x1 1148#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_SHIFT 2 1149#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_MASK 0x1 1150#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_SHIFT 3 1151#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_MASK 0x1 1152#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_SHIFT 4 1153#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_MASK 0x1 1154#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_SHIFT 5 1155#define ISCSI_DEBUG_MODES_ASSERT_IF_DIF_OR_DATA_DIGEST_ERROR_MASK 0x1 1156#define ISCSI_DEBUG_MODES_ASSERT_IF_DIF_OR_DATA_DIGEST_ERROR_SHIFT 6 1157#define ISCSI_DEBUG_MODES_ASSERT_IF_HQ_CORRUPT_MASK 0x1 1158#define ISCSI_DEBUG_MODES_ASSERT_IF_HQ_CORRUPT_SHIFT 7 1159}; 1160 1161/* iSCSI kernel completion queue IDs */ 1162enum iscsi_eqe_opcode { 1163 ISCSI_EVENT_TYPE_INIT_FUNC = 0, 1164 ISCSI_EVENT_TYPE_DESTROY_FUNC, 1165 ISCSI_EVENT_TYPE_OFFLOAD_CONN, 1166 ISCSI_EVENT_TYPE_UPDATE_CONN, 1167 ISCSI_EVENT_TYPE_CLEAR_SQ, 1168 ISCSI_EVENT_TYPE_TERMINATE_CONN, 1169 ISCSI_EVENT_TYPE_MAC_UPDATE_CONN, 1170 ISCSI_EVENT_TYPE_COLLECT_STATS_CONN, 1171 ISCSI_EVENT_TYPE_ASYN_CONNECT_COMPLETE, 1172 ISCSI_EVENT_TYPE_ASYN_TERMINATE_DONE, 1173 ISCSI_EVENT_TYPE_START_OF_ERROR_TYPES = 10, 1174 ISCSI_EVENT_TYPE_ASYN_ABORT_RCVD, 1175 ISCSI_EVENT_TYPE_ASYN_CLOSE_RCVD, 1176 ISCSI_EVENT_TYPE_ASYN_SYN_RCVD, 1177 ISCSI_EVENT_TYPE_ASYN_MAX_RT_TIME, 1178 ISCSI_EVENT_TYPE_ASYN_MAX_RT_CNT, 1179 ISCSI_EVENT_TYPE_ASYN_MAX_KA_PROBES_CNT, 1180 ISCSI_EVENT_TYPE_ASYN_FIN_WAIT2, 1181 ISCSI_EVENT_TYPE_ISCSI_CONN_ERROR, 1182 ISCSI_EVENT_TYPE_TCP_CONN_ERROR, 1183 MAX_ISCSI_EQE_OPCODE 1184}; 1185 1186/* iSCSI EQE and CQE completion status */ 1187enum iscsi_error_types { 1188 ISCSI_STATUS_NONE = 0, 1189 ISCSI_CQE_ERROR_UNSOLICITED_RCV_ON_INVALID_CONN = 1, 1190 ISCSI_CONN_ERROR_TASK_CID_MISMATCH, 1191 ISCSI_CONN_ERROR_TASK_NOT_VALID, 1192 ISCSI_CONN_ERROR_RQ_RING_IS_FULL, 1193 ISCSI_CONN_ERROR_CMDQ_RING_IS_FULL, 1194 ISCSI_CONN_ERROR_HQE_CACHING_FAILED, 1195 ISCSI_CONN_ERROR_HEADER_DIGEST_ERROR, 1196 ISCSI_CONN_ERROR_LOCAL_COMPLETION_ERROR, 1197 ISCSI_CONN_ERROR_DATA_OVERRUN, 1198 ISCSI_CONN_ERROR_OUT_OF_SGES_ERROR, 1199 ISCSI_CONN_ERROR_IP_OPTIONS_ERROR, 1200 ISCSI_CONN_ERROR_PRS_ERRORS, 1201 ISCSI_CONN_ERROR_CONNECT_INVALID_TCP_OPTION, 1202 ISCSI_CONN_ERROR_TCP_IP_FRAGMENT_ERROR, 1203 ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_LEN, 1204 ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_TYPE, 1205 ISCSI_CONN_ERROR_PROTOCOL_ERR_ITT_OUT_OF_RANGE, 1206 ISCSI_CONN_ERROR_PROTOCOL_ERR_TTT_OUT_OF_RANGE, 1207 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_EXCEEDS_PDU_SIZE, 1208 ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE, 1209 ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE_BEFORE_UPDATE, 1210 ISCSI_CONN_ERROR_UNVALID_NOPIN_DSL, 1211 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_CARRIES_NO_DATA, 1212 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SN, 1213 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_IN_TTT, 1214 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_OUT_ITT, 1215 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_TTT, 1216 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_BUFFER_OFFSET, 1217 ISCSI_CONN_ERROR_PROTOCOL_ERR_BUFFER_OFFSET_OOO, 1218 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_SN, 1219 ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_0, 1220 ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_1, 1221 ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_2, 1222 ISCSI_CONN_ERROR_PROTOCOL_ERR_LUN, 1223 ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO, 1224 ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO_S_BIT_ONE, 1225 ISCSI_CONN_ERROR_PROTOCOL_ERR_EXP_STAT_SN, 1226 ISCSI_CONN_ERROR_PROTOCOL_ERR_DSL_NOT_ZERO, 1227 ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_DSL, 1228 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_TOO_BIG, 1229 ISCSI_CONN_ERROR_PROTOCOL_ERR_OUTSTANDING_R2T_COUNT, 1230 ISCSI_CONN_ERROR_PROTOCOL_ERR_DIF_TX, 1231 ISCSI_CONN_ERROR_SENSE_DATA_LENGTH, 1232 ISCSI_CONN_ERROR_DATA_PLACEMENT_ERROR, 1233 ISCSI_CONN_ERROR_INVALID_ITT, 1234 ISCSI_ERROR_UNKNOWN, 1235 MAX_ISCSI_ERROR_TYPES 1236}; 1237 1238/* iSCSI Ramrod Command IDs */ 1239enum iscsi_ramrod_cmd_id { 1240 ISCSI_RAMROD_CMD_ID_UNUSED = 0, 1241 ISCSI_RAMROD_CMD_ID_INIT_FUNC = 1, 1242 ISCSI_RAMROD_CMD_ID_DESTROY_FUNC = 2, 1243 ISCSI_RAMROD_CMD_ID_OFFLOAD_CONN = 3, 1244 ISCSI_RAMROD_CMD_ID_UPDATE_CONN = 4, 1245 ISCSI_RAMROD_CMD_ID_TERMINATION_CONN = 5, 1246 ISCSI_RAMROD_CMD_ID_CLEAR_SQ = 6, 1247 ISCSI_RAMROD_CMD_ID_MAC_UPDATE = 7, 1248 ISCSI_RAMROD_CMD_ID_CONN_STATS = 8, 1249 MAX_ISCSI_RAMROD_CMD_ID 1250}; 1251 1252/* iSCSI connection termination request */ 1253struct iscsi_spe_conn_mac_update { 1254 struct iscsi_slow_path_hdr hdr; 1255 __le16 conn_id; 1256 __le32 fw_cid; 1257 __le16 remote_mac_addr_lo; 1258 __le16 remote_mac_addr_mid; 1259 __le16 remote_mac_addr_hi; 1260 u8 reserved0[2]; 1261}; 1262 1263/* iSCSI and TCP connection (Option 1) offload params passed by driver to FW in 1264 * iSCSI offload ramrod. 1265 */ 1266struct iscsi_spe_conn_offload { 1267 struct iscsi_slow_path_hdr hdr; 1268 __le16 conn_id; 1269 __le32 fw_cid; 1270 struct iscsi_conn_offload_params iscsi; 1271 struct tcp_offload_params tcp; 1272}; 1273 1274/* iSCSI and TCP connection(Option 2) offload params passed by driver to FW in 1275 * iSCSI offload ramrod. 1276 */ 1277struct iscsi_spe_conn_offload_option2 { 1278 struct iscsi_slow_path_hdr hdr; 1279 __le16 conn_id; 1280 __le32 fw_cid; 1281 struct iscsi_conn_offload_params iscsi; 1282 struct tcp_offload_params_opt2 tcp; 1283}; 1284 1285/* iSCSI collect connection statistics request */ 1286struct iscsi_spe_conn_statistics { 1287 struct iscsi_slow_path_hdr hdr; 1288 __le16 conn_id; 1289 __le32 fw_cid; 1290 u8 reset_stats; 1291 u8 reserved0[7]; 1292 struct regpair stats_cnts_addr; 1293}; 1294 1295/* iSCSI connection termination request */ 1296struct iscsi_spe_conn_termination { 1297 struct iscsi_slow_path_hdr hdr; 1298 __le16 conn_id; 1299 __le32 fw_cid; 1300 u8 abortive; 1301 u8 reserved0[7]; 1302 struct regpair queue_cnts_addr; 1303 struct regpair query_params_addr; 1304}; 1305 1306/* iSCSI firmware function destroy parameters */ 1307struct iscsi_spe_func_dstry { 1308 struct iscsi_slow_path_hdr hdr; 1309 __le16 reserved0; 1310 __le32 reserved1; 1311}; 1312 1313/* iSCSI firmware function init parameters */ 1314struct iscsi_spe_func_init { 1315 struct iscsi_slow_path_hdr hdr; 1316 __le16 half_way_close_timeout; 1317 u8 num_sq_pages_in_ring; 1318 u8 num_r2tq_pages_in_ring; 1319 u8 num_uhq_pages_in_ring; 1320 u8 ll2_rx_queue_id; 1321 u8 flags; 1322#define ISCSI_SPE_FUNC_INIT_COUNTERS_EN_MASK 0x1 1323#define ISCSI_SPE_FUNC_INIT_COUNTERS_EN_SHIFT 0 1324#define ISCSI_SPE_FUNC_INIT_RESERVED0_MASK 0x7F 1325#define ISCSI_SPE_FUNC_INIT_RESERVED0_SHIFT 1 1326 struct iscsi_debug_modes debug_mode; 1327 __le16 reserved1; 1328 __le32 reserved2; 1329 struct scsi_init_func_params func_params; 1330 struct scsi_init_func_queues q_params; 1331}; 1332 1333/* iSCSI task type */ 1334enum iscsi_task_type { 1335 ISCSI_TASK_TYPE_INITIATOR_WRITE, 1336 ISCSI_TASK_TYPE_INITIATOR_READ, 1337 ISCSI_TASK_TYPE_MIDPATH, 1338 ISCSI_TASK_TYPE_UNSOLIC, 1339 ISCSI_TASK_TYPE_EXCHCLEANUP, 1340 ISCSI_TASK_TYPE_IRRELEVANT, 1341 ISCSI_TASK_TYPE_TARGET_WRITE, 1342 ISCSI_TASK_TYPE_TARGET_READ, 1343 ISCSI_TASK_TYPE_TARGET_RESPONSE, 1344 ISCSI_TASK_TYPE_LOGIN_RESPONSE, 1345 ISCSI_TASK_TYPE_TARGET_IMM_W_DIF, 1346 MAX_ISCSI_TASK_TYPE 1347}; 1348 1349/* iSCSI DesiredDataTransferLength/ttt union */ 1350union iscsi_ttt_txlen_union { 1351 __le32 desired_tx_len; 1352 __le32 ttt; 1353}; 1354 1355/* iSCSI uHQ element */ 1356struct iscsi_uhqe { 1357 __le32 reg1; 1358#define ISCSI_UHQE_PDU_PAYLOAD_LEN_MASK 0xFFFFF 1359#define ISCSI_UHQE_PDU_PAYLOAD_LEN_SHIFT 0 1360#define ISCSI_UHQE_LOCAL_COMP_MASK 0x1 1361#define ISCSI_UHQE_LOCAL_COMP_SHIFT 20 1362#define ISCSI_UHQE_TOGGLE_BIT_MASK 0x1 1363#define ISCSI_UHQE_TOGGLE_BIT_SHIFT 21 1364#define ISCSI_UHQE_PURE_PAYLOAD_MASK 0x1 1365#define ISCSI_UHQE_PURE_PAYLOAD_SHIFT 22 1366#define ISCSI_UHQE_LOGIN_RESPONSE_PDU_MASK 0x1 1367#define ISCSI_UHQE_LOGIN_RESPONSE_PDU_SHIFT 23 1368#define ISCSI_UHQE_TASK_ID_HI_MASK 0xFF 1369#define ISCSI_UHQE_TASK_ID_HI_SHIFT 24 1370 __le32 reg2; 1371#define ISCSI_UHQE_BUFFER_OFFSET_MASK 0xFFFFFF 1372#define ISCSI_UHQE_BUFFER_OFFSET_SHIFT 0 1373#define ISCSI_UHQE_TASK_ID_LO_MASK 0xFF 1374#define ISCSI_UHQE_TASK_ID_LO_SHIFT 24 1375}; 1376 1377/* iSCSI WQ element */ 1378struct iscsi_wqe { 1379 __le16 task_id; 1380 u8 flags; 1381#define ISCSI_WQE_WQE_TYPE_MASK 0x7 1382#define ISCSI_WQE_WQE_TYPE_SHIFT 0 1383#define ISCSI_WQE_NUM_SGES_MASK 0xF 1384#define ISCSI_WQE_NUM_SGES_SHIFT 3 1385#define ISCSI_WQE_RESPONSE_MASK 0x1 1386#define ISCSI_WQE_RESPONSE_SHIFT 7 1387 struct iscsi_dif_flags prot_flags; 1388 __le32 contlen_cdbsize; 1389#define ISCSI_WQE_CONT_LEN_MASK 0xFFFFFF 1390#define ISCSI_WQE_CONT_LEN_SHIFT 0 1391#define ISCSI_WQE_CDB_SIZE_MASK 0xFF 1392#define ISCSI_WQE_CDB_SIZE_SHIFT 24 1393}; 1394 1395/* iSCSI wqe type */ 1396enum iscsi_wqe_type { 1397 ISCSI_WQE_TYPE_NORMAL, 1398 ISCSI_WQE_TYPE_TASK_CLEANUP, 1399 ISCSI_WQE_TYPE_MIDDLE_PATH, 1400 ISCSI_WQE_TYPE_LOGIN, 1401 ISCSI_WQE_TYPE_FIRST_R2T_CONT, 1402 ISCSI_WQE_TYPE_NONFIRST_R2T_CONT, 1403 ISCSI_WQE_TYPE_RESPONSE, 1404 MAX_ISCSI_WQE_TYPE 1405}; 1406 1407/* iSCSI xHQ element */ 1408struct iscsi_xhqe { 1409 union iscsi_ttt_txlen_union ttt_or_txlen; 1410 __le32 exp_stat_sn; 1411 struct iscsi_dif_flags prot_flags; 1412 u8 total_ahs_length; 1413 u8 opcode; 1414 u8 flags; 1415#define ISCSI_XHQE_FINAL_MASK 0x1 1416#define ISCSI_XHQE_FINAL_SHIFT 0 1417#define ISCSI_XHQE_STATUS_BIT_MASK 0x1 1418#define ISCSI_XHQE_STATUS_BIT_SHIFT 1 1419#define ISCSI_XHQE_NUM_SGES_MASK 0xF 1420#define ISCSI_XHQE_NUM_SGES_SHIFT 2 1421#define ISCSI_XHQE_RESERVED0_MASK 0x3 1422#define ISCSI_XHQE_RESERVED0_SHIFT 6 1423 union iscsi_seq_num seq_num; 1424 __le16 reserved1; 1425}; 1426 1427/* Per PF iSCSI receive path statistics - mStorm RAM structure */ 1428struct mstorm_iscsi_stats_drv { 1429 struct regpair iscsi_rx_dropped_pdus_task_not_valid; 1430 struct regpair iscsi_rx_dup_ack_cnt; 1431}; 1432 1433/* Per PF iSCSI transmit path statistics - pStorm RAM structure */ 1434struct pstorm_iscsi_stats_drv { 1435 struct regpair iscsi_tx_bytes_cnt; 1436 struct regpair iscsi_tx_packet_cnt; 1437}; 1438 1439/* Per PF iSCSI receive path statistics - tStorm RAM structure */ 1440struct tstorm_iscsi_stats_drv { 1441 struct regpair iscsi_rx_bytes_cnt; 1442 struct regpair iscsi_rx_packet_cnt; 1443 struct regpair iscsi_rx_new_ooo_isle_events_cnt; 1444 struct regpair iscsi_rx_tcp_payload_bytes_cnt; 1445 struct regpair iscsi_rx_tcp_pkt_cnt; 1446 struct regpair iscsi_rx_pure_ack_cnt; 1447 __le32 iscsi_cmdq_threshold_cnt; 1448 __le32 iscsi_rq_threshold_cnt; 1449 __le32 iscsi_immq_threshold_cnt; 1450}; 1451 1452/* Per PF iSCSI receive path statistics - uStorm RAM structure */ 1453struct ustorm_iscsi_stats_drv { 1454 struct regpair iscsi_rx_data_pdu_cnt; 1455 struct regpair iscsi_rx_r2t_pdu_cnt; 1456 struct regpair iscsi_rx_total_pdu_cnt; 1457}; 1458 1459/* Per PF iSCSI transmit path statistics - xStorm RAM structure */ 1460struct xstorm_iscsi_stats_drv { 1461 struct regpair iscsi_tx_go_to_slow_start_event_cnt; 1462 struct regpair iscsi_tx_fast_retransmit_event_cnt; 1463 struct regpair iscsi_tx_pure_ack_cnt; 1464 struct regpair iscsi_tx_delayed_ack_cnt; 1465}; 1466 1467/* Per PF iSCSI transmit path statistics - yStorm RAM structure */ 1468struct ystorm_iscsi_stats_drv { 1469 struct regpair iscsi_tx_data_pdu_cnt; 1470 struct regpair iscsi_tx_r2t_pdu_cnt; 1471 struct regpair iscsi_tx_total_pdu_cnt; 1472 struct regpair iscsi_tx_tcp_payload_bytes_cnt; 1473 struct regpair iscsi_tx_tcp_pkt_cnt; 1474}; 1475 1476struct e4_tstorm_iscsi_task_ag_ctx { 1477 u8 byte0; 1478 u8 byte1; 1479 __le16 word0; 1480 u8 flags0; 1481#define E4_TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK 0xF 1482#define E4_TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT 0 1483#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK 0x1 1484#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT 4 1485#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1 1486#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5 1487#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT2_MASK 0x1 1488#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT2_SHIFT 6 1489#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT3_MASK 0x1 1490#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT3_SHIFT 7 1491 u8 flags1; 1492#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK 0x1 1493#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT 0 1494#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT5_MASK 0x1 1495#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT5_SHIFT 1 1496#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0_MASK 0x3 1497#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT 2 1498#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3 1499#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 4 1500#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2_MASK 0x3 1501#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT 6 1502 u8 flags2; 1503#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3_MASK 0x3 1504#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT 0 1505#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4_MASK 0x3 1506#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4_SHIFT 2 1507#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5_MASK 0x3 1508#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5_SHIFT 4 1509#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6_MASK 0x3 1510#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6_SHIFT 6 1511 u8 flags3; 1512#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7_MASK 0x3 1513#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7_SHIFT 0 1514#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK 0x1 1515#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT 2 1516#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1 1517#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 3 1518#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK 0x1 1519#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT 4 1520#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK 0x1 1521#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT 5 1522#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4EN_MASK 0x1 1523#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4EN_SHIFT 6 1524#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5EN_MASK 0x1 1525#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5EN_SHIFT 7 1526 u8 flags4; 1527#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6EN_MASK 0x1 1528#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6EN_SHIFT 0 1529#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7EN_MASK 0x1 1530#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7EN_SHIFT 1 1531#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1 1532#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 2 1533#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1 1534#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 3 1535#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1 1536#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 4 1537#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1 1538#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 5 1539#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1 1540#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 6 1541#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1 1542#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 7 1543 u8 byte2; 1544 __le16 word1; 1545 __le32 reg0; 1546 u8 byte3; 1547 u8 byte4; 1548 __le16 word2; 1549 __le16 word3; 1550 __le16 word4; 1551 __le32 reg1; 1552 __le32 reg2; 1553}; 1554 1555/* iSCSI doorbell data */ 1556struct iscsi_db_data { 1557 u8 params; 1558#define ISCSI_DB_DATA_DEST_MASK 0x3 1559#define ISCSI_DB_DATA_DEST_SHIFT 0 1560#define ISCSI_DB_DATA_AGG_CMD_MASK 0x3 1561#define ISCSI_DB_DATA_AGG_CMD_SHIFT 2 1562#define ISCSI_DB_DATA_BYPASS_EN_MASK 0x1 1563#define ISCSI_DB_DATA_BYPASS_EN_SHIFT 4 1564#define ISCSI_DB_DATA_RESERVED_MASK 0x1 1565#define ISCSI_DB_DATA_RESERVED_SHIFT 5 1566#define ISCSI_DB_DATA_AGG_VAL_SEL_MASK 0x3 1567#define ISCSI_DB_DATA_AGG_VAL_SEL_SHIFT 6 1568 u8 agg_flags; 1569 __le16 sq_prod; 1570}; 1571 1572#endif /* __ISCSI_COMMON__ */