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