1462 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright 2017 Broadcom. All Rights Reserved.4 * The term "Broadcom" refers to Broadcom Limited and/or its subsidiaries.5 *6 * Contact Information:7 * linux-drivers@broadcom.com8 */9 10#ifndef BEISCSI_CMDS_H11#define BEISCSI_CMDS_H12 13/**14 * The driver sends configuration and managements command requests to the15 * firmware in the BE. These requests are communicated to the processor16 * using Work Request Blocks (WRBs) submitted to the MCC-WRB ring or via one17 * WRB inside a MAILBOX.18 * The commands are serviced by the ARM processor in the OneConnect's MPU.19 */20struct be_sge {21 __le32 pa_lo;22 __le32 pa_hi;23 __le32 len;24};25 26struct be_mcc_wrb {27 u32 emb_sgecnt_special; /* dword 0 */28 /* bits 0 - embedded */29 /* bits 1 - 2 reserved */30 /* bits 3 - 7 sge count */31 /* bits 8 - 23 reserved */32 /* bits 24 - 31 special */33#define MCC_WRB_EMBEDDED_MASK 134#define MCC_WRB_SGE_CNT_SHIFT 335#define MCC_WRB_SGE_CNT_MASK 0x1F36 u32 payload_length; /* dword 1 */37 u32 tag0; /* dword 2 */38 u32 tag1; /* dword 3 */39 u32 rsvd; /* dword 4 */40 union {41#define EMBED_MBX_MAX_PAYLOAD_SIZE 22042 u8 embedded_payload[236]; /* used by embedded cmds */43 struct be_sge sgl[19]; /* used by non-embedded cmds */44 } payload;45};46 47#define CQE_FLAGS_VALID_MASK (1 << 31)48#define CQE_FLAGS_ASYNC_MASK (1 << 30)49#define CQE_FLAGS_COMPLETED_MASK (1 << 28)50#define CQE_FLAGS_CONSUMED_MASK (1 << 27)51 52/* Completion Status */53#define MCC_STATUS_SUCCESS 0x054#define MCC_STATUS_FAILED 0x155#define MCC_STATUS_ILLEGAL_REQUEST 0x256#define MCC_STATUS_ILLEGAL_FIELD 0x357#define MCC_STATUS_INSUFFICIENT_BUFFER 0x458#define MCC_STATUS_INVALID_LENGTH 0x7459 60#define CQE_STATUS_COMPL_MASK 0xFFFF61#define CQE_STATUS_COMPL_SHIFT 0 /* bits 0 - 15 */62#define CQE_STATUS_EXTD_MASK 0xFFFF63#define CQE_STATUS_EXTD_SHIFT 16 /* bits 31 - 16 */64#define CQE_STATUS_ADDL_MASK 0xFF0065#define CQE_STATUS_ADDL_SHIFT 866#define CQE_STATUS_MASK 0xFF67#define CQE_STATUS_WRB_MASK 0xFF000068#define CQE_STATUS_WRB_SHIFT 1669 70#define BEISCSI_HOST_MBX_TIMEOUT (110 * 1000)71#define BEISCSI_FW_MBX_TIMEOUT 10072 73/* MBOX Command VER */74#define MBX_CMD_VER1 0x0175#define MBX_CMD_VER2 0x0276 77struct be_mcc_compl {78 u32 status; /* dword 0 */79 u32 tag0; /* dword 1 */80 u32 tag1; /* dword 2 */81 u32 flags; /* dword 3 */82};83 84/********* Mailbox door bell *************/85/**86 * Used for driver communication with the FW.87 * The software must write this register twice to post any command. First,88 * it writes the register with hi=1 and the upper bits of the physical address89 * for the MAILBOX structure. Software must poll the ready bit until this90 * is acknowledged. Then, sotware writes the register with hi=0 with the lower91 * bits in the address. It must poll the ready bit until the command is92 * complete. Upon completion, the MAILBOX will contain a valid completion93 * queue entry.94 */95#define MPU_MAILBOX_DB_OFFSET 0x16096#define MPU_MAILBOX_DB_RDY_MASK 0x1 /* bit 0 */97#define MPU_MAILBOX_DB_HI_MASK 0x2 /* bit 1 */98 99/********** MPU semphore: used for SH & BE ******************/100#define SLIPORT_SOFTRESET_OFFSET 0x5c /* CSR BAR offset */101#define SLIPORT_SEMAPHORE_OFFSET_BEx 0xac /* CSR BAR offset */102#define SLIPORT_SEMAPHORE_OFFSET_SH 0x94 /* PCI-CFG offset */103#define POST_STAGE_MASK 0x0000FFFF104#define POST_ERROR_BIT 0x80000000105#define POST_ERR_RECOVERY_CODE_MASK 0xF000106 107/* Soft Reset register masks */108#define SLIPORT_SOFTRESET_SR_MASK 0x00000080 /* SR bit */109 110/* MPU semphore POST stage values */111#define POST_STAGE_AWAITING_HOST_RDY 0x1 /* FW awaiting goahead from host */112#define POST_STAGE_HOST_RDY 0x2 /* Host has given go-ahed to FW */113#define POST_STAGE_BE_RESET 0x3 /* Host wants to reset chip */114#define POST_STAGE_ARMFW_RDY 0xC000 /* FW is done with POST */115#define POST_STAGE_RECOVERABLE_ERR 0xE000 /* Recoverable err detected */116 117/********** MCC door bell ************/118#define DB_MCCQ_OFFSET 0x140119#define DB_MCCQ_RING_ID_MASK 0xFFFF /* bits 0 - 15 */120/* Number of entries posted */121#define DB_MCCQ_NUM_POSTED_SHIFT 16 /* bits 16 - 29 */122 123/**124 * When the async bit of mcc_compl is set, the last 4 bytes of125 * mcc_compl is interpreted as follows:126 */127#define ASYNC_TRAILER_EVENT_CODE_SHIFT 8 /* bits 8 - 15 */128#define ASYNC_TRAILER_EVENT_CODE_MASK 0xFF129#define ASYNC_EVENT_CODE_LINK_STATE 0x1130#define ASYNC_EVENT_CODE_ISCSI 0x4131#define ASYNC_EVENT_CODE_SLI 0x11132 133#define ASYNC_TRAILER_EVENT_TYPE_SHIFT 16 /* bits 16 - 23 */134#define ASYNC_TRAILER_EVENT_TYPE_MASK 0xFF135 136/* iSCSI events */137#define ASYNC_EVENT_NEW_ISCSI_TGT_DISC 0x4138#define ASYNC_EVENT_NEW_ISCSI_CONN 0x5139#define ASYNC_EVENT_NEW_TCP_CONN 0x7140 141/* SLI events */142#define ASYNC_SLI_EVENT_TYPE_MISCONFIGURED 0x9143#define ASYNC_SLI_LINK_EFFECT_VALID(le) (le & 0x80)144#define ASYNC_SLI_LINK_EFFECT_SEV(le) ((le >> 1) & 0x03)145#define ASYNC_SLI_LINK_EFFECT_STATE(le) (le & 0x01)146 147struct be_async_event_trailer {148 u32 code;149};150 151enum {152 ASYNC_EVENT_LINK_DOWN = 0x0,153 ASYNC_EVENT_LINK_UP = 0x1,154};155 156/**157 * When the event code of an async trailer is link-state, the mcc_compl158 * must be interpreted as follows159 */160struct be_async_event_link_state {161 u8 physical_port;162 u8 port_link_status;163/**164 * ASYNC_EVENT_LINK_DOWN 0x0165 * ASYNC_EVENT_LINK_UP 0x1166 * ASYNC_EVENT_LINK_LOGICAL_DOWN 0x2167 * ASYNC_EVENT_LINK_LOGICAL_UP 0x3168 */169#define BE_ASYNC_LINK_UP_MASK 0x01170 u8 port_duplex;171 u8 port_speed;172/* BE2ISCSI_LINK_SPEED_ZERO 0x00 - no link */173#define BE2ISCSI_LINK_SPEED_10MBPS 0x01174#define BE2ISCSI_LINK_SPEED_100MBPS 0x02175#define BE2ISCSI_LINK_SPEED_1GBPS 0x03176#define BE2ISCSI_LINK_SPEED_10GBPS 0x04177#define BE2ISCSI_LINK_SPEED_25GBPS 0x06178#define BE2ISCSI_LINK_SPEED_40GBPS 0x07179 u8 port_fault;180 u8 event_reason;181 u16 qos_link_speed;182 u32 event_tag;183 struct be_async_event_trailer trailer;184} __packed;185 186/**187 * When async-trailer is SLI event, mcc_compl is interpreted as188 */189struct be_async_event_sli {190 u32 event_data1;191 u32 event_data2;192 u32 reserved;193 u32 trailer;194} __packed;195 196struct be_mcc_mailbox {197 struct be_mcc_wrb wrb;198 struct be_mcc_compl compl;199};200 201/* Type of subsystems supported by FW */202#define CMD_SUBSYSTEM_COMMON 0x1203#define CMD_SUBSYSTEM_ISCSI 0x2204#define CMD_SUBSYSTEM_ETH 0x3205#define CMD_SUBSYSTEM_ISCSI_INI 0x6206#define CMD_COMMON_TCP_UPLOAD 0x1207 208/**209 * List of common opcodes subsystem CMD_SUBSYSTEM_COMMON210 * These opcodes are unique for each subsystem defined above211 */212#define OPCODE_COMMON_CQ_CREATE 12213#define OPCODE_COMMON_EQ_CREATE 13214#define OPCODE_COMMON_MCC_CREATE 21215#define OPCODE_COMMON_MCC_CREATE_EXT 90216#define OPCODE_COMMON_ADD_TEMPLATE_HEADER_BUFFERS 24217#define OPCODE_COMMON_REMOVE_TEMPLATE_HEADER_BUFFERS 25218#define OPCODE_COMMON_GET_CNTL_ATTRIBUTES 32219#define OPCODE_COMMON_GET_FW_VERSION 35220#define OPCODE_COMMON_MODIFY_EQ_DELAY 41221#define OPCODE_COMMON_FIRMWARE_CONFIG 42222#define OPCODE_COMMON_MCC_DESTROY 53223#define OPCODE_COMMON_CQ_DESTROY 54224#define OPCODE_COMMON_EQ_DESTROY 55225#define OPCODE_COMMON_QUERY_FIRMWARE_CONFIG 58226#define OPCODE_COMMON_FUNCTION_RESET 61227#define OPCODE_COMMON_GET_PORT_NAME 77228#define OPCODE_COMMON_SET_HOST_DATA 93229#define OPCODE_COMMON_SET_FEATURES 191230 231/**232 * LIST of opcodes that are common between Initiator and Target233 * used by CMD_SUBSYSTEM_ISCSI234 * These opcodes are unique for each subsystem defined above235 */236#define OPCODE_COMMON_ISCSI_CFG_POST_SGL_PAGES 2237#define OPCODE_COMMON_ISCSI_CFG_REMOVE_SGL_PAGES 3238#define OPCODE_COMMON_ISCSI_NTWK_GET_NIC_CONFIG 7239#define OPCODE_COMMON_ISCSI_NTWK_SET_VLAN 14240#define OPCODE_COMMON_ISCSI_NTWK_CONFIG_STATELESS_IP_ADDR 17241#define OPCODE_COMMON_ISCSI_NTWK_REL_STATELESS_IP_ADDR 18242#define OPCODE_COMMON_ISCSI_NTWK_MODIFY_IP_ADDR 21243#define OPCODE_COMMON_ISCSI_NTWK_GET_DEFAULT_GATEWAY 22244#define OPCODE_COMMON_ISCSI_NTWK_MODIFY_DEFAULT_GATEWAY 23245#define OPCODE_COMMON_ISCSI_NTWK_GET_ALL_IF_ID 24246#define OPCODE_COMMON_ISCSI_NTWK_GET_IF_INFO 25247#define OPCODE_COMMON_ISCSI_SET_FRAGNUM_BITS_FOR_SGL_CRA 61248#define OPCODE_COMMON_ISCSI_DEFQ_CREATE 64249#define OPCODE_COMMON_ISCSI_DEFQ_DESTROY 65250#define OPCODE_COMMON_ISCSI_WRBQ_CREATE 66251#define OPCODE_COMMON_ISCSI_WRBQ_DESTROY 67252 253struct be_cmd_req_hdr {254 u8 opcode; /* dword 0 */255 u8 subsystem; /* dword 0 */256 u8 port_number; /* dword 0 */257 u8 domain; /* dword 0 */258 u32 timeout; /* dword 1 */259 u32 request_length; /* dword 2 */260 u8 version; /* dword 3 */261 u8 rsvd0[3]; /* dword 3 */262};263 264struct be_cmd_resp_hdr {265 u32 info; /* dword 0 */266 u32 status; /* dword 1 */267 u32 response_length; /* dword 2 */268 u32 actual_resp_len; /* dword 3 */269};270 271struct phys_addr {272 u32 lo;273 u32 hi;274};275 276struct virt_addr {277 u32 lo;278 u32 hi;279};280/**************************281 * BE Command definitions *282 **************************/283 284/**285 * Pseudo amap definition in which each bit of the actual structure is defined286 * as a byte - used to calculate offset/shift/mask of each field287 */288struct amap_eq_context {289 u8 cidx[13]; /* dword 0 */290 u8 rsvd0[3]; /* dword 0 */291 u8 epidx[13]; /* dword 0 */292 u8 valid; /* dword 0 */293 u8 rsvd1; /* dword 0 */294 u8 size; /* dword 0 */295 u8 pidx[13]; /* dword 1 */296 u8 rsvd2[3]; /* dword 1 */297 u8 pd[10]; /* dword 1 */298 u8 count[3]; /* dword 1 */299 u8 solevent; /* dword 1 */300 u8 stalled; /* dword 1 */301 u8 armed; /* dword 1 */302 u8 rsvd3[4]; /* dword 2 */303 u8 func[8]; /* dword 2 */304 u8 rsvd4; /* dword 2 */305 u8 delaymult[10]; /* dword 2 */306 u8 rsvd5[2]; /* dword 2 */307 u8 phase[2]; /* dword 2 */308 u8 nodelay; /* dword 2 */309 u8 rsvd6[4]; /* dword 2 */310 u8 rsvd7[32]; /* dword 3 */311} __packed;312 313struct be_cmd_req_eq_create {314 struct be_cmd_req_hdr hdr; /* dw[4] */315 u16 num_pages; /* sword */316 u16 rsvd0; /* sword */317 u8 context[sizeof(struct amap_eq_context) / 8]; /* dw[4] */318 struct phys_addr pages[8];319} __packed;320 321struct be_cmd_resp_eq_create {322 struct be_cmd_resp_hdr resp_hdr;323 u16 eq_id; /* sword */324 u16 rsvd0; /* sword */325} __packed;326 327struct be_set_eqd {328 u32 eq_id;329 u32 phase;330 u32 delay_multiplier;331} __packed;332 333struct mgmt_chap_format {334 u32 flags;335 u8 intr_chap_name[256];336 u8 intr_secret[16];337 u8 target_chap_name[256];338 u8 target_secret[16];339 u16 intr_chap_name_length;340 u16 intr_secret_length;341 u16 target_chap_name_length;342 u16 target_secret_length;343} __packed;344 345struct mgmt_auth_method_format {346 u8 auth_method_type;347 u8 padding[3];348 struct mgmt_chap_format chap;349} __packed;350 351struct be_cmd_req_logout_fw_sess {352 struct be_cmd_req_hdr hdr; /* dw[4] */353 uint32_t session_handle;354} __packed;355 356struct be_cmd_resp_logout_fw_sess {357 struct be_cmd_resp_hdr hdr; /* dw[4] */358 uint32_t session_status;359#define BE_SESS_STATUS_CLOSE 0x20360} __packed;361 362struct mgmt_conn_login_options {363 u8 flags;364 u8 header_digest;365 u8 data_digest;366 u8 rsvd0;367 u32 max_recv_datasegment_len_ini;368 u32 max_recv_datasegment_len_tgt;369 u32 tcp_mss;370 u32 tcp_window_size;371 struct mgmt_auth_method_format auth_data;372} __packed;373 374struct ip_addr_format {375 u16 size_of_structure;376 u8 reserved;377 u8 ip_type;378#define BEISCSI_IP_TYPE_V4 0x1379#define BEISCSI_IP_TYPE_STATIC_V4 0x3380#define BEISCSI_IP_TYPE_DHCP_V4 0x5381/* type v4 values < type v6 values */382#define BEISCSI_IP_TYPE_V6 0x10383#define BEISCSI_IP_TYPE_ROUTABLE_V6 0x30384#define BEISCSI_IP_TYPE_LINK_LOCAL_V6 0x50385#define BEISCSI_IP_TYPE_AUTO_V6 0x90386 u8 addr[16];387 u32 rsvd0;388} __packed;389 390struct mgmt_conn_info {391 u32 connection_handle;392 u32 connection_status;393 u16 src_port;394 u16 dest_port;395 u16 dest_port_redirected;396 u16 cid;397 u32 estimated_throughput;398 struct ip_addr_format src_ipaddr;399 struct ip_addr_format dest_ipaddr;400 struct ip_addr_format dest_ipaddr_redirected;401 struct mgmt_conn_login_options negotiated_login_options;402} __packed;403 404struct mgmt_session_login_options {405 u8 flags;406 u8 error_recovery_level;407 u16 rsvd0;408 u32 first_burst_length;409 u32 max_burst_length;410 u16 max_connections;411 u16 max_outstanding_r2t;412 u16 default_time2wait;413 u16 default_time2retain;414} __packed;415 416struct mgmt_session_info {417 u32 session_handle;418 u32 status;419 u8 isid[6];420 u16 tsih;421 u32 session_flags;422 u16 conn_count;423 u16 pad;424 u8 target_name[224];425 u8 initiator_iscsiname[224];426 struct mgmt_session_login_options negotiated_login_options;427 struct mgmt_conn_info conn_list[1];428} __packed;429 430struct be_cmd_get_session_req {431 struct be_cmd_req_hdr hdr;432 u32 session_handle;433} __packed;434 435struct be_cmd_get_session_resp {436 struct be_cmd_resp_hdr hdr;437 struct mgmt_session_info session_info;438} __packed;439 440struct mac_addr {441 u16 size_of_structure;442 u8 addr[ETH_ALEN];443} __packed;444 445struct be_cmd_get_boot_target_req {446 struct be_cmd_req_hdr hdr;447} __packed;448 449struct be_cmd_get_boot_target_resp {450 struct be_cmd_resp_hdr hdr;451 u32 boot_session_count;452 u32 boot_session_handle;453/**454 * FW returns 0xffffffff if it couldn't establish connection with455 * configured boot target.456 */457#define BE_BOOT_INVALID_SHANDLE 0xffffffff458};459 460struct be_cmd_reopen_session_req {461 struct be_cmd_req_hdr hdr;462#define BE_REOPEN_ALL_SESSIONS 0x00463#define BE_REOPEN_BOOT_SESSIONS 0x01464#define BE_REOPEN_A_SESSION 0x02465 u16 reopen_type;466 u16 rsvd;467 u32 session_handle;468} __packed;469 470struct be_cmd_reopen_session_resp {471 struct be_cmd_resp_hdr hdr;472 u32 rsvd;473 u32 session_handle;474} __packed;475 476 477struct be_cmd_mac_query_req {478 struct be_cmd_req_hdr hdr;479 u8 type;480 u8 permanent;481 u16 if_id;482} __packed;483 484struct be_cmd_get_mac_resp {485 struct be_cmd_resp_hdr hdr;486 struct mac_addr mac;487};488 489struct be_ip_addr_subnet_format {490 u16 size_of_structure;491 u8 ip_type;492 u8 ipv6_prefix_length;493 u8 addr[16];494 u8 subnet_mask[16];495 u32 rsvd0;496} __packed;497 498struct be_cmd_get_if_info_req {499 struct be_cmd_req_hdr hdr;500 u32 interface_hndl;501 u32 ip_type;502} __packed;503 504struct be_cmd_get_if_info_resp {505 struct be_cmd_req_hdr hdr;506 u32 interface_hndl;507 u32 vlan_priority;508 u32 ip_addr_count;509 u32 dhcp_state;510 struct be_ip_addr_subnet_format ip_addr;511} __packed;512 513struct be_ip_addr_record {514 u32 action;515 u32 interface_hndl;516 struct be_ip_addr_subnet_format ip_addr;517 u32 status;518} __packed;519 520struct be_ip_addr_record_params {521 u32 record_entry_count;522 struct be_ip_addr_record ip_record;523} __packed;524 525struct be_cmd_set_ip_addr_req {526 struct be_cmd_req_hdr hdr;527 struct be_ip_addr_record_params ip_params;528} __packed;529 530 531struct be_cmd_set_dhcp_req {532 struct be_cmd_req_hdr hdr;533 u32 interface_hndl;534 u32 ip_type;535 u32 flags;536 u32 retry_count;537} __packed;538 539struct be_cmd_rel_dhcp_req {540 struct be_cmd_req_hdr hdr;541 u32 interface_hndl;542 u32 ip_type;543} __packed;544 545struct be_cmd_set_def_gateway_req {546 struct be_cmd_req_hdr hdr;547 u32 action;548 struct ip_addr_format ip_addr;549} __packed;550 551struct be_cmd_get_def_gateway_req {552 struct be_cmd_req_hdr hdr;553 u32 ip_type;554} __packed;555 556struct be_cmd_get_def_gateway_resp {557 struct be_cmd_req_hdr hdr;558 struct ip_addr_format ip_addr;559} __packed;560 561#define BEISCSI_VLAN_DISABLE 0xFFFF562struct be_cmd_set_vlan_req {563 struct be_cmd_req_hdr hdr;564 u32 interface_hndl;565 u32 vlan_priority;566} __packed;567/******************** Create CQ ***************************/568/**569 * Pseudo amap definition in which each bit of the actual structure is defined570 * as a byte - used to calculate offset/shift/mask of each field571 */572struct amap_cq_context {573 u8 cidx[11]; /* dword 0 */574 u8 rsvd0; /* dword 0 */575 u8 coalescwm[2]; /* dword 0 */576 u8 nodelay; /* dword 0 */577 u8 epidx[11]; /* dword 0 */578 u8 rsvd1; /* dword 0 */579 u8 count[2]; /* dword 0 */580 u8 valid; /* dword 0 */581 u8 solevent; /* dword 0 */582 u8 eventable; /* dword 0 */583 u8 pidx[11]; /* dword 1 */584 u8 rsvd2; /* dword 1 */585 u8 pd[10]; /* dword 1 */586 u8 eqid[8]; /* dword 1 */587 u8 stalled; /* dword 1 */588 u8 armed; /* dword 1 */589 u8 rsvd3[4]; /* dword 2 */590 u8 func[8]; /* dword 2 */591 u8 rsvd4[20]; /* dword 2 */592 u8 rsvd5[32]; /* dword 3 */593} __packed;594 595struct amap_cq_context_v2 {596 u8 rsvd0[12]; /* dword 0 */597 u8 coalescwm[2]; /* dword 0 */598 u8 nodelay; /* dword 0 */599 u8 rsvd1[12]; /* dword 0 */600 u8 count[2]; /* dword 0 */601 u8 valid; /* dword 0 */602 u8 rsvd2; /* dword 0 */603 u8 eventable; /* dword 0 */604 u8 eqid[16]; /* dword 1 */605 u8 rsvd3[15]; /* dword 1 */606 u8 armed; /* dword 1 */607 u8 cqecount[16];/* dword 2 */608 u8 rsvd4[16]; /* dword 2 */609 u8 rsvd5[32]; /* dword 3 */610};611 612struct be_cmd_req_cq_create {613 struct be_cmd_req_hdr hdr;614 u16 num_pages;615 u8 page_size;616 u8 rsvd0;617 u8 context[sizeof(struct amap_cq_context) / 8];618 struct phys_addr pages[4];619} __packed;620 621struct be_cmd_resp_cq_create {622 struct be_cmd_resp_hdr hdr;623 u16 cq_id;624 u16 rsvd0;625} __packed;626 627/******************** Create MCCQ ***************************/628/**629 * Pseudo amap definition in which each bit of the actual structure is defined630 * as a byte - used to calculate offset/shift/mask of each field631 */632struct amap_mcc_context {633 u8 con_index[14];634 u8 rsvd0[2];635 u8 ring_size[4];636 u8 fetch_wrb;637 u8 fetch_r2t;638 u8 cq_id[10];639 u8 prod_index[14];640 u8 fid[8];641 u8 pdid[9];642 u8 valid;643 u8 rsvd1[32];644 u8 rsvd2[32];645} __packed;646 647struct be_cmd_req_mcc_create_ext {648 struct be_cmd_req_hdr hdr;649 u16 num_pages;650 u16 rsvd0;651 u32 async_evt_bitmap;652 u8 context[sizeof(struct amap_mcc_context) / 8];653 struct phys_addr pages[8];654} __packed;655 656struct be_cmd_resp_mcc_create {657 struct be_cmd_resp_hdr hdr;658 u16 id;659 u16 rsvd0;660} __packed;661 662/******************** Q Destroy ***************************/663/* Type of Queue to be destroyed */664enum {665 QTYPE_EQ = 1,666 QTYPE_CQ,667 QTYPE_MCCQ,668 QTYPE_WRBQ,669 QTYPE_DPDUQ,670 QTYPE_SGL671};672 673struct be_cmd_req_q_destroy {674 struct be_cmd_req_hdr hdr;675 u16 id;676 u16 bypass_flush; /* valid only for rx q destroy */677} __packed;678 679struct macaddr {680 u8 byte[ETH_ALEN];681};682 683struct be_cmd_req_mcast_mac_config {684 struct be_cmd_req_hdr hdr;685 u16 num_mac;686 u8 promiscuous;687 u8 interface_id;688 struct macaddr mac[32];689} __packed;690 691static inline void *embedded_payload(struct be_mcc_wrb *wrb)692{693 return wrb->payload.embedded_payload;694}695 696static inline struct be_sge *nonembedded_sgl(struct be_mcc_wrb *wrb)697{698 return &wrb->payload.sgl[0];699}700 701/******************** Modify EQ Delay *******************/702struct be_cmd_req_modify_eq_delay {703 struct be_cmd_req_hdr hdr;704 __le32 num_eq;705 struct {706 __le32 eq_id;707 __le32 phase;708 __le32 delay_multiplier;709 } delay[MAX_CPUS];710} __packed;711 712/******************** Get MAC ADDR *******************/713 714struct be_cmd_get_nic_conf_resp {715 struct be_cmd_resp_hdr hdr;716 u32 nic_port_count;717 u32 speed;718 u32 max_speed;719 u32 link_state;720 u32 max_frame_size;721 u16 size_of_structure;722 u8 mac_address[ETH_ALEN];723} __packed;724 725/******************** Get HBA NAME *******************/726 727struct be_cmd_hba_name {728 struct be_cmd_req_hdr hdr;729 u16 flags;730 u16 rsvd0;731 u8 initiator_name[ISCSI_NAME_LEN];732#define BE_INI_ALIAS_LEN 32733 u8 initiator_alias[BE_INI_ALIAS_LEN];734} __packed;735 736/******************** COMMON SET HOST DATA *******************/737#define BE_CMD_SET_HOST_PARAM_ID 0x2738#define BE_CMD_MAX_DRV_VERSION 0x30739struct be_sethost_req {740 u32 param_id;741 u32 param_len;742 u32 param_data[32];743};744 745struct be_sethost_resp {746 u32 rsvd0;747};748 749struct be_cmd_set_host_data {750 union {751 struct be_cmd_req_hdr req_hdr;752 struct be_cmd_resp_hdr resp_hdr;753 } h;754 union {755 struct be_sethost_req req;756 struct be_sethost_resp resp;757 } param;758} __packed;759 760/******************** COMMON SET Features *******************/761#define BE_CMD_SET_FEATURE_UER 0x10762#define BE_CMD_UER_SUPP_BIT 0x1763struct be_uer_req {764 u32 uer;765 u32 rsvd;766};767 768struct be_uer_resp {769 u32 uer;770 u16 ue2rp;771 u16 ue2sr;772};773 774struct be_cmd_set_features {775 union {776 struct be_cmd_req_hdr req_hdr;777 struct be_cmd_resp_hdr resp_hdr;778 } h;779 u32 feature;780 u32 param_len;781 union {782 struct be_uer_req req;783 struct be_uer_resp resp;784 u32 rsvd[2];785 } param;786} __packed;787 788int beiscsi_cmd_function_reset(struct beiscsi_hba *phba);789 790int beiscsi_cmd_special_wrb(struct be_ctrl_info *ctrl, u32 load);791 792int beiscsi_check_fw_rdy(struct beiscsi_hba *phba);793 794int beiscsi_init_sliport(struct beiscsi_hba *phba);795 796int beiscsi_cmd_iscsi_cleanup(struct beiscsi_hba *phba, unsigned short ulp_num);797 798int beiscsi_detect_ue(struct beiscsi_hba *phba);799 800int beiscsi_detect_tpe(struct beiscsi_hba *phba);801 802int beiscsi_cmd_eq_create(struct be_ctrl_info *ctrl,803 struct be_queue_info *eq, int eq_delay);804 805int beiscsi_cmd_cq_create(struct be_ctrl_info *ctrl,806 struct be_queue_info *cq, struct be_queue_info *eq,807 bool sol_evts, bool no_delay,808 int num_cqe_dma_coalesce);809 810int beiscsi_cmd_q_destroy(struct be_ctrl_info *ctrl, struct be_queue_info *q,811 int type);812int beiscsi_cmd_mccq_create(struct beiscsi_hba *phba,813 struct be_queue_info *mccq,814 struct be_queue_info *cq);815 816void free_mcc_wrb(struct be_ctrl_info *ctrl, unsigned int tag);817 818int beiscsi_modify_eq_delay(struct beiscsi_hba *phba, struct be_set_eqd *,819 int num);820int beiscsi_mccq_compl_wait(struct beiscsi_hba *phba,821 unsigned int tag,822 struct be_mcc_wrb **wrb,823 struct be_dma_mem *mbx_cmd_mem);824int __beiscsi_mcc_compl_status(struct beiscsi_hba *phba,825 unsigned int tag,826 struct be_mcc_wrb **wrb,827 struct be_dma_mem *mbx_cmd_mem);828struct be_mcc_wrb *wrb_from_mbox(struct be_dma_mem *mbox_mem);829void be_mcc_notify(struct beiscsi_hba *phba, unsigned int tag);830struct be_mcc_wrb *alloc_mcc_wrb(struct beiscsi_hba *phba,831 unsigned int *ref_tag);832void beiscsi_process_async_event(struct beiscsi_hba *phba,833 struct be_mcc_compl *compl);834int beiscsi_process_mcc_compl(struct be_ctrl_info *ctrl,835 struct be_mcc_compl *compl);836 837int be_cmd_create_default_pdu_queue(struct be_ctrl_info *ctrl,838 struct be_queue_info *cq,839 struct be_queue_info *dq, int length,840 int entry_size, uint8_t is_header,841 uint8_t ulp_num);842 843int be_cmd_iscsi_post_template_hdr(struct be_ctrl_info *ctrl,844 struct be_dma_mem *q_mem);845 846int be_cmd_iscsi_remove_template_hdr(struct be_ctrl_info *ctrl);847 848int be_cmd_iscsi_post_sgl_pages(struct be_ctrl_info *ctrl,849 struct be_dma_mem *q_mem, u32 page_offset,850 u32 num_pages);851 852int be_cmd_wrbq_create(struct be_ctrl_info *ctrl, struct be_dma_mem *q_mem,853 struct be_queue_info *wrbq,854 struct hwi_wrb_context *pwrb_context,855 uint8_t ulp_num);856 857/* Configuration Functions */858int be_cmd_set_vlan(struct beiscsi_hba *phba, uint16_t vlan_tag);859 860int beiscsi_check_supported_fw(struct be_ctrl_info *ctrl,861 struct beiscsi_hba *phba);862 863int beiscsi_get_fw_config(struct be_ctrl_info *ctrl, struct beiscsi_hba *phba);864 865int beiscsi_get_port_name(struct be_ctrl_info *ctrl, struct beiscsi_hba *phba);866 867int beiscsi_set_uer_feature(struct beiscsi_hba *phba);868int beiscsi_set_host_data(struct beiscsi_hba *phba);869 870struct be_default_pdu_context {871 u32 dw[4];872} __packed;873 874struct amap_be_default_pdu_context {875 u8 dbuf_cindex[13]; /* dword 0 */876 u8 rsvd0[3]; /* dword 0 */877 u8 ring_size[4]; /* dword 0 */878 u8 ring_state[4]; /* dword 0 */879 u8 rsvd1[8]; /* dword 0 */880 u8 dbuf_pindex[13]; /* dword 1 */881 u8 rsvd2; /* dword 1 */882 u8 pci_func_id[8]; /* dword 1 */883 u8 rx_pdid[9]; /* dword 1 */884 u8 rx_pdid_valid; /* dword 1 */885 u8 default_buffer_size[16]; /* dword 2 */886 u8 cq_id_recv[10]; /* dword 2 */887 u8 rx_pdid_not_valid; /* dword 2 */888 u8 rsvd3[5]; /* dword 2 */889 u8 rsvd4[32]; /* dword 3 */890} __packed;891 892struct amap_default_pdu_context_ext {893 u8 rsvd0[16]; /* dword 0 */894 u8 ring_size[4]; /* dword 0 */895 u8 rsvd1[12]; /* dword 0 */896 u8 rsvd2[22]; /* dword 1 */897 u8 rx_pdid[9]; /* dword 1 */898 u8 rx_pdid_valid; /* dword 1 */899 u8 default_buffer_size[16]; /* dword 2 */900 u8 cq_id_recv[16]; /* dword 2 */901 u8 rsvd3[32]; /* dword 3 */902} __packed;903 904struct be_defq_create_req {905 struct be_cmd_req_hdr hdr;906 u16 num_pages;907 u8 ulp_num;908#define BEISCSI_DUAL_ULP_AWARE_BIT 0 /* Byte 3 - Bit 0 */909#define BEISCSI_BIND_Q_TO_ULP_BIT 1 /* Byte 3 - Bit 1 */910 u8 dua_feature;911 struct be_default_pdu_context context;912 struct phys_addr pages[8];913} __packed;914 915struct be_defq_create_resp {916 struct be_cmd_req_hdr hdr;917 u16 id;918 u8 rsvd0;919 u8 ulp_num;920 u32 doorbell_offset;921 u16 register_set;922 u16 doorbell_format;923} __packed;924 925struct be_post_template_pages_req {926 struct be_cmd_req_hdr hdr;927 u16 num_pages;928#define BEISCSI_TEMPLATE_HDR_TYPE_ISCSI 0x1929 u16 type;930 struct phys_addr scratch_pa;931 struct virt_addr scratch_va;932 struct virt_addr pages_va;933 struct phys_addr pages[16];934} __packed;935 936struct be_remove_template_pages_req {937 struct be_cmd_req_hdr hdr;938 u16 type;939 u16 rsvd0;940} __packed;941 942struct be_post_sgl_pages_req {943 struct be_cmd_req_hdr hdr;944 u16 num_pages;945 u16 page_offset;946 u32 rsvd0;947 struct phys_addr pages[26];948 u32 rsvd1;949} __packed;950 951struct be_wrbq_create_req {952 struct be_cmd_req_hdr hdr;953 u16 num_pages;954 u8 ulp_num;955 u8 dua_feature;956 struct phys_addr pages[8];957} __packed;958 959struct be_wrbq_create_resp {960 struct be_cmd_resp_hdr resp_hdr;961 u16 cid;962 u8 rsvd0;963 u8 ulp_num;964 u32 doorbell_offset;965 u16 register_set;966 u16 doorbell_format;967} __packed;968 969#define SOL_CID_MASK 0x0000FFC0970#define SOL_CODE_MASK 0x0000003F971#define SOL_WRB_INDEX_MASK 0x00FF0000972#define SOL_CMD_WND_MASK 0xFF000000973#define SOL_RES_CNT_MASK 0x7FFFFFFF974#define SOL_EXP_CMD_SN_MASK 0xFFFFFFFF975#define SOL_HW_STS_MASK 0x000000FF976#define SOL_STS_MASK 0x0000FF00977#define SOL_RESP_MASK 0x00FF0000978#define SOL_FLAGS_MASK 0x7F000000979#define SOL_S_MASK 0x80000000980 981struct sol_cqe {982 u32 dw[4];983};984 985struct amap_sol_cqe {986 u8 hw_sts[8]; /* dword 0 */987 u8 i_sts[8]; /* dword 0 */988 u8 i_resp[8]; /* dword 0 */989 u8 i_flags[7]; /* dword 0 */990 u8 s; /* dword 0 */991 u8 i_exp_cmd_sn[32]; /* dword 1 */992 u8 code[6]; /* dword 2 */993 u8 cid[10]; /* dword 2 */994 u8 wrb_index[8]; /* dword 2 */995 u8 i_cmd_wnd[8]; /* dword 2 */996 u8 i_res_cnt[31]; /* dword 3 */997 u8 valid; /* dword 3 */998} __packed;999 1000#define SOL_ICD_INDEX_MASK 0x0003FFC01001struct amap_sol_cqe_ring {1002 u8 hw_sts[8]; /* dword 0 */1003 u8 i_sts[8]; /* dword 0 */1004 u8 i_resp[8]; /* dword 0 */1005 u8 i_flags[7]; /* dword 0 */1006 u8 s; /* dword 0 */1007 u8 i_exp_cmd_sn[32]; /* dword 1 */1008 u8 code[6]; /* dword 2 */1009 u8 icd_index[12]; /* dword 2 */1010 u8 rsvd[6]; /* dword 2 */1011 u8 i_cmd_wnd[8]; /* dword 2 */1012 u8 i_res_cnt[31]; /* dword 3 */1013 u8 valid; /* dword 3 */1014} __packed;1015 1016struct amap_sol_cqe_v2 {1017 u8 hw_sts[8]; /* dword 0 */1018 u8 i_sts[8]; /* dword 0 */1019 u8 wrb_index[16]; /* dword 0 */1020 u8 i_exp_cmd_sn[32]; /* dword 1 */1021 u8 code[6]; /* dword 2 */1022 u8 cmd_cmpl; /* dword 2 */1023 u8 rsvd0; /* dword 2 */1024 u8 i_cmd_wnd[8]; /* dword 2 */1025 u8 cid[13]; /* dword 2 */1026 u8 u; /* dword 2 */1027 u8 o; /* dword 2 */1028 u8 s; /* dword 2 */1029 u8 i_res_cnt[31]; /* dword 3 */1030 u8 valid; /* dword 3 */1031} __packed;1032 1033struct common_sol_cqe {1034 u32 exp_cmdsn;1035 u32 res_cnt;1036 u16 wrb_index;1037 u16 cid;1038 u8 hw_sts;1039 u8 cmd_wnd;1040 u8 res_flag; /* the s feild of structure */1041 u8 i_resp; /* for skh if cmd_complete is set then i_sts is response */1042 u8 i_flags; /* for skh or the u and o feilds */1043 u8 i_sts; /* for skh if cmd_complete is not-set then i_sts is status */1044};1045 1046/*** iSCSI ack/driver message completions ***/1047struct amap_it_dmsg_cqe {1048 u8 ack_num[32]; /* DWORD 0 */1049 u8 pdu_bytes_rcvd[32]; /* DWORD 1 */1050 u8 code[6]; /* DWORD 2 */1051 u8 cid[10]; /* DWORD 2 */1052 u8 wrb_idx[8]; /* DWORD 2 */1053 u8 rsvd0[8]; /* DWORD 2*/1054 u8 rsvd1[31]; /* DWORD 3*/1055 u8 valid; /* DWORD 3 */1056} __packed;1057 1058struct amap_it_dmsg_cqe_v2 {1059 u8 ack_num[32]; /* DWORD 0 */1060 u8 pdu_bytes_rcvd[32]; /* DWORD 1 */1061 u8 code[6]; /* DWORD 2 */1062 u8 rsvd0[10]; /* DWORD 2 */1063 u8 wrb_idx[16]; /* DWORD 2 */1064 u8 rsvd1[16]; /* DWORD 3 */1065 u8 cid[13]; /* DWORD 3 */1066 u8 rsvd2[2]; /* DWORD 3 */1067 u8 valid; /* DWORD 3 */1068} __packed;1069 1070 1071/**1072 * Post WRB Queue Doorbell Register used by the host Storage1073 * stack to notify the1074 * controller of a posted Work Request Block1075 */1076#define DB_WRB_POST_CID_MASK 0xFFFF /* bits 0 - 16 */1077#define DB_DEF_PDU_WRB_INDEX_MASK 0xFF /* bits 0 - 9 */1078 1079#define DB_DEF_PDU_WRB_INDEX_SHIFT 161080#define DB_DEF_PDU_NUM_POSTED_SHIFT 241081 1082struct fragnum_bits_for_sgl_cra_in {1083 struct be_cmd_req_hdr hdr;1084 u32 num_bits;1085} __packed;1086 1087struct iscsi_cleanup_req {1088 struct be_cmd_req_hdr hdr;1089 u16 chute;1090 u8 hdr_ring_id;1091 u8 data_ring_id;1092} __packed;1093 1094struct iscsi_cleanup_req_v1 {1095 struct be_cmd_req_hdr hdr;1096 u16 chute;1097 u16 rsvd1;1098 u16 hdr_ring_id;1099 u16 rsvd2;1100 u16 data_ring_id;1101 u16 rsvd3;1102} __packed;1103 1104struct eq_delay {1105 u32 eq_id;1106 u32 phase;1107 u32 delay_multiplier;1108} __packed;1109 1110struct be_eq_delay_params_in {1111 struct be_cmd_req_hdr hdr;1112 u32 num_eq;1113 struct eq_delay delay[8];1114} __packed;1115 1116struct tcp_connect_and_offload_in {1117 struct be_cmd_req_hdr hdr;1118 struct ip_addr_format ip_address;1119 u16 tcp_port;1120 u16 cid;1121 u16 cq_id;1122 u16 defq_id;1123 struct phys_addr dataout_template_pa;1124 u16 hdr_ring_id;1125 u16 data_ring_id;1126 u8 do_offload;1127 u8 rsvd0[3];1128} __packed;1129 1130struct tcp_connect_and_offload_in_v1 {1131 struct be_cmd_req_hdr hdr;1132 struct ip_addr_format ip_address;1133 u16 tcp_port;1134 u16 cid;1135 u16 cq_id;1136 u16 defq_id;1137 struct phys_addr dataout_template_pa;1138 u16 hdr_ring_id;1139 u16 data_ring_id;1140 u8 do_offload;1141 u8 ifd_state;1142 u8 rsvd0[2];1143 u16 tcp_window_size;1144 u8 tcp_window_scale_count;1145 u8 rsvd1;1146 u32 tcp_mss:24;1147 u8 rsvd2;1148} __packed;1149 1150struct tcp_connect_and_offload_out {1151 struct be_cmd_resp_hdr hdr;1152 u32 connection_handle;1153 u16 cid;1154 u16 rsvd0;1155 1156} __packed;1157 1158#define DB_DEF_PDU_RING_ID_MASK 0x3FFF /* bits 0 - 13 */1159#define DB_DEF_PDU_CQPROC_MASK 0x3FFF /* bits 16 - 29 */1160#define DB_DEF_PDU_REARM_SHIFT 141161#define DB_DEF_PDU_EVENT_SHIFT 151162#define DB_DEF_PDU_CQPROC_SHIFT 161163 1164struct be_invalidate_connection_params_in {1165 struct be_cmd_req_hdr hdr;1166 u32 session_handle;1167 u16 cid;1168 u16 unused;1169#define BE_CLEANUP_TYPE_INVALIDATE 0x80011170#define BE_CLEANUP_TYPE_ISSUE_TCP_RST 0x80021171 u16 cleanup_type;1172 u16 save_cfg;1173} __packed;1174 1175struct be_invalidate_connection_params_out {1176 u32 session_handle;1177 u16 cid;1178 u16 unused;1179} __packed;1180 1181union be_invalidate_connection_params {1182 struct be_invalidate_connection_params_in req;1183 struct be_invalidate_connection_params_out resp;1184} __packed;1185 1186struct be_tcp_upload_params_in {1187 struct be_cmd_req_hdr hdr;1188 u16 id;1189#define BE_UPLOAD_TYPE_GRACEFUL 11190/* abortive upload with reset */1191#define BE_UPLOAD_TYPE_ABORT_RESET 21192/* abortive upload without reset */1193#define BE_UPLOAD_TYPE_ABORT 31194/* abortive upload with reset, sequence number by driver */1195#define BE_UPLOAD_TYPE_ABORT_WITH_SEQ 41196 u16 upload_type;1197 u32 reset_seq;1198} __packed;1199 1200struct be_tcp_upload_params_out {1201 u32 dw[32];1202} __packed;1203 1204union be_tcp_upload_params {1205 struct be_tcp_upload_params_in request;1206 struct be_tcp_upload_params_out response;1207} __packed;1208 1209struct be_ulp_fw_cfg {1210#define BEISCSI_ULP_ISCSI_INI_MODE 0x101211 u32 ulp_mode;1212 u32 etx_base;1213 u32 etx_count;1214 u32 sq_base;1215 u32 sq_count;1216 u32 rq_base;1217 u32 rq_count;1218 u32 dq_base;1219 u32 dq_count;1220 u32 lro_base;1221 u32 lro_count;1222 u32 icd_base;1223 u32 icd_count;1224};1225 1226struct be_ulp_chain_icd {1227 u32 chain_base;1228 u32 chain_count;1229};1230 1231struct be_fw_cfg {1232 struct be_cmd_req_hdr hdr;1233 u32 be_config_number;1234 u32 asic_revision;1235 u32 phys_port;1236#define BEISCSI_FUNC_ISCSI_INI_MODE 0x101237#define BEISCSI_FUNC_DUA_MODE 0x8001238 u32 function_mode;1239 struct be_ulp_fw_cfg ulp[2];1240 u32 function_caps;1241 u32 cqid_base;1242 u32 cqid_count;1243 u32 eqid_base;1244 u32 eqid_count;1245 struct be_ulp_chain_icd chain_icd[2];1246} __packed;1247 1248struct be_cmd_get_all_if_id_req {1249 struct be_cmd_req_hdr hdr;1250 u32 if_count;1251 u32 if_hndl_list[1];1252} __packed;1253 1254struct be_cmd_get_port_name {1255 union {1256 struct be_cmd_req_hdr req_hdr;1257 struct be_cmd_resp_hdr resp_hdr;1258 } h;1259 union {1260 struct {1261 u32 reserved;1262 } req;1263 struct {1264 u32 port_names;1265 } resp;1266 } p;1267} __packed;1268 1269#define ISCSI_OPCODE_SCSI_DATA_OUT 51270#define OPCODE_COMMON_NTWK_LINK_STATUS_QUERY 51271#define OPCODE_COMMON_MODIFY_EQ_DELAY 411272#define OPCODE_COMMON_ISCSI_CLEANUP 591273#define OPCODE_COMMON_TCP_UPLOAD 561274#define OPCODE_COMMON_ISCSI_TCP_CONNECT_AND_OFFLOAD 701275#define OPCODE_COMMON_ISCSI_ERROR_RECOVERY_INVALIDATE_COMMANDS 11276#define OPCODE_ISCSI_INI_CFG_GET_HBA_NAME 61277#define OPCODE_ISCSI_INI_CFG_SET_HBA_NAME 71278#define OPCODE_ISCSI_INI_SESSION_GET_A_SESSION 141279#define OPCODE_ISCSI_INI_SESSION_LOGOUT_TARGET 241280#define OPCODE_ISCSI_INI_DRIVER_REOPEN_ALL_SESSIONS 361281#define OPCODE_ISCSI_INI_DRIVER_OFFLOAD_SESSION 411282#define OPCODE_ISCSI_INI_DRIVER_INVALIDATE_CONNECTION 421283#define OPCODE_ISCSI_INI_BOOT_GET_BOOT_TARGET 521284#define OPCODE_COMMON_WRITE_FLASH 961285#define OPCODE_COMMON_READ_FLASH 971286 1287#define CMD_ISCSI_COMMAND_INVALIDATE 11288 1289#define INI_WR_CMD 1 /* Initiator write command */1290#define INI_TMF_CMD 2 /* Initiator TMF command */1291#define INI_NOPOUT_CMD 3 /* Initiator; Send a NOP-OUT */1292#define INI_RD_CMD 5 /* Initiator requesting to send1293 * a read command1294 */1295#define TGT_CTX_UPDT_CMD 7 /* Target context update */1296#define TGT_DM_CMD 11 /* Indicates that the bhs1297 * prepared by driver should not1298 * be touched.1299 */1300 1301/* Returns the number of items in the field array. */1302#define BE_NUMBER_OF_FIELD(_type_, _field_) \1303 (sizeof_field(_type_, _field_)/sizeof((((_type_ *)0)->_field_[0])))\1304 1305/**1306 * Different types of iSCSI completions to host driver for both initiator1307 * and taget mode1308 * of operation.1309 */1310#define SOL_CMD_COMPLETE 1 /* Solicited command completed1311 * normally1312 */1313#define SOL_CMD_KILLED_DATA_DIGEST_ERR 2 /* Solicited command got1314 * invalidated internally due1315 * to Data Digest error1316 */1317#define CXN_KILLED_PDU_SIZE_EXCEEDS_DSL 3 /* Connection got invalidated1318 * internally1319 * due to a received PDU1320 * size > DSL1321 */1322#define CXN_KILLED_BURST_LEN_MISMATCH 4 /* Connection got invalidated1323 * internally due ti received1324 * PDU sequence size >1325 * FBL/MBL.1326 */1327#define CXN_KILLED_AHS_RCVD 5 /* Connection got invalidated1328 * internally due to a received1329 * PDU Hdr that has1330 * AHS */1331#define CXN_KILLED_HDR_DIGEST_ERR 6 /* Connection got invalidated1332 * internally due to Hdr Digest1333 * error1334 */1335#define CXN_KILLED_UNKNOWN_HDR 7 /* Connection got invalidated1336 * internally1337 * due to a bad opcode in the1338 * pdu hdr1339 */1340#define CXN_KILLED_STALE_ITT_TTT_RCVD 8 /* Connection got invalidated1341 * internally due to a received1342 * ITT/TTT that does not belong1343 * to this Connection1344 */1345#define CXN_KILLED_INVALID_ITT_TTT_RCVD 9 /* Connection got invalidated1346 * internally due to received1347 * ITT/TTT value > Max1348 * Supported ITTs/TTTs1349 */1350#define CXN_KILLED_RST_RCVD 10 /* Connection got invalidated1351 * internally due to an1352 * incoming TCP RST1353 */1354#define CXN_KILLED_TIMED_OUT 11 /* Connection got invalidated1355 * internally due to timeout on1356 * tcp segment 12 retransmit1357 * attempts failed1358 */1359#define CXN_KILLED_RST_SENT 12 /* Connection got invalidated1360 * internally due to TCP RST1361 * sent by the Tx side1362 */1363#define CXN_KILLED_FIN_RCVD 13 /* Connection got invalidated1364 * internally due to an1365 * incoming TCP FIN.1366 */1367#define CXN_KILLED_BAD_UNSOL_PDU_RCVD 14 /* Connection got invalidated1368 * internally due to bad1369 * unsolicited PDU Unsolicited1370 * PDUs are PDUs with1371 * ITT=0xffffffff1372 */1373#define CXN_KILLED_BAD_WRB_INDEX_ERROR 15 /* Connection got invalidated1374 * internally due to bad WRB1375 * index.1376 */1377#define CXN_KILLED_OVER_RUN_RESIDUAL 16 /* Command got invalidated1378 * internally due to received1379 * command has residual1380 * over run bytes.1381 */1382#define CXN_KILLED_UNDER_RUN_RESIDUAL 17 /* Command got invalidated1383 * internally due to received1384 * command has residual under1385 * run bytes.1386 */1387#define CMD_KILLED_INVALID_STATSN_RCVD 18 /* Command got invalidated1388 * internally due to a received1389 * PDU has an invalid StatusSN1390 */1391#define CMD_KILLED_INVALID_R2T_RCVD 19 /* Command got invalidated1392 * internally due to a received1393 * an R2T with some invalid1394 * fields in it1395 */1396#define CMD_CXN_KILLED_LUN_INVALID 20 /* Command got invalidated1397 * internally due to received1398 * PDU has an invalid LUN.1399 */1400#define CMD_CXN_KILLED_ICD_INVALID 21 /* Command got invalidated1401 * internally due to the1402 * corresponding ICD not in a1403 * valid state1404 */1405#define CMD_CXN_KILLED_ITT_INVALID 22 /* Command got invalidated due1406 * to received PDU has an1407 * invalid ITT.1408 */1409#define CMD_CXN_KILLED_SEQ_OUTOFORDER 23 /* Command got invalidated due1410 * to received sequence buffer1411 * offset is out of order.1412 */1413#define CMD_CXN_KILLED_INVALID_DATASN_RCVD 24 /* Command got invalidated1414 * internally due to a1415 * received PDU has an invalid1416 * DataSN1417 */1418#define CXN_INVALIDATE_NOTIFY 25 /* Connection invalidation1419 * completion notify.1420 */1421#define CXN_INVALIDATE_INDEX_NOTIFY 26 /* Connection invalidation1422 * completion1423 * with data PDU index.1424 */1425#define CMD_INVALIDATED_NOTIFY 27 /* Command invalidation1426 * completionnotifify.1427 */1428#define UNSOL_HDR_NOTIFY 28 /* Unsolicited header notify.*/1429#define UNSOL_DATA_NOTIFY 29 /* Unsolicited data notify.*/1430#define UNSOL_DATA_DIGEST_ERROR_NOTIFY 30 /* Unsolicited data digest1431 * error notify.1432 */1433#define DRIVERMSG_NOTIFY 31 /* TCP acknowledge based1434 * notification.1435 */1436#define CXN_KILLED_CMND_DATA_NOT_ON_SAME_CONN 32 /* Connection got invalidated1437 * internally due to command1438 * and data are not on same1439 * connection.1440 */1441#define SOL_CMD_KILLED_DIF_ERR 33 /* Solicited command got1442 * invalidated internally due1443 * to DIF error1444 */1445#define CXN_KILLED_SYN_RCVD 34 /* Connection got invalidated1446 * internally due to incoming1447 * TCP SYN1448 */1449#define CXN_KILLED_IMM_DATA_RCVD 35 /* Connection got invalidated1450 * internally due to an1451 * incoming Unsolicited PDU1452 * that has immediate data on1453 * the cxn1454 */1455 1456void be_wrb_hdr_prepare(struct be_mcc_wrb *wrb, u32 payload_len,1457 bool embedded, u8 sge_cnt);1458 1459void be_cmd_hdr_prepare(struct be_cmd_req_hdr *req_hdr,1460 u8 subsystem, u8 opcode, u32 cmd_len);1461#endif /* !BEISCSI_CMDS_H */1462