Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v5.8-rc3 1556 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 __le16 physical_q0; 1003 __le16 physical_q1; 1004 u8 flags; 1005#define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_MASK 0x1 1006#define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_SHIFT 0 1007#define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_MASK 0x1 1008#define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_SHIFT 1 1009#define ISCSI_CONN_OFFLOAD_PARAMS_RESTRICTED_MODE_MASK 0x1 1010#define ISCSI_CONN_OFFLOAD_PARAMS_RESTRICTED_MODE_SHIFT 2 1011#define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_MASK 0x1F 1012#define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_SHIFT 3 1013 u8 default_cq; 1014 __le16 reserved0; 1015 __le32 stat_sn; 1016 __le32 initial_ack; 1017}; 1018 1019/* iSCSI connection statistics */ 1020struct iscsi_conn_stats_params { 1021 struct regpair iscsi_tcp_tx_packets_cnt; 1022 struct regpair iscsi_tcp_tx_bytes_cnt; 1023 struct regpair iscsi_tcp_tx_rxmit_cnt; 1024 struct regpair iscsi_tcp_rx_packets_cnt; 1025 struct regpair iscsi_tcp_rx_bytes_cnt; 1026 struct regpair iscsi_tcp_rx_dup_ack_cnt; 1027 __le32 iscsi_tcp_rx_chksum_err_cnt; 1028 __le32 reserved; 1029}; 1030 1031 1032/* iSCSI connection update params passed by driver to FW in ISCSI update 1033 *ramrod. 1034 */ 1035struct iscsi_conn_update_ramrod_params { 1036 __le16 reserved0; 1037 __le16 conn_id; 1038 __le32 reserved1; 1039 u8 flags; 1040#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_MASK 0x1 1041#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_SHIFT 0 1042#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_MASK 0x1 1043#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_SHIFT 1 1044#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_MASK 0x1 1045#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_SHIFT 2 1046#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_MASK 0x1 1047#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_SHIFT 3 1048#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_BLOCK_SIZE_MASK 0x1 1049#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_BLOCK_SIZE_SHIFT 4 1050#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_HOST_EN_MASK 0x1 1051#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_HOST_EN_SHIFT 5 1052#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_IMM_EN_MASK 0x1 1053#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_IMM_EN_SHIFT 6 1054#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_LUN_MAPPER_EN_MASK 0x1 1055#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_LUN_MAPPER_EN_SHIFT 7 1056 u8 reserved3[3]; 1057 __le32 max_seq_size; 1058 __le32 max_send_pdu_length; 1059 __le32 max_recv_pdu_length; 1060 __le32 first_seq_length; 1061 __le32 exp_stat_sn; 1062 union dif_configuration_params dif_on_imme_params; 1063}; 1064 1065/* iSCSI CQ element */ 1066struct iscsi_cqe_common { 1067 __le16 conn_id; 1068 u8 cqe_type; 1069 union cqe_error_status error_bitmap; 1070 __le32 reserved[3]; 1071 union iscsi_task_hdr iscsi_hdr; 1072}; 1073 1074/* iSCSI CQ element */ 1075struct iscsi_cqe_solicited { 1076 __le16 conn_id; 1077 u8 cqe_type; 1078 union cqe_error_status error_bitmap; 1079 __le16 itid; 1080 u8 task_type; 1081 u8 fw_dbg_field; 1082 u8 caused_conn_err; 1083 u8 reserved0[3]; 1084 __le32 data_truncated_bytes; 1085 union iscsi_task_hdr iscsi_hdr; 1086}; 1087 1088/* iSCSI CQ element */ 1089struct iscsi_cqe_unsolicited { 1090 __le16 conn_id; 1091 u8 cqe_type; 1092 union cqe_error_status error_bitmap; 1093 __le16 reserved0; 1094 u8 reserved1; 1095 u8 unsol_cqe_type; 1096 __le16 rqe_opaque; 1097 __le16 reserved2[3]; 1098 union iscsi_task_hdr iscsi_hdr; 1099}; 1100 1101/* iSCSI CQ element */ 1102union iscsi_cqe { 1103 struct iscsi_cqe_common cqe_common; 1104 struct iscsi_cqe_solicited cqe_solicited; 1105 struct iscsi_cqe_unsolicited cqe_unsolicited; 1106}; 1107 1108/* iSCSI CQE type */ 1109enum iscsi_cqes_type { 1110 ISCSI_CQE_TYPE_SOLICITED = 1, 1111 ISCSI_CQE_TYPE_UNSOLICITED, 1112 ISCSI_CQE_TYPE_SOLICITED_WITH_SENSE, 1113 ISCSI_CQE_TYPE_TASK_CLEANUP, 1114 ISCSI_CQE_TYPE_DUMMY, 1115 MAX_ISCSI_CQES_TYPE 1116}; 1117 1118/* iSCSI CQE type */ 1119enum iscsi_cqe_unsolicited_type { 1120 ISCSI_CQE_UNSOLICITED_NONE, 1121 ISCSI_CQE_UNSOLICITED_SINGLE, 1122 ISCSI_CQE_UNSOLICITED_FIRST, 1123 ISCSI_CQE_UNSOLICITED_MIDDLE, 1124 ISCSI_CQE_UNSOLICITED_LAST, 1125 MAX_ISCSI_CQE_UNSOLICITED_TYPE 1126}; 1127 1128/* iscsi debug modes */ 1129struct iscsi_debug_modes { 1130 u8 flags; 1131#define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_MASK 0x1 1132#define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_SHIFT 0 1133#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_MASK 0x1 1134#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_SHIFT 1 1135#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_MASK 0x1 1136#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_SHIFT 2 1137#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_MASK 0x1 1138#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_SHIFT 3 1139#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_MASK 0x1 1140#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_SHIFT 4 1141#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_MASK 0x1 1142#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_SHIFT 5 1143#define ISCSI_DEBUG_MODES_ASSERT_IF_DIF_OR_DATA_DIGEST_ERROR_MASK 0x1 1144#define ISCSI_DEBUG_MODES_ASSERT_IF_DIF_OR_DATA_DIGEST_ERROR_SHIFT 6 1145#define ISCSI_DEBUG_MODES_ASSERT_IF_HQ_CORRUPT_MASK 0x1 1146#define ISCSI_DEBUG_MODES_ASSERT_IF_HQ_CORRUPT_SHIFT 7 1147}; 1148 1149/* iSCSI kernel completion queue IDs */ 1150enum iscsi_eqe_opcode { 1151 ISCSI_EVENT_TYPE_INIT_FUNC = 0, 1152 ISCSI_EVENT_TYPE_DESTROY_FUNC, 1153 ISCSI_EVENT_TYPE_OFFLOAD_CONN, 1154 ISCSI_EVENT_TYPE_UPDATE_CONN, 1155 ISCSI_EVENT_TYPE_CLEAR_SQ, 1156 ISCSI_EVENT_TYPE_TERMINATE_CONN, 1157 ISCSI_EVENT_TYPE_MAC_UPDATE_CONN, 1158 ISCSI_EVENT_TYPE_COLLECT_STATS_CONN, 1159 ISCSI_EVENT_TYPE_ASYN_CONNECT_COMPLETE, 1160 ISCSI_EVENT_TYPE_ASYN_TERMINATE_DONE, 1161 ISCSI_EVENT_TYPE_START_OF_ERROR_TYPES = 10, 1162 ISCSI_EVENT_TYPE_ASYN_ABORT_RCVD, 1163 ISCSI_EVENT_TYPE_ASYN_CLOSE_RCVD, 1164 ISCSI_EVENT_TYPE_ASYN_SYN_RCVD, 1165 ISCSI_EVENT_TYPE_ASYN_MAX_RT_TIME, 1166 ISCSI_EVENT_TYPE_ASYN_MAX_RT_CNT, 1167 ISCSI_EVENT_TYPE_ASYN_MAX_KA_PROBES_CNT, 1168 ISCSI_EVENT_TYPE_ASYN_FIN_WAIT2, 1169 ISCSI_EVENT_TYPE_ISCSI_CONN_ERROR, 1170 ISCSI_EVENT_TYPE_TCP_CONN_ERROR, 1171 MAX_ISCSI_EQE_OPCODE 1172}; 1173 1174/* iSCSI EQE and CQE completion status */ 1175enum iscsi_error_types { 1176 ISCSI_STATUS_NONE = 0, 1177 ISCSI_CQE_ERROR_UNSOLICITED_RCV_ON_INVALID_CONN = 1, 1178 ISCSI_CONN_ERROR_TASK_CID_MISMATCH, 1179 ISCSI_CONN_ERROR_TASK_NOT_VALID, 1180 ISCSI_CONN_ERROR_RQ_RING_IS_FULL, 1181 ISCSI_CONN_ERROR_CMDQ_RING_IS_FULL, 1182 ISCSI_CONN_ERROR_HQE_CACHING_FAILED, 1183 ISCSI_CONN_ERROR_HEADER_DIGEST_ERROR, 1184 ISCSI_CONN_ERROR_LOCAL_COMPLETION_ERROR, 1185 ISCSI_CONN_ERROR_DATA_OVERRUN, 1186 ISCSI_CONN_ERROR_OUT_OF_SGES_ERROR, 1187 ISCSI_CONN_ERROR_IP_OPTIONS_ERROR, 1188 ISCSI_CONN_ERROR_PRS_ERRORS, 1189 ISCSI_CONN_ERROR_CONNECT_INVALID_TCP_OPTION, 1190 ISCSI_CONN_ERROR_TCP_IP_FRAGMENT_ERROR, 1191 ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_LEN, 1192 ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_TYPE, 1193 ISCSI_CONN_ERROR_PROTOCOL_ERR_ITT_OUT_OF_RANGE, 1194 ISCSI_CONN_ERROR_PROTOCOL_ERR_TTT_OUT_OF_RANGE, 1195 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_EXCEEDS_PDU_SIZE, 1196 ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE, 1197 ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE_BEFORE_UPDATE, 1198 ISCSI_CONN_ERROR_UNVALID_NOPIN_DSL, 1199 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_CARRIES_NO_DATA, 1200 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SN, 1201 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_IN_TTT, 1202 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_OUT_ITT, 1203 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_TTT, 1204 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_BUFFER_OFFSET, 1205 ISCSI_CONN_ERROR_PROTOCOL_ERR_BUFFER_OFFSET_OOO, 1206 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_SN, 1207 ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_0, 1208 ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_1, 1209 ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_2, 1210 ISCSI_CONN_ERROR_PROTOCOL_ERR_LUN, 1211 ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO, 1212 ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO_S_BIT_ONE, 1213 ISCSI_CONN_ERROR_PROTOCOL_ERR_EXP_STAT_SN, 1214 ISCSI_CONN_ERROR_PROTOCOL_ERR_DSL_NOT_ZERO, 1215 ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_DSL, 1216 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_TOO_BIG, 1217 ISCSI_CONN_ERROR_PROTOCOL_ERR_OUTSTANDING_R2T_COUNT, 1218 ISCSI_CONN_ERROR_PROTOCOL_ERR_DIF_TX, 1219 ISCSI_CONN_ERROR_SENSE_DATA_LENGTH, 1220 ISCSI_CONN_ERROR_DATA_PLACEMENT_ERROR, 1221 ISCSI_CONN_ERROR_INVALID_ITT, 1222 ISCSI_ERROR_UNKNOWN, 1223 MAX_ISCSI_ERROR_TYPES 1224}; 1225 1226/* iSCSI Ramrod Command IDs */ 1227enum iscsi_ramrod_cmd_id { 1228 ISCSI_RAMROD_CMD_ID_UNUSED = 0, 1229 ISCSI_RAMROD_CMD_ID_INIT_FUNC = 1, 1230 ISCSI_RAMROD_CMD_ID_DESTROY_FUNC = 2, 1231 ISCSI_RAMROD_CMD_ID_OFFLOAD_CONN = 3, 1232 ISCSI_RAMROD_CMD_ID_UPDATE_CONN = 4, 1233 ISCSI_RAMROD_CMD_ID_TERMINATION_CONN = 5, 1234 ISCSI_RAMROD_CMD_ID_CLEAR_SQ = 6, 1235 ISCSI_RAMROD_CMD_ID_MAC_UPDATE = 7, 1236 ISCSI_RAMROD_CMD_ID_CONN_STATS = 8, 1237 MAX_ISCSI_RAMROD_CMD_ID 1238}; 1239 1240/* iSCSI connection termination request */ 1241struct iscsi_spe_conn_mac_update { 1242 __le16 reserved0; 1243 __le16 conn_id; 1244 __le32 reserved1; 1245 __le16 remote_mac_addr_lo; 1246 __le16 remote_mac_addr_mid; 1247 __le16 remote_mac_addr_hi; 1248 u8 reserved2[2]; 1249}; 1250 1251/* iSCSI and TCP connection (Option 1) offload params passed by driver to FW in 1252 * iSCSI offload ramrod. 1253 */ 1254struct iscsi_spe_conn_offload { 1255 __le16 reserved0; 1256 __le16 conn_id; 1257 __le32 reserved1; 1258 struct iscsi_conn_offload_params iscsi; 1259 struct tcp_offload_params tcp; 1260}; 1261 1262/* iSCSI and TCP connection(Option 2) offload params passed by driver to FW in 1263 * iSCSI offload ramrod. 1264 */ 1265struct iscsi_spe_conn_offload_option2 { 1266 __le16 reserved0; 1267 __le16 conn_id; 1268 __le32 reserved1; 1269 struct iscsi_conn_offload_params iscsi; 1270 struct tcp_offload_params_opt2 tcp; 1271}; 1272 1273/* iSCSI collect connection statistics request */ 1274struct iscsi_spe_conn_statistics { 1275 __le16 reserved0; 1276 __le16 conn_id; 1277 __le32 reserved1; 1278 u8 reset_stats; 1279 u8 reserved2[7]; 1280 struct regpair stats_cnts_addr; 1281}; 1282 1283/* iSCSI connection termination request */ 1284struct iscsi_spe_conn_termination { 1285 __le16 reserved0; 1286 __le16 conn_id; 1287 __le32 reserved1; 1288 u8 abortive; 1289 u8 reserved2[7]; 1290 struct regpair queue_cnts_addr; 1291 struct regpair query_params_addr; 1292}; 1293 1294/* iSCSI firmware function init parameters */ 1295struct iscsi_spe_func_init { 1296 __le16 half_way_close_timeout; 1297 u8 num_sq_pages_in_ring; 1298 u8 num_r2tq_pages_in_ring; 1299 u8 num_uhq_pages_in_ring; 1300 u8 ll2_rx_queue_id; 1301 u8 flags; 1302#define ISCSI_SPE_FUNC_INIT_COUNTERS_EN_MASK 0x1 1303#define ISCSI_SPE_FUNC_INIT_COUNTERS_EN_SHIFT 0 1304#define ISCSI_SPE_FUNC_INIT_RESERVED0_MASK 0x7F 1305#define ISCSI_SPE_FUNC_INIT_RESERVED0_SHIFT 1 1306 struct iscsi_debug_modes debug_mode; 1307 u8 params; 1308#define ISCSI_SPE_FUNC_INIT_MAX_SYN_RT_MASK 0xF 1309#define ISCSI_SPE_FUNC_INIT_MAX_SYN_RT_SHIFT 0 1310#define ISCSI_SPE_FUNC_INIT_RESERVED1_MASK 0xF 1311#define ISCSI_SPE_FUNC_INIT_RESERVED1_SHIFT 4 1312 u8 reserved2[7]; 1313 struct scsi_init_func_params func_params; 1314 struct scsi_init_func_queues q_params; 1315}; 1316 1317/* iSCSI task type */ 1318enum iscsi_task_type { 1319 ISCSI_TASK_TYPE_INITIATOR_WRITE, 1320 ISCSI_TASK_TYPE_INITIATOR_READ, 1321 ISCSI_TASK_TYPE_MIDPATH, 1322 ISCSI_TASK_TYPE_UNSOLIC, 1323 ISCSI_TASK_TYPE_EXCHCLEANUP, 1324 ISCSI_TASK_TYPE_IRRELEVANT, 1325 ISCSI_TASK_TYPE_TARGET_WRITE, 1326 ISCSI_TASK_TYPE_TARGET_READ, 1327 ISCSI_TASK_TYPE_TARGET_RESPONSE, 1328 ISCSI_TASK_TYPE_LOGIN_RESPONSE, 1329 ISCSI_TASK_TYPE_TARGET_IMM_W_DIF, 1330 MAX_ISCSI_TASK_TYPE 1331}; 1332 1333/* iSCSI DesiredDataTransferLength/ttt union */ 1334union iscsi_ttt_txlen_union { 1335 __le32 desired_tx_len; 1336 __le32 ttt; 1337}; 1338 1339/* iSCSI uHQ element */ 1340struct iscsi_uhqe { 1341 __le32 reg1; 1342#define ISCSI_UHQE_PDU_PAYLOAD_LEN_MASK 0xFFFFF 1343#define ISCSI_UHQE_PDU_PAYLOAD_LEN_SHIFT 0 1344#define ISCSI_UHQE_LOCAL_COMP_MASK 0x1 1345#define ISCSI_UHQE_LOCAL_COMP_SHIFT 20 1346#define ISCSI_UHQE_TOGGLE_BIT_MASK 0x1 1347#define ISCSI_UHQE_TOGGLE_BIT_SHIFT 21 1348#define ISCSI_UHQE_PURE_PAYLOAD_MASK 0x1 1349#define ISCSI_UHQE_PURE_PAYLOAD_SHIFT 22 1350#define ISCSI_UHQE_LOGIN_RESPONSE_PDU_MASK 0x1 1351#define ISCSI_UHQE_LOGIN_RESPONSE_PDU_SHIFT 23 1352#define ISCSI_UHQE_TASK_ID_HI_MASK 0xFF 1353#define ISCSI_UHQE_TASK_ID_HI_SHIFT 24 1354 __le32 reg2; 1355#define ISCSI_UHQE_BUFFER_OFFSET_MASK 0xFFFFFF 1356#define ISCSI_UHQE_BUFFER_OFFSET_SHIFT 0 1357#define ISCSI_UHQE_TASK_ID_LO_MASK 0xFF 1358#define ISCSI_UHQE_TASK_ID_LO_SHIFT 24 1359}; 1360 1361/* iSCSI WQ element */ 1362struct iscsi_wqe { 1363 __le16 task_id; 1364 u8 flags; 1365#define ISCSI_WQE_WQE_TYPE_MASK 0x7 1366#define ISCSI_WQE_WQE_TYPE_SHIFT 0 1367#define ISCSI_WQE_NUM_SGES_MASK 0xF 1368#define ISCSI_WQE_NUM_SGES_SHIFT 3 1369#define ISCSI_WQE_RESPONSE_MASK 0x1 1370#define ISCSI_WQE_RESPONSE_SHIFT 7 1371 struct iscsi_dif_flags prot_flags; 1372 __le32 contlen_cdbsize; 1373#define ISCSI_WQE_CONT_LEN_MASK 0xFFFFFF 1374#define ISCSI_WQE_CONT_LEN_SHIFT 0 1375#define ISCSI_WQE_CDB_SIZE_MASK 0xFF 1376#define ISCSI_WQE_CDB_SIZE_SHIFT 24 1377}; 1378 1379/* iSCSI wqe type */ 1380enum iscsi_wqe_type { 1381 ISCSI_WQE_TYPE_NORMAL, 1382 ISCSI_WQE_TYPE_TASK_CLEANUP, 1383 ISCSI_WQE_TYPE_MIDDLE_PATH, 1384 ISCSI_WQE_TYPE_LOGIN, 1385 ISCSI_WQE_TYPE_FIRST_R2T_CONT, 1386 ISCSI_WQE_TYPE_NONFIRST_R2T_CONT, 1387 ISCSI_WQE_TYPE_RESPONSE, 1388 MAX_ISCSI_WQE_TYPE 1389}; 1390 1391/* iSCSI xHQ element */ 1392struct iscsi_xhqe { 1393 union iscsi_ttt_txlen_union ttt_or_txlen; 1394 __le32 exp_stat_sn; 1395 struct iscsi_dif_flags prot_flags; 1396 u8 total_ahs_length; 1397 u8 opcode; 1398 u8 flags; 1399#define ISCSI_XHQE_FINAL_MASK 0x1 1400#define ISCSI_XHQE_FINAL_SHIFT 0 1401#define ISCSI_XHQE_STATUS_BIT_MASK 0x1 1402#define ISCSI_XHQE_STATUS_BIT_SHIFT 1 1403#define ISCSI_XHQE_NUM_SGES_MASK 0xF 1404#define ISCSI_XHQE_NUM_SGES_SHIFT 2 1405#define ISCSI_XHQE_RESERVED0_MASK 0x3 1406#define ISCSI_XHQE_RESERVED0_SHIFT 6 1407 union iscsi_seq_num seq_num; 1408 __le16 reserved1; 1409}; 1410 1411/* Per PF iSCSI receive path statistics - mStorm RAM structure */ 1412struct mstorm_iscsi_stats_drv { 1413 struct regpair iscsi_rx_dropped_pdus_task_not_valid; 1414 struct regpair iscsi_rx_dup_ack_cnt; 1415}; 1416 1417/* Per PF iSCSI transmit path statistics - pStorm RAM structure */ 1418struct pstorm_iscsi_stats_drv { 1419 struct regpair iscsi_tx_bytes_cnt; 1420 struct regpair iscsi_tx_packet_cnt; 1421}; 1422 1423/* Per PF iSCSI receive path statistics - tStorm RAM structure */ 1424struct tstorm_iscsi_stats_drv { 1425 struct regpair iscsi_rx_bytes_cnt; 1426 struct regpair iscsi_rx_packet_cnt; 1427 struct regpair iscsi_rx_new_ooo_isle_events_cnt; 1428 struct regpair iscsi_rx_tcp_payload_bytes_cnt; 1429 struct regpair iscsi_rx_tcp_pkt_cnt; 1430 struct regpair iscsi_rx_pure_ack_cnt; 1431 __le32 iscsi_cmdq_threshold_cnt; 1432 __le32 iscsi_rq_threshold_cnt; 1433 __le32 iscsi_immq_threshold_cnt; 1434}; 1435 1436/* Per PF iSCSI receive path statistics - uStorm RAM structure */ 1437struct ustorm_iscsi_stats_drv { 1438 struct regpair iscsi_rx_data_pdu_cnt; 1439 struct regpair iscsi_rx_r2t_pdu_cnt; 1440 struct regpair iscsi_rx_total_pdu_cnt; 1441}; 1442 1443/* Per PF iSCSI transmit path statistics - xStorm RAM structure */ 1444struct xstorm_iscsi_stats_drv { 1445 struct regpair iscsi_tx_go_to_slow_start_event_cnt; 1446 struct regpair iscsi_tx_fast_retransmit_event_cnt; 1447 struct regpair iscsi_tx_pure_ack_cnt; 1448 struct regpair iscsi_tx_delayed_ack_cnt; 1449}; 1450 1451/* Per PF iSCSI transmit path statistics - yStorm RAM structure */ 1452struct ystorm_iscsi_stats_drv { 1453 struct regpair iscsi_tx_data_pdu_cnt; 1454 struct regpair iscsi_tx_r2t_pdu_cnt; 1455 struct regpair iscsi_tx_total_pdu_cnt; 1456 struct regpair iscsi_tx_tcp_payload_bytes_cnt; 1457 struct regpair iscsi_tx_tcp_pkt_cnt; 1458}; 1459 1460struct e4_tstorm_iscsi_task_ag_ctx { 1461 u8 byte0; 1462 u8 byte1; 1463 __le16 word0; 1464 u8 flags0; 1465#define E4_TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK 0xF 1466#define E4_TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT 0 1467#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK 0x1 1468#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT 4 1469#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1 1470#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5 1471#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT2_MASK 0x1 1472#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT2_SHIFT 6 1473#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT3_MASK 0x1 1474#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT3_SHIFT 7 1475 u8 flags1; 1476#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK 0x1 1477#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT 0 1478#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT5_MASK 0x1 1479#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT5_SHIFT 1 1480#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0_MASK 0x3 1481#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT 2 1482#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3 1483#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 4 1484#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2_MASK 0x3 1485#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT 6 1486 u8 flags2; 1487#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3_MASK 0x3 1488#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT 0 1489#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4_MASK 0x3 1490#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4_SHIFT 2 1491#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5_MASK 0x3 1492#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5_SHIFT 4 1493#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6_MASK 0x3 1494#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6_SHIFT 6 1495 u8 flags3; 1496#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7_MASK 0x3 1497#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7_SHIFT 0 1498#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK 0x1 1499#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT 2 1500#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1 1501#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 3 1502#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK 0x1 1503#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT 4 1504#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK 0x1 1505#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT 5 1506#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4EN_MASK 0x1 1507#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4EN_SHIFT 6 1508#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5EN_MASK 0x1 1509#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5EN_SHIFT 7 1510 u8 flags4; 1511#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6EN_MASK 0x1 1512#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6EN_SHIFT 0 1513#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7EN_MASK 0x1 1514#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7EN_SHIFT 1 1515#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1 1516#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 2 1517#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1 1518#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 3 1519#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1 1520#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 4 1521#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1 1522#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 5 1523#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1 1524#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 6 1525#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1 1526#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 7 1527 u8 byte2; 1528 __le16 word1; 1529 __le32 reg0; 1530 u8 byte3; 1531 u8 byte4; 1532 __le16 word2; 1533 __le16 word3; 1534 __le16 word4; 1535 __le32 reg1; 1536 __le32 reg2; 1537}; 1538 1539/* iSCSI doorbell data */ 1540struct iscsi_db_data { 1541 u8 params; 1542#define ISCSI_DB_DATA_DEST_MASK 0x3 1543#define ISCSI_DB_DATA_DEST_SHIFT 0 1544#define ISCSI_DB_DATA_AGG_CMD_MASK 0x3 1545#define ISCSI_DB_DATA_AGG_CMD_SHIFT 2 1546#define ISCSI_DB_DATA_BYPASS_EN_MASK 0x1 1547#define ISCSI_DB_DATA_BYPASS_EN_SHIFT 4 1548#define ISCSI_DB_DATA_RESERVED_MASK 0x1 1549#define ISCSI_DB_DATA_RESERVED_SHIFT 5 1550#define ISCSI_DB_DATA_AGG_VAL_SEL_MASK 0x3 1551#define ISCSI_DB_DATA_AGG_VAL_SEL_SHIFT 6 1552 u8 agg_flags; 1553 __le16 sq_prod; 1554}; 1555 1556#endif /* __ISCSI_COMMON__ */