nvmetcp_common.h (18277B)
1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 2/* Copyright 2021 Marvell. All rights reserved. */ 3 4#ifndef __NVMETCP_COMMON__ 5#define __NVMETCP_COMMON__ 6 7#include "tcp_common.h" 8#include <linux/nvme-tcp.h> 9 10#define NVMETCP_SLOW_PATH_LAYER_CODE (6) 11#define NVMETCP_WQE_NUM_SGES_SLOWIO (0xf) 12 13/* NVMeTCP firmware function init parameters */ 14struct nvmetcp_spe_func_init { 15 __le16 half_way_close_timeout; 16 u8 num_sq_pages_in_ring; 17 u8 num_r2tq_pages_in_ring; 18 u8 num_uhq_pages_in_ring; 19 u8 ll2_rx_queue_id; 20 u8 flags; 21#define NVMETCP_SPE_FUNC_INIT_COUNTERS_EN_MASK 0x1 22#define NVMETCP_SPE_FUNC_INIT_COUNTERS_EN_SHIFT 0 23#define NVMETCP_SPE_FUNC_INIT_NVMETCP_MODE_MASK 0x1 24#define NVMETCP_SPE_FUNC_INIT_NVMETCP_MODE_SHIFT 1 25#define NVMETCP_SPE_FUNC_INIT_RESERVED0_MASK 0x3F 26#define NVMETCP_SPE_FUNC_INIT_RESERVED0_SHIFT 2 27 u8 debug_flags; 28 __le16 reserved1; 29 u8 params; 30#define NVMETCP_SPE_FUNC_INIT_MAX_SYN_RT_MASK 0xF 31#define NVMETCP_SPE_FUNC_INIT_MAX_SYN_RT_SHIFT 0 32#define NVMETCP_SPE_FUNC_INIT_RESERVED1_MASK 0xF 33#define NVMETCP_SPE_FUNC_INIT_RESERVED1_SHIFT 4 34 u8 reserved2[5]; 35 struct scsi_init_func_params func_params; 36 struct scsi_init_func_queues q_params; 37}; 38 39/* NVMeTCP init params passed by driver to FW in NVMeTCP init ramrod. */ 40struct nvmetcp_init_ramrod_params { 41 struct nvmetcp_spe_func_init nvmetcp_init_spe; 42 struct tcp_init_params tcp_init; 43}; 44 45/* NVMeTCP Ramrod Command IDs */ 46enum nvmetcp_ramrod_cmd_id { 47 NVMETCP_RAMROD_CMD_ID_UNUSED = 0, 48 NVMETCP_RAMROD_CMD_ID_INIT_FUNC = 1, 49 NVMETCP_RAMROD_CMD_ID_DESTROY_FUNC = 2, 50 NVMETCP_RAMROD_CMD_ID_OFFLOAD_CONN = 3, 51 NVMETCP_RAMROD_CMD_ID_UPDATE_CONN = 4, 52 NVMETCP_RAMROD_CMD_ID_TERMINATION_CONN = 5, 53 NVMETCP_RAMROD_CMD_ID_CLEAR_SQ = 6, 54 MAX_NVMETCP_RAMROD_CMD_ID 55}; 56 57struct nvmetcp_glbl_queue_entry { 58 struct regpair cq_pbl_addr; 59 struct regpair reserved; 60}; 61 62/* NVMeTCP conn level EQEs */ 63enum nvmetcp_eqe_opcode { 64 NVMETCP_EVENT_TYPE_INIT_FUNC = 0, /* Response after init Ramrod */ 65 NVMETCP_EVENT_TYPE_DESTROY_FUNC, /* Response after destroy Ramrod */ 66 NVMETCP_EVENT_TYPE_OFFLOAD_CONN,/* Response after option 2 offload Ramrod */ 67 NVMETCP_EVENT_TYPE_UPDATE_CONN, /* Response after update Ramrod */ 68 NVMETCP_EVENT_TYPE_CLEAR_SQ, /* Response after clear sq Ramrod */ 69 NVMETCP_EVENT_TYPE_TERMINATE_CONN, /* Response after termination Ramrod */ 70 NVMETCP_EVENT_TYPE_RESERVED0, 71 NVMETCP_EVENT_TYPE_RESERVED1, 72 NVMETCP_EVENT_TYPE_ASYN_CONNECT_COMPLETE, /* Connect completed (A-syn EQE) */ 73 NVMETCP_EVENT_TYPE_ASYN_TERMINATE_DONE, /* Termination completed (A-syn EQE) */ 74 NVMETCP_EVENT_TYPE_START_OF_ERROR_TYPES = 10, /* Separate EQs from err EQs */ 75 NVMETCP_EVENT_TYPE_ASYN_ABORT_RCVD, /* TCP RST packet receive (A-syn EQE) */ 76 NVMETCP_EVENT_TYPE_ASYN_CLOSE_RCVD, /* TCP FIN packet receive (A-syn EQE) */ 77 NVMETCP_EVENT_TYPE_ASYN_SYN_RCVD, /* TCP SYN+ACK packet receive (A-syn EQE) */ 78 NVMETCP_EVENT_TYPE_ASYN_MAX_RT_TIME, /* TCP max retransmit time (A-syn EQE) */ 79 NVMETCP_EVENT_TYPE_ASYN_MAX_RT_CNT, /* TCP max retransmit count (A-syn EQE) */ 80 NVMETCP_EVENT_TYPE_ASYN_MAX_KA_PROBES_CNT, /* TCP ka probes count (A-syn EQE) */ 81 NVMETCP_EVENT_TYPE_ASYN_FIN_WAIT2, /* TCP fin wait 2 (A-syn EQE) */ 82 NVMETCP_EVENT_TYPE_NVMETCP_CONN_ERROR, /* NVMeTCP error response (A-syn EQE) */ 83 NVMETCP_EVENT_TYPE_TCP_CONN_ERROR, /* NVMeTCP error - tcp error (A-syn EQE) */ 84 MAX_NVMETCP_EQE_OPCODE 85}; 86 87struct nvmetcp_conn_offload_section { 88 struct regpair cccid_itid_table_addr; /* CCCID to iTID table address */ 89 __le16 cccid_max_range; /* CCCID max value - used for validation */ 90 __le16 reserved[3]; 91}; 92 93/* NVMe TCP connection offload params passed by driver to FW in NVMeTCP offload ramrod */ 94struct nvmetcp_conn_offload_params { 95 struct regpair sq_pbl_addr; 96 struct regpair r2tq_pbl_addr; 97 struct regpair xhq_pbl_addr; 98 struct regpair uhq_pbl_addr; 99 __le16 physical_q0; 100 __le16 physical_q1; 101 u8 flags; 102#define NVMETCP_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_MASK 0x1 103#define NVMETCP_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_SHIFT 0 104#define NVMETCP_CONN_OFFLOAD_PARAMS_TARGET_MODE_MASK 0x1 105#define NVMETCP_CONN_OFFLOAD_PARAMS_TARGET_MODE_SHIFT 1 106#define NVMETCP_CONN_OFFLOAD_PARAMS_RESTRICTED_MODE_MASK 0x1 107#define NVMETCP_CONN_OFFLOAD_PARAMS_RESTRICTED_MODE_SHIFT 2 108#define NVMETCP_CONN_OFFLOAD_PARAMS_NVMETCP_MODE_MASK 0x1 109#define NVMETCP_CONN_OFFLOAD_PARAMS_NVMETCP_MODE_SHIFT 3 110#define NVMETCP_CONN_OFFLOAD_PARAMS_RESERVED1_MASK 0xF 111#define NVMETCP_CONN_OFFLOAD_PARAMS_RESERVED1_SHIFT 4 112 u8 default_cq; 113 __le16 reserved0; 114 __le32 reserved1; 115 __le32 initial_ack; 116 117 struct nvmetcp_conn_offload_section nvmetcp; /* NVMe/TCP section */ 118}; 119 120/* NVMe TCP and TCP connection offload params passed by driver to FW in NVMeTCP offload ramrod. */ 121struct nvmetcp_spe_conn_offload { 122 __le16 reserved; 123 __le16 conn_id; 124 __le32 fw_cid; 125 struct nvmetcp_conn_offload_params nvmetcp; 126 struct tcp_offload_params_opt2 tcp; 127}; 128 129/* NVMeTCP connection update params passed by driver to FW in NVMETCP update ramrod. */ 130struct nvmetcp_conn_update_ramrod_params { 131 __le16 reserved0; 132 __le16 conn_id; 133 __le32 reserved1; 134 u8 flags; 135#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_HD_EN_MASK 0x1 136#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_HD_EN_SHIFT 0 137#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_DD_EN_MASK 0x1 138#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_DD_EN_SHIFT 1 139#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED0_MASK 0x1 140#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED0_SHIFT 2 141#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED1_MASK 0x1 142#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED1_DATA_SHIFT 3 143#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED2_MASK 0x1 144#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED2_SHIFT 4 145#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED3_MASK 0x1 146#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED3_SHIFT 5 147#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED4_MASK 0x1 148#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED4_SHIFT 6 149#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED5_MASK 0x1 150#define NVMETCP_CONN_UPDATE_RAMROD_PARAMS_RESERVED5_SHIFT 7 151 u8 reserved3[3]; 152 __le32 max_seq_size; 153 __le32 max_send_pdu_length; 154 __le32 max_recv_pdu_length; 155 __le32 first_seq_length; 156 __le32 reserved4[5]; 157}; 158 159/* NVMeTCP connection termination request */ 160struct nvmetcp_spe_conn_termination { 161 __le16 reserved0; 162 __le16 conn_id; 163 __le32 reserved1; 164 u8 abortive; 165 u8 reserved2[7]; 166 struct regpair reserved3; 167 struct regpair reserved4; 168}; 169 170struct nvmetcp_dif_flags { 171 u8 flags; 172}; 173 174enum nvmetcp_wqe_type { 175 NVMETCP_WQE_TYPE_NORMAL, 176 NVMETCP_WQE_TYPE_TASK_CLEANUP, 177 NVMETCP_WQE_TYPE_MIDDLE_PATH, 178 NVMETCP_WQE_TYPE_IC, 179 MAX_NVMETCP_WQE_TYPE 180}; 181 182struct nvmetcp_wqe { 183 __le16 task_id; 184 u8 flags; 185#define NVMETCP_WQE_WQE_TYPE_MASK 0x7 /* [use nvmetcp_wqe_type] */ 186#define NVMETCP_WQE_WQE_TYPE_SHIFT 0 187#define NVMETCP_WQE_NUM_SGES_MASK 0xF 188#define NVMETCP_WQE_NUM_SGES_SHIFT 3 189#define NVMETCP_WQE_RESPONSE_MASK 0x1 190#define NVMETCP_WQE_RESPONSE_SHIFT 7 191 struct nvmetcp_dif_flags prot_flags; 192 __le32 contlen_cdbsize; 193#define NVMETCP_WQE_CONT_LEN_MASK 0xFFFFFF 194#define NVMETCP_WQE_CONT_LEN_SHIFT 0 195#define NVMETCP_WQE_CDB_SIZE_OR_NVMETCP_CMD_MASK 0xFF 196#define NVMETCP_WQE_CDB_SIZE_OR_NVMETCP_CMD_SHIFT 24 197}; 198 199struct nvmetcp_host_cccid_itid_entry { 200 __le16 itid; 201}; 202 203struct nvmetcp_connect_done_results { 204 __le16 icid; 205 __le16 conn_id; 206 struct tcp_ulp_connect_done_params params; 207}; 208 209struct nvmetcp_eqe_data { 210 __le16 icid; 211 __le16 conn_id; 212 __le16 reserved; 213 u8 error_code; 214 u8 error_pdu_opcode_reserved; 215#define NVMETCP_EQE_DATA_ERROR_PDU_OPCODE_MASK 0x3F 216#define NVMETCP_EQE_DATA_ERROR_PDU_OPCODE_SHIFT 0 217#define NVMETCP_EQE_DATA_ERROR_PDU_OPCODE_VALID_MASK 0x1 218#define NVMETCP_EQE_DATA_ERROR_PDU_OPCODE_VALID_SHIFT 6 219#define NVMETCP_EQE_DATA_RESERVED0_MASK 0x1 220#define NVMETCP_EQE_DATA_RESERVED0_SHIFT 7 221}; 222 223enum nvmetcp_task_type { 224 NVMETCP_TASK_TYPE_HOST_WRITE, 225 NVMETCP_TASK_TYPE_HOST_READ, 226 NVMETCP_TASK_TYPE_INIT_CONN_REQUEST, 227 NVMETCP_TASK_TYPE_RESERVED0, 228 NVMETCP_TASK_TYPE_CLEANUP, 229 NVMETCP_TASK_TYPE_HOST_READ_NO_CQE, 230 MAX_NVMETCP_TASK_TYPE 231}; 232 233struct nvmetcp_db_data { 234 u8 params; 235#define NVMETCP_DB_DATA_DEST_MASK 0x3 /* destination of doorbell (use enum db_dest) */ 236#define NVMETCP_DB_DATA_DEST_SHIFT 0 237#define NVMETCP_DB_DATA_AGG_CMD_MASK 0x3 /* aggregative command to CM (use enum db_agg_cmd_sel) */ 238#define NVMETCP_DB_DATA_AGG_CMD_SHIFT 2 239#define NVMETCP_DB_DATA_BYPASS_EN_MASK 0x1 /* enable QM bypass */ 240#define NVMETCP_DB_DATA_BYPASS_EN_SHIFT 4 241#define NVMETCP_DB_DATA_RESERVED_MASK 0x1 242#define NVMETCP_DB_DATA_RESERVED_SHIFT 5 243#define NVMETCP_DB_DATA_AGG_VAL_SEL_MASK 0x3 /* aggregative value selection */ 244#define NVMETCP_DB_DATA_AGG_VAL_SEL_SHIFT 6 245 u8 agg_flags; /* bit for every DQ counter flags in CM context that DQ can increment */ 246 __le16 sq_prod; 247}; 248 249struct nvmetcp_fw_nvmf_cqe { 250 __le32 reserved[4]; 251}; 252 253struct nvmetcp_icresp_mdata { 254 u8 digest; 255 u8 cpda; 256 __le16 pfv; 257 __le32 maxdata; 258 __le16 rsvd[4]; 259}; 260 261union nvmetcp_fw_cqe_data { 262 struct nvmetcp_fw_nvmf_cqe nvme_cqe; 263 struct nvmetcp_icresp_mdata icresp_mdata; 264}; 265 266struct nvmetcp_fw_cqe { 267 __le16 conn_id; 268 u8 cqe_type; 269 u8 cqe_error_status_bits; 270#define CQE_ERROR_BITMAP_DIF_ERR_BITS_MASK 0x7 271#define CQE_ERROR_BITMAP_DIF_ERR_BITS_SHIFT 0 272#define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_MASK 0x1 273#define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_SHIFT 3 274#define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_MASK 0x1 275#define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_SHIFT 4 276 __le16 itid; 277 u8 task_type; 278 u8 fw_dbg_field; 279 u8 caused_conn_err; 280 u8 reserved0[3]; 281 __le32 reserved1; 282 union nvmetcp_fw_cqe_data cqe_data; 283 struct regpair task_opaque; 284 __le32 reserved[6]; 285}; 286 287enum nvmetcp_fw_cqes_type { 288 NVMETCP_FW_CQE_TYPE_NORMAL = 1, 289 NVMETCP_FW_CQE_TYPE_RESERVED0, 290 NVMETCP_FW_CQE_TYPE_RESERVED1, 291 NVMETCP_FW_CQE_TYPE_CLEANUP, 292 NVMETCP_FW_CQE_TYPE_DUMMY, 293 MAX_NVMETCP_FW_CQES_TYPE 294}; 295 296struct ystorm_nvmetcp_task_state { 297 struct scsi_cached_sges data_desc; 298 struct scsi_sgl_params sgl_params; 299 __le32 resrved0; 300 __le32 buffer_offset; 301 __le16 cccid; 302 struct nvmetcp_dif_flags dif_flags; 303 u8 flags; 304#define YSTORM_NVMETCP_TASK_STATE_LOCAL_COMP_MASK 0x1 305#define YSTORM_NVMETCP_TASK_STATE_LOCAL_COMP_SHIFT 0 306#define YSTORM_NVMETCP_TASK_STATE_SLOW_IO_MASK 0x1 307#define YSTORM_NVMETCP_TASK_STATE_SLOW_IO_SHIFT 1 308#define YSTORM_NVMETCP_TASK_STATE_SET_DIF_OFFSET_MASK 0x1 309#define YSTORM_NVMETCP_TASK_STATE_SET_DIF_OFFSET_SHIFT 2 310#define YSTORM_NVMETCP_TASK_STATE_SEND_W_RSP_MASK 0x1 311#define YSTORM_NVMETCP_TASK_STATE_SEND_W_RSP_SHIFT 3 312}; 313 314struct ystorm_nvmetcp_task_rxmit_opt { 315 __le32 reserved[4]; 316}; 317 318struct nvmetcp_task_hdr { 319 __le32 reg[18]; 320}; 321 322struct nvmetcp_task_hdr_aligned { 323 struct nvmetcp_task_hdr task_hdr; 324 __le32 reserved[2]; /* HSI_COMMENT: Align to QREG */ 325}; 326 327struct e5_tdif_task_context { 328 __le32 reserved[16]; 329}; 330 331struct e5_rdif_task_context { 332 __le32 reserved[12]; 333}; 334 335struct ystorm_nvmetcp_task_st_ctx { 336 struct ystorm_nvmetcp_task_state state; 337 struct ystorm_nvmetcp_task_rxmit_opt rxmit_opt; 338 struct nvmetcp_task_hdr_aligned pdu_hdr; 339}; 340 341struct mstorm_nvmetcp_task_st_ctx { 342 struct scsi_cached_sges data_desc; 343 struct scsi_sgl_params sgl_params; 344 __le32 rem_task_size; 345 __le32 data_buffer_offset; 346 u8 task_type; 347 struct nvmetcp_dif_flags dif_flags; 348 __le16 dif_task_icid; 349 struct regpair reserved0; 350 __le32 expected_itt; 351 __le32 reserved1; 352}; 353 354struct ustorm_nvmetcp_task_st_ctx { 355 __le32 rem_rcv_len; 356 __le32 exp_data_transfer_len; 357 __le32 exp_data_sn; 358 struct regpair reserved0; 359 __le32 reg1_map; 360#define REG1_NUM_SGES_MASK 0xF 361#define REG1_NUM_SGES_SHIFT 0 362#define REG1_RESERVED1_MASK 0xFFFFFFF 363#define REG1_RESERVED1_SHIFT 4 364 u8 flags2; 365#define USTORM_NVMETCP_TASK_ST_CTX_AHS_EXIST_MASK 0x1 366#define USTORM_NVMETCP_TASK_ST_CTX_AHS_EXIST_SHIFT 0 367#define USTORM_NVMETCP_TASK_ST_CTX_RESERVED1_MASK 0x7F 368#define USTORM_NVMETCP_TASK_ST_CTX_RESERVED1_SHIFT 1 369 struct nvmetcp_dif_flags dif_flags; 370 __le16 reserved3; 371 __le16 tqe_opaque[2]; 372 __le32 reserved5; 373 __le32 nvme_tcp_opaque_lo; 374 __le32 nvme_tcp_opaque_hi; 375 u8 task_type; 376 u8 error_flags; 377#define USTORM_NVMETCP_TASK_ST_CTX_DATA_DIGEST_ERROR_MASK 0x1 378#define USTORM_NVMETCP_TASK_ST_CTX_DATA_DIGEST_ERROR_SHIFT 0 379#define USTORM_NVMETCP_TASK_ST_CTX_DATA_TRUNCATED_ERROR_MASK 0x1 380#define USTORM_NVMETCP_TASK_ST_CTX_DATA_TRUNCATED_ERROR_SHIFT 1 381#define USTORM_NVMETCP_TASK_ST_CTX_UNDER_RUN_ERROR_MASK 0x1 382#define USTORM_NVMETCP_TASK_ST_CTX_UNDER_RUN_ERROR_SHIFT 2 383#define USTORM_NVMETCP_TASK_ST_CTX_NVME_TCP_MASK 0x1 384#define USTORM_NVMETCP_TASK_ST_CTX_NVME_TCP_SHIFT 3 385 u8 flags; 386#define USTORM_NVMETCP_TASK_ST_CTX_CQE_WRITE_MASK 0x3 387#define USTORM_NVMETCP_TASK_ST_CTX_CQE_WRITE_SHIFT 0 388#define USTORM_NVMETCP_TASK_ST_CTX_LOCAL_COMP_MASK 0x1 389#define USTORM_NVMETCP_TASK_ST_CTX_LOCAL_COMP_SHIFT 2 390#define USTORM_NVMETCP_TASK_ST_CTX_Q0_R2TQE_WRITE_MASK 0x1 391#define USTORM_NVMETCP_TASK_ST_CTX_Q0_R2TQE_WRITE_SHIFT 3 392#define USTORM_NVMETCP_TASK_ST_CTX_TOTAL_DATA_ACKED_DONE_MASK 0x1 393#define USTORM_NVMETCP_TASK_ST_CTX_TOTAL_DATA_ACKED_DONE_SHIFT 4 394#define USTORM_NVMETCP_TASK_ST_CTX_HQ_SCANNED_DONE_MASK 0x1 395#define USTORM_NVMETCP_TASK_ST_CTX_HQ_SCANNED_DONE_SHIFT 5 396#define USTORM_NVMETCP_TASK_ST_CTX_R2T2RECV_DONE_MASK 0x1 397#define USTORM_NVMETCP_TASK_ST_CTX_R2T2RECV_DONE_SHIFT 6 398 u8 cq_rss_number; 399}; 400 401struct e5_ystorm_nvmetcp_task_ag_ctx { 402 u8 reserved /* cdu_validation */; 403 u8 byte1 /* state_and_core_id */; 404 __le16 word0 /* icid */; 405 u8 flags0; 406 u8 flags1; 407 u8 flags2; 408 u8 flags3; 409 __le32 TTT; 410 u8 byte2; 411 u8 byte3; 412 u8 byte4; 413 u8 reserved7; 414}; 415 416struct e5_mstorm_nvmetcp_task_ag_ctx { 417 u8 cdu_validation; 418 u8 byte1; 419 __le16 task_cid; 420 u8 flags0; 421#define E5_MSTORM_NVMETCP_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF 422#define E5_MSTORM_NVMETCP_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0 423#define E5_MSTORM_NVMETCP_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1 424#define E5_MSTORM_NVMETCP_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4 425#define E5_MSTORM_NVMETCP_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_MASK 0x1 426#define E5_MSTORM_NVMETCP_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_SHIFT 5 427#define E5_MSTORM_NVMETCP_TASK_AG_CTX_VALID_MASK 0x1 428#define E5_MSTORM_NVMETCP_TASK_AG_CTX_VALID_SHIFT 6 429#define E5_MSTORM_NVMETCP_TASK_AG_CTX_TASK_CLEANUP_FLAG_MASK 0x1 430#define E5_MSTORM_NVMETCP_TASK_AG_CTX_TASK_CLEANUP_FLAG_SHIFT 7 431 u8 flags1; 432#define E5_MSTORM_NVMETCP_TASK_AG_CTX_TASK_CLEANUP_CF_MASK 0x3 433#define E5_MSTORM_NVMETCP_TASK_AG_CTX_TASK_CLEANUP_CF_SHIFT 0 434#define E5_MSTORM_NVMETCP_TASK_AG_CTX_CF1_MASK 0x3 435#define E5_MSTORM_NVMETCP_TASK_AG_CTX_CF1_SHIFT 2 436#define E5_MSTORM_NVMETCP_TASK_AG_CTX_CF2_MASK 0x3 437#define E5_MSTORM_NVMETCP_TASK_AG_CTX_CF2_SHIFT 4 438#define E5_MSTORM_NVMETCP_TASK_AG_CTX_TASK_CLEANUP_CF_EN_MASK 0x1 439#define E5_MSTORM_NVMETCP_TASK_AG_CTX_TASK_CLEANUP_CF_EN_SHIFT 6 440#define E5_MSTORM_NVMETCP_TASK_AG_CTX_CF1EN_MASK 0x1 441#define E5_MSTORM_NVMETCP_TASK_AG_CTX_CF1EN_SHIFT 7 442 u8 flags2; 443 u8 flags3; 444 __le32 reg0; 445 u8 byte2; 446 u8 byte3; 447 u8 byte4; 448 u8 reserved7; 449}; 450 451struct e5_ustorm_nvmetcp_task_ag_ctx { 452 u8 reserved; 453 u8 state_and_core_id; 454 __le16 icid; 455 u8 flags0; 456#define E5_USTORM_NVMETCP_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF 457#define E5_USTORM_NVMETCP_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0 458#define E5_USTORM_NVMETCP_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1 459#define E5_USTORM_NVMETCP_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4 460#define E5_USTORM_NVMETCP_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_MASK 0x1 461#define E5_USTORM_NVMETCP_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_SHIFT 5 462#define E5_USTORM_NVMETCP_TASK_AG_CTX_HQ_SCANNED_CF_MASK 0x3 463#define E5_USTORM_NVMETCP_TASK_AG_CTX_HQ_SCANNED_CF_SHIFT 6 464 u8 flags1; 465#define E5_USTORM_NVMETCP_TASK_AG_CTX_RESERVED1_MASK 0x3 466#define E5_USTORM_NVMETCP_TASK_AG_CTX_RESERVED1_SHIFT 0 467#define E5_USTORM_NVMETCP_TASK_AG_CTX_R2T2RECV_MASK 0x3 468#define E5_USTORM_NVMETCP_TASK_AG_CTX_R2T2RECV_SHIFT 2 469#define E5_USTORM_NVMETCP_TASK_AG_CTX_CF3_MASK 0x3 470#define E5_USTORM_NVMETCP_TASK_AG_CTX_CF3_SHIFT 4 471#define E5_USTORM_NVMETCP_TASK_AG_CTX_DIF_ERROR_CF_MASK 0x3 472#define E5_USTORM_NVMETCP_TASK_AG_CTX_DIF_ERROR_CF_SHIFT 6 473 u8 flags2; 474#define E5_USTORM_NVMETCP_TASK_AG_CTX_HQ_SCANNED_CF_EN_MASK 0x1 475#define E5_USTORM_NVMETCP_TASK_AG_CTX_HQ_SCANNED_CF_EN_SHIFT 0 476#define E5_USTORM_NVMETCP_TASK_AG_CTX_DISABLE_DATA_ACKED_MASK 0x1 477#define E5_USTORM_NVMETCP_TASK_AG_CTX_DISABLE_DATA_ACKED_SHIFT 1 478#define E5_USTORM_NVMETCP_TASK_AG_CTX_R2T2RECV_EN_MASK 0x1 479#define E5_USTORM_NVMETCP_TASK_AG_CTX_R2T2RECV_EN_SHIFT 2 480#define E5_USTORM_NVMETCP_TASK_AG_CTX_CF3EN_MASK 0x1 481#define E5_USTORM_NVMETCP_TASK_AG_CTX_CF3EN_SHIFT 3 482#define E5_USTORM_NVMETCP_TASK_AG_CTX_DIF_ERROR_CF_EN_MASK 0x1 483#define E5_USTORM_NVMETCP_TASK_AG_CTX_DIF_ERROR_CF_EN_SHIFT 4 484#define E5_USTORM_NVMETCP_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_MASK 0x1 485#define E5_USTORM_NVMETCP_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_SHIFT 5 486#define E5_USTORM_NVMETCP_TASK_AG_CTX_RULE1EN_MASK 0x1 487#define E5_USTORM_NVMETCP_TASK_AG_CTX_RULE1EN_SHIFT 6 488#define E5_USTORM_NVMETCP_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_MASK 0x1 489#define E5_USTORM_NVMETCP_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_SHIFT 7 490 u8 flags3; 491 u8 flags4; 492#define E5_USTORM_NVMETCP_TASK_AG_CTX_RESERVED5_MASK 0x3 493#define E5_USTORM_NVMETCP_TASK_AG_CTX_RESERVED5_SHIFT 0 494#define E5_USTORM_NVMETCP_TASK_AG_CTX_RESERVED6_MASK 0x1 495#define E5_USTORM_NVMETCP_TASK_AG_CTX_RESERVED6_SHIFT 2 496#define E5_USTORM_NVMETCP_TASK_AG_CTX_RESERVED7_MASK 0x1 497#define E5_USTORM_NVMETCP_TASK_AG_CTX_RESERVED7_SHIFT 3 498#define E5_USTORM_NVMETCP_TASK_AG_CTX_DIF_ERROR_TYPE_MASK 0xF 499#define E5_USTORM_NVMETCP_TASK_AG_CTX_DIF_ERROR_TYPE_SHIFT 4 500 u8 byte2; 501 u8 byte3; 502 u8 reserved8; 503 __le32 dif_err_intervals; 504 __le32 dif_error_1st_interval; 505 __le32 rcv_cont_len; 506 __le32 exp_cont_len; 507 __le32 total_data_acked; 508 __le32 exp_data_acked; 509 __le16 word1; 510 __le16 next_tid; 511 __le32 hdr_residual_count; 512 __le32 exp_r2t_sn; 513}; 514 515struct e5_nvmetcp_task_context { 516 struct ystorm_nvmetcp_task_st_ctx ystorm_st_context; 517 struct e5_ystorm_nvmetcp_task_ag_ctx ystorm_ag_context; 518 struct regpair ystorm_ag_padding[2]; 519 struct e5_tdif_task_context tdif_context; 520 struct e5_mstorm_nvmetcp_task_ag_ctx mstorm_ag_context; 521 struct regpair mstorm_ag_padding[2]; 522 struct e5_ustorm_nvmetcp_task_ag_ctx ustorm_ag_context; 523 struct regpair ustorm_ag_padding[2]; 524 struct mstorm_nvmetcp_task_st_ctx mstorm_st_context; 525 struct regpair mstorm_st_padding[2]; 526 struct ustorm_nvmetcp_task_st_ctx ustorm_st_context; 527 struct regpair ustorm_st_padding[2]; 528 struct e5_rdif_task_context rdif_context; 529}; 530 531#endif /* __NVMETCP_COMMON__*/