brintos

brintos / linux-shallow public Read only

0
0
Text · 37.3 KiB · 5f9f0b1 Raw
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