162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright 2017 Broadcom. All Rights Reserved. 462306a36Sopenharmony_ci * The term "Broadcom" refers to Broadcom Limited and/or its subsidiaries. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Contact Information: 762306a36Sopenharmony_ci * linux-drivers@broadcom.com 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef BEISCSI_CMDS_H 1162306a36Sopenharmony_ci#define BEISCSI_CMDS_H 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/** 1462306a36Sopenharmony_ci * The driver sends configuration and managements command requests to the 1562306a36Sopenharmony_ci * firmware in the BE. These requests are communicated to the processor 1662306a36Sopenharmony_ci * using Work Request Blocks (WRBs) submitted to the MCC-WRB ring or via one 1762306a36Sopenharmony_ci * WRB inside a MAILBOX. 1862306a36Sopenharmony_ci * The commands are serviced by the ARM processor in the OneConnect's MPU. 1962306a36Sopenharmony_ci */ 2062306a36Sopenharmony_cistruct be_sge { 2162306a36Sopenharmony_ci __le32 pa_lo; 2262306a36Sopenharmony_ci __le32 pa_hi; 2362306a36Sopenharmony_ci __le32 len; 2462306a36Sopenharmony_ci}; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistruct be_mcc_wrb { 2762306a36Sopenharmony_ci u32 emb_sgecnt_special; /* dword 0 */ 2862306a36Sopenharmony_ci /* bits 0 - embedded */ 2962306a36Sopenharmony_ci /* bits 1 - 2 reserved */ 3062306a36Sopenharmony_ci /* bits 3 - 7 sge count */ 3162306a36Sopenharmony_ci /* bits 8 - 23 reserved */ 3262306a36Sopenharmony_ci /* bits 24 - 31 special */ 3362306a36Sopenharmony_ci#define MCC_WRB_EMBEDDED_MASK 1 3462306a36Sopenharmony_ci#define MCC_WRB_SGE_CNT_SHIFT 3 3562306a36Sopenharmony_ci#define MCC_WRB_SGE_CNT_MASK 0x1F 3662306a36Sopenharmony_ci u32 payload_length; /* dword 1 */ 3762306a36Sopenharmony_ci u32 tag0; /* dword 2 */ 3862306a36Sopenharmony_ci u32 tag1; /* dword 3 */ 3962306a36Sopenharmony_ci u32 rsvd; /* dword 4 */ 4062306a36Sopenharmony_ci union { 4162306a36Sopenharmony_ci#define EMBED_MBX_MAX_PAYLOAD_SIZE 220 4262306a36Sopenharmony_ci u8 embedded_payload[236]; /* used by embedded cmds */ 4362306a36Sopenharmony_ci struct be_sge sgl[19]; /* used by non-embedded cmds */ 4462306a36Sopenharmony_ci } payload; 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define CQE_FLAGS_VALID_MASK (1 << 31) 4862306a36Sopenharmony_ci#define CQE_FLAGS_ASYNC_MASK (1 << 30) 4962306a36Sopenharmony_ci#define CQE_FLAGS_COMPLETED_MASK (1 << 28) 5062306a36Sopenharmony_ci#define CQE_FLAGS_CONSUMED_MASK (1 << 27) 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci/* Completion Status */ 5362306a36Sopenharmony_ci#define MCC_STATUS_SUCCESS 0x0 5462306a36Sopenharmony_ci#define MCC_STATUS_FAILED 0x1 5562306a36Sopenharmony_ci#define MCC_STATUS_ILLEGAL_REQUEST 0x2 5662306a36Sopenharmony_ci#define MCC_STATUS_ILLEGAL_FIELD 0x3 5762306a36Sopenharmony_ci#define MCC_STATUS_INSUFFICIENT_BUFFER 0x4 5862306a36Sopenharmony_ci#define MCC_STATUS_INVALID_LENGTH 0x74 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci#define CQE_STATUS_COMPL_MASK 0xFFFF 6162306a36Sopenharmony_ci#define CQE_STATUS_COMPL_SHIFT 0 /* bits 0 - 15 */ 6262306a36Sopenharmony_ci#define CQE_STATUS_EXTD_MASK 0xFFFF 6362306a36Sopenharmony_ci#define CQE_STATUS_EXTD_SHIFT 16 /* bits 31 - 16 */ 6462306a36Sopenharmony_ci#define CQE_STATUS_ADDL_MASK 0xFF00 6562306a36Sopenharmony_ci#define CQE_STATUS_ADDL_SHIFT 8 6662306a36Sopenharmony_ci#define CQE_STATUS_MASK 0xFF 6762306a36Sopenharmony_ci#define CQE_STATUS_WRB_MASK 0xFF0000 6862306a36Sopenharmony_ci#define CQE_STATUS_WRB_SHIFT 16 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci#define BEISCSI_HOST_MBX_TIMEOUT (110 * 1000) 7162306a36Sopenharmony_ci#define BEISCSI_FW_MBX_TIMEOUT 100 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci/* MBOX Command VER */ 7462306a36Sopenharmony_ci#define MBX_CMD_VER1 0x01 7562306a36Sopenharmony_ci#define MBX_CMD_VER2 0x02 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_cistruct be_mcc_compl { 7862306a36Sopenharmony_ci u32 status; /* dword 0 */ 7962306a36Sopenharmony_ci u32 tag0; /* dword 1 */ 8062306a36Sopenharmony_ci u32 tag1; /* dword 2 */ 8162306a36Sopenharmony_ci u32 flags; /* dword 3 */ 8262306a36Sopenharmony_ci}; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci/********* Mailbox door bell *************/ 8562306a36Sopenharmony_ci/** 8662306a36Sopenharmony_ci * Used for driver communication with the FW. 8762306a36Sopenharmony_ci * The software must write this register twice to post any command. First, 8862306a36Sopenharmony_ci * it writes the register with hi=1 and the upper bits of the physical address 8962306a36Sopenharmony_ci * for the MAILBOX structure. Software must poll the ready bit until this 9062306a36Sopenharmony_ci * is acknowledged. Then, sotware writes the register with hi=0 with the lower 9162306a36Sopenharmony_ci * bits in the address. It must poll the ready bit until the command is 9262306a36Sopenharmony_ci * complete. Upon completion, the MAILBOX will contain a valid completion 9362306a36Sopenharmony_ci * queue entry. 9462306a36Sopenharmony_ci */ 9562306a36Sopenharmony_ci#define MPU_MAILBOX_DB_OFFSET 0x160 9662306a36Sopenharmony_ci#define MPU_MAILBOX_DB_RDY_MASK 0x1 /* bit 0 */ 9762306a36Sopenharmony_ci#define MPU_MAILBOX_DB_HI_MASK 0x2 /* bit 1 */ 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci/********** MPU semphore: used for SH & BE ******************/ 10062306a36Sopenharmony_ci#define SLIPORT_SOFTRESET_OFFSET 0x5c /* CSR BAR offset */ 10162306a36Sopenharmony_ci#define SLIPORT_SEMAPHORE_OFFSET_BEx 0xac /* CSR BAR offset */ 10262306a36Sopenharmony_ci#define SLIPORT_SEMAPHORE_OFFSET_SH 0x94 /* PCI-CFG offset */ 10362306a36Sopenharmony_ci#define POST_STAGE_MASK 0x0000FFFF 10462306a36Sopenharmony_ci#define POST_ERROR_BIT 0x80000000 10562306a36Sopenharmony_ci#define POST_ERR_RECOVERY_CODE_MASK 0xF000 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci/* Soft Reset register masks */ 10862306a36Sopenharmony_ci#define SLIPORT_SOFTRESET_SR_MASK 0x00000080 /* SR bit */ 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci/* MPU semphore POST stage values */ 11162306a36Sopenharmony_ci#define POST_STAGE_AWAITING_HOST_RDY 0x1 /* FW awaiting goahead from host */ 11262306a36Sopenharmony_ci#define POST_STAGE_HOST_RDY 0x2 /* Host has given go-ahed to FW */ 11362306a36Sopenharmony_ci#define POST_STAGE_BE_RESET 0x3 /* Host wants to reset chip */ 11462306a36Sopenharmony_ci#define POST_STAGE_ARMFW_RDY 0xC000 /* FW is done with POST */ 11562306a36Sopenharmony_ci#define POST_STAGE_RECOVERABLE_ERR 0xE000 /* Recoverable err detected */ 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci/********** MCC door bell ************/ 11862306a36Sopenharmony_ci#define DB_MCCQ_OFFSET 0x140 11962306a36Sopenharmony_ci#define DB_MCCQ_RING_ID_MASK 0xFFFF /* bits 0 - 15 */ 12062306a36Sopenharmony_ci/* Number of entries posted */ 12162306a36Sopenharmony_ci#define DB_MCCQ_NUM_POSTED_SHIFT 16 /* bits 16 - 29 */ 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci/** 12462306a36Sopenharmony_ci * When the async bit of mcc_compl is set, the last 4 bytes of 12562306a36Sopenharmony_ci * mcc_compl is interpreted as follows: 12662306a36Sopenharmony_ci */ 12762306a36Sopenharmony_ci#define ASYNC_TRAILER_EVENT_CODE_SHIFT 8 /* bits 8 - 15 */ 12862306a36Sopenharmony_ci#define ASYNC_TRAILER_EVENT_CODE_MASK 0xFF 12962306a36Sopenharmony_ci#define ASYNC_EVENT_CODE_LINK_STATE 0x1 13062306a36Sopenharmony_ci#define ASYNC_EVENT_CODE_ISCSI 0x4 13162306a36Sopenharmony_ci#define ASYNC_EVENT_CODE_SLI 0x11 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci#define ASYNC_TRAILER_EVENT_TYPE_SHIFT 16 /* bits 16 - 23 */ 13462306a36Sopenharmony_ci#define ASYNC_TRAILER_EVENT_TYPE_MASK 0xFF 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci/* iSCSI events */ 13762306a36Sopenharmony_ci#define ASYNC_EVENT_NEW_ISCSI_TGT_DISC 0x4 13862306a36Sopenharmony_ci#define ASYNC_EVENT_NEW_ISCSI_CONN 0x5 13962306a36Sopenharmony_ci#define ASYNC_EVENT_NEW_TCP_CONN 0x7 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci/* SLI events */ 14262306a36Sopenharmony_ci#define ASYNC_SLI_EVENT_TYPE_MISCONFIGURED 0x9 14362306a36Sopenharmony_ci#define ASYNC_SLI_LINK_EFFECT_VALID(le) (le & 0x80) 14462306a36Sopenharmony_ci#define ASYNC_SLI_LINK_EFFECT_SEV(le) ((le >> 1) & 0x03) 14562306a36Sopenharmony_ci#define ASYNC_SLI_LINK_EFFECT_STATE(le) (le & 0x01) 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_cistruct be_async_event_trailer { 14862306a36Sopenharmony_ci u32 code; 14962306a36Sopenharmony_ci}; 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_cienum { 15262306a36Sopenharmony_ci ASYNC_EVENT_LINK_DOWN = 0x0, 15362306a36Sopenharmony_ci ASYNC_EVENT_LINK_UP = 0x1, 15462306a36Sopenharmony_ci}; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci/** 15762306a36Sopenharmony_ci * When the event code of an async trailer is link-state, the mcc_compl 15862306a36Sopenharmony_ci * must be interpreted as follows 15962306a36Sopenharmony_ci */ 16062306a36Sopenharmony_cistruct be_async_event_link_state { 16162306a36Sopenharmony_ci u8 physical_port; 16262306a36Sopenharmony_ci u8 port_link_status; 16362306a36Sopenharmony_ci/** 16462306a36Sopenharmony_ci * ASYNC_EVENT_LINK_DOWN 0x0 16562306a36Sopenharmony_ci * ASYNC_EVENT_LINK_UP 0x1 16662306a36Sopenharmony_ci * ASYNC_EVENT_LINK_LOGICAL_DOWN 0x2 16762306a36Sopenharmony_ci * ASYNC_EVENT_LINK_LOGICAL_UP 0x3 16862306a36Sopenharmony_ci */ 16962306a36Sopenharmony_ci#define BE_ASYNC_LINK_UP_MASK 0x01 17062306a36Sopenharmony_ci u8 port_duplex; 17162306a36Sopenharmony_ci u8 port_speed; 17262306a36Sopenharmony_ci/* BE2ISCSI_LINK_SPEED_ZERO 0x00 - no link */ 17362306a36Sopenharmony_ci#define BE2ISCSI_LINK_SPEED_10MBPS 0x01 17462306a36Sopenharmony_ci#define BE2ISCSI_LINK_SPEED_100MBPS 0x02 17562306a36Sopenharmony_ci#define BE2ISCSI_LINK_SPEED_1GBPS 0x03 17662306a36Sopenharmony_ci#define BE2ISCSI_LINK_SPEED_10GBPS 0x04 17762306a36Sopenharmony_ci#define BE2ISCSI_LINK_SPEED_25GBPS 0x06 17862306a36Sopenharmony_ci#define BE2ISCSI_LINK_SPEED_40GBPS 0x07 17962306a36Sopenharmony_ci u8 port_fault; 18062306a36Sopenharmony_ci u8 event_reason; 18162306a36Sopenharmony_ci u16 qos_link_speed; 18262306a36Sopenharmony_ci u32 event_tag; 18362306a36Sopenharmony_ci struct be_async_event_trailer trailer; 18462306a36Sopenharmony_ci} __packed; 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci/** 18762306a36Sopenharmony_ci * When async-trailer is SLI event, mcc_compl is interpreted as 18862306a36Sopenharmony_ci */ 18962306a36Sopenharmony_cistruct be_async_event_sli { 19062306a36Sopenharmony_ci u32 event_data1; 19162306a36Sopenharmony_ci u32 event_data2; 19262306a36Sopenharmony_ci u32 reserved; 19362306a36Sopenharmony_ci u32 trailer; 19462306a36Sopenharmony_ci} __packed; 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_cistruct be_mcc_mailbox { 19762306a36Sopenharmony_ci struct be_mcc_wrb wrb; 19862306a36Sopenharmony_ci struct be_mcc_compl compl; 19962306a36Sopenharmony_ci}; 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci/* Type of subsystems supported by FW */ 20262306a36Sopenharmony_ci#define CMD_SUBSYSTEM_COMMON 0x1 20362306a36Sopenharmony_ci#define CMD_SUBSYSTEM_ISCSI 0x2 20462306a36Sopenharmony_ci#define CMD_SUBSYSTEM_ETH 0x3 20562306a36Sopenharmony_ci#define CMD_SUBSYSTEM_ISCSI_INI 0x6 20662306a36Sopenharmony_ci#define CMD_COMMON_TCP_UPLOAD 0x1 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci/** 20962306a36Sopenharmony_ci * List of common opcodes subsystem CMD_SUBSYSTEM_COMMON 21062306a36Sopenharmony_ci * These opcodes are unique for each subsystem defined above 21162306a36Sopenharmony_ci */ 21262306a36Sopenharmony_ci#define OPCODE_COMMON_CQ_CREATE 12 21362306a36Sopenharmony_ci#define OPCODE_COMMON_EQ_CREATE 13 21462306a36Sopenharmony_ci#define OPCODE_COMMON_MCC_CREATE 21 21562306a36Sopenharmony_ci#define OPCODE_COMMON_MCC_CREATE_EXT 90 21662306a36Sopenharmony_ci#define OPCODE_COMMON_ADD_TEMPLATE_HEADER_BUFFERS 24 21762306a36Sopenharmony_ci#define OPCODE_COMMON_REMOVE_TEMPLATE_HEADER_BUFFERS 25 21862306a36Sopenharmony_ci#define OPCODE_COMMON_GET_CNTL_ATTRIBUTES 32 21962306a36Sopenharmony_ci#define OPCODE_COMMON_GET_FW_VERSION 35 22062306a36Sopenharmony_ci#define OPCODE_COMMON_MODIFY_EQ_DELAY 41 22162306a36Sopenharmony_ci#define OPCODE_COMMON_FIRMWARE_CONFIG 42 22262306a36Sopenharmony_ci#define OPCODE_COMMON_MCC_DESTROY 53 22362306a36Sopenharmony_ci#define OPCODE_COMMON_CQ_DESTROY 54 22462306a36Sopenharmony_ci#define OPCODE_COMMON_EQ_DESTROY 55 22562306a36Sopenharmony_ci#define OPCODE_COMMON_QUERY_FIRMWARE_CONFIG 58 22662306a36Sopenharmony_ci#define OPCODE_COMMON_FUNCTION_RESET 61 22762306a36Sopenharmony_ci#define OPCODE_COMMON_GET_PORT_NAME 77 22862306a36Sopenharmony_ci#define OPCODE_COMMON_SET_HOST_DATA 93 22962306a36Sopenharmony_ci#define OPCODE_COMMON_SET_FEATURES 191 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci/** 23262306a36Sopenharmony_ci * LIST of opcodes that are common between Initiator and Target 23362306a36Sopenharmony_ci * used by CMD_SUBSYSTEM_ISCSI 23462306a36Sopenharmony_ci * These opcodes are unique for each subsystem defined above 23562306a36Sopenharmony_ci */ 23662306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_CFG_POST_SGL_PAGES 2 23762306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_CFG_REMOVE_SGL_PAGES 3 23862306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_NTWK_GET_NIC_CONFIG 7 23962306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_NTWK_SET_VLAN 14 24062306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_NTWK_CONFIG_STATELESS_IP_ADDR 17 24162306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_NTWK_REL_STATELESS_IP_ADDR 18 24262306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_NTWK_MODIFY_IP_ADDR 21 24362306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_NTWK_GET_DEFAULT_GATEWAY 22 24462306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_NTWK_MODIFY_DEFAULT_GATEWAY 23 24562306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_NTWK_GET_ALL_IF_ID 24 24662306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_NTWK_GET_IF_INFO 25 24762306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_SET_FRAGNUM_BITS_FOR_SGL_CRA 61 24862306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_DEFQ_CREATE 64 24962306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_DEFQ_DESTROY 65 25062306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_WRBQ_CREATE 66 25162306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_WRBQ_DESTROY 67 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_cistruct be_cmd_req_hdr { 25462306a36Sopenharmony_ci u8 opcode; /* dword 0 */ 25562306a36Sopenharmony_ci u8 subsystem; /* dword 0 */ 25662306a36Sopenharmony_ci u8 port_number; /* dword 0 */ 25762306a36Sopenharmony_ci u8 domain; /* dword 0 */ 25862306a36Sopenharmony_ci u32 timeout; /* dword 1 */ 25962306a36Sopenharmony_ci u32 request_length; /* dword 2 */ 26062306a36Sopenharmony_ci u8 version; /* dword 3 */ 26162306a36Sopenharmony_ci u8 rsvd0[3]; /* dword 3 */ 26262306a36Sopenharmony_ci}; 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_cistruct be_cmd_resp_hdr { 26562306a36Sopenharmony_ci u32 info; /* dword 0 */ 26662306a36Sopenharmony_ci u32 status; /* dword 1 */ 26762306a36Sopenharmony_ci u32 response_length; /* dword 2 */ 26862306a36Sopenharmony_ci u32 actual_resp_len; /* dword 3 */ 26962306a36Sopenharmony_ci}; 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_cistruct phys_addr { 27262306a36Sopenharmony_ci u32 lo; 27362306a36Sopenharmony_ci u32 hi; 27462306a36Sopenharmony_ci}; 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_cistruct virt_addr { 27762306a36Sopenharmony_ci u32 lo; 27862306a36Sopenharmony_ci u32 hi; 27962306a36Sopenharmony_ci}; 28062306a36Sopenharmony_ci/************************** 28162306a36Sopenharmony_ci * BE Command definitions * 28262306a36Sopenharmony_ci **************************/ 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_ci/** 28562306a36Sopenharmony_ci * Pseudo amap definition in which each bit of the actual structure is defined 28662306a36Sopenharmony_ci * as a byte - used to calculate offset/shift/mask of each field 28762306a36Sopenharmony_ci */ 28862306a36Sopenharmony_cistruct amap_eq_context { 28962306a36Sopenharmony_ci u8 cidx[13]; /* dword 0 */ 29062306a36Sopenharmony_ci u8 rsvd0[3]; /* dword 0 */ 29162306a36Sopenharmony_ci u8 epidx[13]; /* dword 0 */ 29262306a36Sopenharmony_ci u8 valid; /* dword 0 */ 29362306a36Sopenharmony_ci u8 rsvd1; /* dword 0 */ 29462306a36Sopenharmony_ci u8 size; /* dword 0 */ 29562306a36Sopenharmony_ci u8 pidx[13]; /* dword 1 */ 29662306a36Sopenharmony_ci u8 rsvd2[3]; /* dword 1 */ 29762306a36Sopenharmony_ci u8 pd[10]; /* dword 1 */ 29862306a36Sopenharmony_ci u8 count[3]; /* dword 1 */ 29962306a36Sopenharmony_ci u8 solevent; /* dword 1 */ 30062306a36Sopenharmony_ci u8 stalled; /* dword 1 */ 30162306a36Sopenharmony_ci u8 armed; /* dword 1 */ 30262306a36Sopenharmony_ci u8 rsvd3[4]; /* dword 2 */ 30362306a36Sopenharmony_ci u8 func[8]; /* dword 2 */ 30462306a36Sopenharmony_ci u8 rsvd4; /* dword 2 */ 30562306a36Sopenharmony_ci u8 delaymult[10]; /* dword 2 */ 30662306a36Sopenharmony_ci u8 rsvd5[2]; /* dword 2 */ 30762306a36Sopenharmony_ci u8 phase[2]; /* dword 2 */ 30862306a36Sopenharmony_ci u8 nodelay; /* dword 2 */ 30962306a36Sopenharmony_ci u8 rsvd6[4]; /* dword 2 */ 31062306a36Sopenharmony_ci u8 rsvd7[32]; /* dword 3 */ 31162306a36Sopenharmony_ci} __packed; 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_cistruct be_cmd_req_eq_create { 31462306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; /* dw[4] */ 31562306a36Sopenharmony_ci u16 num_pages; /* sword */ 31662306a36Sopenharmony_ci u16 rsvd0; /* sword */ 31762306a36Sopenharmony_ci u8 context[sizeof(struct amap_eq_context) / 8]; /* dw[4] */ 31862306a36Sopenharmony_ci struct phys_addr pages[8]; 31962306a36Sopenharmony_ci} __packed; 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_cistruct be_cmd_resp_eq_create { 32262306a36Sopenharmony_ci struct be_cmd_resp_hdr resp_hdr; 32362306a36Sopenharmony_ci u16 eq_id; /* sword */ 32462306a36Sopenharmony_ci u16 rsvd0; /* sword */ 32562306a36Sopenharmony_ci} __packed; 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_cistruct be_set_eqd { 32862306a36Sopenharmony_ci u32 eq_id; 32962306a36Sopenharmony_ci u32 phase; 33062306a36Sopenharmony_ci u32 delay_multiplier; 33162306a36Sopenharmony_ci} __packed; 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_cistruct mgmt_chap_format { 33462306a36Sopenharmony_ci u32 flags; 33562306a36Sopenharmony_ci u8 intr_chap_name[256]; 33662306a36Sopenharmony_ci u8 intr_secret[16]; 33762306a36Sopenharmony_ci u8 target_chap_name[256]; 33862306a36Sopenharmony_ci u8 target_secret[16]; 33962306a36Sopenharmony_ci u16 intr_chap_name_length; 34062306a36Sopenharmony_ci u16 intr_secret_length; 34162306a36Sopenharmony_ci u16 target_chap_name_length; 34262306a36Sopenharmony_ci u16 target_secret_length; 34362306a36Sopenharmony_ci} __packed; 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_cistruct mgmt_auth_method_format { 34662306a36Sopenharmony_ci u8 auth_method_type; 34762306a36Sopenharmony_ci u8 padding[3]; 34862306a36Sopenharmony_ci struct mgmt_chap_format chap; 34962306a36Sopenharmony_ci} __packed; 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_cistruct be_cmd_req_logout_fw_sess { 35262306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; /* dw[4] */ 35362306a36Sopenharmony_ci uint32_t session_handle; 35462306a36Sopenharmony_ci} __packed; 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_cistruct be_cmd_resp_logout_fw_sess { 35762306a36Sopenharmony_ci struct be_cmd_resp_hdr hdr; /* dw[4] */ 35862306a36Sopenharmony_ci uint32_t session_status; 35962306a36Sopenharmony_ci#define BE_SESS_STATUS_CLOSE 0x20 36062306a36Sopenharmony_ci} __packed; 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_cistruct mgmt_conn_login_options { 36362306a36Sopenharmony_ci u8 flags; 36462306a36Sopenharmony_ci u8 header_digest; 36562306a36Sopenharmony_ci u8 data_digest; 36662306a36Sopenharmony_ci u8 rsvd0; 36762306a36Sopenharmony_ci u32 max_recv_datasegment_len_ini; 36862306a36Sopenharmony_ci u32 max_recv_datasegment_len_tgt; 36962306a36Sopenharmony_ci u32 tcp_mss; 37062306a36Sopenharmony_ci u32 tcp_window_size; 37162306a36Sopenharmony_ci struct mgmt_auth_method_format auth_data; 37262306a36Sopenharmony_ci} __packed; 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_cistruct ip_addr_format { 37562306a36Sopenharmony_ci u16 size_of_structure; 37662306a36Sopenharmony_ci u8 reserved; 37762306a36Sopenharmony_ci u8 ip_type; 37862306a36Sopenharmony_ci#define BEISCSI_IP_TYPE_V4 0x1 37962306a36Sopenharmony_ci#define BEISCSI_IP_TYPE_STATIC_V4 0x3 38062306a36Sopenharmony_ci#define BEISCSI_IP_TYPE_DHCP_V4 0x5 38162306a36Sopenharmony_ci/* type v4 values < type v6 values */ 38262306a36Sopenharmony_ci#define BEISCSI_IP_TYPE_V6 0x10 38362306a36Sopenharmony_ci#define BEISCSI_IP_TYPE_ROUTABLE_V6 0x30 38462306a36Sopenharmony_ci#define BEISCSI_IP_TYPE_LINK_LOCAL_V6 0x50 38562306a36Sopenharmony_ci#define BEISCSI_IP_TYPE_AUTO_V6 0x90 38662306a36Sopenharmony_ci u8 addr[16]; 38762306a36Sopenharmony_ci u32 rsvd0; 38862306a36Sopenharmony_ci} __packed; 38962306a36Sopenharmony_ci 39062306a36Sopenharmony_cistruct mgmt_conn_info { 39162306a36Sopenharmony_ci u32 connection_handle; 39262306a36Sopenharmony_ci u32 connection_status; 39362306a36Sopenharmony_ci u16 src_port; 39462306a36Sopenharmony_ci u16 dest_port; 39562306a36Sopenharmony_ci u16 dest_port_redirected; 39662306a36Sopenharmony_ci u16 cid; 39762306a36Sopenharmony_ci u32 estimated_throughput; 39862306a36Sopenharmony_ci struct ip_addr_format src_ipaddr; 39962306a36Sopenharmony_ci struct ip_addr_format dest_ipaddr; 40062306a36Sopenharmony_ci struct ip_addr_format dest_ipaddr_redirected; 40162306a36Sopenharmony_ci struct mgmt_conn_login_options negotiated_login_options; 40262306a36Sopenharmony_ci} __packed; 40362306a36Sopenharmony_ci 40462306a36Sopenharmony_cistruct mgmt_session_login_options { 40562306a36Sopenharmony_ci u8 flags; 40662306a36Sopenharmony_ci u8 error_recovery_level; 40762306a36Sopenharmony_ci u16 rsvd0; 40862306a36Sopenharmony_ci u32 first_burst_length; 40962306a36Sopenharmony_ci u32 max_burst_length; 41062306a36Sopenharmony_ci u16 max_connections; 41162306a36Sopenharmony_ci u16 max_outstanding_r2t; 41262306a36Sopenharmony_ci u16 default_time2wait; 41362306a36Sopenharmony_ci u16 default_time2retain; 41462306a36Sopenharmony_ci} __packed; 41562306a36Sopenharmony_ci 41662306a36Sopenharmony_cistruct mgmt_session_info { 41762306a36Sopenharmony_ci u32 session_handle; 41862306a36Sopenharmony_ci u32 status; 41962306a36Sopenharmony_ci u8 isid[6]; 42062306a36Sopenharmony_ci u16 tsih; 42162306a36Sopenharmony_ci u32 session_flags; 42262306a36Sopenharmony_ci u16 conn_count; 42362306a36Sopenharmony_ci u16 pad; 42462306a36Sopenharmony_ci u8 target_name[224]; 42562306a36Sopenharmony_ci u8 initiator_iscsiname[224]; 42662306a36Sopenharmony_ci struct mgmt_session_login_options negotiated_login_options; 42762306a36Sopenharmony_ci struct mgmt_conn_info conn_list[1]; 42862306a36Sopenharmony_ci} __packed; 42962306a36Sopenharmony_ci 43062306a36Sopenharmony_cistruct be_cmd_get_session_req { 43162306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 43262306a36Sopenharmony_ci u32 session_handle; 43362306a36Sopenharmony_ci} __packed; 43462306a36Sopenharmony_ci 43562306a36Sopenharmony_cistruct be_cmd_get_session_resp { 43662306a36Sopenharmony_ci struct be_cmd_resp_hdr hdr; 43762306a36Sopenharmony_ci struct mgmt_session_info session_info; 43862306a36Sopenharmony_ci} __packed; 43962306a36Sopenharmony_ci 44062306a36Sopenharmony_cistruct mac_addr { 44162306a36Sopenharmony_ci u16 size_of_structure; 44262306a36Sopenharmony_ci u8 addr[ETH_ALEN]; 44362306a36Sopenharmony_ci} __packed; 44462306a36Sopenharmony_ci 44562306a36Sopenharmony_cistruct be_cmd_get_boot_target_req { 44662306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 44762306a36Sopenharmony_ci} __packed; 44862306a36Sopenharmony_ci 44962306a36Sopenharmony_cistruct be_cmd_get_boot_target_resp { 45062306a36Sopenharmony_ci struct be_cmd_resp_hdr hdr; 45162306a36Sopenharmony_ci u32 boot_session_count; 45262306a36Sopenharmony_ci u32 boot_session_handle; 45362306a36Sopenharmony_ci/** 45462306a36Sopenharmony_ci * FW returns 0xffffffff if it couldn't establish connection with 45562306a36Sopenharmony_ci * configured boot target. 45662306a36Sopenharmony_ci */ 45762306a36Sopenharmony_ci#define BE_BOOT_INVALID_SHANDLE 0xffffffff 45862306a36Sopenharmony_ci}; 45962306a36Sopenharmony_ci 46062306a36Sopenharmony_cistruct be_cmd_reopen_session_req { 46162306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 46262306a36Sopenharmony_ci#define BE_REOPEN_ALL_SESSIONS 0x00 46362306a36Sopenharmony_ci#define BE_REOPEN_BOOT_SESSIONS 0x01 46462306a36Sopenharmony_ci#define BE_REOPEN_A_SESSION 0x02 46562306a36Sopenharmony_ci u16 reopen_type; 46662306a36Sopenharmony_ci u16 rsvd; 46762306a36Sopenharmony_ci u32 session_handle; 46862306a36Sopenharmony_ci} __packed; 46962306a36Sopenharmony_ci 47062306a36Sopenharmony_cistruct be_cmd_reopen_session_resp { 47162306a36Sopenharmony_ci struct be_cmd_resp_hdr hdr; 47262306a36Sopenharmony_ci u32 rsvd; 47362306a36Sopenharmony_ci u32 session_handle; 47462306a36Sopenharmony_ci} __packed; 47562306a36Sopenharmony_ci 47662306a36Sopenharmony_ci 47762306a36Sopenharmony_cistruct be_cmd_mac_query_req { 47862306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 47962306a36Sopenharmony_ci u8 type; 48062306a36Sopenharmony_ci u8 permanent; 48162306a36Sopenharmony_ci u16 if_id; 48262306a36Sopenharmony_ci} __packed; 48362306a36Sopenharmony_ci 48462306a36Sopenharmony_cistruct be_cmd_get_mac_resp { 48562306a36Sopenharmony_ci struct be_cmd_resp_hdr hdr; 48662306a36Sopenharmony_ci struct mac_addr mac; 48762306a36Sopenharmony_ci}; 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_cistruct be_ip_addr_subnet_format { 49062306a36Sopenharmony_ci u16 size_of_structure; 49162306a36Sopenharmony_ci u8 ip_type; 49262306a36Sopenharmony_ci u8 ipv6_prefix_length; 49362306a36Sopenharmony_ci u8 addr[16]; 49462306a36Sopenharmony_ci u8 subnet_mask[16]; 49562306a36Sopenharmony_ci u32 rsvd0; 49662306a36Sopenharmony_ci} __packed; 49762306a36Sopenharmony_ci 49862306a36Sopenharmony_cistruct be_cmd_get_if_info_req { 49962306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 50062306a36Sopenharmony_ci u32 interface_hndl; 50162306a36Sopenharmony_ci u32 ip_type; 50262306a36Sopenharmony_ci} __packed; 50362306a36Sopenharmony_ci 50462306a36Sopenharmony_cistruct be_cmd_get_if_info_resp { 50562306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 50662306a36Sopenharmony_ci u32 interface_hndl; 50762306a36Sopenharmony_ci u32 vlan_priority; 50862306a36Sopenharmony_ci u32 ip_addr_count; 50962306a36Sopenharmony_ci u32 dhcp_state; 51062306a36Sopenharmony_ci struct be_ip_addr_subnet_format ip_addr; 51162306a36Sopenharmony_ci} __packed; 51262306a36Sopenharmony_ci 51362306a36Sopenharmony_cistruct be_ip_addr_record { 51462306a36Sopenharmony_ci u32 action; 51562306a36Sopenharmony_ci u32 interface_hndl; 51662306a36Sopenharmony_ci struct be_ip_addr_subnet_format ip_addr; 51762306a36Sopenharmony_ci u32 status; 51862306a36Sopenharmony_ci} __packed; 51962306a36Sopenharmony_ci 52062306a36Sopenharmony_cistruct be_ip_addr_record_params { 52162306a36Sopenharmony_ci u32 record_entry_count; 52262306a36Sopenharmony_ci struct be_ip_addr_record ip_record; 52362306a36Sopenharmony_ci} __packed; 52462306a36Sopenharmony_ci 52562306a36Sopenharmony_cistruct be_cmd_set_ip_addr_req { 52662306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 52762306a36Sopenharmony_ci struct be_ip_addr_record_params ip_params; 52862306a36Sopenharmony_ci} __packed; 52962306a36Sopenharmony_ci 53062306a36Sopenharmony_ci 53162306a36Sopenharmony_cistruct be_cmd_set_dhcp_req { 53262306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 53362306a36Sopenharmony_ci u32 interface_hndl; 53462306a36Sopenharmony_ci u32 ip_type; 53562306a36Sopenharmony_ci u32 flags; 53662306a36Sopenharmony_ci u32 retry_count; 53762306a36Sopenharmony_ci} __packed; 53862306a36Sopenharmony_ci 53962306a36Sopenharmony_cistruct be_cmd_rel_dhcp_req { 54062306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 54162306a36Sopenharmony_ci u32 interface_hndl; 54262306a36Sopenharmony_ci u32 ip_type; 54362306a36Sopenharmony_ci} __packed; 54462306a36Sopenharmony_ci 54562306a36Sopenharmony_cistruct be_cmd_set_def_gateway_req { 54662306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 54762306a36Sopenharmony_ci u32 action; 54862306a36Sopenharmony_ci struct ip_addr_format ip_addr; 54962306a36Sopenharmony_ci} __packed; 55062306a36Sopenharmony_ci 55162306a36Sopenharmony_cistruct be_cmd_get_def_gateway_req { 55262306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 55362306a36Sopenharmony_ci u32 ip_type; 55462306a36Sopenharmony_ci} __packed; 55562306a36Sopenharmony_ci 55662306a36Sopenharmony_cistruct be_cmd_get_def_gateway_resp { 55762306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 55862306a36Sopenharmony_ci struct ip_addr_format ip_addr; 55962306a36Sopenharmony_ci} __packed; 56062306a36Sopenharmony_ci 56162306a36Sopenharmony_ci#define BEISCSI_VLAN_DISABLE 0xFFFF 56262306a36Sopenharmony_cistruct be_cmd_set_vlan_req { 56362306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 56462306a36Sopenharmony_ci u32 interface_hndl; 56562306a36Sopenharmony_ci u32 vlan_priority; 56662306a36Sopenharmony_ci} __packed; 56762306a36Sopenharmony_ci/******************** Create CQ ***************************/ 56862306a36Sopenharmony_ci/** 56962306a36Sopenharmony_ci * Pseudo amap definition in which each bit of the actual structure is defined 57062306a36Sopenharmony_ci * as a byte - used to calculate offset/shift/mask of each field 57162306a36Sopenharmony_ci */ 57262306a36Sopenharmony_cistruct amap_cq_context { 57362306a36Sopenharmony_ci u8 cidx[11]; /* dword 0 */ 57462306a36Sopenharmony_ci u8 rsvd0; /* dword 0 */ 57562306a36Sopenharmony_ci u8 coalescwm[2]; /* dword 0 */ 57662306a36Sopenharmony_ci u8 nodelay; /* dword 0 */ 57762306a36Sopenharmony_ci u8 epidx[11]; /* dword 0 */ 57862306a36Sopenharmony_ci u8 rsvd1; /* dword 0 */ 57962306a36Sopenharmony_ci u8 count[2]; /* dword 0 */ 58062306a36Sopenharmony_ci u8 valid; /* dword 0 */ 58162306a36Sopenharmony_ci u8 solevent; /* dword 0 */ 58262306a36Sopenharmony_ci u8 eventable; /* dword 0 */ 58362306a36Sopenharmony_ci u8 pidx[11]; /* dword 1 */ 58462306a36Sopenharmony_ci u8 rsvd2; /* dword 1 */ 58562306a36Sopenharmony_ci u8 pd[10]; /* dword 1 */ 58662306a36Sopenharmony_ci u8 eqid[8]; /* dword 1 */ 58762306a36Sopenharmony_ci u8 stalled; /* dword 1 */ 58862306a36Sopenharmony_ci u8 armed; /* dword 1 */ 58962306a36Sopenharmony_ci u8 rsvd3[4]; /* dword 2 */ 59062306a36Sopenharmony_ci u8 func[8]; /* dword 2 */ 59162306a36Sopenharmony_ci u8 rsvd4[20]; /* dword 2 */ 59262306a36Sopenharmony_ci u8 rsvd5[32]; /* dword 3 */ 59362306a36Sopenharmony_ci} __packed; 59462306a36Sopenharmony_ci 59562306a36Sopenharmony_cistruct amap_cq_context_v2 { 59662306a36Sopenharmony_ci u8 rsvd0[12]; /* dword 0 */ 59762306a36Sopenharmony_ci u8 coalescwm[2]; /* dword 0 */ 59862306a36Sopenharmony_ci u8 nodelay; /* dword 0 */ 59962306a36Sopenharmony_ci u8 rsvd1[12]; /* dword 0 */ 60062306a36Sopenharmony_ci u8 count[2]; /* dword 0 */ 60162306a36Sopenharmony_ci u8 valid; /* dword 0 */ 60262306a36Sopenharmony_ci u8 rsvd2; /* dword 0 */ 60362306a36Sopenharmony_ci u8 eventable; /* dword 0 */ 60462306a36Sopenharmony_ci u8 eqid[16]; /* dword 1 */ 60562306a36Sopenharmony_ci u8 rsvd3[15]; /* dword 1 */ 60662306a36Sopenharmony_ci u8 armed; /* dword 1 */ 60762306a36Sopenharmony_ci u8 cqecount[16];/* dword 2 */ 60862306a36Sopenharmony_ci u8 rsvd4[16]; /* dword 2 */ 60962306a36Sopenharmony_ci u8 rsvd5[32]; /* dword 3 */ 61062306a36Sopenharmony_ci}; 61162306a36Sopenharmony_ci 61262306a36Sopenharmony_cistruct be_cmd_req_cq_create { 61362306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 61462306a36Sopenharmony_ci u16 num_pages; 61562306a36Sopenharmony_ci u8 page_size; 61662306a36Sopenharmony_ci u8 rsvd0; 61762306a36Sopenharmony_ci u8 context[sizeof(struct amap_cq_context) / 8]; 61862306a36Sopenharmony_ci struct phys_addr pages[4]; 61962306a36Sopenharmony_ci} __packed; 62062306a36Sopenharmony_ci 62162306a36Sopenharmony_cistruct be_cmd_resp_cq_create { 62262306a36Sopenharmony_ci struct be_cmd_resp_hdr hdr; 62362306a36Sopenharmony_ci u16 cq_id; 62462306a36Sopenharmony_ci u16 rsvd0; 62562306a36Sopenharmony_ci} __packed; 62662306a36Sopenharmony_ci 62762306a36Sopenharmony_ci/******************** Create MCCQ ***************************/ 62862306a36Sopenharmony_ci/** 62962306a36Sopenharmony_ci * Pseudo amap definition in which each bit of the actual structure is defined 63062306a36Sopenharmony_ci * as a byte - used to calculate offset/shift/mask of each field 63162306a36Sopenharmony_ci */ 63262306a36Sopenharmony_cistruct amap_mcc_context { 63362306a36Sopenharmony_ci u8 con_index[14]; 63462306a36Sopenharmony_ci u8 rsvd0[2]; 63562306a36Sopenharmony_ci u8 ring_size[4]; 63662306a36Sopenharmony_ci u8 fetch_wrb; 63762306a36Sopenharmony_ci u8 fetch_r2t; 63862306a36Sopenharmony_ci u8 cq_id[10]; 63962306a36Sopenharmony_ci u8 prod_index[14]; 64062306a36Sopenharmony_ci u8 fid[8]; 64162306a36Sopenharmony_ci u8 pdid[9]; 64262306a36Sopenharmony_ci u8 valid; 64362306a36Sopenharmony_ci u8 rsvd1[32]; 64462306a36Sopenharmony_ci u8 rsvd2[32]; 64562306a36Sopenharmony_ci} __packed; 64662306a36Sopenharmony_ci 64762306a36Sopenharmony_cistruct be_cmd_req_mcc_create_ext { 64862306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 64962306a36Sopenharmony_ci u16 num_pages; 65062306a36Sopenharmony_ci u16 rsvd0; 65162306a36Sopenharmony_ci u32 async_evt_bitmap; 65262306a36Sopenharmony_ci u8 context[sizeof(struct amap_mcc_context) / 8]; 65362306a36Sopenharmony_ci struct phys_addr pages[8]; 65462306a36Sopenharmony_ci} __packed; 65562306a36Sopenharmony_ci 65662306a36Sopenharmony_cistruct be_cmd_resp_mcc_create { 65762306a36Sopenharmony_ci struct be_cmd_resp_hdr hdr; 65862306a36Sopenharmony_ci u16 id; 65962306a36Sopenharmony_ci u16 rsvd0; 66062306a36Sopenharmony_ci} __packed; 66162306a36Sopenharmony_ci 66262306a36Sopenharmony_ci/******************** Q Destroy ***************************/ 66362306a36Sopenharmony_ci/* Type of Queue to be destroyed */ 66462306a36Sopenharmony_cienum { 66562306a36Sopenharmony_ci QTYPE_EQ = 1, 66662306a36Sopenharmony_ci QTYPE_CQ, 66762306a36Sopenharmony_ci QTYPE_MCCQ, 66862306a36Sopenharmony_ci QTYPE_WRBQ, 66962306a36Sopenharmony_ci QTYPE_DPDUQ, 67062306a36Sopenharmony_ci QTYPE_SGL 67162306a36Sopenharmony_ci}; 67262306a36Sopenharmony_ci 67362306a36Sopenharmony_cistruct be_cmd_req_q_destroy { 67462306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 67562306a36Sopenharmony_ci u16 id; 67662306a36Sopenharmony_ci u16 bypass_flush; /* valid only for rx q destroy */ 67762306a36Sopenharmony_ci} __packed; 67862306a36Sopenharmony_ci 67962306a36Sopenharmony_cistruct macaddr { 68062306a36Sopenharmony_ci u8 byte[ETH_ALEN]; 68162306a36Sopenharmony_ci}; 68262306a36Sopenharmony_ci 68362306a36Sopenharmony_cistruct be_cmd_req_mcast_mac_config { 68462306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 68562306a36Sopenharmony_ci u16 num_mac; 68662306a36Sopenharmony_ci u8 promiscuous; 68762306a36Sopenharmony_ci u8 interface_id; 68862306a36Sopenharmony_ci struct macaddr mac[32]; 68962306a36Sopenharmony_ci} __packed; 69062306a36Sopenharmony_ci 69162306a36Sopenharmony_cistatic inline void *embedded_payload(struct be_mcc_wrb *wrb) 69262306a36Sopenharmony_ci{ 69362306a36Sopenharmony_ci return wrb->payload.embedded_payload; 69462306a36Sopenharmony_ci} 69562306a36Sopenharmony_ci 69662306a36Sopenharmony_cistatic inline struct be_sge *nonembedded_sgl(struct be_mcc_wrb *wrb) 69762306a36Sopenharmony_ci{ 69862306a36Sopenharmony_ci return &wrb->payload.sgl[0]; 69962306a36Sopenharmony_ci} 70062306a36Sopenharmony_ci 70162306a36Sopenharmony_ci/******************** Modify EQ Delay *******************/ 70262306a36Sopenharmony_cistruct be_cmd_req_modify_eq_delay { 70362306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 70462306a36Sopenharmony_ci __le32 num_eq; 70562306a36Sopenharmony_ci struct { 70662306a36Sopenharmony_ci __le32 eq_id; 70762306a36Sopenharmony_ci __le32 phase; 70862306a36Sopenharmony_ci __le32 delay_multiplier; 70962306a36Sopenharmony_ci } delay[MAX_CPUS]; 71062306a36Sopenharmony_ci} __packed; 71162306a36Sopenharmony_ci 71262306a36Sopenharmony_ci/******************** Get MAC ADDR *******************/ 71362306a36Sopenharmony_ci 71462306a36Sopenharmony_cistruct be_cmd_get_nic_conf_resp { 71562306a36Sopenharmony_ci struct be_cmd_resp_hdr hdr; 71662306a36Sopenharmony_ci u32 nic_port_count; 71762306a36Sopenharmony_ci u32 speed; 71862306a36Sopenharmony_ci u32 max_speed; 71962306a36Sopenharmony_ci u32 link_state; 72062306a36Sopenharmony_ci u32 max_frame_size; 72162306a36Sopenharmony_ci u16 size_of_structure; 72262306a36Sopenharmony_ci u8 mac_address[ETH_ALEN]; 72362306a36Sopenharmony_ci} __packed; 72462306a36Sopenharmony_ci 72562306a36Sopenharmony_ci/******************** Get HBA NAME *******************/ 72662306a36Sopenharmony_ci 72762306a36Sopenharmony_cistruct be_cmd_hba_name { 72862306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 72962306a36Sopenharmony_ci u16 flags; 73062306a36Sopenharmony_ci u16 rsvd0; 73162306a36Sopenharmony_ci u8 initiator_name[ISCSI_NAME_LEN]; 73262306a36Sopenharmony_ci#define BE_INI_ALIAS_LEN 32 73362306a36Sopenharmony_ci u8 initiator_alias[BE_INI_ALIAS_LEN]; 73462306a36Sopenharmony_ci} __packed; 73562306a36Sopenharmony_ci 73662306a36Sopenharmony_ci/******************** COMMON SET HOST DATA *******************/ 73762306a36Sopenharmony_ci#define BE_CMD_SET_HOST_PARAM_ID 0x2 73862306a36Sopenharmony_ci#define BE_CMD_MAX_DRV_VERSION 0x30 73962306a36Sopenharmony_cistruct be_sethost_req { 74062306a36Sopenharmony_ci u32 param_id; 74162306a36Sopenharmony_ci u32 param_len; 74262306a36Sopenharmony_ci u32 param_data[32]; 74362306a36Sopenharmony_ci}; 74462306a36Sopenharmony_ci 74562306a36Sopenharmony_cistruct be_sethost_resp { 74662306a36Sopenharmony_ci u32 rsvd0; 74762306a36Sopenharmony_ci}; 74862306a36Sopenharmony_ci 74962306a36Sopenharmony_cistruct be_cmd_set_host_data { 75062306a36Sopenharmony_ci union { 75162306a36Sopenharmony_ci struct be_cmd_req_hdr req_hdr; 75262306a36Sopenharmony_ci struct be_cmd_resp_hdr resp_hdr; 75362306a36Sopenharmony_ci } h; 75462306a36Sopenharmony_ci union { 75562306a36Sopenharmony_ci struct be_sethost_req req; 75662306a36Sopenharmony_ci struct be_sethost_resp resp; 75762306a36Sopenharmony_ci } param; 75862306a36Sopenharmony_ci} __packed; 75962306a36Sopenharmony_ci 76062306a36Sopenharmony_ci/******************** COMMON SET Features *******************/ 76162306a36Sopenharmony_ci#define BE_CMD_SET_FEATURE_UER 0x10 76262306a36Sopenharmony_ci#define BE_CMD_UER_SUPP_BIT 0x1 76362306a36Sopenharmony_cistruct be_uer_req { 76462306a36Sopenharmony_ci u32 uer; 76562306a36Sopenharmony_ci u32 rsvd; 76662306a36Sopenharmony_ci}; 76762306a36Sopenharmony_ci 76862306a36Sopenharmony_cistruct be_uer_resp { 76962306a36Sopenharmony_ci u32 uer; 77062306a36Sopenharmony_ci u16 ue2rp; 77162306a36Sopenharmony_ci u16 ue2sr; 77262306a36Sopenharmony_ci}; 77362306a36Sopenharmony_ci 77462306a36Sopenharmony_cistruct be_cmd_set_features { 77562306a36Sopenharmony_ci union { 77662306a36Sopenharmony_ci struct be_cmd_req_hdr req_hdr; 77762306a36Sopenharmony_ci struct be_cmd_resp_hdr resp_hdr; 77862306a36Sopenharmony_ci } h; 77962306a36Sopenharmony_ci u32 feature; 78062306a36Sopenharmony_ci u32 param_len; 78162306a36Sopenharmony_ci union { 78262306a36Sopenharmony_ci struct be_uer_req req; 78362306a36Sopenharmony_ci struct be_uer_resp resp; 78462306a36Sopenharmony_ci u32 rsvd[2]; 78562306a36Sopenharmony_ci } param; 78662306a36Sopenharmony_ci} __packed; 78762306a36Sopenharmony_ci 78862306a36Sopenharmony_ciint beiscsi_cmd_function_reset(struct beiscsi_hba *phba); 78962306a36Sopenharmony_ci 79062306a36Sopenharmony_ciint beiscsi_cmd_special_wrb(struct be_ctrl_info *ctrl, u32 load); 79162306a36Sopenharmony_ci 79262306a36Sopenharmony_ciint beiscsi_check_fw_rdy(struct beiscsi_hba *phba); 79362306a36Sopenharmony_ci 79462306a36Sopenharmony_ciint beiscsi_init_sliport(struct beiscsi_hba *phba); 79562306a36Sopenharmony_ci 79662306a36Sopenharmony_ciint beiscsi_cmd_iscsi_cleanup(struct beiscsi_hba *phba, unsigned short ulp_num); 79762306a36Sopenharmony_ci 79862306a36Sopenharmony_ciint beiscsi_detect_ue(struct beiscsi_hba *phba); 79962306a36Sopenharmony_ci 80062306a36Sopenharmony_ciint beiscsi_detect_tpe(struct beiscsi_hba *phba); 80162306a36Sopenharmony_ci 80262306a36Sopenharmony_ciint beiscsi_cmd_eq_create(struct be_ctrl_info *ctrl, 80362306a36Sopenharmony_ci struct be_queue_info *eq, int eq_delay); 80462306a36Sopenharmony_ci 80562306a36Sopenharmony_ciint beiscsi_cmd_cq_create(struct be_ctrl_info *ctrl, 80662306a36Sopenharmony_ci struct be_queue_info *cq, struct be_queue_info *eq, 80762306a36Sopenharmony_ci bool sol_evts, bool no_delay, 80862306a36Sopenharmony_ci int num_cqe_dma_coalesce); 80962306a36Sopenharmony_ci 81062306a36Sopenharmony_ciint beiscsi_cmd_q_destroy(struct be_ctrl_info *ctrl, struct be_queue_info *q, 81162306a36Sopenharmony_ci int type); 81262306a36Sopenharmony_ciint beiscsi_cmd_mccq_create(struct beiscsi_hba *phba, 81362306a36Sopenharmony_ci struct be_queue_info *mccq, 81462306a36Sopenharmony_ci struct be_queue_info *cq); 81562306a36Sopenharmony_ci 81662306a36Sopenharmony_civoid free_mcc_wrb(struct be_ctrl_info *ctrl, unsigned int tag); 81762306a36Sopenharmony_ci 81862306a36Sopenharmony_ciint beiscsi_modify_eq_delay(struct beiscsi_hba *phba, struct be_set_eqd *, 81962306a36Sopenharmony_ci int num); 82062306a36Sopenharmony_ciint beiscsi_mccq_compl_wait(struct beiscsi_hba *phba, 82162306a36Sopenharmony_ci unsigned int tag, 82262306a36Sopenharmony_ci struct be_mcc_wrb **wrb, 82362306a36Sopenharmony_ci struct be_dma_mem *mbx_cmd_mem); 82462306a36Sopenharmony_ciint __beiscsi_mcc_compl_status(struct beiscsi_hba *phba, 82562306a36Sopenharmony_ci unsigned int tag, 82662306a36Sopenharmony_ci struct be_mcc_wrb **wrb, 82762306a36Sopenharmony_ci struct be_dma_mem *mbx_cmd_mem); 82862306a36Sopenharmony_cistruct be_mcc_wrb *wrb_from_mbox(struct be_dma_mem *mbox_mem); 82962306a36Sopenharmony_civoid be_mcc_notify(struct beiscsi_hba *phba, unsigned int tag); 83062306a36Sopenharmony_cistruct be_mcc_wrb *alloc_mcc_wrb(struct beiscsi_hba *phba, 83162306a36Sopenharmony_ci unsigned int *ref_tag); 83262306a36Sopenharmony_civoid beiscsi_process_async_event(struct beiscsi_hba *phba, 83362306a36Sopenharmony_ci struct be_mcc_compl *compl); 83462306a36Sopenharmony_ciint beiscsi_process_mcc_compl(struct be_ctrl_info *ctrl, 83562306a36Sopenharmony_ci struct be_mcc_compl *compl); 83662306a36Sopenharmony_ci 83762306a36Sopenharmony_ciint be_cmd_create_default_pdu_queue(struct be_ctrl_info *ctrl, 83862306a36Sopenharmony_ci struct be_queue_info *cq, 83962306a36Sopenharmony_ci struct be_queue_info *dq, int length, 84062306a36Sopenharmony_ci int entry_size, uint8_t is_header, 84162306a36Sopenharmony_ci uint8_t ulp_num); 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_ciint be_cmd_iscsi_post_template_hdr(struct be_ctrl_info *ctrl, 84462306a36Sopenharmony_ci struct be_dma_mem *q_mem); 84562306a36Sopenharmony_ci 84662306a36Sopenharmony_ciint be_cmd_iscsi_remove_template_hdr(struct be_ctrl_info *ctrl); 84762306a36Sopenharmony_ci 84862306a36Sopenharmony_ciint be_cmd_iscsi_post_sgl_pages(struct be_ctrl_info *ctrl, 84962306a36Sopenharmony_ci struct be_dma_mem *q_mem, u32 page_offset, 85062306a36Sopenharmony_ci u32 num_pages); 85162306a36Sopenharmony_ci 85262306a36Sopenharmony_ciint be_cmd_wrbq_create(struct be_ctrl_info *ctrl, struct be_dma_mem *q_mem, 85362306a36Sopenharmony_ci struct be_queue_info *wrbq, 85462306a36Sopenharmony_ci struct hwi_wrb_context *pwrb_context, 85562306a36Sopenharmony_ci uint8_t ulp_num); 85662306a36Sopenharmony_ci 85762306a36Sopenharmony_ci/* Configuration Functions */ 85862306a36Sopenharmony_ciint be_cmd_set_vlan(struct beiscsi_hba *phba, uint16_t vlan_tag); 85962306a36Sopenharmony_ci 86062306a36Sopenharmony_ciint beiscsi_check_supported_fw(struct be_ctrl_info *ctrl, 86162306a36Sopenharmony_ci struct beiscsi_hba *phba); 86262306a36Sopenharmony_ci 86362306a36Sopenharmony_ciint beiscsi_get_fw_config(struct be_ctrl_info *ctrl, struct beiscsi_hba *phba); 86462306a36Sopenharmony_ci 86562306a36Sopenharmony_ciint beiscsi_get_port_name(struct be_ctrl_info *ctrl, struct beiscsi_hba *phba); 86662306a36Sopenharmony_ci 86762306a36Sopenharmony_ciint beiscsi_set_uer_feature(struct beiscsi_hba *phba); 86862306a36Sopenharmony_ciint beiscsi_set_host_data(struct beiscsi_hba *phba); 86962306a36Sopenharmony_ci 87062306a36Sopenharmony_cistruct be_default_pdu_context { 87162306a36Sopenharmony_ci u32 dw[4]; 87262306a36Sopenharmony_ci} __packed; 87362306a36Sopenharmony_ci 87462306a36Sopenharmony_cistruct amap_be_default_pdu_context { 87562306a36Sopenharmony_ci u8 dbuf_cindex[13]; /* dword 0 */ 87662306a36Sopenharmony_ci u8 rsvd0[3]; /* dword 0 */ 87762306a36Sopenharmony_ci u8 ring_size[4]; /* dword 0 */ 87862306a36Sopenharmony_ci u8 ring_state[4]; /* dword 0 */ 87962306a36Sopenharmony_ci u8 rsvd1[8]; /* dword 0 */ 88062306a36Sopenharmony_ci u8 dbuf_pindex[13]; /* dword 1 */ 88162306a36Sopenharmony_ci u8 rsvd2; /* dword 1 */ 88262306a36Sopenharmony_ci u8 pci_func_id[8]; /* dword 1 */ 88362306a36Sopenharmony_ci u8 rx_pdid[9]; /* dword 1 */ 88462306a36Sopenharmony_ci u8 rx_pdid_valid; /* dword 1 */ 88562306a36Sopenharmony_ci u8 default_buffer_size[16]; /* dword 2 */ 88662306a36Sopenharmony_ci u8 cq_id_recv[10]; /* dword 2 */ 88762306a36Sopenharmony_ci u8 rx_pdid_not_valid; /* dword 2 */ 88862306a36Sopenharmony_ci u8 rsvd3[5]; /* dword 2 */ 88962306a36Sopenharmony_ci u8 rsvd4[32]; /* dword 3 */ 89062306a36Sopenharmony_ci} __packed; 89162306a36Sopenharmony_ci 89262306a36Sopenharmony_cistruct amap_default_pdu_context_ext { 89362306a36Sopenharmony_ci u8 rsvd0[16]; /* dword 0 */ 89462306a36Sopenharmony_ci u8 ring_size[4]; /* dword 0 */ 89562306a36Sopenharmony_ci u8 rsvd1[12]; /* dword 0 */ 89662306a36Sopenharmony_ci u8 rsvd2[22]; /* dword 1 */ 89762306a36Sopenharmony_ci u8 rx_pdid[9]; /* dword 1 */ 89862306a36Sopenharmony_ci u8 rx_pdid_valid; /* dword 1 */ 89962306a36Sopenharmony_ci u8 default_buffer_size[16]; /* dword 2 */ 90062306a36Sopenharmony_ci u8 cq_id_recv[16]; /* dword 2 */ 90162306a36Sopenharmony_ci u8 rsvd3[32]; /* dword 3 */ 90262306a36Sopenharmony_ci} __packed; 90362306a36Sopenharmony_ci 90462306a36Sopenharmony_cistruct be_defq_create_req { 90562306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 90662306a36Sopenharmony_ci u16 num_pages; 90762306a36Sopenharmony_ci u8 ulp_num; 90862306a36Sopenharmony_ci#define BEISCSI_DUAL_ULP_AWARE_BIT 0 /* Byte 3 - Bit 0 */ 90962306a36Sopenharmony_ci#define BEISCSI_BIND_Q_TO_ULP_BIT 1 /* Byte 3 - Bit 1 */ 91062306a36Sopenharmony_ci u8 dua_feature; 91162306a36Sopenharmony_ci struct be_default_pdu_context context; 91262306a36Sopenharmony_ci struct phys_addr pages[8]; 91362306a36Sopenharmony_ci} __packed; 91462306a36Sopenharmony_ci 91562306a36Sopenharmony_cistruct be_defq_create_resp { 91662306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 91762306a36Sopenharmony_ci u16 id; 91862306a36Sopenharmony_ci u8 rsvd0; 91962306a36Sopenharmony_ci u8 ulp_num; 92062306a36Sopenharmony_ci u32 doorbell_offset; 92162306a36Sopenharmony_ci u16 register_set; 92262306a36Sopenharmony_ci u16 doorbell_format; 92362306a36Sopenharmony_ci} __packed; 92462306a36Sopenharmony_ci 92562306a36Sopenharmony_cistruct be_post_template_pages_req { 92662306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 92762306a36Sopenharmony_ci u16 num_pages; 92862306a36Sopenharmony_ci#define BEISCSI_TEMPLATE_HDR_TYPE_ISCSI 0x1 92962306a36Sopenharmony_ci u16 type; 93062306a36Sopenharmony_ci struct phys_addr scratch_pa; 93162306a36Sopenharmony_ci struct virt_addr scratch_va; 93262306a36Sopenharmony_ci struct virt_addr pages_va; 93362306a36Sopenharmony_ci struct phys_addr pages[16]; 93462306a36Sopenharmony_ci} __packed; 93562306a36Sopenharmony_ci 93662306a36Sopenharmony_cistruct be_remove_template_pages_req { 93762306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 93862306a36Sopenharmony_ci u16 type; 93962306a36Sopenharmony_ci u16 rsvd0; 94062306a36Sopenharmony_ci} __packed; 94162306a36Sopenharmony_ci 94262306a36Sopenharmony_cistruct be_post_sgl_pages_req { 94362306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 94462306a36Sopenharmony_ci u16 num_pages; 94562306a36Sopenharmony_ci u16 page_offset; 94662306a36Sopenharmony_ci u32 rsvd0; 94762306a36Sopenharmony_ci struct phys_addr pages[26]; 94862306a36Sopenharmony_ci u32 rsvd1; 94962306a36Sopenharmony_ci} __packed; 95062306a36Sopenharmony_ci 95162306a36Sopenharmony_cistruct be_wrbq_create_req { 95262306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 95362306a36Sopenharmony_ci u16 num_pages; 95462306a36Sopenharmony_ci u8 ulp_num; 95562306a36Sopenharmony_ci u8 dua_feature; 95662306a36Sopenharmony_ci struct phys_addr pages[8]; 95762306a36Sopenharmony_ci} __packed; 95862306a36Sopenharmony_ci 95962306a36Sopenharmony_cistruct be_wrbq_create_resp { 96062306a36Sopenharmony_ci struct be_cmd_resp_hdr resp_hdr; 96162306a36Sopenharmony_ci u16 cid; 96262306a36Sopenharmony_ci u8 rsvd0; 96362306a36Sopenharmony_ci u8 ulp_num; 96462306a36Sopenharmony_ci u32 doorbell_offset; 96562306a36Sopenharmony_ci u16 register_set; 96662306a36Sopenharmony_ci u16 doorbell_format; 96762306a36Sopenharmony_ci} __packed; 96862306a36Sopenharmony_ci 96962306a36Sopenharmony_ci#define SOL_CID_MASK 0x0000FFC0 97062306a36Sopenharmony_ci#define SOL_CODE_MASK 0x0000003F 97162306a36Sopenharmony_ci#define SOL_WRB_INDEX_MASK 0x00FF0000 97262306a36Sopenharmony_ci#define SOL_CMD_WND_MASK 0xFF000000 97362306a36Sopenharmony_ci#define SOL_RES_CNT_MASK 0x7FFFFFFF 97462306a36Sopenharmony_ci#define SOL_EXP_CMD_SN_MASK 0xFFFFFFFF 97562306a36Sopenharmony_ci#define SOL_HW_STS_MASK 0x000000FF 97662306a36Sopenharmony_ci#define SOL_STS_MASK 0x0000FF00 97762306a36Sopenharmony_ci#define SOL_RESP_MASK 0x00FF0000 97862306a36Sopenharmony_ci#define SOL_FLAGS_MASK 0x7F000000 97962306a36Sopenharmony_ci#define SOL_S_MASK 0x80000000 98062306a36Sopenharmony_ci 98162306a36Sopenharmony_cistruct sol_cqe { 98262306a36Sopenharmony_ci u32 dw[4]; 98362306a36Sopenharmony_ci}; 98462306a36Sopenharmony_ci 98562306a36Sopenharmony_cistruct amap_sol_cqe { 98662306a36Sopenharmony_ci u8 hw_sts[8]; /* dword 0 */ 98762306a36Sopenharmony_ci u8 i_sts[8]; /* dword 0 */ 98862306a36Sopenharmony_ci u8 i_resp[8]; /* dword 0 */ 98962306a36Sopenharmony_ci u8 i_flags[7]; /* dword 0 */ 99062306a36Sopenharmony_ci u8 s; /* dword 0 */ 99162306a36Sopenharmony_ci u8 i_exp_cmd_sn[32]; /* dword 1 */ 99262306a36Sopenharmony_ci u8 code[6]; /* dword 2 */ 99362306a36Sopenharmony_ci u8 cid[10]; /* dword 2 */ 99462306a36Sopenharmony_ci u8 wrb_index[8]; /* dword 2 */ 99562306a36Sopenharmony_ci u8 i_cmd_wnd[8]; /* dword 2 */ 99662306a36Sopenharmony_ci u8 i_res_cnt[31]; /* dword 3 */ 99762306a36Sopenharmony_ci u8 valid; /* dword 3 */ 99862306a36Sopenharmony_ci} __packed; 99962306a36Sopenharmony_ci 100062306a36Sopenharmony_ci#define SOL_ICD_INDEX_MASK 0x0003FFC0 100162306a36Sopenharmony_cistruct amap_sol_cqe_ring { 100262306a36Sopenharmony_ci u8 hw_sts[8]; /* dword 0 */ 100362306a36Sopenharmony_ci u8 i_sts[8]; /* dword 0 */ 100462306a36Sopenharmony_ci u8 i_resp[8]; /* dword 0 */ 100562306a36Sopenharmony_ci u8 i_flags[7]; /* dword 0 */ 100662306a36Sopenharmony_ci u8 s; /* dword 0 */ 100762306a36Sopenharmony_ci u8 i_exp_cmd_sn[32]; /* dword 1 */ 100862306a36Sopenharmony_ci u8 code[6]; /* dword 2 */ 100962306a36Sopenharmony_ci u8 icd_index[12]; /* dword 2 */ 101062306a36Sopenharmony_ci u8 rsvd[6]; /* dword 2 */ 101162306a36Sopenharmony_ci u8 i_cmd_wnd[8]; /* dword 2 */ 101262306a36Sopenharmony_ci u8 i_res_cnt[31]; /* dword 3 */ 101362306a36Sopenharmony_ci u8 valid; /* dword 3 */ 101462306a36Sopenharmony_ci} __packed; 101562306a36Sopenharmony_ci 101662306a36Sopenharmony_cistruct amap_sol_cqe_v2 { 101762306a36Sopenharmony_ci u8 hw_sts[8]; /* dword 0 */ 101862306a36Sopenharmony_ci u8 i_sts[8]; /* dword 0 */ 101962306a36Sopenharmony_ci u8 wrb_index[16]; /* dword 0 */ 102062306a36Sopenharmony_ci u8 i_exp_cmd_sn[32]; /* dword 1 */ 102162306a36Sopenharmony_ci u8 code[6]; /* dword 2 */ 102262306a36Sopenharmony_ci u8 cmd_cmpl; /* dword 2 */ 102362306a36Sopenharmony_ci u8 rsvd0; /* dword 2 */ 102462306a36Sopenharmony_ci u8 i_cmd_wnd[8]; /* dword 2 */ 102562306a36Sopenharmony_ci u8 cid[13]; /* dword 2 */ 102662306a36Sopenharmony_ci u8 u; /* dword 2 */ 102762306a36Sopenharmony_ci u8 o; /* dword 2 */ 102862306a36Sopenharmony_ci u8 s; /* dword 2 */ 102962306a36Sopenharmony_ci u8 i_res_cnt[31]; /* dword 3 */ 103062306a36Sopenharmony_ci u8 valid; /* dword 3 */ 103162306a36Sopenharmony_ci} __packed; 103262306a36Sopenharmony_ci 103362306a36Sopenharmony_cistruct common_sol_cqe { 103462306a36Sopenharmony_ci u32 exp_cmdsn; 103562306a36Sopenharmony_ci u32 res_cnt; 103662306a36Sopenharmony_ci u16 wrb_index; 103762306a36Sopenharmony_ci u16 cid; 103862306a36Sopenharmony_ci u8 hw_sts; 103962306a36Sopenharmony_ci u8 cmd_wnd; 104062306a36Sopenharmony_ci u8 res_flag; /* the s feild of structure */ 104162306a36Sopenharmony_ci u8 i_resp; /* for skh if cmd_complete is set then i_sts is response */ 104262306a36Sopenharmony_ci u8 i_flags; /* for skh or the u and o feilds */ 104362306a36Sopenharmony_ci u8 i_sts; /* for skh if cmd_complete is not-set then i_sts is status */ 104462306a36Sopenharmony_ci}; 104562306a36Sopenharmony_ci 104662306a36Sopenharmony_ci/*** iSCSI ack/driver message completions ***/ 104762306a36Sopenharmony_cistruct amap_it_dmsg_cqe { 104862306a36Sopenharmony_ci u8 ack_num[32]; /* DWORD 0 */ 104962306a36Sopenharmony_ci u8 pdu_bytes_rcvd[32]; /* DWORD 1 */ 105062306a36Sopenharmony_ci u8 code[6]; /* DWORD 2 */ 105162306a36Sopenharmony_ci u8 cid[10]; /* DWORD 2 */ 105262306a36Sopenharmony_ci u8 wrb_idx[8]; /* DWORD 2 */ 105362306a36Sopenharmony_ci u8 rsvd0[8]; /* DWORD 2*/ 105462306a36Sopenharmony_ci u8 rsvd1[31]; /* DWORD 3*/ 105562306a36Sopenharmony_ci u8 valid; /* DWORD 3 */ 105662306a36Sopenharmony_ci} __packed; 105762306a36Sopenharmony_ci 105862306a36Sopenharmony_cistruct amap_it_dmsg_cqe_v2 { 105962306a36Sopenharmony_ci u8 ack_num[32]; /* DWORD 0 */ 106062306a36Sopenharmony_ci u8 pdu_bytes_rcvd[32]; /* DWORD 1 */ 106162306a36Sopenharmony_ci u8 code[6]; /* DWORD 2 */ 106262306a36Sopenharmony_ci u8 rsvd0[10]; /* DWORD 2 */ 106362306a36Sopenharmony_ci u8 wrb_idx[16]; /* DWORD 2 */ 106462306a36Sopenharmony_ci u8 rsvd1[16]; /* DWORD 3 */ 106562306a36Sopenharmony_ci u8 cid[13]; /* DWORD 3 */ 106662306a36Sopenharmony_ci u8 rsvd2[2]; /* DWORD 3 */ 106762306a36Sopenharmony_ci u8 valid; /* DWORD 3 */ 106862306a36Sopenharmony_ci} __packed; 106962306a36Sopenharmony_ci 107062306a36Sopenharmony_ci 107162306a36Sopenharmony_ci/** 107262306a36Sopenharmony_ci * Post WRB Queue Doorbell Register used by the host Storage 107362306a36Sopenharmony_ci * stack to notify the 107462306a36Sopenharmony_ci * controller of a posted Work Request Block 107562306a36Sopenharmony_ci */ 107662306a36Sopenharmony_ci#define DB_WRB_POST_CID_MASK 0xFFFF /* bits 0 - 16 */ 107762306a36Sopenharmony_ci#define DB_DEF_PDU_WRB_INDEX_MASK 0xFF /* bits 0 - 9 */ 107862306a36Sopenharmony_ci 107962306a36Sopenharmony_ci#define DB_DEF_PDU_WRB_INDEX_SHIFT 16 108062306a36Sopenharmony_ci#define DB_DEF_PDU_NUM_POSTED_SHIFT 24 108162306a36Sopenharmony_ci 108262306a36Sopenharmony_cistruct fragnum_bits_for_sgl_cra_in { 108362306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 108462306a36Sopenharmony_ci u32 num_bits; 108562306a36Sopenharmony_ci} __packed; 108662306a36Sopenharmony_ci 108762306a36Sopenharmony_cistruct iscsi_cleanup_req { 108862306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 108962306a36Sopenharmony_ci u16 chute; 109062306a36Sopenharmony_ci u8 hdr_ring_id; 109162306a36Sopenharmony_ci u8 data_ring_id; 109262306a36Sopenharmony_ci} __packed; 109362306a36Sopenharmony_ci 109462306a36Sopenharmony_cistruct iscsi_cleanup_req_v1 { 109562306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 109662306a36Sopenharmony_ci u16 chute; 109762306a36Sopenharmony_ci u16 rsvd1; 109862306a36Sopenharmony_ci u16 hdr_ring_id; 109962306a36Sopenharmony_ci u16 rsvd2; 110062306a36Sopenharmony_ci u16 data_ring_id; 110162306a36Sopenharmony_ci u16 rsvd3; 110262306a36Sopenharmony_ci} __packed; 110362306a36Sopenharmony_ci 110462306a36Sopenharmony_cistruct eq_delay { 110562306a36Sopenharmony_ci u32 eq_id; 110662306a36Sopenharmony_ci u32 phase; 110762306a36Sopenharmony_ci u32 delay_multiplier; 110862306a36Sopenharmony_ci} __packed; 110962306a36Sopenharmony_ci 111062306a36Sopenharmony_cistruct be_eq_delay_params_in { 111162306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 111262306a36Sopenharmony_ci u32 num_eq; 111362306a36Sopenharmony_ci struct eq_delay delay[8]; 111462306a36Sopenharmony_ci} __packed; 111562306a36Sopenharmony_ci 111662306a36Sopenharmony_cistruct tcp_connect_and_offload_in { 111762306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 111862306a36Sopenharmony_ci struct ip_addr_format ip_address; 111962306a36Sopenharmony_ci u16 tcp_port; 112062306a36Sopenharmony_ci u16 cid; 112162306a36Sopenharmony_ci u16 cq_id; 112262306a36Sopenharmony_ci u16 defq_id; 112362306a36Sopenharmony_ci struct phys_addr dataout_template_pa; 112462306a36Sopenharmony_ci u16 hdr_ring_id; 112562306a36Sopenharmony_ci u16 data_ring_id; 112662306a36Sopenharmony_ci u8 do_offload; 112762306a36Sopenharmony_ci u8 rsvd0[3]; 112862306a36Sopenharmony_ci} __packed; 112962306a36Sopenharmony_ci 113062306a36Sopenharmony_cistruct tcp_connect_and_offload_in_v1 { 113162306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 113262306a36Sopenharmony_ci struct ip_addr_format ip_address; 113362306a36Sopenharmony_ci u16 tcp_port; 113462306a36Sopenharmony_ci u16 cid; 113562306a36Sopenharmony_ci u16 cq_id; 113662306a36Sopenharmony_ci u16 defq_id; 113762306a36Sopenharmony_ci struct phys_addr dataout_template_pa; 113862306a36Sopenharmony_ci u16 hdr_ring_id; 113962306a36Sopenharmony_ci u16 data_ring_id; 114062306a36Sopenharmony_ci u8 do_offload; 114162306a36Sopenharmony_ci u8 ifd_state; 114262306a36Sopenharmony_ci u8 rsvd0[2]; 114362306a36Sopenharmony_ci u16 tcp_window_size; 114462306a36Sopenharmony_ci u8 tcp_window_scale_count; 114562306a36Sopenharmony_ci u8 rsvd1; 114662306a36Sopenharmony_ci u32 tcp_mss:24; 114762306a36Sopenharmony_ci u8 rsvd2; 114862306a36Sopenharmony_ci} __packed; 114962306a36Sopenharmony_ci 115062306a36Sopenharmony_cistruct tcp_connect_and_offload_out { 115162306a36Sopenharmony_ci struct be_cmd_resp_hdr hdr; 115262306a36Sopenharmony_ci u32 connection_handle; 115362306a36Sopenharmony_ci u16 cid; 115462306a36Sopenharmony_ci u16 rsvd0; 115562306a36Sopenharmony_ci 115662306a36Sopenharmony_ci} __packed; 115762306a36Sopenharmony_ci 115862306a36Sopenharmony_ci#define DB_DEF_PDU_RING_ID_MASK 0x3FFF /* bits 0 - 13 */ 115962306a36Sopenharmony_ci#define DB_DEF_PDU_CQPROC_MASK 0x3FFF /* bits 16 - 29 */ 116062306a36Sopenharmony_ci#define DB_DEF_PDU_REARM_SHIFT 14 116162306a36Sopenharmony_ci#define DB_DEF_PDU_EVENT_SHIFT 15 116262306a36Sopenharmony_ci#define DB_DEF_PDU_CQPROC_SHIFT 16 116362306a36Sopenharmony_ci 116462306a36Sopenharmony_cistruct be_invalidate_connection_params_in { 116562306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 116662306a36Sopenharmony_ci u32 session_handle; 116762306a36Sopenharmony_ci u16 cid; 116862306a36Sopenharmony_ci u16 unused; 116962306a36Sopenharmony_ci#define BE_CLEANUP_TYPE_INVALIDATE 0x8001 117062306a36Sopenharmony_ci#define BE_CLEANUP_TYPE_ISSUE_TCP_RST 0x8002 117162306a36Sopenharmony_ci u16 cleanup_type; 117262306a36Sopenharmony_ci u16 save_cfg; 117362306a36Sopenharmony_ci} __packed; 117462306a36Sopenharmony_ci 117562306a36Sopenharmony_cistruct be_invalidate_connection_params_out { 117662306a36Sopenharmony_ci u32 session_handle; 117762306a36Sopenharmony_ci u16 cid; 117862306a36Sopenharmony_ci u16 unused; 117962306a36Sopenharmony_ci} __packed; 118062306a36Sopenharmony_ci 118162306a36Sopenharmony_ciunion be_invalidate_connection_params { 118262306a36Sopenharmony_ci struct be_invalidate_connection_params_in req; 118362306a36Sopenharmony_ci struct be_invalidate_connection_params_out resp; 118462306a36Sopenharmony_ci} __packed; 118562306a36Sopenharmony_ci 118662306a36Sopenharmony_cistruct be_tcp_upload_params_in { 118762306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 118862306a36Sopenharmony_ci u16 id; 118962306a36Sopenharmony_ci#define BE_UPLOAD_TYPE_GRACEFUL 1 119062306a36Sopenharmony_ci/* abortive upload with reset */ 119162306a36Sopenharmony_ci#define BE_UPLOAD_TYPE_ABORT_RESET 2 119262306a36Sopenharmony_ci/* abortive upload without reset */ 119362306a36Sopenharmony_ci#define BE_UPLOAD_TYPE_ABORT 3 119462306a36Sopenharmony_ci/* abortive upload with reset, sequence number by driver */ 119562306a36Sopenharmony_ci#define BE_UPLOAD_TYPE_ABORT_WITH_SEQ 4 119662306a36Sopenharmony_ci u16 upload_type; 119762306a36Sopenharmony_ci u32 reset_seq; 119862306a36Sopenharmony_ci} __packed; 119962306a36Sopenharmony_ci 120062306a36Sopenharmony_cistruct be_tcp_upload_params_out { 120162306a36Sopenharmony_ci u32 dw[32]; 120262306a36Sopenharmony_ci} __packed; 120362306a36Sopenharmony_ci 120462306a36Sopenharmony_ciunion be_tcp_upload_params { 120562306a36Sopenharmony_ci struct be_tcp_upload_params_in request; 120662306a36Sopenharmony_ci struct be_tcp_upload_params_out response; 120762306a36Sopenharmony_ci} __packed; 120862306a36Sopenharmony_ci 120962306a36Sopenharmony_cistruct be_ulp_fw_cfg { 121062306a36Sopenharmony_ci#define BEISCSI_ULP_ISCSI_INI_MODE 0x10 121162306a36Sopenharmony_ci u32 ulp_mode; 121262306a36Sopenharmony_ci u32 etx_base; 121362306a36Sopenharmony_ci u32 etx_count; 121462306a36Sopenharmony_ci u32 sq_base; 121562306a36Sopenharmony_ci u32 sq_count; 121662306a36Sopenharmony_ci u32 rq_base; 121762306a36Sopenharmony_ci u32 rq_count; 121862306a36Sopenharmony_ci u32 dq_base; 121962306a36Sopenharmony_ci u32 dq_count; 122062306a36Sopenharmony_ci u32 lro_base; 122162306a36Sopenharmony_ci u32 lro_count; 122262306a36Sopenharmony_ci u32 icd_base; 122362306a36Sopenharmony_ci u32 icd_count; 122462306a36Sopenharmony_ci}; 122562306a36Sopenharmony_ci 122662306a36Sopenharmony_cistruct be_ulp_chain_icd { 122762306a36Sopenharmony_ci u32 chain_base; 122862306a36Sopenharmony_ci u32 chain_count; 122962306a36Sopenharmony_ci}; 123062306a36Sopenharmony_ci 123162306a36Sopenharmony_cistruct be_fw_cfg { 123262306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 123362306a36Sopenharmony_ci u32 be_config_number; 123462306a36Sopenharmony_ci u32 asic_revision; 123562306a36Sopenharmony_ci u32 phys_port; 123662306a36Sopenharmony_ci#define BEISCSI_FUNC_ISCSI_INI_MODE 0x10 123762306a36Sopenharmony_ci#define BEISCSI_FUNC_DUA_MODE 0x800 123862306a36Sopenharmony_ci u32 function_mode; 123962306a36Sopenharmony_ci struct be_ulp_fw_cfg ulp[2]; 124062306a36Sopenharmony_ci u32 function_caps; 124162306a36Sopenharmony_ci u32 cqid_base; 124262306a36Sopenharmony_ci u32 cqid_count; 124362306a36Sopenharmony_ci u32 eqid_base; 124462306a36Sopenharmony_ci u32 eqid_count; 124562306a36Sopenharmony_ci struct be_ulp_chain_icd chain_icd[2]; 124662306a36Sopenharmony_ci} __packed; 124762306a36Sopenharmony_ci 124862306a36Sopenharmony_cistruct be_cmd_get_all_if_id_req { 124962306a36Sopenharmony_ci struct be_cmd_req_hdr hdr; 125062306a36Sopenharmony_ci u32 if_count; 125162306a36Sopenharmony_ci u32 if_hndl_list[1]; 125262306a36Sopenharmony_ci} __packed; 125362306a36Sopenharmony_ci 125462306a36Sopenharmony_cistruct be_cmd_get_port_name { 125562306a36Sopenharmony_ci union { 125662306a36Sopenharmony_ci struct be_cmd_req_hdr req_hdr; 125762306a36Sopenharmony_ci struct be_cmd_resp_hdr resp_hdr; 125862306a36Sopenharmony_ci } h; 125962306a36Sopenharmony_ci union { 126062306a36Sopenharmony_ci struct { 126162306a36Sopenharmony_ci u32 reserved; 126262306a36Sopenharmony_ci } req; 126362306a36Sopenharmony_ci struct { 126462306a36Sopenharmony_ci u32 port_names; 126562306a36Sopenharmony_ci } resp; 126662306a36Sopenharmony_ci } p; 126762306a36Sopenharmony_ci} __packed; 126862306a36Sopenharmony_ci 126962306a36Sopenharmony_ci#define ISCSI_OPCODE_SCSI_DATA_OUT 5 127062306a36Sopenharmony_ci#define OPCODE_COMMON_NTWK_LINK_STATUS_QUERY 5 127162306a36Sopenharmony_ci#define OPCODE_COMMON_MODIFY_EQ_DELAY 41 127262306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_CLEANUP 59 127362306a36Sopenharmony_ci#define OPCODE_COMMON_TCP_UPLOAD 56 127462306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_TCP_CONNECT_AND_OFFLOAD 70 127562306a36Sopenharmony_ci#define OPCODE_COMMON_ISCSI_ERROR_RECOVERY_INVALIDATE_COMMANDS 1 127662306a36Sopenharmony_ci#define OPCODE_ISCSI_INI_CFG_GET_HBA_NAME 6 127762306a36Sopenharmony_ci#define OPCODE_ISCSI_INI_CFG_SET_HBA_NAME 7 127862306a36Sopenharmony_ci#define OPCODE_ISCSI_INI_SESSION_GET_A_SESSION 14 127962306a36Sopenharmony_ci#define OPCODE_ISCSI_INI_SESSION_LOGOUT_TARGET 24 128062306a36Sopenharmony_ci#define OPCODE_ISCSI_INI_DRIVER_REOPEN_ALL_SESSIONS 36 128162306a36Sopenharmony_ci#define OPCODE_ISCSI_INI_DRIVER_OFFLOAD_SESSION 41 128262306a36Sopenharmony_ci#define OPCODE_ISCSI_INI_DRIVER_INVALIDATE_CONNECTION 42 128362306a36Sopenharmony_ci#define OPCODE_ISCSI_INI_BOOT_GET_BOOT_TARGET 52 128462306a36Sopenharmony_ci#define OPCODE_COMMON_WRITE_FLASH 96 128562306a36Sopenharmony_ci#define OPCODE_COMMON_READ_FLASH 97 128662306a36Sopenharmony_ci 128762306a36Sopenharmony_ci#define CMD_ISCSI_COMMAND_INVALIDATE 1 128862306a36Sopenharmony_ci 128962306a36Sopenharmony_ci#define INI_WR_CMD 1 /* Initiator write command */ 129062306a36Sopenharmony_ci#define INI_TMF_CMD 2 /* Initiator TMF command */ 129162306a36Sopenharmony_ci#define INI_NOPOUT_CMD 3 /* Initiator; Send a NOP-OUT */ 129262306a36Sopenharmony_ci#define INI_RD_CMD 5 /* Initiator requesting to send 129362306a36Sopenharmony_ci * a read command 129462306a36Sopenharmony_ci */ 129562306a36Sopenharmony_ci#define TGT_CTX_UPDT_CMD 7 /* Target context update */ 129662306a36Sopenharmony_ci#define TGT_DM_CMD 11 /* Indicates that the bhs 129762306a36Sopenharmony_ci * prepared by driver should not 129862306a36Sopenharmony_ci * be touched. 129962306a36Sopenharmony_ci */ 130062306a36Sopenharmony_ci 130162306a36Sopenharmony_ci/* Returns the number of items in the field array. */ 130262306a36Sopenharmony_ci#define BE_NUMBER_OF_FIELD(_type_, _field_) \ 130362306a36Sopenharmony_ci (sizeof_field(_type_, _field_)/sizeof((((_type_ *)0)->_field_[0])))\ 130462306a36Sopenharmony_ci 130562306a36Sopenharmony_ci/** 130662306a36Sopenharmony_ci * Different types of iSCSI completions to host driver for both initiator 130762306a36Sopenharmony_ci * and taget mode 130862306a36Sopenharmony_ci * of operation. 130962306a36Sopenharmony_ci */ 131062306a36Sopenharmony_ci#define SOL_CMD_COMPLETE 1 /* Solicited command completed 131162306a36Sopenharmony_ci * normally 131262306a36Sopenharmony_ci */ 131362306a36Sopenharmony_ci#define SOL_CMD_KILLED_DATA_DIGEST_ERR 2 /* Solicited command got 131462306a36Sopenharmony_ci * invalidated internally due 131562306a36Sopenharmony_ci * to Data Digest error 131662306a36Sopenharmony_ci */ 131762306a36Sopenharmony_ci#define CXN_KILLED_PDU_SIZE_EXCEEDS_DSL 3 /* Connection got invalidated 131862306a36Sopenharmony_ci * internally 131962306a36Sopenharmony_ci * due to a received PDU 132062306a36Sopenharmony_ci * size > DSL 132162306a36Sopenharmony_ci */ 132262306a36Sopenharmony_ci#define CXN_KILLED_BURST_LEN_MISMATCH 4 /* Connection got invalidated 132362306a36Sopenharmony_ci * internally due ti received 132462306a36Sopenharmony_ci * PDU sequence size > 132562306a36Sopenharmony_ci * FBL/MBL. 132662306a36Sopenharmony_ci */ 132762306a36Sopenharmony_ci#define CXN_KILLED_AHS_RCVD 5 /* Connection got invalidated 132862306a36Sopenharmony_ci * internally due to a received 132962306a36Sopenharmony_ci * PDU Hdr that has 133062306a36Sopenharmony_ci * AHS */ 133162306a36Sopenharmony_ci#define CXN_KILLED_HDR_DIGEST_ERR 6 /* Connection got invalidated 133262306a36Sopenharmony_ci * internally due to Hdr Digest 133362306a36Sopenharmony_ci * error 133462306a36Sopenharmony_ci */ 133562306a36Sopenharmony_ci#define CXN_KILLED_UNKNOWN_HDR 7 /* Connection got invalidated 133662306a36Sopenharmony_ci * internally 133762306a36Sopenharmony_ci * due to a bad opcode in the 133862306a36Sopenharmony_ci * pdu hdr 133962306a36Sopenharmony_ci */ 134062306a36Sopenharmony_ci#define CXN_KILLED_STALE_ITT_TTT_RCVD 8 /* Connection got invalidated 134162306a36Sopenharmony_ci * internally due to a received 134262306a36Sopenharmony_ci * ITT/TTT that does not belong 134362306a36Sopenharmony_ci * to this Connection 134462306a36Sopenharmony_ci */ 134562306a36Sopenharmony_ci#define CXN_KILLED_INVALID_ITT_TTT_RCVD 9 /* Connection got invalidated 134662306a36Sopenharmony_ci * internally due to received 134762306a36Sopenharmony_ci * ITT/TTT value > Max 134862306a36Sopenharmony_ci * Supported ITTs/TTTs 134962306a36Sopenharmony_ci */ 135062306a36Sopenharmony_ci#define CXN_KILLED_RST_RCVD 10 /* Connection got invalidated 135162306a36Sopenharmony_ci * internally due to an 135262306a36Sopenharmony_ci * incoming TCP RST 135362306a36Sopenharmony_ci */ 135462306a36Sopenharmony_ci#define CXN_KILLED_TIMED_OUT 11 /* Connection got invalidated 135562306a36Sopenharmony_ci * internally due to timeout on 135662306a36Sopenharmony_ci * tcp segment 12 retransmit 135762306a36Sopenharmony_ci * attempts failed 135862306a36Sopenharmony_ci */ 135962306a36Sopenharmony_ci#define CXN_KILLED_RST_SENT 12 /* Connection got invalidated 136062306a36Sopenharmony_ci * internally due to TCP RST 136162306a36Sopenharmony_ci * sent by the Tx side 136262306a36Sopenharmony_ci */ 136362306a36Sopenharmony_ci#define CXN_KILLED_FIN_RCVD 13 /* Connection got invalidated 136462306a36Sopenharmony_ci * internally due to an 136562306a36Sopenharmony_ci * incoming TCP FIN. 136662306a36Sopenharmony_ci */ 136762306a36Sopenharmony_ci#define CXN_KILLED_BAD_UNSOL_PDU_RCVD 14 /* Connection got invalidated 136862306a36Sopenharmony_ci * internally due to bad 136962306a36Sopenharmony_ci * unsolicited PDU Unsolicited 137062306a36Sopenharmony_ci * PDUs are PDUs with 137162306a36Sopenharmony_ci * ITT=0xffffffff 137262306a36Sopenharmony_ci */ 137362306a36Sopenharmony_ci#define CXN_KILLED_BAD_WRB_INDEX_ERROR 15 /* Connection got invalidated 137462306a36Sopenharmony_ci * internally due to bad WRB 137562306a36Sopenharmony_ci * index. 137662306a36Sopenharmony_ci */ 137762306a36Sopenharmony_ci#define CXN_KILLED_OVER_RUN_RESIDUAL 16 /* Command got invalidated 137862306a36Sopenharmony_ci * internally due to received 137962306a36Sopenharmony_ci * command has residual 138062306a36Sopenharmony_ci * over run bytes. 138162306a36Sopenharmony_ci */ 138262306a36Sopenharmony_ci#define CXN_KILLED_UNDER_RUN_RESIDUAL 17 /* Command got invalidated 138362306a36Sopenharmony_ci * internally due to received 138462306a36Sopenharmony_ci * command has residual under 138562306a36Sopenharmony_ci * run bytes. 138662306a36Sopenharmony_ci */ 138762306a36Sopenharmony_ci#define CMD_KILLED_INVALID_STATSN_RCVD 18 /* Command got invalidated 138862306a36Sopenharmony_ci * internally due to a received 138962306a36Sopenharmony_ci * PDU has an invalid StatusSN 139062306a36Sopenharmony_ci */ 139162306a36Sopenharmony_ci#define CMD_KILLED_INVALID_R2T_RCVD 19 /* Command got invalidated 139262306a36Sopenharmony_ci * internally due to a received 139362306a36Sopenharmony_ci * an R2T with some invalid 139462306a36Sopenharmony_ci * fields in it 139562306a36Sopenharmony_ci */ 139662306a36Sopenharmony_ci#define CMD_CXN_KILLED_LUN_INVALID 20 /* Command got invalidated 139762306a36Sopenharmony_ci * internally due to received 139862306a36Sopenharmony_ci * PDU has an invalid LUN. 139962306a36Sopenharmony_ci */ 140062306a36Sopenharmony_ci#define CMD_CXN_KILLED_ICD_INVALID 21 /* Command got invalidated 140162306a36Sopenharmony_ci * internally due to the 140262306a36Sopenharmony_ci * corresponding ICD not in a 140362306a36Sopenharmony_ci * valid state 140462306a36Sopenharmony_ci */ 140562306a36Sopenharmony_ci#define CMD_CXN_KILLED_ITT_INVALID 22 /* Command got invalidated due 140662306a36Sopenharmony_ci * to received PDU has an 140762306a36Sopenharmony_ci * invalid ITT. 140862306a36Sopenharmony_ci */ 140962306a36Sopenharmony_ci#define CMD_CXN_KILLED_SEQ_OUTOFORDER 23 /* Command got invalidated due 141062306a36Sopenharmony_ci * to received sequence buffer 141162306a36Sopenharmony_ci * offset is out of order. 141262306a36Sopenharmony_ci */ 141362306a36Sopenharmony_ci#define CMD_CXN_KILLED_INVALID_DATASN_RCVD 24 /* Command got invalidated 141462306a36Sopenharmony_ci * internally due to a 141562306a36Sopenharmony_ci * received PDU has an invalid 141662306a36Sopenharmony_ci * DataSN 141762306a36Sopenharmony_ci */ 141862306a36Sopenharmony_ci#define CXN_INVALIDATE_NOTIFY 25 /* Connection invalidation 141962306a36Sopenharmony_ci * completion notify. 142062306a36Sopenharmony_ci */ 142162306a36Sopenharmony_ci#define CXN_INVALIDATE_INDEX_NOTIFY 26 /* Connection invalidation 142262306a36Sopenharmony_ci * completion 142362306a36Sopenharmony_ci * with data PDU index. 142462306a36Sopenharmony_ci */ 142562306a36Sopenharmony_ci#define CMD_INVALIDATED_NOTIFY 27 /* Command invalidation 142662306a36Sopenharmony_ci * completionnotifify. 142762306a36Sopenharmony_ci */ 142862306a36Sopenharmony_ci#define UNSOL_HDR_NOTIFY 28 /* Unsolicited header notify.*/ 142962306a36Sopenharmony_ci#define UNSOL_DATA_NOTIFY 29 /* Unsolicited data notify.*/ 143062306a36Sopenharmony_ci#define UNSOL_DATA_DIGEST_ERROR_NOTIFY 30 /* Unsolicited data digest 143162306a36Sopenharmony_ci * error notify. 143262306a36Sopenharmony_ci */ 143362306a36Sopenharmony_ci#define DRIVERMSG_NOTIFY 31 /* TCP acknowledge based 143462306a36Sopenharmony_ci * notification. 143562306a36Sopenharmony_ci */ 143662306a36Sopenharmony_ci#define CXN_KILLED_CMND_DATA_NOT_ON_SAME_CONN 32 /* Connection got invalidated 143762306a36Sopenharmony_ci * internally due to command 143862306a36Sopenharmony_ci * and data are not on same 143962306a36Sopenharmony_ci * connection. 144062306a36Sopenharmony_ci */ 144162306a36Sopenharmony_ci#define SOL_CMD_KILLED_DIF_ERR 33 /* Solicited command got 144262306a36Sopenharmony_ci * invalidated internally due 144362306a36Sopenharmony_ci * to DIF error 144462306a36Sopenharmony_ci */ 144562306a36Sopenharmony_ci#define CXN_KILLED_SYN_RCVD 34 /* Connection got invalidated 144662306a36Sopenharmony_ci * internally due to incoming 144762306a36Sopenharmony_ci * TCP SYN 144862306a36Sopenharmony_ci */ 144962306a36Sopenharmony_ci#define CXN_KILLED_IMM_DATA_RCVD 35 /* Connection got invalidated 145062306a36Sopenharmony_ci * internally due to an 145162306a36Sopenharmony_ci * incoming Unsolicited PDU 145262306a36Sopenharmony_ci * that has immediate data on 145362306a36Sopenharmony_ci * the cxn 145462306a36Sopenharmony_ci */ 145562306a36Sopenharmony_ci 145662306a36Sopenharmony_civoid be_wrb_hdr_prepare(struct be_mcc_wrb *wrb, u32 payload_len, 145762306a36Sopenharmony_ci bool embedded, u8 sge_cnt); 145862306a36Sopenharmony_ci 145962306a36Sopenharmony_civoid be_cmd_hdr_prepare(struct be_cmd_req_hdr *req_hdr, 146062306a36Sopenharmony_ci u8 subsystem, u8 opcode, u32 cmd_len); 146162306a36Sopenharmony_ci#endif /* !BEISCSI_CMDS_H */ 1462