xref: /linux/drivers/scsi/be2iscsi/be_cmds.h (revision 6694095b5a28c54d9fd114997e483cdc47a2e792)
16733b39aSJayamohan Kallickal /**
2c4f39bdaSKetan Mukadam  * Copyright (C) 2005 - 2015 Emulex
36733b39aSJayamohan Kallickal  * All rights reserved.
46733b39aSJayamohan Kallickal  *
56733b39aSJayamohan Kallickal  * This program is free software; you can redistribute it and/or
66733b39aSJayamohan Kallickal  * modify it under the terms of the GNU General Public License version 2
76733b39aSJayamohan Kallickal  * as published by the Free Software Foundation.  The full GNU General
86733b39aSJayamohan Kallickal  * Public License is included in this distribution in the file called COPYING.
96733b39aSJayamohan Kallickal  *
106733b39aSJayamohan Kallickal  * Contact Information:
114627de93SMinh Tran  * linux-drivers@avagotech.com
126733b39aSJayamohan Kallickal  *
13c4f39bdaSKetan Mukadam  * Emulex
14255fa9a3SJayamohan Kallickal  * 3333 Susan Street
15255fa9a3SJayamohan Kallickal  * Costa Mesa, CA 92626
166733b39aSJayamohan Kallickal  */
176733b39aSJayamohan Kallickal 
186733b39aSJayamohan Kallickal #ifndef BEISCSI_CMDS_H
196733b39aSJayamohan Kallickal #define BEISCSI_CMDS_H
206733b39aSJayamohan Kallickal 
216733b39aSJayamohan Kallickal /**
226733b39aSJayamohan Kallickal  * The driver sends configuration and managements command requests to the
236733b39aSJayamohan Kallickal  * firmware in the BE. These requests are communicated to the processor
246733b39aSJayamohan Kallickal  * using Work Request Blocks (WRBs) submitted to the MCC-WRB ring or via one
256733b39aSJayamohan Kallickal  * WRB inside a MAILBOX.
262f635883SJayamohan Kallickal  * The commands are serviced by the ARM processor in the OneConnect's MPU.
276733b39aSJayamohan Kallickal  */
286733b39aSJayamohan Kallickal struct be_sge {
2939033413SJayamohan Kallickal 	__le32 pa_lo;
3039033413SJayamohan Kallickal 	__le32 pa_hi;
3139033413SJayamohan Kallickal 	__le32 len;
326733b39aSJayamohan Kallickal };
336733b39aSJayamohan Kallickal 
346733b39aSJayamohan Kallickal #define MCC_WRB_SGE_CNT_SHIFT 3	/* bits 3 - 7 of dword 0 */
356733b39aSJayamohan Kallickal #define MCC_WRB_SGE_CNT_MASK 0x1F	/* bits 3 - 7 of dword 0 */
366733b39aSJayamohan Kallickal struct be_mcc_wrb {
376733b39aSJayamohan Kallickal 	u32 embedded;		/* dword 0 */
386733b39aSJayamohan Kallickal 	u32 payload_length;	/* dword 1 */
396733b39aSJayamohan Kallickal 	u32 tag0;		/* dword 2 */
406733b39aSJayamohan Kallickal 	u32 tag1;		/* dword 3 */
416733b39aSJayamohan Kallickal 	u32 rsvd;		/* dword 4 */
426733b39aSJayamohan Kallickal 	union {
43843ae752SJayamohan Kallickal #define EMBED_MBX_MAX_PAYLOAD_SIZE  220
446733b39aSJayamohan Kallickal 		u8 embedded_payload[236];	/* used by embedded cmds */
456733b39aSJayamohan Kallickal 		struct be_sge sgl[19];	/* used by non-embedded cmds */
466733b39aSJayamohan Kallickal 	} payload;
476733b39aSJayamohan Kallickal };
486733b39aSJayamohan Kallickal 
496733b39aSJayamohan Kallickal #define CQE_FLAGS_VALID_MASK (1 << 31)
506733b39aSJayamohan Kallickal #define CQE_FLAGS_ASYNC_MASK (1 << 30)
51bfead3b2SJayamohan Kallickal #define CQE_FLAGS_COMPLETED_MASK	(1 << 28)
52bfead3b2SJayamohan Kallickal #define CQE_FLAGS_CONSUMED_MASK		(1 << 27)
536733b39aSJayamohan Kallickal 
546733b39aSJayamohan Kallickal /* Completion Status */
556733b39aSJayamohan Kallickal #define MCC_STATUS_SUCCESS 0x0
56a8081e34SJayamohan Kallickal #define MCC_STATUS_FAILED 0x1
57a8081e34SJayamohan Kallickal #define MCC_STATUS_ILLEGAL_REQUEST 0x2
58a8081e34SJayamohan Kallickal #define MCC_STATUS_ILLEGAL_FIELD 0x3
59a8081e34SJayamohan Kallickal #define MCC_STATUS_INSUFFICIENT_BUFFER 0x4
60*6694095bSJitendra Bhivare #define MCC_STATUS_INVALID_LENGTH 0x74
616733b39aSJayamohan Kallickal 
626733b39aSJayamohan Kallickal #define CQE_STATUS_COMPL_MASK	0xFFFF
636733b39aSJayamohan Kallickal #define CQE_STATUS_COMPL_SHIFT	0		/* bits 0 - 15 */
646733b39aSJayamohan Kallickal #define CQE_STATUS_EXTD_MASK	0xFFFF
6567296ad9SJitendra Bhivare #define CQE_STATUS_EXTD_SHIFT	16		/* bits 31 - 16 */
66e175defeSJohn Soni Jose #define CQE_STATUS_ADDL_MASK	0xFF00
6767296ad9SJitendra Bhivare #define CQE_STATUS_ADDL_SHIFT	8
68e175defeSJohn Soni Jose #define CQE_STATUS_MASK		0xFF
69e175defeSJohn Soni Jose #define CQE_STATUS_WRB_MASK	0xFF0000
70e175defeSJohn Soni Jose #define CQE_STATUS_WRB_SHIFT	16
7167296ad9SJitendra Bhivare 
72e175defeSJohn Soni Jose #define BEISCSI_HOST_MBX_TIMEOUT (110 * 1000)
73e175defeSJohn Soni Jose #define BEISCSI_FW_MBX_TIMEOUT	100
746733b39aSJayamohan Kallickal 
75eaae5267SJohn Soni Jose /* MBOX Command VER */
76b3c202dcSJayamohan Kallickal #define MBX_CMD_VER1	0x01
77eaae5267SJohn Soni Jose #define MBX_CMD_VER2	0x02
78eaae5267SJohn Soni Jose 
796733b39aSJayamohan Kallickal struct be_mcc_compl {
806733b39aSJayamohan Kallickal 	u32 status;		/* dword 0 */
816733b39aSJayamohan Kallickal 	u32 tag0;		/* dword 1 */
826733b39aSJayamohan Kallickal 	u32 tag1;		/* dword 2 */
836733b39aSJayamohan Kallickal 	u32 flags;		/* dword 3 */
846733b39aSJayamohan Kallickal };
856733b39aSJayamohan Kallickal 
866733b39aSJayamohan Kallickal /********* Mailbox door bell *************/
876733b39aSJayamohan Kallickal /**
886733b39aSJayamohan Kallickal  * Used for driver communication with the FW.
896733b39aSJayamohan Kallickal  * The software must write this register twice to post any command. First,
906733b39aSJayamohan Kallickal  * it writes the register with hi=1 and the upper bits of the physical address
916733b39aSJayamohan Kallickal  * for the MAILBOX structure. Software must poll the ready bit until this
926733b39aSJayamohan Kallickal  * is acknowledged. Then, sotware writes the register with hi=0 with the lower
936733b39aSJayamohan Kallickal  * bits in the address. It must poll the ready bit until the command is
946733b39aSJayamohan Kallickal  * complete. Upon completion, the MAILBOX will contain a valid completion
956733b39aSJayamohan Kallickal  * queue entry.
966733b39aSJayamohan Kallickal  */
976733b39aSJayamohan Kallickal #define MPU_MAILBOX_DB_OFFSET	0x160
986733b39aSJayamohan Kallickal #define MPU_MAILBOX_DB_RDY_MASK	0x1	/* bit 0 */
996733b39aSJayamohan Kallickal #define MPU_MAILBOX_DB_HI_MASK	0x2	/* bit 1 */
1006733b39aSJayamohan Kallickal 
1016733b39aSJayamohan Kallickal /********** MPU semphore ******************/
1026733b39aSJayamohan Kallickal #define MPU_EP_SEMAPHORE_OFFSET 0xac
1036733b39aSJayamohan Kallickal #define EP_SEMAPHORE_POST_STAGE_MASK 0x0000FFFF
1046733b39aSJayamohan Kallickal #define EP_SEMAPHORE_POST_ERR_MASK 0x1
1056733b39aSJayamohan Kallickal #define EP_SEMAPHORE_POST_ERR_SHIFT 31
1066733b39aSJayamohan Kallickal 
1076733b39aSJayamohan Kallickal /********** MCC door bell ************/
1086733b39aSJayamohan Kallickal #define DB_MCCQ_OFFSET 0x140
109e08b3c8bSJayamohan Kallickal #define DB_MCCQ_RING_ID_MASK 0xFFFF		/* bits 0 - 15 */
1106733b39aSJayamohan Kallickal /* Number of entries posted */
1116733b39aSJayamohan Kallickal #define DB_MCCQ_NUM_POSTED_SHIFT 16		/* bits 16 - 29 */
1126733b39aSJayamohan Kallickal 
1136733b39aSJayamohan Kallickal /* MPU semphore POST stage values */
1146733b39aSJayamohan Kallickal #define POST_STAGE_ARMFW_RDY		0xc000	/* FW is done with POST */
1156733b39aSJayamohan Kallickal 
1166733b39aSJayamohan Kallickal /**
1176733b39aSJayamohan Kallickal  * When the async bit of mcc_compl is set, the last 4 bytes of
1186733b39aSJayamohan Kallickal  * mcc_compl is interpreted as follows:
1196733b39aSJayamohan Kallickal  */
1206733b39aSJayamohan Kallickal #define ASYNC_TRAILER_EVENT_CODE_SHIFT	8	/* bits 8 - 15 */
1216733b39aSJayamohan Kallickal #define ASYNC_TRAILER_EVENT_CODE_MASK	0xFF
1226733b39aSJayamohan Kallickal #define ASYNC_EVENT_CODE_LINK_STATE	0x1
123a3d313eaSJayamohan Kallickal #define ASYNC_EVENT_CODE_ISCSI		0x4
12453aefe25SJitendra Bhivare #define ASYNC_EVENT_CODE_SLI		0x11
125a3d313eaSJayamohan Kallickal 
126a3d313eaSJayamohan Kallickal #define ASYNC_TRAILER_EVENT_TYPE_SHIFT	16	/* bits 16 - 23 */
12753aefe25SJitendra Bhivare #define ASYNC_TRAILER_EVENT_TYPE_MASK	0xFF
12853aefe25SJitendra Bhivare 
12953aefe25SJitendra Bhivare /* iSCSI events */
130a3d313eaSJayamohan Kallickal #define ASYNC_EVENT_NEW_ISCSI_TGT_DISC	0x4
131a3d313eaSJayamohan Kallickal #define ASYNC_EVENT_NEW_ISCSI_CONN	0x5
132a3d313eaSJayamohan Kallickal #define ASYNC_EVENT_NEW_TCP_CONN	0x7
133a3d313eaSJayamohan Kallickal 
13453aefe25SJitendra Bhivare /* SLI events */
13553aefe25SJitendra Bhivare #define ASYNC_SLI_EVENT_TYPE_MISCONFIGURED	0x9
13653aefe25SJitendra Bhivare #define ASYNC_SLI_LINK_EFFECT_VALID(le)		(le & 0x80)
13753aefe25SJitendra Bhivare #define ASYNC_SLI_LINK_EFFECT_SEV(le)		((le >> 1)  & 0x03)
13853aefe25SJitendra Bhivare #define ASYNC_SLI_LINK_EFFECT_STATE(le)		(le & 0x01)
13953aefe25SJitendra Bhivare 
1406733b39aSJayamohan Kallickal struct be_async_event_trailer {
1416733b39aSJayamohan Kallickal 	u32 code;
1426733b39aSJayamohan Kallickal };
1436733b39aSJayamohan Kallickal 
1446733b39aSJayamohan Kallickal enum {
1456733b39aSJayamohan Kallickal 	ASYNC_EVENT_LINK_DOWN = 0x0,
1466ea9b3b0SJayamohan Kallickal 	ASYNC_EVENT_LINK_UP = 0x1,
1476733b39aSJayamohan Kallickal };
1486733b39aSJayamohan Kallickal 
1496733b39aSJayamohan Kallickal /**
1506733b39aSJayamohan Kallickal  * When the event code of an async trailer is link-state, the mcc_compl
1516733b39aSJayamohan Kallickal  * must be interpreted as follows
1526733b39aSJayamohan Kallickal  */
1536733b39aSJayamohan Kallickal struct be_async_event_link_state {
1546733b39aSJayamohan Kallickal 	u8 physical_port;
1556733b39aSJayamohan Kallickal 	u8 port_link_status;
1569c4f8b01SJitendra Bhivare /**
1579c4f8b01SJitendra Bhivare  * ASYNC_EVENT_LINK_DOWN		0x0
1589c4f8b01SJitendra Bhivare  * ASYNC_EVENT_LINK_UP			0x1
1599c4f8b01SJitendra Bhivare  * ASYNC_EVENT_LINK_LOGICAL_DOWN	0x2
1609c4f8b01SJitendra Bhivare  * ASYNC_EVENT_LINK_LOGICAL_UP		0x3
1619c4f8b01SJitendra Bhivare  */
1629c4f8b01SJitendra Bhivare #define BE_ASYNC_LINK_UP_MASK		0x01
1636733b39aSJayamohan Kallickal 	u8 port_duplex;
1649c4f8b01SJitendra Bhivare 	u8 port_speed;
165048084c2SJitendra Bhivare /* BE2ISCSI_LINK_SPEED_ZERO	0x00 - no link */
166048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_10MBPS	0x01
167048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_100MBPS	0x02
168048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_1GBPS	0x03
169048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_10GBPS	0x04
170048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_25GBPS	0x06
171048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_40GBPS	0x07
1726733b39aSJayamohan Kallickal 	u8 port_fault;
173048084c2SJitendra Bhivare 	u8 event_reason;
174048084c2SJitendra Bhivare 	u16 qos_link_speed;
175048084c2SJitendra Bhivare 	u32 event_tag;
1766733b39aSJayamohan Kallickal 	struct be_async_event_trailer trailer;
1776733b39aSJayamohan Kallickal } __packed;
1786733b39aSJayamohan Kallickal 
17953aefe25SJitendra Bhivare /**
18053aefe25SJitendra Bhivare  * When async-trailer is SLI event, mcc_compl is interpreted as
18153aefe25SJitendra Bhivare  */
18253aefe25SJitendra Bhivare struct be_async_event_sli {
18353aefe25SJitendra Bhivare 	u32 event_data1;
18453aefe25SJitendra Bhivare 	u32 event_data2;
18553aefe25SJitendra Bhivare 	u32 reserved;
18653aefe25SJitendra Bhivare 	u32 trailer;
18753aefe25SJitendra Bhivare } __packed;
18853aefe25SJitendra Bhivare 
1896733b39aSJayamohan Kallickal struct be_mcc_mailbox {
1906733b39aSJayamohan Kallickal 	struct be_mcc_wrb wrb;
1916733b39aSJayamohan Kallickal 	struct be_mcc_compl compl;
1926733b39aSJayamohan Kallickal };
1936733b39aSJayamohan Kallickal 
1946733b39aSJayamohan Kallickal /* Type of subsystems supported by FW */
1956733b39aSJayamohan Kallickal #define CMD_SUBSYSTEM_COMMON    0x1
1966733b39aSJayamohan Kallickal #define CMD_SUBSYSTEM_ISCSI     0x2
1976733b39aSJayamohan Kallickal #define CMD_SUBSYSTEM_ETH       0x3
1986733b39aSJayamohan Kallickal #define CMD_SUBSYSTEM_ISCSI_INI 0x6
1996733b39aSJayamohan Kallickal #define CMD_COMMON_TCP_UPLOAD   0x1
2006733b39aSJayamohan Kallickal 
2016733b39aSJayamohan Kallickal /**
2026733b39aSJayamohan Kallickal  * List of common opcodes subsystem  CMD_SUBSYSTEM_COMMON
2036733b39aSJayamohan Kallickal  * These opcodes are unique for each subsystem defined above
2046733b39aSJayamohan Kallickal  */
2056733b39aSJayamohan Kallickal #define OPCODE_COMMON_CQ_CREATE				12
2066733b39aSJayamohan Kallickal #define OPCODE_COMMON_EQ_CREATE				13
2076733b39aSJayamohan Kallickal #define OPCODE_COMMON_MCC_CREATE			21
20853aefe25SJitendra Bhivare #define OPCODE_COMMON_MCC_CREATE_EXT			90
20915a90fe0SJayamohan Kallickal #define OPCODE_COMMON_ADD_TEMPLATE_HEADER_BUFFERS	24
21015a90fe0SJayamohan Kallickal #define OPCODE_COMMON_REMOVE_TEMPLATE_HEADER_BUFFERS	25
2116733b39aSJayamohan Kallickal #define OPCODE_COMMON_GET_CNTL_ATTRIBUTES		32
2126733b39aSJayamohan Kallickal #define OPCODE_COMMON_GET_FW_VERSION			35
2136733b39aSJayamohan Kallickal #define OPCODE_COMMON_MODIFY_EQ_DELAY			41
2146733b39aSJayamohan Kallickal #define OPCODE_COMMON_FIRMWARE_CONFIG			42
2156733b39aSJayamohan Kallickal #define OPCODE_COMMON_MCC_DESTROY			53
2166733b39aSJayamohan Kallickal #define OPCODE_COMMON_CQ_DESTROY			54
2176733b39aSJayamohan Kallickal #define OPCODE_COMMON_EQ_DESTROY			55
2186733b39aSJayamohan Kallickal #define OPCODE_COMMON_QUERY_FIRMWARE_CONFIG		58
2196733b39aSJayamohan Kallickal #define OPCODE_COMMON_FUNCTION_RESET			61
22053aefe25SJitendra Bhivare #define OPCODE_COMMON_GET_PORT_NAME			77
221*6694095bSJitendra Bhivare #define OPCODE_COMMON_SET_FEATURES			191
2226733b39aSJayamohan Kallickal 
2236733b39aSJayamohan Kallickal /**
2246733b39aSJayamohan Kallickal  * LIST of opcodes that are common between Initiator and Target
2256733b39aSJayamohan Kallickal  * used by CMD_SUBSYSTEM_ISCSI
2266733b39aSJayamohan Kallickal  * These opcodes are unique for each subsystem defined above
2276733b39aSJayamohan Kallickal  */
2286733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_CFG_POST_SGL_PAGES		2
2296733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_CFG_REMOVE_SGL_PAGES        3
2306733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_GET_NIC_CONFIG		7
231c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_SET_VLAN		14
2320e43895eSMike Christie #define OPCODE_COMMON_ISCSI_NTWK_CONFIG_STATELESS_IP_ADDR	17
2330e43895eSMike Christie #define OPCODE_COMMON_ISCSI_NTWK_REL_STATELESS_IP_ADDR	18
234c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_MODIFY_IP_ADDR		21
235c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_GET_DEFAULT_GATEWAY	22
236c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_MODIFY_DEFAULT_GATEWAY 23
237c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_GET_ALL_IF_ID		24
238c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_GET_IF_INFO		25
2396733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_SET_FRAGNUM_BITS_FOR_SGL_CRA 61
2406733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_DEFQ_CREATE                 64
2416733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_DEFQ_DESTROY		65
2426733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_WRBQ_CREATE			66
2436733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_WRBQ_DESTROY		67
2446733b39aSJayamohan Kallickal 
2456733b39aSJayamohan Kallickal struct be_cmd_req_hdr {
2466733b39aSJayamohan Kallickal 	u8 opcode;		/* dword 0 */
2476733b39aSJayamohan Kallickal 	u8 subsystem;		/* dword 0 */
2486733b39aSJayamohan Kallickal 	u8 port_number;		/* dword 0 */
2496733b39aSJayamohan Kallickal 	u8 domain;		/* dword 0 */
2506733b39aSJayamohan Kallickal 	u32 timeout;		/* dword 1 */
2516733b39aSJayamohan Kallickal 	u32 request_length;	/* dword 2 */
252eaae5267SJohn Soni Jose 	u8 version;		/* dword 3 */
253eaae5267SJohn Soni Jose 	u8 rsvd0[3];		/* dword 3 */
2546733b39aSJayamohan Kallickal };
2556733b39aSJayamohan Kallickal 
2566733b39aSJayamohan Kallickal struct be_cmd_resp_hdr {
2576733b39aSJayamohan Kallickal 	u32 info;		/* dword 0 */
2586733b39aSJayamohan Kallickal 	u32 status;		/* dword 1 */
2596733b39aSJayamohan Kallickal 	u32 response_length;	/* dword 2 */
2606733b39aSJayamohan Kallickal 	u32 actual_resp_len;	/* dword 3 */
2616733b39aSJayamohan Kallickal };
2626733b39aSJayamohan Kallickal 
2636733b39aSJayamohan Kallickal struct phys_addr {
2646733b39aSJayamohan Kallickal 	u32 lo;
2656733b39aSJayamohan Kallickal 	u32 hi;
2666733b39aSJayamohan Kallickal };
2676733b39aSJayamohan Kallickal 
26815a90fe0SJayamohan Kallickal struct virt_addr {
26915a90fe0SJayamohan Kallickal 	u32 lo;
27015a90fe0SJayamohan Kallickal 	u32 hi;
27115a90fe0SJayamohan Kallickal };
2726733b39aSJayamohan Kallickal /**************************
2736733b39aSJayamohan Kallickal  * BE Command definitions *
2746733b39aSJayamohan Kallickal  **************************/
2756733b39aSJayamohan Kallickal 
2766733b39aSJayamohan Kallickal /**
2776733b39aSJayamohan Kallickal  * Pseudo amap definition in which each bit of the actual structure is defined
2786733b39aSJayamohan Kallickal  * as a byte - used to calculate offset/shift/mask of each field
2796733b39aSJayamohan Kallickal  */
2806733b39aSJayamohan Kallickal struct amap_eq_context {
2816733b39aSJayamohan Kallickal 	u8 cidx[13];		/* dword 0 */
2826733b39aSJayamohan Kallickal 	u8 rsvd0[3];		/* dword 0 */
2836733b39aSJayamohan Kallickal 	u8 epidx[13];		/* dword 0 */
2846733b39aSJayamohan Kallickal 	u8 valid;		/* dword 0 */
2856733b39aSJayamohan Kallickal 	u8 rsvd1;		/* dword 0 */
2866733b39aSJayamohan Kallickal 	u8 size;		/* dword 0 */
2876733b39aSJayamohan Kallickal 	u8 pidx[13];		/* dword 1 */
2886733b39aSJayamohan Kallickal 	u8 rsvd2[3];		/* dword 1 */
2896733b39aSJayamohan Kallickal 	u8 pd[10];		/* dword 1 */
2906733b39aSJayamohan Kallickal 	u8 count[3];		/* dword 1 */
2916733b39aSJayamohan Kallickal 	u8 solevent;		/* dword 1 */
2926733b39aSJayamohan Kallickal 	u8 stalled;		/* dword 1 */
2936733b39aSJayamohan Kallickal 	u8 armed;		/* dword 1 */
2946733b39aSJayamohan Kallickal 	u8 rsvd3[4];		/* dword 2 */
2956733b39aSJayamohan Kallickal 	u8 func[8];		/* dword 2 */
2966733b39aSJayamohan Kallickal 	u8 rsvd4;		/* dword 2 */
2976733b39aSJayamohan Kallickal 	u8 delaymult[10];	/* dword 2 */
2986733b39aSJayamohan Kallickal 	u8 rsvd5[2];		/* dword 2 */
2996733b39aSJayamohan Kallickal 	u8 phase[2];		/* dword 2 */
3006733b39aSJayamohan Kallickal 	u8 nodelay;		/* dword 2 */
3016733b39aSJayamohan Kallickal 	u8 rsvd6[4];		/* dword 2 */
3026733b39aSJayamohan Kallickal 	u8 rsvd7[32];		/* dword 3 */
3036733b39aSJayamohan Kallickal } __packed;
3046733b39aSJayamohan Kallickal 
3056733b39aSJayamohan Kallickal struct be_cmd_req_eq_create {
3066733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;	/* dw[4] */
3076733b39aSJayamohan Kallickal 	u16 num_pages;		/* sword */
3086733b39aSJayamohan Kallickal 	u16 rsvd0;		/* sword */
3096733b39aSJayamohan Kallickal 	u8 context[sizeof(struct amap_eq_context) / 8];	/* dw[4] */
3106733b39aSJayamohan Kallickal 	struct phys_addr pages[8];
3116733b39aSJayamohan Kallickal } __packed;
3126733b39aSJayamohan Kallickal 
3136733b39aSJayamohan Kallickal struct be_cmd_resp_eq_create {
3146733b39aSJayamohan Kallickal 	struct be_cmd_resp_hdr resp_hdr;
3156733b39aSJayamohan Kallickal 	u16 eq_id;		/* sword */
3166733b39aSJayamohan Kallickal 	u16 rsvd0;		/* sword */
3176733b39aSJayamohan Kallickal } __packed;
3186733b39aSJayamohan Kallickal 
31973af08e1SJayamohan Kallickal struct be_set_eqd {
32073af08e1SJayamohan Kallickal 	u32 eq_id;
32173af08e1SJayamohan Kallickal 	u32 phase;
32273af08e1SJayamohan Kallickal 	u32 delay_multiplier;
32373af08e1SJayamohan Kallickal } __packed;
32473af08e1SJayamohan Kallickal 
325c7acc5b8SJayamohan Kallickal struct mgmt_chap_format {
326c7acc5b8SJayamohan Kallickal 	u32 flags;
327c7acc5b8SJayamohan Kallickal 	u8  intr_chap_name[256];
328c7acc5b8SJayamohan Kallickal 	u8  intr_secret[16];
329c7acc5b8SJayamohan Kallickal 	u8  target_chap_name[256];
330c7acc5b8SJayamohan Kallickal 	u8  target_secret[16];
331c7acc5b8SJayamohan Kallickal 	u16 intr_chap_name_length;
332c7acc5b8SJayamohan Kallickal 	u16 intr_secret_length;
333c7acc5b8SJayamohan Kallickal 	u16 target_chap_name_length;
334c7acc5b8SJayamohan Kallickal 	u16 target_secret_length;
335c7acc5b8SJayamohan Kallickal } __packed;
336c7acc5b8SJayamohan Kallickal 
337c7acc5b8SJayamohan Kallickal struct mgmt_auth_method_format {
338c7acc5b8SJayamohan Kallickal 	u8	auth_method_type;
339c7acc5b8SJayamohan Kallickal 	u8	padding[3];
340c7acc5b8SJayamohan Kallickal 	struct	mgmt_chap_format chap;
341c7acc5b8SJayamohan Kallickal } __packed;
342c7acc5b8SJayamohan Kallickal 
3433f4134c1SJohn Soni Jose struct be_cmd_req_logout_fw_sess {
3443f4134c1SJohn Soni Jose 	struct be_cmd_req_hdr hdr;	/* dw[4] */
3453f4134c1SJohn Soni Jose 	uint32_t session_handle;
3463f4134c1SJohn Soni Jose } __packed;
3473f4134c1SJohn Soni Jose 
3483f4134c1SJohn Soni Jose struct be_cmd_resp_logout_fw_sess {
3493f4134c1SJohn Soni Jose 	struct be_cmd_resp_hdr hdr;	/* dw[4] */
3503f4134c1SJohn Soni Jose 	uint32_t session_status;
35150a4b824SJitendra Bhivare #define BE_SESS_STATUS_CLOSE		0x20
3523f4134c1SJohn Soni Jose } __packed;
3533f4134c1SJohn Soni Jose 
354c7acc5b8SJayamohan Kallickal struct mgmt_conn_login_options {
355c7acc5b8SJayamohan Kallickal 	u8 flags;
356c7acc5b8SJayamohan Kallickal 	u8 header_digest;
357c7acc5b8SJayamohan Kallickal 	u8 data_digest;
358c7acc5b8SJayamohan Kallickal 	u8 rsvd0;
359c7acc5b8SJayamohan Kallickal 	u32 max_recv_datasegment_len_ini;
360c7acc5b8SJayamohan Kallickal 	u32 max_recv_datasegment_len_tgt;
361c7acc5b8SJayamohan Kallickal 	u32 tcp_mss;
362c7acc5b8SJayamohan Kallickal 	u32 tcp_window_size;
363c7acc5b8SJayamohan Kallickal 	struct	mgmt_auth_method_format auth_data;
364c7acc5b8SJayamohan Kallickal } __packed;
365c7acc5b8SJayamohan Kallickal 
3660e43895eSMike Christie struct ip_addr_format {
367c7acc5b8SJayamohan Kallickal 	u16 size_of_structure;
368c7acc5b8SJayamohan Kallickal 	u8 reserved;
369c7acc5b8SJayamohan Kallickal 	u8 ip_type;
370290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_V4		0x1
371290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_STATIC_V4	0x3
372290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_DHCP_V4		0x5
373290aa376SJitendra Bhivare /* type v4 values < type v6 values */
374290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_V6		0x10
375290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_ROUTABLE_V6	0x30
376290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_LINK_LOCAL_V6	0x50
377290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_AUTO_V6		0x90
3780e43895eSMike Christie 	u8 addr[16];
379c7acc5b8SJayamohan Kallickal 	u32 rsvd0;
380c7acc5b8SJayamohan Kallickal } __packed;
381c7acc5b8SJayamohan Kallickal 
382c7acc5b8SJayamohan Kallickal struct mgmt_conn_info {
383c7acc5b8SJayamohan Kallickal 	u32	connection_handle;
384c7acc5b8SJayamohan Kallickal 	u32	connection_status;
385c7acc5b8SJayamohan Kallickal 	u16	src_port;
386c7acc5b8SJayamohan Kallickal 	u16	dest_port;
387c7acc5b8SJayamohan Kallickal 	u16	dest_port_redirected;
388c7acc5b8SJayamohan Kallickal 	u16	cid;
389c7acc5b8SJayamohan Kallickal 	u32	estimated_throughput;
3900e43895eSMike Christie 	struct	ip_addr_format	src_ipaddr;
3910e43895eSMike Christie 	struct	ip_addr_format	dest_ipaddr;
3920e43895eSMike Christie 	struct	ip_addr_format	dest_ipaddr_redirected;
393c7acc5b8SJayamohan Kallickal 	struct	mgmt_conn_login_options	negotiated_login_options;
394c7acc5b8SJayamohan Kallickal } __packed;
395c7acc5b8SJayamohan Kallickal 
396c7acc5b8SJayamohan Kallickal struct mgmt_session_login_options {
397c7acc5b8SJayamohan Kallickal 	u8	flags;
398c7acc5b8SJayamohan Kallickal 	u8	error_recovery_level;
399c7acc5b8SJayamohan Kallickal 	u16	rsvd0;
400c7acc5b8SJayamohan Kallickal 	u32	first_burst_length;
401c7acc5b8SJayamohan Kallickal 	u32	max_burst_length;
402c7acc5b8SJayamohan Kallickal 	u16	max_connections;
403c7acc5b8SJayamohan Kallickal 	u16	max_outstanding_r2t;
404c7acc5b8SJayamohan Kallickal 	u16	default_time2wait;
405c7acc5b8SJayamohan Kallickal 	u16	default_time2retain;
406c7acc5b8SJayamohan Kallickal } __packed;
407c7acc5b8SJayamohan Kallickal 
408c7acc5b8SJayamohan Kallickal struct mgmt_session_info {
409c7acc5b8SJayamohan Kallickal 	u32	session_handle;
410c7acc5b8SJayamohan Kallickal 	u32	status;
411c7acc5b8SJayamohan Kallickal 	u8	isid[6];
412c7acc5b8SJayamohan Kallickal 	u16	tsih;
413c7acc5b8SJayamohan Kallickal 	u32	session_flags;
414c7acc5b8SJayamohan Kallickal 	u16	conn_count;
415c7acc5b8SJayamohan Kallickal 	u16	pad;
416c7acc5b8SJayamohan Kallickal 	u8	target_name[224];
417c7acc5b8SJayamohan Kallickal 	u8	initiator_iscsiname[224];
418c7acc5b8SJayamohan Kallickal 	struct	mgmt_session_login_options negotiated_login_options;
419c7acc5b8SJayamohan Kallickal 	struct	mgmt_conn_info	conn_list[1];
420c7acc5b8SJayamohan Kallickal } __packed;
421c7acc5b8SJayamohan Kallickal 
4220e43895eSMike Christie struct be_cmd_get_session_req {
423c7acc5b8SJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
424c7acc5b8SJayamohan Kallickal 	u32 session_handle;
425c7acc5b8SJayamohan Kallickal } __packed;
426c7acc5b8SJayamohan Kallickal 
4270e43895eSMike Christie struct be_cmd_get_session_resp {
428c7acc5b8SJayamohan Kallickal 	struct be_cmd_resp_hdr hdr;
429c7acc5b8SJayamohan Kallickal 	struct mgmt_session_info session_info;
430c7acc5b8SJayamohan Kallickal } __packed;
431c7acc5b8SJayamohan Kallickal 
4326733b39aSJayamohan Kallickal struct mac_addr {
4330e43895eSMike Christie 	u16 size_of_structure;
4346733b39aSJayamohan Kallickal 	u8 addr[ETH_ALEN];
4356733b39aSJayamohan Kallickal } __packed;
4366733b39aSJayamohan Kallickal 
4370e43895eSMike Christie struct be_cmd_get_boot_target_req {
438c7acc5b8SJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
439c7acc5b8SJayamohan Kallickal } __packed;
440c7acc5b8SJayamohan Kallickal 
4410e43895eSMike Christie struct be_cmd_get_boot_target_resp {
442c7acc5b8SJayamohan Kallickal 	struct be_cmd_resp_hdr hdr;
443c7acc5b8SJayamohan Kallickal 	u32 boot_session_count;
44450a4b824SJitendra Bhivare 	u32 boot_session_handle;
44550a4b824SJitendra Bhivare /**
44650a4b824SJitendra Bhivare  * FW returns 0xffffffff if it couldn't establish connection with
44750a4b824SJitendra Bhivare  * configured boot target.
44850a4b824SJitendra Bhivare  */
44950a4b824SJitendra Bhivare #define BE_BOOT_INVALID_SHANDLE	0xffffffff
450c7acc5b8SJayamohan Kallickal };
451c7acc5b8SJayamohan Kallickal 
4529aef4200SJohn Soni Jose struct be_cmd_reopen_session_req {
4539aef4200SJohn Soni Jose 	struct be_cmd_req_hdr hdr;
4549aef4200SJohn Soni Jose #define BE_REOPEN_ALL_SESSIONS  0x00
4559aef4200SJohn Soni Jose #define BE_REOPEN_BOOT_SESSIONS 0x01
4569aef4200SJohn Soni Jose #define BE_REOPEN_A_SESSION     0x02
4579aef4200SJohn Soni Jose 	u16 reopen_type;
4589aef4200SJohn Soni Jose 	u16 rsvd;
4599aef4200SJohn Soni Jose 	u32 session_handle;
4609aef4200SJohn Soni Jose } __packed;
4619aef4200SJohn Soni Jose 
4629aef4200SJohn Soni Jose struct be_cmd_reopen_session_resp {
4639aef4200SJohn Soni Jose 	struct be_cmd_resp_hdr hdr;
4649aef4200SJohn Soni Jose 	u32 rsvd;
4659aef4200SJohn Soni Jose 	u32 session_handle;
4669aef4200SJohn Soni Jose } __packed;
4679aef4200SJohn Soni Jose 
4689aef4200SJohn Soni Jose 
4690e43895eSMike Christie struct be_cmd_mac_query_req {
4706733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
4716733b39aSJayamohan Kallickal 	u8 type;
4726733b39aSJayamohan Kallickal 	u8 permanent;
4736733b39aSJayamohan Kallickal 	u16 if_id;
4746733b39aSJayamohan Kallickal } __packed;
4756733b39aSJayamohan Kallickal 
4760e43895eSMike Christie struct be_cmd_get_mac_resp {
4776733b39aSJayamohan Kallickal 	struct be_cmd_resp_hdr hdr;
4786733b39aSJayamohan Kallickal 	struct mac_addr mac;
4796733b39aSJayamohan Kallickal };
4806733b39aSJayamohan Kallickal 
4810e43895eSMike Christie struct be_ip_addr_subnet_format {
4820e43895eSMike Christie 	u16 size_of_structure;
4830e43895eSMike Christie 	u8 ip_type;
4840e43895eSMike Christie 	u8 ipv6_prefix_length;
4850e43895eSMike Christie 	u8 addr[16];
4860e43895eSMike Christie 	u8 subnet_mask[16];
4870e43895eSMike Christie 	u32 rsvd0;
4880e43895eSMike Christie } __packed;
4890e43895eSMike Christie 
4900e43895eSMike Christie struct be_cmd_get_if_info_req {
4910e43895eSMike Christie 	struct be_cmd_req_hdr hdr;
4920e43895eSMike Christie 	u32 interface_hndl;
4930e43895eSMike Christie 	u32 ip_type;
4940e43895eSMike Christie } __packed;
4950e43895eSMike Christie 
4960e43895eSMike Christie struct be_cmd_get_if_info_resp {
4970e43895eSMike Christie 	struct be_cmd_req_hdr hdr;
4980e43895eSMike Christie 	u32 interface_hndl;
4990e43895eSMike Christie 	u32 vlan_priority;
5000e43895eSMike Christie 	u32 ip_addr_count;
5010e43895eSMike Christie 	u32 dhcp_state;
5020e43895eSMike Christie 	struct be_ip_addr_subnet_format ip_addr;
5030e43895eSMike Christie } __packed;
5040e43895eSMike Christie 
5050e43895eSMike Christie struct be_ip_addr_record {
5060e43895eSMike Christie 	u32 action;
5070e43895eSMike Christie 	u32 interface_hndl;
5080e43895eSMike Christie 	struct be_ip_addr_subnet_format ip_addr;
5090e43895eSMike Christie 	u32 status;
5100e43895eSMike Christie } __packed;
5110e43895eSMike Christie 
5120e43895eSMike Christie struct be_ip_addr_record_params {
5130e43895eSMike Christie 	u32 record_entry_count;
5140e43895eSMike Christie 	struct be_ip_addr_record ip_record;
5150e43895eSMike Christie } __packed;
5160e43895eSMike Christie 
5170e43895eSMike Christie struct be_cmd_set_ip_addr_req {
5180e43895eSMike Christie 	struct be_cmd_req_hdr hdr;
5190e43895eSMike Christie 	struct be_ip_addr_record_params ip_params;
5200e43895eSMike Christie } __packed;
5210e43895eSMike Christie 
5220e43895eSMike Christie 
5230e43895eSMike Christie struct be_cmd_set_dhcp_req {
5240e43895eSMike Christie 	struct be_cmd_req_hdr hdr;
5250e43895eSMike Christie 	u32 interface_hndl;
5260e43895eSMike Christie 	u32 ip_type;
5270e43895eSMike Christie 	u32 flags;
5280e43895eSMike Christie 	u32 retry_count;
5290e43895eSMike Christie } __packed;
5300e43895eSMike Christie 
5310e43895eSMike Christie struct be_cmd_rel_dhcp_req {
5320e43895eSMike Christie 	struct be_cmd_req_hdr hdr;
5330e43895eSMike Christie 	u32 interface_hndl;
5340e43895eSMike Christie 	u32 ip_type;
5350e43895eSMike Christie } __packed;
5360e43895eSMike Christie 
5370e43895eSMike Christie struct be_cmd_set_def_gateway_req {
5380e43895eSMike Christie 	struct be_cmd_req_hdr hdr;
5390e43895eSMike Christie 	u32 action;
5400e43895eSMike Christie 	struct ip_addr_format ip_addr;
5410e43895eSMike Christie } __packed;
5420e43895eSMike Christie 
5430e43895eSMike Christie struct be_cmd_get_def_gateway_req {
5440e43895eSMike Christie 	struct be_cmd_req_hdr hdr;
5450e43895eSMike Christie 	u32 ip_type;
5460e43895eSMike Christie } __packed;
5470e43895eSMike Christie 
5480e43895eSMike Christie struct be_cmd_get_def_gateway_resp {
5490e43895eSMike Christie 	struct be_cmd_req_hdr hdr;
5500e43895eSMike Christie 	struct ip_addr_format ip_addr;
5510e43895eSMike Christie } __packed;
5520e43895eSMike Christie 
5536f72238eSJohn Soni Jose #define BEISCSI_VLAN_DISABLE	0xFFFF
5546f72238eSJohn Soni Jose struct be_cmd_set_vlan_req {
5556f72238eSJohn Soni Jose 	struct be_cmd_req_hdr hdr;
5566f72238eSJohn Soni Jose 	u32 interface_hndl;
5576f72238eSJohn Soni Jose 	u32 vlan_priority;
5586f72238eSJohn Soni Jose } __packed;
5596733b39aSJayamohan Kallickal /******************** Create CQ ***************************/
5606733b39aSJayamohan Kallickal /**
5616733b39aSJayamohan Kallickal  * Pseudo amap definition in which each bit of the actual structure is defined
5626733b39aSJayamohan Kallickal  * as a byte - used to calculate offset/shift/mask of each field
5636733b39aSJayamohan Kallickal  */
5646733b39aSJayamohan Kallickal struct amap_cq_context {
5656733b39aSJayamohan Kallickal 	u8 cidx[11];		/* dword 0 */
5666733b39aSJayamohan Kallickal 	u8 rsvd0;		/* dword 0 */
5676733b39aSJayamohan Kallickal 	u8 coalescwm[2];	/* dword 0 */
5686733b39aSJayamohan Kallickal 	u8 nodelay;		/* dword 0 */
5696733b39aSJayamohan Kallickal 	u8 epidx[11];		/* dword 0 */
5706733b39aSJayamohan Kallickal 	u8 rsvd1;		/* dword 0 */
5716733b39aSJayamohan Kallickal 	u8 count[2];		/* dword 0 */
5726733b39aSJayamohan Kallickal 	u8 valid;		/* dword 0 */
5736733b39aSJayamohan Kallickal 	u8 solevent;		/* dword 0 */
5746733b39aSJayamohan Kallickal 	u8 eventable;		/* dword 0 */
5756733b39aSJayamohan Kallickal 	u8 pidx[11];		/* dword 1 */
5766733b39aSJayamohan Kallickal 	u8 rsvd2;		/* dword 1 */
5776733b39aSJayamohan Kallickal 	u8 pd[10];		/* dword 1 */
5786733b39aSJayamohan Kallickal 	u8 eqid[8];		/* dword 1 */
5796733b39aSJayamohan Kallickal 	u8 stalled;		/* dword 1 */
5806733b39aSJayamohan Kallickal 	u8 armed;		/* dword 1 */
5816733b39aSJayamohan Kallickal 	u8 rsvd3[4];		/* dword 2 */
5826733b39aSJayamohan Kallickal 	u8 func[8];		/* dword 2 */
5836733b39aSJayamohan Kallickal 	u8 rsvd4[20];		/* dword 2 */
5846733b39aSJayamohan Kallickal 	u8 rsvd5[32];		/* dword 3 */
5856733b39aSJayamohan Kallickal } __packed;
5866733b39aSJayamohan Kallickal 
587eaae5267SJohn Soni Jose struct amap_cq_context_v2 {
588eaae5267SJohn Soni Jose 	u8 rsvd0[12];   /* dword 0 */
589eaae5267SJohn Soni Jose 	u8 coalescwm[2];    /* dword 0 */
590eaae5267SJohn Soni Jose 	u8 nodelay;     /* dword 0 */
591eaae5267SJohn Soni Jose 	u8 rsvd1[12];   /* dword 0 */
592eaae5267SJohn Soni Jose 	u8 count[2];    /* dword 0 */
593eaae5267SJohn Soni Jose 	u8 valid;       /* dword 0 */
594eaae5267SJohn Soni Jose 	u8 rsvd2;       /* dword 0 */
595eaae5267SJohn Soni Jose 	u8 eventable;   /* dword 0 */
596eaae5267SJohn Soni Jose 	u8 eqid[16];    /* dword 1 */
597eaae5267SJohn Soni Jose 	u8 rsvd3[15];   /* dword 1 */
598eaae5267SJohn Soni Jose 	u8 armed;       /* dword 1 */
599eaae5267SJohn Soni Jose 	u8 cqecount[16];/* dword 2 */
600eaae5267SJohn Soni Jose 	u8 rsvd4[16];   /* dword 2 */
601eaae5267SJohn Soni Jose 	u8 rsvd5[32];   /* dword 3 */
602eaae5267SJohn Soni Jose };
603eaae5267SJohn Soni Jose 
6046733b39aSJayamohan Kallickal struct be_cmd_req_cq_create {
6056733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
6066733b39aSJayamohan Kallickal 	u16 num_pages;
607eaae5267SJohn Soni Jose 	u8 page_size;
608eaae5267SJohn Soni Jose 	u8 rsvd0;
6096733b39aSJayamohan Kallickal 	u8 context[sizeof(struct amap_cq_context) / 8];
6106733b39aSJayamohan Kallickal 	struct phys_addr pages[4];
6116733b39aSJayamohan Kallickal } __packed;
6126733b39aSJayamohan Kallickal 
6136733b39aSJayamohan Kallickal struct be_cmd_resp_cq_create {
6146733b39aSJayamohan Kallickal 	struct be_cmd_resp_hdr hdr;
6156733b39aSJayamohan Kallickal 	u16 cq_id;
6166733b39aSJayamohan Kallickal 	u16 rsvd0;
6176733b39aSJayamohan Kallickal } __packed;
6186733b39aSJayamohan Kallickal 
6196733b39aSJayamohan Kallickal /******************** Create MCCQ ***************************/
6206733b39aSJayamohan Kallickal /**
6216733b39aSJayamohan Kallickal  * Pseudo amap definition in which each bit of the actual structure is defined
6226733b39aSJayamohan Kallickal  * as a byte - used to calculate offset/shift/mask of each field
6236733b39aSJayamohan Kallickal  */
6246733b39aSJayamohan Kallickal struct amap_mcc_context {
6256733b39aSJayamohan Kallickal 	u8 con_index[14];
6266733b39aSJayamohan Kallickal 	u8 rsvd0[2];
6276733b39aSJayamohan Kallickal 	u8 ring_size[4];
6286733b39aSJayamohan Kallickal 	u8 fetch_wrb;
6296733b39aSJayamohan Kallickal 	u8 fetch_r2t;
6306733b39aSJayamohan Kallickal 	u8 cq_id[10];
6316733b39aSJayamohan Kallickal 	u8 prod_index[14];
6326733b39aSJayamohan Kallickal 	u8 fid[8];
6336733b39aSJayamohan Kallickal 	u8 pdid[9];
6346733b39aSJayamohan Kallickal 	u8 valid;
6356733b39aSJayamohan Kallickal 	u8 rsvd1[32];
6366733b39aSJayamohan Kallickal 	u8 rsvd2[32];
6376733b39aSJayamohan Kallickal } __packed;
6386733b39aSJayamohan Kallickal 
63953aefe25SJitendra Bhivare struct be_cmd_req_mcc_create_ext {
6406733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
6416733b39aSJayamohan Kallickal 	u16 num_pages;
6426733b39aSJayamohan Kallickal 	u16 rsvd0;
64353aefe25SJitendra Bhivare 	u32 async_evt_bitmap;
6446733b39aSJayamohan Kallickal 	u8 context[sizeof(struct amap_mcc_context) / 8];
6456733b39aSJayamohan Kallickal 	struct phys_addr pages[8];
6466733b39aSJayamohan Kallickal } __packed;
6476733b39aSJayamohan Kallickal 
6486733b39aSJayamohan Kallickal struct be_cmd_resp_mcc_create {
6496733b39aSJayamohan Kallickal 	struct be_cmd_resp_hdr hdr;
6506733b39aSJayamohan Kallickal 	u16 id;
6516733b39aSJayamohan Kallickal 	u16 rsvd0;
6526733b39aSJayamohan Kallickal } __packed;
6536733b39aSJayamohan Kallickal 
6546733b39aSJayamohan Kallickal /******************** Q Destroy  ***************************/
6556733b39aSJayamohan Kallickal /* Type of Queue to be destroyed */
6566733b39aSJayamohan Kallickal enum {
6576733b39aSJayamohan Kallickal 	QTYPE_EQ = 1,
6586733b39aSJayamohan Kallickal 	QTYPE_CQ,
6596733b39aSJayamohan Kallickal 	QTYPE_MCCQ,
6606733b39aSJayamohan Kallickal 	QTYPE_WRBQ,
6616733b39aSJayamohan Kallickal 	QTYPE_DPDUQ,
6626733b39aSJayamohan Kallickal 	QTYPE_SGL
6636733b39aSJayamohan Kallickal };
6646733b39aSJayamohan Kallickal 
6656733b39aSJayamohan Kallickal struct be_cmd_req_q_destroy {
6666733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
6676733b39aSJayamohan Kallickal 	u16 id;
6686733b39aSJayamohan Kallickal 	u16 bypass_flush;	/* valid only for rx q destroy */
6696733b39aSJayamohan Kallickal } __packed;
6706733b39aSJayamohan Kallickal 
6716733b39aSJayamohan Kallickal struct macaddr {
6726733b39aSJayamohan Kallickal 	u8 byte[ETH_ALEN];
6736733b39aSJayamohan Kallickal };
6746733b39aSJayamohan Kallickal 
6756733b39aSJayamohan Kallickal struct be_cmd_req_mcast_mac_config {
6766733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
6776733b39aSJayamohan Kallickal 	u16 num_mac;
6786733b39aSJayamohan Kallickal 	u8 promiscuous;
6796733b39aSJayamohan Kallickal 	u8 interface_id;
6806733b39aSJayamohan Kallickal 	struct macaddr mac[32];
6816733b39aSJayamohan Kallickal } __packed;
6826733b39aSJayamohan Kallickal 
6836733b39aSJayamohan Kallickal static inline void *embedded_payload(struct be_mcc_wrb *wrb)
6846733b39aSJayamohan Kallickal {
6856733b39aSJayamohan Kallickal 	return wrb->payload.embedded_payload;
6866733b39aSJayamohan Kallickal }
6876733b39aSJayamohan Kallickal 
6886733b39aSJayamohan Kallickal static inline struct be_sge *nonembedded_sgl(struct be_mcc_wrb *wrb)
6896733b39aSJayamohan Kallickal {
6906733b39aSJayamohan Kallickal 	return &wrb->payload.sgl[0];
6916733b39aSJayamohan Kallickal }
6926733b39aSJayamohan Kallickal 
6936733b39aSJayamohan Kallickal /******************** Modify EQ Delay *******************/
6946733b39aSJayamohan Kallickal struct be_cmd_req_modify_eq_delay {
6956733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
69639033413SJayamohan Kallickal 	__le32 num_eq;
6976733b39aSJayamohan Kallickal 	struct {
69839033413SJayamohan Kallickal 		__le32 eq_id;
69939033413SJayamohan Kallickal 		__le32 phase;
70039033413SJayamohan Kallickal 		__le32 delay_multiplier;
70173af08e1SJayamohan Kallickal 	} delay[MAX_CPUS];
7026733b39aSJayamohan Kallickal } __packed;
7036733b39aSJayamohan Kallickal 
7046733b39aSJayamohan Kallickal /******************** Get MAC ADDR *******************/
7056733b39aSJayamohan Kallickal 
7060e43895eSMike Christie struct be_cmd_get_nic_conf_resp {
7076733b39aSJayamohan Kallickal 	struct be_cmd_resp_hdr hdr;
7086733b39aSJayamohan Kallickal 	u32 nic_port_count;
7096733b39aSJayamohan Kallickal 	u32 speed;
7106733b39aSJayamohan Kallickal 	u32 max_speed;
7116733b39aSJayamohan Kallickal 	u32 link_state;
7126733b39aSJayamohan Kallickal 	u32 max_frame_size;
7136733b39aSJayamohan Kallickal 	u16 size_of_structure;
7149c4f8b01SJitendra Bhivare 	u8 mac_address[ETH_ALEN];
7159c4f8b01SJitendra Bhivare } __packed;
7166733b39aSJayamohan Kallickal 
717*6694095bSJitendra Bhivare /******************** Get HBA NAME *******************/
718*6694095bSJitendra Bhivare 
7192177199dSJohn Soni Jose #define BEISCSI_ALIAS_LEN 32
7202177199dSJohn Soni Jose 
7212177199dSJohn Soni Jose struct be_cmd_hba_name {
7222177199dSJohn Soni Jose 	struct be_cmd_req_hdr hdr;
7232177199dSJohn Soni Jose 	u16 flags;
7242177199dSJohn Soni Jose 	u16 rsvd0;
7252177199dSJohn Soni Jose 	u8 initiator_name[ISCSI_NAME_LEN];
7262177199dSJohn Soni Jose 	u8 initiator_alias[BEISCSI_ALIAS_LEN];
7272177199dSJohn Soni Jose } __packed;
7282177199dSJohn Soni Jose 
729*6694095bSJitendra Bhivare /******************** COMMON SET Features *******************/
730*6694095bSJitendra Bhivare #define BE_CMD_SET_FEATURE_UER	0x10
731*6694095bSJitendra Bhivare #define BE_CMD_UER_SUPP_BIT	0x1
732*6694095bSJitendra Bhivare struct be_uer_req {
733*6694095bSJitendra Bhivare 	u32 uer;
734*6694095bSJitendra Bhivare 	u32 rsvd;
735*6694095bSJitendra Bhivare };
736*6694095bSJitendra Bhivare 
737*6694095bSJitendra Bhivare struct be_uer_resp {
738*6694095bSJitendra Bhivare 	u32 uer;
739*6694095bSJitendra Bhivare 	u16 ue2rp;
740*6694095bSJitendra Bhivare 	u16 ue2sr;
741*6694095bSJitendra Bhivare };
742*6694095bSJitendra Bhivare 
743*6694095bSJitendra Bhivare struct be_cmd_set_features {
744*6694095bSJitendra Bhivare 	union {
745*6694095bSJitendra Bhivare 		struct be_cmd_req_hdr req_hdr;
746*6694095bSJitendra Bhivare 		struct be_cmd_resp_hdr resp_hdr;
747*6694095bSJitendra Bhivare 	} h;
748*6694095bSJitendra Bhivare 	u32 feature;
749*6694095bSJitendra Bhivare 	u32 param_len;
750*6694095bSJitendra Bhivare 	union {
751*6694095bSJitendra Bhivare 		struct be_uer_req req;
752*6694095bSJitendra Bhivare 		struct be_uer_resp resp;
753*6694095bSJitendra Bhivare 		u32 rsvd[2];
754*6694095bSJitendra Bhivare 	} param;
755*6694095bSJitendra Bhivare } __packed;
756*6694095bSJitendra Bhivare 
7576733b39aSJayamohan Kallickal int beiscsi_cmd_eq_create(struct be_ctrl_info *ctrl,
7586733b39aSJayamohan Kallickal 			  struct be_queue_info *eq, int eq_delay);
7596733b39aSJayamohan Kallickal 
7606733b39aSJayamohan Kallickal int beiscsi_cmd_cq_create(struct be_ctrl_info *ctrl,
7616733b39aSJayamohan Kallickal 			  struct be_queue_info *cq, struct be_queue_info *eq,
7626733b39aSJayamohan Kallickal 			  bool sol_evts, bool no_delay,
7636733b39aSJayamohan Kallickal 			  int num_cqe_dma_coalesce);
7646733b39aSJayamohan Kallickal 
7656733b39aSJayamohan Kallickal int beiscsi_cmd_q_destroy(struct be_ctrl_info *ctrl, struct be_queue_info *q,
7666733b39aSJayamohan Kallickal 			  int type);
76735e66019SJayamohan Kallickal int beiscsi_cmd_mccq_create(struct beiscsi_hba *phba,
768bfead3b2SJayamohan Kallickal 			struct be_queue_info *mccq,
769bfead3b2SJayamohan Kallickal 			struct be_queue_info *cq);
770bfead3b2SJayamohan Kallickal 
7716733b39aSJayamohan Kallickal int be_poll_mcc(struct be_ctrl_info *ctrl);
77203a12310SJayamohan Kallickal int mgmt_check_supported_fw(struct be_ctrl_info *ctrl,
773bfead3b2SJayamohan Kallickal 				      struct beiscsi_hba *phba);
7742177199dSJohn Soni Jose unsigned int be_cmd_get_initname(struct beiscsi_hba *phba);
775c7acc5b8SJayamohan Kallickal 
776090e2184SJitendra Bhivare void free_mcc_wrb(struct be_ctrl_info *ctrl, unsigned int tag);
777e175defeSJohn Soni Jose 
77810bcd47dSJitendra Bhivare int beiscsi_modify_eq_delay(struct beiscsi_hba *phba, struct be_set_eqd *,
77973af08e1SJayamohan Kallickal 			    int num);
78088840332SJitendra Bhivare int beiscsi_mccq_compl_wait(struct beiscsi_hba *phba,
78150a4b824SJitendra Bhivare 			    unsigned int tag,
78250a4b824SJitendra Bhivare 			    struct be_mcc_wrb **wrb,
78350a4b824SJitendra Bhivare 			    struct be_dma_mem *mbx_cmd_mem);
78450a4b824SJitendra Bhivare int __beiscsi_mcc_compl_status(struct beiscsi_hba *phba,
78550a4b824SJitendra Bhivare 			       unsigned int tag,
78650a4b824SJitendra Bhivare 			       struct be_mcc_wrb **wrb,
7871957aa7fSJayamohan Kallickal 			       struct be_dma_mem *mbx_cmd_mem);
7886733b39aSJayamohan Kallickal /*ISCSI Functuions */
7896733b39aSJayamohan Kallickal int be_cmd_fw_initialize(struct be_ctrl_info *ctrl);
7900283fbb1SJayamohan Kallickal int be_cmd_fw_uninit(struct be_ctrl_info *ctrl);
7916733b39aSJayamohan Kallickal 
7926733b39aSJayamohan Kallickal struct be_mcc_wrb *wrb_from_mbox(struct be_dma_mem *mbox_mem);
7932e4e8f65SJitendra Bhivare int be_mcc_compl_poll(struct beiscsi_hba *phba, unsigned int tag);
794cdde6682SJitendra Bhivare void be_mcc_notify(struct beiscsi_hba *phba, unsigned int tag);
795090e2184SJitendra Bhivare struct be_mcc_wrb *alloc_mcc_wrb(struct beiscsi_hba *phba,
796090e2184SJitendra Bhivare 				 unsigned int *ref_tag);
79753aefe25SJitendra Bhivare void beiscsi_process_async_event(struct beiscsi_hba *phba,
79853aefe25SJitendra Bhivare 				struct be_mcc_compl *compl);
7992e4e8f65SJitendra Bhivare int beiscsi_process_mcc_compl(struct be_ctrl_info *ctrl,
800756d29c8SJayamohan Kallickal 			      struct be_mcc_compl *compl);
8016733b39aSJayamohan Kallickal 
8022e4e8f65SJitendra Bhivare 
8036733b39aSJayamohan Kallickal int be_mbox_notify(struct be_ctrl_info *ctrl);
8046733b39aSJayamohan Kallickal 
8056733b39aSJayamohan Kallickal int be_cmd_create_default_pdu_queue(struct be_ctrl_info *ctrl,
8066733b39aSJayamohan Kallickal 				    struct be_queue_info *cq,
8076733b39aSJayamohan Kallickal 				    struct be_queue_info *dq, int length,
8088a86e833SJayamohan Kallickal 				    int entry_size, uint8_t is_header,
8098a86e833SJayamohan Kallickal 				    uint8_t ulp_num);
8106733b39aSJayamohan Kallickal 
81115a90fe0SJayamohan Kallickal int be_cmd_iscsi_post_template_hdr(struct be_ctrl_info *ctrl,
81215a90fe0SJayamohan Kallickal 				    struct be_dma_mem *q_mem);
81315a90fe0SJayamohan Kallickal 
81415a90fe0SJayamohan Kallickal int be_cmd_iscsi_remove_template_hdr(struct be_ctrl_info *ctrl);
81515a90fe0SJayamohan Kallickal 
8166733b39aSJayamohan Kallickal int be_cmd_iscsi_post_sgl_pages(struct be_ctrl_info *ctrl,
8176733b39aSJayamohan Kallickal 				struct be_dma_mem *q_mem, u32 page_offset,
8186733b39aSJayamohan Kallickal 				u32 num_pages);
8196733b39aSJayamohan Kallickal 
820e5285860SJayamohan Kallickal int beiscsi_cmd_reset_function(struct beiscsi_hba *phba);
821e5285860SJayamohan Kallickal 
8226733b39aSJayamohan Kallickal int be_cmd_wrbq_create(struct be_ctrl_info *ctrl, struct be_dma_mem *q_mem,
8234eea99d5SJayamohan Kallickal 		       struct be_queue_info *wrbq,
8244eea99d5SJayamohan Kallickal 		       struct hwi_wrb_context *pwrb_context,
8254eea99d5SJayamohan Kallickal 		       uint8_t ulp_num);
8266733b39aSJayamohan Kallickal 
8276f72238eSJohn Soni Jose /* Configuration Functions */
8286f72238eSJohn Soni Jose int be_cmd_set_vlan(struct beiscsi_hba *phba, uint16_t vlan_tag);
8296f72238eSJohn Soni Jose 
830*6694095bSJitendra Bhivare int beiscsi_set_uer_feature(struct beiscsi_hba *phba);
831*6694095bSJitendra Bhivare 
8326733b39aSJayamohan Kallickal struct be_default_pdu_context {
8336733b39aSJayamohan Kallickal 	u32 dw[4];
8346733b39aSJayamohan Kallickal } __packed;
8356733b39aSJayamohan Kallickal 
8366733b39aSJayamohan Kallickal struct amap_be_default_pdu_context {
8376733b39aSJayamohan Kallickal 	u8 dbuf_cindex[13];	/* dword 0 */
8386733b39aSJayamohan Kallickal 	u8 rsvd0[3];		/* dword 0 */
8396733b39aSJayamohan Kallickal 	u8 ring_size[4];	/* dword 0 */
8406733b39aSJayamohan Kallickal 	u8 ring_state[4];	/* dword 0 */
8416733b39aSJayamohan Kallickal 	u8 rsvd1[8];		/* dword 0 */
8426733b39aSJayamohan Kallickal 	u8 dbuf_pindex[13];	/* dword 1 */
8436733b39aSJayamohan Kallickal 	u8 rsvd2;		/* dword 1 */
8446733b39aSJayamohan Kallickal 	u8 pci_func_id[8];	/* dword 1 */
8456733b39aSJayamohan Kallickal 	u8 rx_pdid[9];		/* dword 1 */
8466733b39aSJayamohan Kallickal 	u8 rx_pdid_valid;	/* dword 1 */
8476733b39aSJayamohan Kallickal 	u8 default_buffer_size[16];	/* dword 2 */
8486733b39aSJayamohan Kallickal 	u8 cq_id_recv[10];	/* dword 2 */
8496733b39aSJayamohan Kallickal 	u8 rx_pdid_not_valid;	/* dword 2 */
8506733b39aSJayamohan Kallickal 	u8 rsvd3[5];		/* dword 2 */
8516733b39aSJayamohan Kallickal 	u8 rsvd4[32];		/* dword 3 */
8526733b39aSJayamohan Kallickal } __packed;
8536733b39aSJayamohan Kallickal 
854ef9e1b9bSJayamohan Kallickal struct amap_default_pdu_context_ext {
855ef9e1b9bSJayamohan Kallickal 	u8 rsvd0[16];   /* dword 0 */
856ef9e1b9bSJayamohan Kallickal 	u8 ring_size[4];    /* dword 0 */
857ef9e1b9bSJayamohan Kallickal 	u8 rsvd1[12];   /* dword 0 */
858ef9e1b9bSJayamohan Kallickal 	u8 rsvd2[22];   /* dword 1 */
859ef9e1b9bSJayamohan Kallickal 	u8 rx_pdid[9];  /* dword 1 */
860ef9e1b9bSJayamohan Kallickal 	u8 rx_pdid_valid;   /* dword 1 */
861ef9e1b9bSJayamohan Kallickal 	u8 default_buffer_size[16]; /* dword 2 */
862ef9e1b9bSJayamohan Kallickal 	u8 cq_id_recv[16];  /* dword 2 */
863ef9e1b9bSJayamohan Kallickal 	u8 rsvd3[32];   /* dword 3 */
864ef9e1b9bSJayamohan Kallickal } __packed;
865ef9e1b9bSJayamohan Kallickal 
8666733b39aSJayamohan Kallickal struct be_defq_create_req {
8676733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
8686733b39aSJayamohan Kallickal 	u16 num_pages;
8696733b39aSJayamohan Kallickal 	u8 ulp_num;
8708a86e833SJayamohan Kallickal #define BEISCSI_DUAL_ULP_AWARE_BIT	0	/* Byte 3 - Bit 0 */
8718a86e833SJayamohan Kallickal #define BEISCSI_BIND_Q_TO_ULP_BIT	1	/* Byte 3 - Bit 1 */
8728a86e833SJayamohan Kallickal 	u8 dua_feature;
8736733b39aSJayamohan Kallickal 	struct be_default_pdu_context context;
8746733b39aSJayamohan Kallickal 	struct phys_addr pages[8];
8756733b39aSJayamohan Kallickal } __packed;
8766733b39aSJayamohan Kallickal 
8776733b39aSJayamohan Kallickal struct be_defq_create_resp {
8786733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
8796733b39aSJayamohan Kallickal 	u16 id;
8808a86e833SJayamohan Kallickal 	u8 rsvd0;
8818a86e833SJayamohan Kallickal 	u8 ulp_num;
8828a86e833SJayamohan Kallickal 	u32 doorbell_offset;
8838a86e833SJayamohan Kallickal 	u16 register_set;
8848a86e833SJayamohan Kallickal 	u16 doorbell_format;
8856733b39aSJayamohan Kallickal } __packed;
8866733b39aSJayamohan Kallickal 
88715a90fe0SJayamohan Kallickal struct be_post_template_pages_req {
88815a90fe0SJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
88915a90fe0SJayamohan Kallickal 	u16 num_pages;
89015a90fe0SJayamohan Kallickal #define BEISCSI_TEMPLATE_HDR_TYPE_ISCSI	0x1
89115a90fe0SJayamohan Kallickal 	u16 type;
89215a90fe0SJayamohan Kallickal 	struct phys_addr scratch_pa;
89315a90fe0SJayamohan Kallickal 	struct virt_addr scratch_va;
89415a90fe0SJayamohan Kallickal 	struct virt_addr pages_va;
89515a90fe0SJayamohan Kallickal 	struct phys_addr pages[16];
89615a90fe0SJayamohan Kallickal } __packed;
89715a90fe0SJayamohan Kallickal 
89815a90fe0SJayamohan Kallickal struct be_remove_template_pages_req {
89915a90fe0SJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
90015a90fe0SJayamohan Kallickal 	u16 type;
90115a90fe0SJayamohan Kallickal 	u16 rsvd0;
90215a90fe0SJayamohan Kallickal } __packed;
90315a90fe0SJayamohan Kallickal 
9046733b39aSJayamohan Kallickal struct be_post_sgl_pages_req {
9056733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
9066733b39aSJayamohan Kallickal 	u16 num_pages;
9076733b39aSJayamohan Kallickal 	u16 page_offset;
9086733b39aSJayamohan Kallickal 	u32 rsvd0;
9096733b39aSJayamohan Kallickal 	struct phys_addr pages[26];
9106733b39aSJayamohan Kallickal 	u32 rsvd1;
9116733b39aSJayamohan Kallickal } __packed;
9126733b39aSJayamohan Kallickal 
9136733b39aSJayamohan Kallickal struct be_wrbq_create_req {
9146733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
9156733b39aSJayamohan Kallickal 	u16 num_pages;
9166733b39aSJayamohan Kallickal 	u8 ulp_num;
9174eea99d5SJayamohan Kallickal 	u8 dua_feature;
9186733b39aSJayamohan Kallickal 	struct phys_addr pages[8];
9196733b39aSJayamohan Kallickal } __packed;
9206733b39aSJayamohan Kallickal 
9216733b39aSJayamohan Kallickal struct be_wrbq_create_resp {
9226733b39aSJayamohan Kallickal 	struct be_cmd_resp_hdr resp_hdr;
9236733b39aSJayamohan Kallickal 	u16 cid;
9244eea99d5SJayamohan Kallickal 	u8 rsvd0;
9254eea99d5SJayamohan Kallickal 	u8 ulp_num;
9264eea99d5SJayamohan Kallickal 	u32 doorbell_offset;
9274eea99d5SJayamohan Kallickal 	u16 register_set;
9284eea99d5SJayamohan Kallickal 	u16 doorbell_format;
9296733b39aSJayamohan Kallickal } __packed;
9306733b39aSJayamohan Kallickal 
9316733b39aSJayamohan Kallickal #define SOL_CID_MASK		0x0000FFC0
9326733b39aSJayamohan Kallickal #define SOL_CODE_MASK		0x0000003F
9336733b39aSJayamohan Kallickal #define SOL_WRB_INDEX_MASK	0x00FF0000
9346733b39aSJayamohan Kallickal #define SOL_CMD_WND_MASK	0xFF000000
9356733b39aSJayamohan Kallickal #define SOL_RES_CNT_MASK	0x7FFFFFFF
9366733b39aSJayamohan Kallickal #define SOL_EXP_CMD_SN_MASK	0xFFFFFFFF
9376733b39aSJayamohan Kallickal #define SOL_HW_STS_MASK		0x000000FF
9386733b39aSJayamohan Kallickal #define SOL_STS_MASK		0x0000FF00
9396733b39aSJayamohan Kallickal #define SOL_RESP_MASK		0x00FF0000
9406733b39aSJayamohan Kallickal #define SOL_FLAGS_MASK		0x7F000000
9416733b39aSJayamohan Kallickal #define SOL_S_MASK		0x80000000
9426733b39aSJayamohan Kallickal 
9436733b39aSJayamohan Kallickal struct sol_cqe {
9446733b39aSJayamohan Kallickal 	u32 dw[4];
9456733b39aSJayamohan Kallickal };
9466733b39aSJayamohan Kallickal 
9476733b39aSJayamohan Kallickal struct amap_sol_cqe {
9486733b39aSJayamohan Kallickal 	u8 hw_sts[8];		/* dword 0 */
9496733b39aSJayamohan Kallickal 	u8 i_sts[8];		/* dword 0 */
9506733b39aSJayamohan Kallickal 	u8 i_resp[8];		/* dword 0 */
9516733b39aSJayamohan Kallickal 	u8 i_flags[7];		/* dword 0 */
9526733b39aSJayamohan Kallickal 	u8 s;			/* dword 0 */
9536733b39aSJayamohan Kallickal 	u8 i_exp_cmd_sn[32];	/* dword 1 */
9546733b39aSJayamohan Kallickal 	u8 code[6];		/* dword 2 */
9556733b39aSJayamohan Kallickal 	u8 cid[10];		/* dword 2 */
9566733b39aSJayamohan Kallickal 	u8 wrb_index[8];	/* dword 2 */
9576733b39aSJayamohan Kallickal 	u8 i_cmd_wnd[8];	/* dword 2 */
9586733b39aSJayamohan Kallickal 	u8 i_res_cnt[31];	/* dword 3 */
9596733b39aSJayamohan Kallickal 	u8 valid;		/* dword 3 */
9606733b39aSJayamohan Kallickal } __packed;
9616733b39aSJayamohan Kallickal 
962bfead3b2SJayamohan Kallickal #define SOL_ICD_INDEX_MASK	0x0003FFC0
963bfead3b2SJayamohan Kallickal struct amap_sol_cqe_ring {
964bfead3b2SJayamohan Kallickal 	u8 hw_sts[8];		/* dword 0 */
965bfead3b2SJayamohan Kallickal 	u8 i_sts[8];		/* dword 0 */
966bfead3b2SJayamohan Kallickal 	u8 i_resp[8];		/* dword 0 */
967bfead3b2SJayamohan Kallickal 	u8 i_flags[7];		/* dword 0 */
968bfead3b2SJayamohan Kallickal 	u8 s;			/* dword 0 */
969bfead3b2SJayamohan Kallickal 	u8 i_exp_cmd_sn[32];	/* dword 1 */
970bfead3b2SJayamohan Kallickal 	u8 code[6];		/* dword 2 */
971bfead3b2SJayamohan Kallickal 	u8 icd_index[12];	/* dword 2 */
972bfead3b2SJayamohan Kallickal 	u8 rsvd[6];		/* dword 2 */
973bfead3b2SJayamohan Kallickal 	u8 i_cmd_wnd[8];	/* dword 2 */
974bfead3b2SJayamohan Kallickal 	u8 i_res_cnt[31];	/* dword 3 */
975bfead3b2SJayamohan Kallickal 	u8 valid;		/* dword 3 */
976bfead3b2SJayamohan Kallickal } __packed;
977bfead3b2SJayamohan Kallickal 
97873133261SJohn Soni Jose struct amap_sol_cqe_v2 {
97973133261SJohn Soni Jose 	u8 hw_sts[8];   /* dword 0 */
98073133261SJohn Soni Jose 	u8 i_sts[8];    /* dword 0 */
98173133261SJohn Soni Jose 	u8 wrb_index[16];   /* dword 0 */
98273133261SJohn Soni Jose 	u8 i_exp_cmd_sn[32];    /* dword 1 */
98373133261SJohn Soni Jose 	u8 code[6]; /* dword 2 */
98473133261SJohn Soni Jose 	u8 cmd_cmpl;    /* dword 2 */
98573133261SJohn Soni Jose 	u8 rsvd0;   /* dword 2 */
98673133261SJohn Soni Jose 	u8 i_cmd_wnd[8];    /* dword 2 */
98773133261SJohn Soni Jose 	u8 cid[13]; /* dword 2 */
98873133261SJohn Soni Jose 	u8 u;   /* dword 2 */
98973133261SJohn Soni Jose 	u8 o;   /* dword 2 */
99073133261SJohn Soni Jose 	u8 s;   /* dword 2 */
99173133261SJohn Soni Jose 	u8 i_res_cnt[31];   /* dword 3 */
99273133261SJohn Soni Jose 	u8 valid;   /* dword 3 */
99373133261SJohn Soni Jose } __packed;
99473133261SJohn Soni Jose 
99573133261SJohn Soni Jose struct common_sol_cqe {
99673133261SJohn Soni Jose 	u32 exp_cmdsn;
99773133261SJohn Soni Jose 	u32 res_cnt;
99873133261SJohn Soni Jose 	u16 wrb_index;
99973133261SJohn Soni Jose 	u16 cid;
100073133261SJohn Soni Jose 	u8 hw_sts;
100173133261SJohn Soni Jose 	u8 cmd_wnd;
100273133261SJohn Soni Jose 	u8 res_flag; /* the s feild of structure */
100373133261SJohn Soni Jose 	u8 i_resp; /* for skh if cmd_complete is set then i_sts is response */
100473133261SJohn Soni Jose 	u8 i_flags; /* for skh or the u and o feilds */
100573133261SJohn Soni Jose 	u8 i_sts; /* for skh if cmd_complete is not-set then i_sts is status */
100673133261SJohn Soni Jose };
100773133261SJohn Soni Jose 
100873133261SJohn Soni Jose /*** iSCSI ack/driver message completions ***/
100973133261SJohn Soni Jose struct amap_it_dmsg_cqe {
101073133261SJohn Soni Jose 	u8 ack_num[32]; /* DWORD 0 */
101173133261SJohn Soni Jose 	u8 pdu_bytes_rcvd[32];  /* DWORD 1 */
101273133261SJohn Soni Jose 	u8 code[6]; /* DWORD 2 */
101373133261SJohn Soni Jose 	u8 cid[10]; /* DWORD 2 */
101473133261SJohn Soni Jose 	u8 wrb_idx[8];  /* DWORD 2 */
101573133261SJohn Soni Jose 	u8 rsvd0[8];    /* DWORD 2*/
101673133261SJohn Soni Jose 	u8 rsvd1[31];   /* DWORD 3*/
101773133261SJohn Soni Jose 	u8 valid;   /* DWORD 3 */
101873133261SJohn Soni Jose } __packed;
101973133261SJohn Soni Jose 
102073133261SJohn Soni Jose struct amap_it_dmsg_cqe_v2 {
102173133261SJohn Soni Jose 	u8 ack_num[32]; /* DWORD 0 */
102273133261SJohn Soni Jose 	u8 pdu_bytes_rcvd[32];  /* DWORD 1 */
102373133261SJohn Soni Jose 	u8 code[6]; /* DWORD 2 */
102473133261SJohn Soni Jose 	u8 rsvd0[10];   /* DWORD 2 */
102573133261SJohn Soni Jose 	u8 wrb_idx[16]; /* DWORD 2 */
102673133261SJohn Soni Jose 	u8 rsvd1[16];   /* DWORD 3 */
102773133261SJohn Soni Jose 	u8 cid[13]; /* DWORD 3 */
102873133261SJohn Soni Jose 	u8 rsvd2[2];    /* DWORD 3 */
102973133261SJohn Soni Jose 	u8 valid;   /* DWORD 3 */
103073133261SJohn Soni Jose } __packed;
1031bfead3b2SJayamohan Kallickal 
10326733b39aSJayamohan Kallickal 
10336733b39aSJayamohan Kallickal /**
10346733b39aSJayamohan Kallickal  * Post WRB Queue Doorbell Register used by the host Storage
10356733b39aSJayamohan Kallickal  * stack to notify the
10366733b39aSJayamohan Kallickal  * controller of a posted Work Request Block
10376733b39aSJayamohan Kallickal  */
1038ef9e1b9bSJayamohan Kallickal #define DB_WRB_POST_CID_MASK		0xFFFF	/* bits 0 - 16 */
10396733b39aSJayamohan Kallickal #define DB_DEF_PDU_WRB_INDEX_MASK	0xFF	/* bits 0 - 9 */
10406733b39aSJayamohan Kallickal 
10416733b39aSJayamohan Kallickal #define DB_DEF_PDU_WRB_INDEX_SHIFT	16
10426733b39aSJayamohan Kallickal #define DB_DEF_PDU_NUM_POSTED_SHIFT	24
10436733b39aSJayamohan Kallickal 
10446733b39aSJayamohan Kallickal struct fragnum_bits_for_sgl_cra_in {
10456733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
10466733b39aSJayamohan Kallickal 	u32 num_bits;
10476733b39aSJayamohan Kallickal } __packed;
10486733b39aSJayamohan Kallickal 
10496733b39aSJayamohan Kallickal struct iscsi_cleanup_req {
10506733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
10516733b39aSJayamohan Kallickal 	u16 chute;
10526733b39aSJayamohan Kallickal 	u8 hdr_ring_id;
10536733b39aSJayamohan Kallickal 	u8 data_ring_id;
10546733b39aSJayamohan Kallickal 
10556733b39aSJayamohan Kallickal } __packed;
10566733b39aSJayamohan Kallickal 
10576733b39aSJayamohan Kallickal struct eq_delay {
10586733b39aSJayamohan Kallickal 	u32 eq_id;
10596733b39aSJayamohan Kallickal 	u32 phase;
10606733b39aSJayamohan Kallickal 	u32 delay_multiplier;
10616733b39aSJayamohan Kallickal } __packed;
10626733b39aSJayamohan Kallickal 
10636733b39aSJayamohan Kallickal struct be_eq_delay_params_in {
10646733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
10656733b39aSJayamohan Kallickal 	u32 num_eq;
10666733b39aSJayamohan Kallickal 	struct eq_delay delay[8];
10676733b39aSJayamohan Kallickal } __packed;
10686733b39aSJayamohan Kallickal 
10696733b39aSJayamohan Kallickal struct tcp_connect_and_offload_in {
10706733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
10710e43895eSMike Christie 	struct ip_addr_format ip_address;
10726733b39aSJayamohan Kallickal 	u16 tcp_port;
10736733b39aSJayamohan Kallickal 	u16 cid;
10746733b39aSJayamohan Kallickal 	u16 cq_id;
10756733b39aSJayamohan Kallickal 	u16 defq_id;
10766733b39aSJayamohan Kallickal 	struct phys_addr dataout_template_pa;
10776733b39aSJayamohan Kallickal 	u16 hdr_ring_id;
10786733b39aSJayamohan Kallickal 	u16 data_ring_id;
10796733b39aSJayamohan Kallickal 	u8 do_offload;
10806733b39aSJayamohan Kallickal 	u8 rsvd0[3];
10816733b39aSJayamohan Kallickal } __packed;
10826733b39aSJayamohan Kallickal 
1083b3c202dcSJayamohan Kallickal struct tcp_connect_and_offload_in_v1 {
1084b3c202dcSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
1085b3c202dcSJayamohan Kallickal 	struct ip_addr_format ip_address;
1086b3c202dcSJayamohan Kallickal 	u16 tcp_port;
1087b3c202dcSJayamohan Kallickal 	u16 cid;
1088b3c202dcSJayamohan Kallickal 	u16 cq_id;
1089b3c202dcSJayamohan Kallickal 	u16 defq_id;
1090b3c202dcSJayamohan Kallickal 	struct phys_addr dataout_template_pa;
1091b3c202dcSJayamohan Kallickal 	u16 hdr_ring_id;
1092b3c202dcSJayamohan Kallickal 	u16 data_ring_id;
1093b3c202dcSJayamohan Kallickal 	u8 do_offload;
1094b3c202dcSJayamohan Kallickal 	u8 ifd_state;
1095b3c202dcSJayamohan Kallickal 	u8 rsvd0[2];
1096b3c202dcSJayamohan Kallickal 	u16 tcp_window_size;
1097b3c202dcSJayamohan Kallickal 	u8 tcp_window_scale_count;
1098b3c202dcSJayamohan Kallickal 	u8 rsvd1;
1099b3c202dcSJayamohan Kallickal 	u32 tcp_mss:24;
1100b3c202dcSJayamohan Kallickal 	u8 rsvd2;
1101b3c202dcSJayamohan Kallickal } __packed;
1102b3c202dcSJayamohan Kallickal 
11036733b39aSJayamohan Kallickal struct tcp_connect_and_offload_out {
11046733b39aSJayamohan Kallickal 	struct be_cmd_resp_hdr hdr;
11056733b39aSJayamohan Kallickal 	u32 connection_handle;
11066733b39aSJayamohan Kallickal 	u16 cid;
11076733b39aSJayamohan Kallickal 	u16 rsvd0;
11086733b39aSJayamohan Kallickal 
11096733b39aSJayamohan Kallickal } __packed;
11106733b39aSJayamohan Kallickal 
11116733b39aSJayamohan Kallickal struct be_mcc_wrb_context {
11126733b39aSJayamohan Kallickal 	struct MCC_WRB *wrb;
11136733b39aSJayamohan Kallickal 	int *users_final_status;
11146733b39aSJayamohan Kallickal } __packed;
11156733b39aSJayamohan Kallickal 
1116e08b3c8bSJayamohan Kallickal #define DB_DEF_PDU_RING_ID_MASK	0x3FFF	/* bits 0 - 13 */
1117e08b3c8bSJayamohan Kallickal #define DB_DEF_PDU_CQPROC_MASK		0x3FFF	/* bits 16 - 29 */
11186733b39aSJayamohan Kallickal #define DB_DEF_PDU_REARM_SHIFT		14
11196733b39aSJayamohan Kallickal #define DB_DEF_PDU_EVENT_SHIFT		15
11206733b39aSJayamohan Kallickal #define DB_DEF_PDU_CQPROC_SHIFT		16
11216733b39aSJayamohan Kallickal 
11226733b39aSJayamohan Kallickal struct dmsg_cqe {
11236733b39aSJayamohan Kallickal 	u32 dw[4];
11246733b39aSJayamohan Kallickal } __packed;
11256733b39aSJayamohan Kallickal 
11266733b39aSJayamohan Kallickal struct tcp_upload_params_in {
11276733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
11286733b39aSJayamohan Kallickal 	u16 id;
11296733b39aSJayamohan Kallickal 	u16 upload_type;
11306733b39aSJayamohan Kallickal 	u32 reset_seq;
11316733b39aSJayamohan Kallickal } __packed;
11326733b39aSJayamohan Kallickal 
11336733b39aSJayamohan Kallickal struct tcp_upload_params_out {
11346733b39aSJayamohan Kallickal 	u32 dw[32];
11356733b39aSJayamohan Kallickal } __packed;
11366733b39aSJayamohan Kallickal 
11376733b39aSJayamohan Kallickal union tcp_upload_params {
11386733b39aSJayamohan Kallickal 	struct tcp_upload_params_in request;
11396733b39aSJayamohan Kallickal 	struct tcp_upload_params_out response;
11406733b39aSJayamohan Kallickal } __packed;
11416733b39aSJayamohan Kallickal 
11426733b39aSJayamohan Kallickal struct be_ulp_fw_cfg {
1143843ae752SJayamohan Kallickal #define BEISCSI_ULP_ISCSI_INI_MODE	0x10
11446733b39aSJayamohan Kallickal 	u32 ulp_mode;
11456733b39aSJayamohan Kallickal 	u32 etx_base;
11466733b39aSJayamohan Kallickal 	u32 etx_count;
11476733b39aSJayamohan Kallickal 	u32 sq_base;
11486733b39aSJayamohan Kallickal 	u32 sq_count;
11496733b39aSJayamohan Kallickal 	u32 rq_base;
11506733b39aSJayamohan Kallickal 	u32 rq_count;
11516733b39aSJayamohan Kallickal 	u32 dq_base;
11526733b39aSJayamohan Kallickal 	u32 dq_count;
11536733b39aSJayamohan Kallickal 	u32 lro_base;
11546733b39aSJayamohan Kallickal 	u32 lro_count;
11556733b39aSJayamohan Kallickal 	u32 icd_base;
11566733b39aSJayamohan Kallickal 	u32 icd_count;
11576733b39aSJayamohan Kallickal };
11586733b39aSJayamohan Kallickal 
1159843ae752SJayamohan Kallickal struct be_ulp_chain_icd {
1160843ae752SJayamohan Kallickal 	u32 chain_base;
1161843ae752SJayamohan Kallickal 	u32 chain_count;
1162843ae752SJayamohan Kallickal };
1163843ae752SJayamohan Kallickal 
11646733b39aSJayamohan Kallickal struct be_fw_cfg {
11656733b39aSJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
11666733b39aSJayamohan Kallickal 	u32 be_config_number;
11676733b39aSJayamohan Kallickal 	u32 asic_revision;
11686733b39aSJayamohan Kallickal 	u32 phys_port;
1169843ae752SJayamohan Kallickal #define BEISCSI_FUNC_ISCSI_INI_MODE	0x10
1170843ae752SJayamohan Kallickal #define BEISCSI_FUNC_DUA_MODE	0x800
11716733b39aSJayamohan Kallickal 	u32 function_mode;
11726733b39aSJayamohan Kallickal 	struct be_ulp_fw_cfg ulp[2];
11736733b39aSJayamohan Kallickal 	u32 function_caps;
1174843ae752SJayamohan Kallickal 	u32 cqid_base;
1175843ae752SJayamohan Kallickal 	u32 cqid_count;
1176843ae752SJayamohan Kallickal 	u32 eqid_base;
1177843ae752SJayamohan Kallickal 	u32 eqid_count;
1178843ae752SJayamohan Kallickal 	struct be_ulp_chain_icd chain_icd[2];
11796733b39aSJayamohan Kallickal } __packed;
11806733b39aSJayamohan Kallickal 
11810e43895eSMike Christie struct be_cmd_get_all_if_id_req {
1182c7acc5b8SJayamohan Kallickal 	struct be_cmd_req_hdr hdr;
1183c7acc5b8SJayamohan Kallickal 	u32 if_count;
1184c7acc5b8SJayamohan Kallickal 	u32 if_hndl_list[1];
1185c7acc5b8SJayamohan Kallickal } __packed;
1186c7acc5b8SJayamohan Kallickal 
118753aefe25SJitendra Bhivare struct be_cmd_get_port_name {
118853aefe25SJitendra Bhivare 	union {
118953aefe25SJitendra Bhivare 		struct be_cmd_req_hdr req_hdr;
119053aefe25SJitendra Bhivare 		struct be_cmd_resp_hdr resp_hdr;
119153aefe25SJitendra Bhivare 	} h;
119253aefe25SJitendra Bhivare 	union {
119353aefe25SJitendra Bhivare 		struct {
119453aefe25SJitendra Bhivare 			u32 reserved;
119553aefe25SJitendra Bhivare 		} req;
119653aefe25SJitendra Bhivare 		struct {
119753aefe25SJitendra Bhivare 			u32 port_names;
119853aefe25SJitendra Bhivare 		} resp;
119953aefe25SJitendra Bhivare 	} p;
120053aefe25SJitendra Bhivare } __packed;
120153aefe25SJitendra Bhivare 
12026733b39aSJayamohan Kallickal #define ISCSI_OPCODE_SCSI_DATA_OUT		5
1203c62eef0dSJohn Soni Jose #define OPCODE_COMMON_NTWK_LINK_STATUS_QUERY 5
12046733b39aSJayamohan Kallickal #define OPCODE_COMMON_MODIFY_EQ_DELAY		41
12056733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_CLEANUP		59
12066733b39aSJayamohan Kallickal #define	OPCODE_COMMON_TCP_UPLOAD		56
1207c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_TCP_CONNECT_AND_OFFLOAD 70
12086733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_ERROR_RECOVERY_INVALIDATE_COMMANDS 1
1209c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_CFG_GET_HBA_NAME	6
1210c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_CFG_SET_HBA_NAME	7
1211c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_SESSION_GET_A_SESSION  14
12123f4134c1SJohn Soni Jose #define OPCODE_ISCSI_INI_SESSION_LOGOUT_TARGET	 24
12139aef4200SJohn Soni Jose #define OPCODE_ISCSI_INI_DRIVER_REOPEN_ALL_SESSIONS 36
1214c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_DRIVER_OFFLOAD_SESSION 41
1215c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_DRIVER_INVALIDATE_CONNECTION 42
1216c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_BOOT_GET_BOOT_TARGET	52
1217ffce3e2eSJayamohan Kallickal #define OPCODE_COMMON_WRITE_FLASH		96
1218ffce3e2eSJayamohan Kallickal #define OPCODE_COMMON_READ_FLASH		97
1219c7acc5b8SJayamohan Kallickal 
12206733b39aSJayamohan Kallickal /* --- CMD_ISCSI_INVALIDATE_CONNECTION_TYPE --- */
1221c7acc5b8SJayamohan Kallickal #define CMD_ISCSI_COMMAND_INVALIDATE		1
1222bfead3b2SJayamohan Kallickal #define CMD_ISCSI_CONNECTION_INVALIDATE		0x8001
1223bfead3b2SJayamohan Kallickal #define CMD_ISCSI_CONNECTION_ISSUE_TCP_RST	0x8002
12246733b39aSJayamohan Kallickal 
12256733b39aSJayamohan Kallickal #define INI_WR_CMD			1	/* Initiator write command */
12266733b39aSJayamohan Kallickal #define INI_TMF_CMD			2	/* Initiator TMF command */
12276733b39aSJayamohan Kallickal #define INI_NOPOUT_CMD			3	/* Initiator; Send a NOP-OUT */
12286733b39aSJayamohan Kallickal #define INI_RD_CMD			5	/* Initiator requesting to send
12296733b39aSJayamohan Kallickal 						 * a read command
12306733b39aSJayamohan Kallickal 						 */
12316733b39aSJayamohan Kallickal #define TGT_CTX_UPDT_CMD		7	/* Target context update */
12326733b39aSJayamohan Kallickal #define TGT_STS_CMD			8	/* Target R2T and other BHS
12336733b39aSJayamohan Kallickal 						 * where only the status number
12346733b39aSJayamohan Kallickal 						 * need to be updated
12356733b39aSJayamohan Kallickal 						 */
12366733b39aSJayamohan Kallickal #define TGT_DATAIN_CMD			9	/* Target Data-Ins in response
12376733b39aSJayamohan Kallickal 						 * to read command
12386733b39aSJayamohan Kallickal 						 */
12396733b39aSJayamohan Kallickal #define TGT_SOS_PDU			10	/* Target:standalone status
12406733b39aSJayamohan Kallickal 						 * response
12416733b39aSJayamohan Kallickal 						 */
12426733b39aSJayamohan Kallickal #define TGT_DM_CMD			11	/* Indicates that the bhs
12436733b39aSJayamohan Kallickal 						 *  preparedby
12446733b39aSJayamohan Kallickal 						 * driver should not be touched
12456733b39aSJayamohan Kallickal 						 */
12466733b39aSJayamohan Kallickal /* --- CMD_CHUTE_TYPE --- */
12476733b39aSJayamohan Kallickal #define CMD_CONNECTION_CHUTE_0		1
12486733b39aSJayamohan Kallickal #define CMD_CONNECTION_CHUTE_1		2
12496733b39aSJayamohan Kallickal #define CMD_CONNECTION_CHUTE_2		3
12506733b39aSJayamohan Kallickal 
12516733b39aSJayamohan Kallickal #define EQ_MAJOR_CODE_COMPLETION	0
12526733b39aSJayamohan Kallickal 
12536733b39aSJayamohan Kallickal #define CMD_ISCSI_SESSION_DEL_CFG_FROM_FLASH 0
12546733b39aSJayamohan Kallickal #define CMD_ISCSI_SESSION_SAVE_CFG_ON_FLASH 1
12556733b39aSJayamohan Kallickal 
12566733b39aSJayamohan Kallickal /* --- CONNECTION_UPLOAD_PARAMS --- */
12576733b39aSJayamohan Kallickal /* These parameters are used to define the type of upload desired.  */
12586733b39aSJayamohan Kallickal #define CONNECTION_UPLOAD_GRACEFUL      1	/* Graceful upload  */
12596733b39aSJayamohan Kallickal #define CONNECTION_UPLOAD_ABORT_RESET   2	/* Abortive upload with
12606733b39aSJayamohan Kallickal 						 * reset
12616733b39aSJayamohan Kallickal 						 */
12626733b39aSJayamohan Kallickal #define CONNECTION_UPLOAD_ABORT		3	/* Abortive upload without
12636733b39aSJayamohan Kallickal 						 * reset
12646733b39aSJayamohan Kallickal 						 */
12656733b39aSJayamohan Kallickal #define CONNECTION_UPLOAD_ABORT_WITH_SEQ 4	/* Abortive upload with reset,
12666733b39aSJayamohan Kallickal 						 * sequence number by driver  */
12676733b39aSJayamohan Kallickal 
12686733b39aSJayamohan Kallickal /* Returns the number of items in the field array. */
12696733b39aSJayamohan Kallickal #define BE_NUMBER_OF_FIELD(_type_, _field_)	\
12706733b39aSJayamohan Kallickal 	(FIELD_SIZEOF(_type_, _field_)/sizeof((((_type_ *)0)->_field_[0])))\
12716733b39aSJayamohan Kallickal 
12726733b39aSJayamohan Kallickal /**
12736733b39aSJayamohan Kallickal  * Different types of iSCSI completions to host driver for both initiator
12746733b39aSJayamohan Kallickal  * and taget mode
12756733b39aSJayamohan Kallickal  * of operation.
12766733b39aSJayamohan Kallickal  */
12776733b39aSJayamohan Kallickal #define SOL_CMD_COMPLETE		1	/* Solicited command completed
12786733b39aSJayamohan Kallickal 						 * normally
12796733b39aSJayamohan Kallickal 						 */
12806733b39aSJayamohan Kallickal #define SOL_CMD_KILLED_DATA_DIGEST_ERR  2	/* Solicited command got
12816733b39aSJayamohan Kallickal 						 * invalidated internally due
12826733b39aSJayamohan Kallickal 						 * to Data Digest error
12836733b39aSJayamohan Kallickal 						 */
12846733b39aSJayamohan Kallickal #define CXN_KILLED_PDU_SIZE_EXCEEDS_DSL 3	/* Connection got invalidated
12856733b39aSJayamohan Kallickal 						 * internally
128625985edcSLucas De Marchi 						 * due to a received PDU
12876733b39aSJayamohan Kallickal 						 * size > DSL
12886733b39aSJayamohan Kallickal 						 */
12896733b39aSJayamohan Kallickal #define CXN_KILLED_BURST_LEN_MISMATCH   4	/* Connection got invalidated
12906733b39aSJayamohan Kallickal 						 * internally due ti received
12916733b39aSJayamohan Kallickal 						 * PDU sequence size >
12926733b39aSJayamohan Kallickal 						 * FBL/MBL.
12936733b39aSJayamohan Kallickal 						 */
12946733b39aSJayamohan Kallickal #define CXN_KILLED_AHS_RCVD		5	/* Connection got invalidated
129525985edcSLucas De Marchi 						 * internally due to a received
12966733b39aSJayamohan Kallickal 						 * PDU Hdr that has
12976733b39aSJayamohan Kallickal 						 * AHS */
12986733b39aSJayamohan Kallickal #define CXN_KILLED_HDR_DIGEST_ERR	6	/* Connection got invalidated
12996733b39aSJayamohan Kallickal 						 * internally due to Hdr Digest
13006733b39aSJayamohan Kallickal 						 * error
13016733b39aSJayamohan Kallickal 						 */
13026733b39aSJayamohan Kallickal #define CXN_KILLED_UNKNOWN_HDR		7	/* Connection got invalidated
13036733b39aSJayamohan Kallickal 						 *  internally
13046733b39aSJayamohan Kallickal 						 * due to a bad opcode in the
13056733b39aSJayamohan Kallickal 						 * pdu hdr
13066733b39aSJayamohan Kallickal 						 */
13076733b39aSJayamohan Kallickal #define CXN_KILLED_STALE_ITT_TTT_RCVD	8	/* Connection got invalidated
130825985edcSLucas De Marchi 						 * internally due to a received
13096733b39aSJayamohan Kallickal 						 * ITT/TTT that does not belong
13106733b39aSJayamohan Kallickal 						 * to this Connection
13116733b39aSJayamohan Kallickal 						 */
13126733b39aSJayamohan Kallickal #define CXN_KILLED_INVALID_ITT_TTT_RCVD 9	/* Connection got invalidated
131325985edcSLucas De Marchi 						 * internally due to received
13146733b39aSJayamohan Kallickal 						 * ITT/TTT value > Max
13156733b39aSJayamohan Kallickal 						 * Supported ITTs/TTTs
13166733b39aSJayamohan Kallickal 						 */
13176733b39aSJayamohan Kallickal #define CXN_KILLED_RST_RCVD		10	/* Connection got invalidated
13186733b39aSJayamohan Kallickal 						 * internally due to an
13196733b39aSJayamohan Kallickal 						 * incoming TCP RST
13206733b39aSJayamohan Kallickal 						 */
13216733b39aSJayamohan Kallickal #define CXN_KILLED_TIMED_OUT		11	/* Connection got invalidated
13226733b39aSJayamohan Kallickal 						 * internally due to timeout on
13236733b39aSJayamohan Kallickal 						 * tcp segment 12 retransmit
13246733b39aSJayamohan Kallickal 						 * attempts failed
13256733b39aSJayamohan Kallickal 						 */
13266733b39aSJayamohan Kallickal #define CXN_KILLED_RST_SENT		12	/* Connection got invalidated
13276733b39aSJayamohan Kallickal 						 * internally due to TCP RST
13286733b39aSJayamohan Kallickal 						 * sent by the Tx side
13296733b39aSJayamohan Kallickal 						 */
13306733b39aSJayamohan Kallickal #define CXN_KILLED_FIN_RCVD		13	/* Connection got invalidated
13316733b39aSJayamohan Kallickal 						 * internally due to an
13326733b39aSJayamohan Kallickal 						 * incoming TCP FIN.
13336733b39aSJayamohan Kallickal 						 */
13346733b39aSJayamohan Kallickal #define CXN_KILLED_BAD_UNSOL_PDU_RCVD	14	/* Connection got invalidated
13356733b39aSJayamohan Kallickal 						 * internally due to bad
13366733b39aSJayamohan Kallickal 						 * unsolicited PDU Unsolicited
13376733b39aSJayamohan Kallickal 						 * PDUs are PDUs with
13386733b39aSJayamohan Kallickal 						 * ITT=0xffffffff
13396733b39aSJayamohan Kallickal 						 */
13406733b39aSJayamohan Kallickal #define CXN_KILLED_BAD_WRB_INDEX_ERROR	15	/* Connection got invalidated
13416733b39aSJayamohan Kallickal 						 * internally due to bad WRB
13426733b39aSJayamohan Kallickal 						 * index.
13436733b39aSJayamohan Kallickal 						 */
13446733b39aSJayamohan Kallickal #define CXN_KILLED_OVER_RUN_RESIDUAL	16	/* Command got invalidated
134525985edcSLucas De Marchi 						 * internally due to received
13466733b39aSJayamohan Kallickal 						 * command has residual
13476733b39aSJayamohan Kallickal 						 * over run bytes.
13486733b39aSJayamohan Kallickal 						 */
13496733b39aSJayamohan Kallickal #define CXN_KILLED_UNDER_RUN_RESIDUAL	17	/* Command got invalidated
135025985edcSLucas De Marchi 						 * internally due to received
13516733b39aSJayamohan Kallickal 						 * command has residual under
13526733b39aSJayamohan Kallickal 						 * run bytes.
13536733b39aSJayamohan Kallickal 						 */
13546733b39aSJayamohan Kallickal #define CMD_KILLED_INVALID_STATSN_RCVD	18	/* Command got invalidated
135525985edcSLucas De Marchi 						 * internally due to a received
13566733b39aSJayamohan Kallickal 						 * PDU has an invalid StatusSN
13576733b39aSJayamohan Kallickal 						 */
13586733b39aSJayamohan Kallickal #define CMD_KILLED_INVALID_R2T_RCVD	19	/* Command got invalidated
135925985edcSLucas De Marchi 						 * internally due to a received
13606733b39aSJayamohan Kallickal 						 * an R2T with some invalid
13616733b39aSJayamohan Kallickal 						 * fields in it
13626733b39aSJayamohan Kallickal 						 */
13636733b39aSJayamohan Kallickal #define CMD_CXN_KILLED_LUN_INVALID	20	/* Command got invalidated
13646733b39aSJayamohan Kallickal 						 * internally due to received
13656733b39aSJayamohan Kallickal 						 * PDU has an invalid LUN.
13666733b39aSJayamohan Kallickal 						 */
13676733b39aSJayamohan Kallickal #define CMD_CXN_KILLED_ICD_INVALID	21	/* Command got invalidated
13686733b39aSJayamohan Kallickal 						 * internally due to the
13696733b39aSJayamohan Kallickal 						 * corresponding ICD not in a
13706733b39aSJayamohan Kallickal 						 * valid state
13716733b39aSJayamohan Kallickal 						 */
13726733b39aSJayamohan Kallickal #define CMD_CXN_KILLED_ITT_INVALID	22	/* Command got invalidated due
13736733b39aSJayamohan Kallickal 						 *  to received PDU has an
13746733b39aSJayamohan Kallickal 						 *  invalid ITT.
13756733b39aSJayamohan Kallickal 						 */
13766733b39aSJayamohan Kallickal #define CMD_CXN_KILLED_SEQ_OUTOFORDER	23	/* Command got invalidated due
13776733b39aSJayamohan Kallickal 						 * to received sequence buffer
13786733b39aSJayamohan Kallickal 						 * offset is out of order.
13796733b39aSJayamohan Kallickal 						 */
13806733b39aSJayamohan Kallickal #define CMD_CXN_KILLED_INVALID_DATASN_RCVD 24	/* Command got invalidated
13816733b39aSJayamohan Kallickal 						 * internally due to a
138225985edcSLucas De Marchi 						 * received PDU has an invalid
13836733b39aSJayamohan Kallickal 						 * DataSN
13846733b39aSJayamohan Kallickal 						 */
13856733b39aSJayamohan Kallickal #define CXN_INVALIDATE_NOTIFY		25	/* Connection invalidation
13866733b39aSJayamohan Kallickal 						 * completion notify.
13876733b39aSJayamohan Kallickal 						 */
13886733b39aSJayamohan Kallickal #define CXN_INVALIDATE_INDEX_NOTIFY	26	/* Connection invalidation
13896733b39aSJayamohan Kallickal 						 * completion
13906733b39aSJayamohan Kallickal 						 * with data PDU index.
13916733b39aSJayamohan Kallickal 						 */
13926733b39aSJayamohan Kallickal #define CMD_INVALIDATED_NOTIFY		27	/* Command invalidation
13936733b39aSJayamohan Kallickal 						 * completionnotifify.
13946733b39aSJayamohan Kallickal 						 */
13956733b39aSJayamohan Kallickal #define UNSOL_HDR_NOTIFY		28	/* Unsolicited header notify.*/
13966733b39aSJayamohan Kallickal #define UNSOL_DATA_NOTIFY		29	/* Unsolicited data notify.*/
13976733b39aSJayamohan Kallickal #define UNSOL_DATA_DIGEST_ERROR_NOTIFY	30	/* Unsolicited data digest
13986733b39aSJayamohan Kallickal 						 * error notify.
13996733b39aSJayamohan Kallickal 						 */
14006733b39aSJayamohan Kallickal #define DRIVERMSG_NOTIFY		31	/* TCP acknowledge based
14016733b39aSJayamohan Kallickal 						 * notification.
14026733b39aSJayamohan Kallickal 						 */
14036733b39aSJayamohan Kallickal #define CXN_KILLED_CMND_DATA_NOT_ON_SAME_CONN 32 /* Connection got invalidated
14046733b39aSJayamohan Kallickal 						  * internally due to command
14056733b39aSJayamohan Kallickal 						  * and data are not on same
14066733b39aSJayamohan Kallickal 						  * connection.
14076733b39aSJayamohan Kallickal 						  */
14086733b39aSJayamohan Kallickal #define SOL_CMD_KILLED_DIF_ERR		33	/* Solicited command got
14096733b39aSJayamohan Kallickal 						 *  invalidated internally due
14106733b39aSJayamohan Kallickal 						 *  to DIF error
14116733b39aSJayamohan Kallickal 						 */
14126733b39aSJayamohan Kallickal #define CXN_KILLED_SYN_RCVD		34	/* Connection got invalidated
14136733b39aSJayamohan Kallickal 						 * internally due to incoming
14146733b39aSJayamohan Kallickal 						 * TCP SYN
14156733b39aSJayamohan Kallickal 						 */
14166733b39aSJayamohan Kallickal #define CXN_KILLED_IMM_DATA_RCVD	35	/* Connection got invalidated
14176733b39aSJayamohan Kallickal 						 * internally due to an
14186733b39aSJayamohan Kallickal 						 * incoming Unsolicited PDU
14196733b39aSJayamohan Kallickal 						 * that has immediate data on
14206733b39aSJayamohan Kallickal 						 * the cxn
14216733b39aSJayamohan Kallickal 						 */
14226733b39aSJayamohan Kallickal 
1423e9b91193SJayamohan Kallickal int be_chk_reset_complete(struct beiscsi_hba *phba);
1424e9b91193SJayamohan Kallickal 
14256733b39aSJayamohan Kallickal void be_wrb_hdr_prepare(struct be_mcc_wrb *wrb, int payload_len,
14266733b39aSJayamohan Kallickal 			bool embedded, u8 sge_cnt);
14276733b39aSJayamohan Kallickal 
14286733b39aSJayamohan Kallickal void be_cmd_hdr_prepare(struct be_cmd_req_hdr *req_hdr,
14296733b39aSJayamohan Kallickal 			u8 subsystem, u8 opcode, int cmd_len);
14306733b39aSJayamohan Kallickal 
1431cdaa4dedSJitendra Bhivare void beiscsi_fail_session(struct iscsi_cls_session *cls_session);
14326733b39aSJayamohan Kallickal #endif /* !BEISCSI_CMDS_H */
1433