1*82527734SSukumar Swaminathan /*
2*82527734SSukumar Swaminathan  * CDDL HEADER START
3*82527734SSukumar Swaminathan  *
4*82527734SSukumar Swaminathan  * The contents of this file are subject to the terms of the
5*82527734SSukumar Swaminathan  * Common Development and Distribution License (the "License").
6*82527734SSukumar Swaminathan  * You may not use this file except in compliance with the License.
7*82527734SSukumar Swaminathan  *
8*82527734SSukumar Swaminathan  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*82527734SSukumar Swaminathan  * or http://www.opensolaris.org/os/licensing.
10*82527734SSukumar Swaminathan  * See the License for the specific language governing permissions
11*82527734SSukumar Swaminathan  * and limitations under the License.
12*82527734SSukumar Swaminathan  *
13*82527734SSukumar Swaminathan  * When distributing Covered Code, include this CDDL HEADER in each
14*82527734SSukumar Swaminathan  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*82527734SSukumar Swaminathan  * If applicable, add the following below this CDDL HEADER, with the
16*82527734SSukumar Swaminathan  * fields enclosed by brackets "[]" replaced with your own identifying
17*82527734SSukumar Swaminathan  * information: Portions Copyright [yyyy] [name of copyright owner]
18*82527734SSukumar Swaminathan  *
19*82527734SSukumar Swaminathan  * CDDL HEADER END
20*82527734SSukumar Swaminathan  */
21*82527734SSukumar Swaminathan 
22*82527734SSukumar Swaminathan /*
23*82527734SSukumar Swaminathan  * Copyright 2009 Emulex.  All rights reserved.
24*82527734SSukumar Swaminathan  * Use is subject to license terms.
25*82527734SSukumar Swaminathan  */
26*82527734SSukumar Swaminathan 
27*82527734SSukumar Swaminathan #ifndef _EMLXS_IOCB_H
28*82527734SSukumar Swaminathan #define	_EMLXS_IOCB_H
29*82527734SSukumar Swaminathan 
30*82527734SSukumar Swaminathan #ifdef	__cplusplus
31*82527734SSukumar Swaminathan extern "C" {
32*82527734SSukumar Swaminathan #endif
33*82527734SSukumar Swaminathan 
34*82527734SSukumar Swaminathan /* ==== IOCB Commands ==== */
35*82527734SSukumar Swaminathan 
36*82527734SSukumar Swaminathan #define	CMD_RCV_SEQUENCE_CX	0x01
37*82527734SSukumar Swaminathan #define	CMD_XMIT_SEQUENCE_CR	0x02
38*82527734SSukumar Swaminathan #define	CMD_XMIT_SEQUENCE_CX	0x03
39*82527734SSukumar Swaminathan #define	CMD_XMIT_BCAST_CN	0x04
40*82527734SSukumar Swaminathan #define	CMD_XMIT_BCAST_CX	0x05
41*82527734SSukumar Swaminathan #define	CMD_QUE_RING_BUF_CN	0x06
42*82527734SSukumar Swaminathan #define	CMD_QUE_XRI_BUF_CX	0x07
43*82527734SSukumar Swaminathan #define	CMD_IOCB_CONTINUE_CN	0x08
44*82527734SSukumar Swaminathan #define	CMD_RET_XRI_BUF_CX	0x09
45*82527734SSukumar Swaminathan #define	CMD_ELS_REQUEST_CR	0x0A
46*82527734SSukumar Swaminathan #define	CMD_ELS_REQUEST_CX	0x0B
47*82527734SSukumar Swaminathan #define	CMD_RCV_ELS_REQ_CX	0x0D
48*82527734SSukumar Swaminathan #define	CMD_ABORT_XRI_CN	0x0E
49*82527734SSukumar Swaminathan #define	CMD_ABORT_XRI_CX	0x0F
50*82527734SSukumar Swaminathan #define	CMD_CLOSE_XRI_CN	0x10
51*82527734SSukumar Swaminathan #define	CMD_CLOSE_XRI_CX	0x11
52*82527734SSukumar Swaminathan #define	CMD_CREATE_XRI_CR	0x12
53*82527734SSukumar Swaminathan #define	CMD_CREATE_XRI_CX	0x13
54*82527734SSukumar Swaminathan #define	CMD_GET_RPI_CN		0x14
55*82527734SSukumar Swaminathan #define	CMD_XMIT_ELS_RSP_CX	0x15
56*82527734SSukumar Swaminathan #define	CMD_GET_RPI_CR		0x16
57*82527734SSukumar Swaminathan #define	CMD_XRI_ABORTED_CX	0x17
58*82527734SSukumar Swaminathan #define	CMD_FCP_IWRITE_CR	0x18
59*82527734SSukumar Swaminathan #define	CMD_FCP_IWRITE_CX	0x19
60*82527734SSukumar Swaminathan #define	CMD_FCP_IREAD_CR	0x1A
61*82527734SSukumar Swaminathan #define	CMD_FCP_IREAD_CX	0x1B
62*82527734SSukumar Swaminathan #define	CMD_FCP_ICMND_CR	0x1C
63*82527734SSukumar Swaminathan #define	CMD_FCP_ICMND_CX	0x1D
64*82527734SSukumar Swaminathan #define	CMD_FCP_TSEND_CX	0x1F	/* FCP_TARGET_MODE */
65*82527734SSukumar Swaminathan #define	CMD_ADAPTER_MSG		0x20
66*82527734SSukumar Swaminathan #define	CMD_FCP_TRECEIVE_CX	0x21	/* FCP_TARGET_MODE */
67*82527734SSukumar Swaminathan #define	CMD_ADAPTER_DUMP	0x22
68*82527734SSukumar Swaminathan #define	CMD_FCP_TRSP_CX		0x23	/* FCP_TARGET_MODE */
69*82527734SSukumar Swaminathan #define	CMD_FCP_AUTO_TRSP_CX	0x29	/* FCP_TARGET_MODE */
70*82527734SSukumar Swaminathan 
71*82527734SSukumar Swaminathan /* LP3000 gasket IOCB Command Set */
72*82527734SSukumar Swaminathan 
73*82527734SSukumar Swaminathan #define	CMD_BPL_IWRITE_CR	0x48
74*82527734SSukumar Swaminathan #define	CMD_BPL_IWRITE_CX	0x49
75*82527734SSukumar Swaminathan #define	CMD_BPL_IREAD_CR	0x4A
76*82527734SSukumar Swaminathan #define	CMD_BPL_IREAD_CX	0x4B
77*82527734SSukumar Swaminathan #define	CMD_BPL_ICMND_CR	0x4C
78*82527734SSukumar Swaminathan #define	CMD_BPL_ICMND_CX	0x4D
79*82527734SSukumar Swaminathan 
80*82527734SSukumar Swaminathan #define	CMD_ASYNC_STATUS	0x7C
81*82527734SSukumar Swaminathan 
82*82527734SSukumar Swaminathan /* SLI_2 IOCB Command Set */
83*82527734SSukumar Swaminathan #define	CMD_RCV_SEQUENCE64_CX	0x81
84*82527734SSukumar Swaminathan #define	CMD_XMIT_SEQUENCE64_CR	0x82
85*82527734SSukumar Swaminathan #define	CMD_XMIT_SEQUENCE64_CX	0x83
86*82527734SSukumar Swaminathan #define	CMD_XMIT_BCAST64_CN	0x84
87*82527734SSukumar Swaminathan #define	CMD_XMIT_BCAST64_CX	0x85
88*82527734SSukumar Swaminathan #define	CMD_QUE_RING_BUF64_CN	0x86
89*82527734SSukumar Swaminathan #define	CMD_QUE_XRI_BUF64_CX	0x87
90*82527734SSukumar Swaminathan #define	CMD_IOCB_CONTINUE64_CN	0x88
91*82527734SSukumar Swaminathan #define	CMD_RET_XRI_BUF64_CX	0x89
92*82527734SSukumar Swaminathan #define	CMD_ELS_REQUEST64_CR	0x8A
93*82527734SSukumar Swaminathan #define	CMD_ELS_REQUEST64_CX	0x8B
94*82527734SSukumar Swaminathan #define	CMD_RCV_ELS_REQ64_CX	0x8D
95*82527734SSukumar Swaminathan #define	CMD_XMIT_ELS_RSP64_CX	0x95
96*82527734SSukumar Swaminathan #define	CMD_XMIT_BLS_RSP64_CX	0x97
97*82527734SSukumar Swaminathan #define	CMD_FCP_IWRITE64_CR	0x98
98*82527734SSukumar Swaminathan #define	CMD_FCP_IWRITE64_CX	0x99
99*82527734SSukumar Swaminathan #define	CMD_FCP_IREAD64_CR	0x9A
100*82527734SSukumar Swaminathan #define	CMD_FCP_IREAD64_CX	0x9B
101*82527734SSukumar Swaminathan #define	CMD_FCP_ICMND64_CR	0x9C
102*82527734SSukumar Swaminathan #define	CMD_FCP_ICMND64_CX	0x9D
103*82527734SSukumar Swaminathan #define	CMD_FCP_TSEND64_CX	0x9F	/* FCP_TARGET_MODE */
104*82527734SSukumar Swaminathan #define	CMD_FCP_TRECEIVE64_CX	0xA1	/* FCP_TARGET_MODE */
105*82527734SSukumar Swaminathan #define	CMD_FCP_TRSP64_CX	0xA3	/* FCP_TARGET_MODE */
106*82527734SSukumar Swaminathan #define	CMD_RCV_SEQ64_CX	0xB5	/* SLI3 */
107*82527734SSukumar Swaminathan #define	CMD_RCV_ELS64_CX	0xB7	/* SLI3 */
108*82527734SSukumar Swaminathan #define	CMD_RCV_CONT64_CX	0xBB	/* SLI3 */
109*82527734SSukumar Swaminathan #define	CMD_RCV_SEQ_LIST64_CX	0xC1
110*82527734SSukumar Swaminathan #define	CMD_GEN_REQUEST64_CR	0xC2
111*82527734SSukumar Swaminathan #define	CMD_GEN_REQUEST64_CX	0xC3
112*82527734SSukumar Swaminathan #define	CMD_QUE_RING_LIST64_CN	0xC6
113*82527734SSukumar Swaminathan 
114*82527734SSukumar Swaminathan 
115*82527734SSukumar Swaminathan /*
116*82527734SSukumar Swaminathan  * Begin Structure Definitions for IOCB Commands
117*82527734SSukumar Swaminathan  */
118*82527734SSukumar Swaminathan 
119*82527734SSukumar Swaminathan typedef struct
120*82527734SSukumar Swaminathan {
121*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
122*82527734SSukumar Swaminathan 	uint8_t		statAction;
123*82527734SSukumar Swaminathan 	uint8_t		statRsn;
124*82527734SSukumar Swaminathan 	uint8_t		statBaExp;
125*82527734SSukumar Swaminathan 	uint8_t		statLocalError;
126*82527734SSukumar Swaminathan #endif
127*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
128*82527734SSukumar Swaminathan 	uint8_t		statLocalError;
129*82527734SSukumar Swaminathan 	uint8_t		statBaExp;
130*82527734SSukumar Swaminathan 	uint8_t		statRsn;
131*82527734SSukumar Swaminathan 	uint8_t		statAction;
132*82527734SSukumar Swaminathan #endif
133*82527734SSukumar Swaminathan 	/* statAction  FBSY reason codes */
134*82527734SSukumar Swaminathan #define	FBSY_RSN_MASK	0xF0	/* Rsn stored in upper nibble */
135*82527734SSukumar Swaminathan #define	FBSY_FABRIC_BSY	0x10	/* F_bsy due to Fabric BSY */
136*82527734SSukumar Swaminathan #define	FBSY_NPORT_BSY	0x30	/* F_bsy due to N_port BSY */
137*82527734SSukumar Swaminathan 
138*82527734SSukumar Swaminathan 	/* statAction  PBSY action codes */
139*82527734SSukumar Swaminathan #define	PBSY_ACTION1	0x01	/* Sequence terminated - retry */
140*82527734SSukumar Swaminathan #define	PBSY_ACTION2	0x02	/* Sequence active - retry */
141*82527734SSukumar Swaminathan 
142*82527734SSukumar Swaminathan 	/* statAction  P/FRJT action codes */
143*82527734SSukumar Swaminathan #define	RJT_RETRYABLE	0x01	/* Retryable class of error */
144*82527734SSukumar Swaminathan #define	RJT_NO_RETRY	0x02	/* Non-Retryable class of error */
145*82527734SSukumar Swaminathan 
146*82527734SSukumar Swaminathan 	/* statRsn  LS_RJT reason codes defined in LS_RJT structure */
147*82527734SSukumar Swaminathan 
148*82527734SSukumar Swaminathan 	/* statRsn  P_BSY reason codes */
149*82527734SSukumar Swaminathan #define	PBSY_NPORT_BSY	0x01	/* Physical N_port BSY */
150*82527734SSukumar Swaminathan #define	PBSY_RESRCE_BSY	0x03	/* N_port resource BSY */
151*82527734SSukumar Swaminathan #define	PBSY_VU_BSY	0xFF	/* See VU field for rsn */
152*82527734SSukumar Swaminathan 
153*82527734SSukumar Swaminathan 	/* statRsn  P/F_RJT reason codes */
154*82527734SSukumar Swaminathan #define	RJT_BAD_D_ID		0x01	/* Invalid D_ID field */
155*82527734SSukumar Swaminathan #define	RJT_BAD_S_ID		0x02	/* Invalid S_ID field */
156*82527734SSukumar Swaminathan #define	RJT_UNAVAIL_TEMP	0x03	/* N_Port unavailable temp. */
157*82527734SSukumar Swaminathan #define	RJT_UNAVAIL_PERM	0x04	/* N_Port unavailable perm. */
158*82527734SSukumar Swaminathan #define	RJT_UNSUP_CLASS		0x05	/* Class not supported */
159*82527734SSukumar Swaminathan #define	RJT_DELIM_ERR		0x06	/* Delimiter usage error */
160*82527734SSukumar Swaminathan #define	RJT_UNSUP_TYPE		0x07	/* Type not supported */
161*82527734SSukumar Swaminathan #define	RJT_BAD_CONTROL		0x08	/* Invalid link conrtol */
162*82527734SSukumar Swaminathan #define	RJT_BAD_RCTL		0x09	/* R_CTL invalid */
163*82527734SSukumar Swaminathan #define	RJT_BAD_FCTL		0x0A	/* F_CTL invalid */
164*82527734SSukumar Swaminathan #define	RJT_BAD_OXID		0x0B	/* OX_ID invalid */
165*82527734SSukumar Swaminathan #define	RJT_BAD_RXID		0x0C	/* RX_ID invalid */
166*82527734SSukumar Swaminathan #define	RJT_BAD_SEQID		0x0D	/* SEQ_ID invalid */
167*82527734SSukumar Swaminathan #define	RJT_BAD_DFCTL		0x0E	/* DF_CTL invalid */
168*82527734SSukumar Swaminathan #define	RJT_BAD_SEQCNT		0x0F	/* SEQ_CNT invalid */
169*82527734SSukumar Swaminathan #define	RJT_BAD_PARM		0x10	/* Param. field invalid */
170*82527734SSukumar Swaminathan #define	RJT_XCHG_ERR		0x11	/* Exchange error */
171*82527734SSukumar Swaminathan #define	RJT_PROT_ERR		0x12	/* Protocol error */
172*82527734SSukumar Swaminathan #define	RJT_BAD_LENGTH		0x13	/* Invalid Length */
173*82527734SSukumar Swaminathan #define	RJT_UNEXPECTED_ACK	0x14	/* Unexpected ACK */
174*82527734SSukumar Swaminathan #define	RJT_LOGIN_REQUIRED	0x16	/* Login required */
175*82527734SSukumar Swaminathan #define	RJT_TOO_MANY_SEQ	0x17	/* Excessive sequences */
176*82527734SSukumar Swaminathan #define	RJT_XCHG_NOT_STRT	0x18	/* Exchange not started */
177*82527734SSukumar Swaminathan #define	RJT_UNSUP_SEC_HDR	0x19	/* Security hdr not supported */
178*82527734SSukumar Swaminathan #define	RJT_UNAVAIL_PATH	0x1A	/* Fabric Path not available */
179*82527734SSukumar Swaminathan #define	RJT_VENDOR_UNIQUE	0xFF	/* Vendor unique error */
180*82527734SSukumar Swaminathan 
181*82527734SSukumar Swaminathan 	/* statRsn  BA_RJT reason codes */
182*82527734SSukumar Swaminathan #define	BARJT_BAD_CMD_CODE	0x01	/* Invalid command code */
183*82527734SSukumar Swaminathan #define	BARJT_LOGICAL_ERR	0x03	/* Logical error */
184*82527734SSukumar Swaminathan #define	BARJT_LOGICAL_BSY	0x05	/* Logical busy */
185*82527734SSukumar Swaminathan #define	BARJT_PROTOCOL_ERR	0x07	/* Protocol error */
186*82527734SSukumar Swaminathan #define	BARJT_VU_ERR		0xFF	/* Vendor unique error */
187*82527734SSukumar Swaminathan 
188*82527734SSukumar Swaminathan 	/* LS_RJT reason explanation defined in LS_RJT structure */
189*82527734SSukumar Swaminathan 
190*82527734SSukumar Swaminathan 	/* BA_RJT reason explanation */
191*82527734SSukumar Swaminathan #define	BARJT_EXP_INVALID_ID	0x01	/* Invalid OX_ID/RX_ID */
192*82527734SSukumar Swaminathan #define	BARJT_EXP_ABORT_SEQ	0x05	/* Abort SEQ, no more info */
193*82527734SSukumar Swaminathan 
194*82527734SSukumar Swaminathan 	/* Local Reject errors */
195*82527734SSukumar Swaminathan #define	IOERR_SUCCESS			0x00
196*82527734SSukumar Swaminathan #define	IOERR_MISSING_CONTINUE		0x01
197*82527734SSukumar Swaminathan #define	IOERR_SEQUENCE_TIMEOUT		0x02
198*82527734SSukumar Swaminathan #define	IOERR_INTERNAL_ERROR		0x03
199*82527734SSukumar Swaminathan #define	IOERR_INVALID_RPI		0x04
200*82527734SSukumar Swaminathan #define	IOERR_NO_XRI			0x05
201*82527734SSukumar Swaminathan #define	IOERR_ILLEGAL_COMMAND		0x06
202*82527734SSukumar Swaminathan #define	IOERR_XCHG_DROPPED		0x07
203*82527734SSukumar Swaminathan #define	IOERR_ILLEGAL_FIELD		0x08
204*82527734SSukumar Swaminathan /* RESERVED 0x09 */
205*82527734SSukumar Swaminathan /* RESERVED 0x0A */
206*82527734SSukumar Swaminathan #define	IOERR_RCV_BUFFER_WAITING	0x0B
207*82527734SSukumar Swaminathan /* RESERVED 0x0C */
208*82527734SSukumar Swaminathan #define	IOERR_TX_DMA_FAILED		0x0D
209*82527734SSukumar Swaminathan #define	IOERR_RX_DMA_FAILED		0x0E
210*82527734SSukumar Swaminathan #define	IOERR_ILLEGAL_FRAME		0x0F
211*82527734SSukumar Swaminathan 
212*82527734SSukumar Swaminathan /* RESERVED 0x10 */
213*82527734SSukumar Swaminathan #define	IOERR_NO_RESOURCES		0x11
214*82527734SSukumar Swaminathan /* RESERVED 0x12 */
215*82527734SSukumar Swaminathan #define	IOERR_ILLEGAL_LENGTH		0x13
216*82527734SSukumar Swaminathan #define	IOERR_UNSUPPORTED_FEATURE	0x14
217*82527734SSukumar Swaminathan #define	IOERR_ABORT_IN_PROGRESS		0x15
218*82527734SSukumar Swaminathan #define	IOERR_ABORT_REQUESTED		0x16
219*82527734SSukumar Swaminathan #define	IOERR_RCV_BUFFER_TIMEOUT	0x17
220*82527734SSukumar Swaminathan #define	IOERR_LOOP_OPEN_FAILURE		0x18
221*82527734SSukumar Swaminathan #define	IOERR_RING_RESET		0x19
222*82527734SSukumar Swaminathan #define	IOERR_LINK_DOWN			0x1A
223*82527734SSukumar Swaminathan #define	IOERR_CORRUPTED_DATA		0x1B
224*82527734SSukumar Swaminathan #define	IOERR_CORRUPTED_RPI		0x1C
225*82527734SSukumar Swaminathan #define	IOERR_OUT_OF_ORDER_DATA		0x1D
226*82527734SSukumar Swaminathan #define	IOERR_OUT_OF_ORDER_ACK		0x1E
227*82527734SSukumar Swaminathan #define	IOERR_DUP_FRAME			0x1F
228*82527734SSukumar Swaminathan 
229*82527734SSukumar Swaminathan #define	IOERR_LINK_CONTROL_FRAME	0x20	/* ACK_N received */
230*82527734SSukumar Swaminathan #define	IOERR_BAD_HOST_ADDRESS		0x21
231*82527734SSukumar Swaminathan #define	IOERR_RCV_HDRBUF_WAITING	0x22
232*82527734SSukumar Swaminathan #define	IOERR_MISSING_HDR_BUFFER	0x23
233*82527734SSukumar Swaminathan #define	IOERR_MSEQ_CHAIN_CORRUPTED	0x24
234*82527734SSukumar Swaminathan #define	IOERR_ABORTMULT_REQUESTED	0x25
235*82527734SSukumar Swaminathan /* RESERVED 0x26 */
236*82527734SSukumar Swaminathan /* RESERVED 0x27 */
237*82527734SSukumar Swaminathan #define	IOERR_BUFFER_SHORTAGE		0x28
238*82527734SSukumar Swaminathan #define	IOERR_XRIBUF_WAITING		0x29
239*82527734SSukumar Swaminathan /* RESERVED 0x2A */
240*82527734SSukumar Swaminathan #define	IOERR_MISSING_HBQ_ENTRY		0x2B
241*82527734SSukumar Swaminathan #define	IOERR_ABORT_EXT_REQ		0x2C
242*82527734SSukumar Swaminathan #define	IOERR_CLOSE_EXT_REQ		0x2D
243*82527734SSukumar Swaminathan /* RESERVED 0x2E */
244*82527734SSukumar Swaminathan /* RESERVED 0x2F */
245*82527734SSukumar Swaminathan 
246*82527734SSukumar Swaminathan #define	IOERR_XRIBUF_MISSING		0x30
247*82527734SSukumar Swaminathan #define	IOERR_ASSI_RSP_SUPPRESSED	0x31
248*82527734SSukumar Swaminathan /* RESERVED 0x32 - 0x3F */
249*82527734SSukumar Swaminathan 
250*82527734SSukumar Swaminathan #define	IOERR_ROFFSET_INVAL		0x40
251*82527734SSukumar Swaminathan #define	IOERR_ROFFSET_MISSING		0x41
252*82527734SSukumar Swaminathan #define	IOERR_INSUF_BUFFER		0x42
253*82527734SSukumar Swaminathan #define	IOERR_MISSING_SI		0x43
254*82527734SSukumar Swaminathan #define	IOERR_MISSING_ES		0x44
255*82527734SSukumar Swaminathan #define	IOERR_INCOMP_XFER		0x45
256*82527734SSukumar Swaminathan /* RESERVED 0x46 - 0xFF */
257*82527734SSukumar Swaminathan 
258*82527734SSukumar Swaminathan 	/* Driver defined */
259*82527734SSukumar Swaminathan #define	IOERR_ABORT_TIMEOUT		0xF0
260*82527734SSukumar Swaminathan } PARM_ERR;
261*82527734SSukumar Swaminathan 
262*82527734SSukumar Swaminathan typedef union
263*82527734SSukumar Swaminathan {
264*82527734SSukumar Swaminathan 	struct
265*82527734SSukumar Swaminathan 	{
266*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
267*82527734SSukumar Swaminathan 		uint8_t		Rctl;	/* R_CTL field */
268*82527734SSukumar Swaminathan 		uint8_t		Type;	/* TYPE field */
269*82527734SSukumar Swaminathan 		uint8_t		Dfctl;	/* DF_CTL field */
270*82527734SSukumar Swaminathan 		uint8_t		Fctl;	/* Bits 0-7 of IOCB word 5 */
271*82527734SSukumar Swaminathan #endif
272*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
273*82527734SSukumar Swaminathan 		uint8_t		Fctl;	/* Bits 0-7 of IOCB word 5 */
274*82527734SSukumar Swaminathan 		uint8_t		Dfctl;	/* DF_CTL field */
275*82527734SSukumar Swaminathan 		uint8_t		Type;	/* TYPE field */
276*82527734SSukumar Swaminathan 		uint8_t		Rctl;	/* R_CTL field */
277*82527734SSukumar Swaminathan #endif
278*82527734SSukumar Swaminathan #define	FCP_RTYPE	0x08	/* FCP_TARGET_MODE Type - Rctl */
279*82527734SSukumar Swaminathan 
280*82527734SSukumar Swaminathan #define	BC		0x02	/* Broadcast Received  - Fctl */
281*82527734SSukumar Swaminathan #define	SI		0x04	/* Sequence Initiative */
282*82527734SSukumar Swaminathan #define	LA		0x08	/* Ignore Link Attention state */
283*82527734SSukumar Swaminathan #define	FSEQ		0x40	/* First Sequence */
284*82527734SSukumar Swaminathan #define	LSEQ		0x80	/* Last Sequence */
285*82527734SSukumar Swaminathan 	} hcsw;
286*82527734SSukumar Swaminathan 	uint32_t	reserved;
287*82527734SSukumar Swaminathan } WORD5;
288*82527734SSukumar Swaminathan 
289*82527734SSukumar Swaminathan 
290*82527734SSukumar Swaminathan /* IOCB Command template for a generic response */
291*82527734SSukumar Swaminathan typedef struct
292*82527734SSukumar Swaminathan {
293*82527734SSukumar Swaminathan 	uint32_t	reserved[4];
294*82527734SSukumar Swaminathan 	PARM_ERR	perr;
295*82527734SSukumar Swaminathan } GENERIC_RSP;
296*82527734SSukumar Swaminathan 
297*82527734SSukumar Swaminathan 
298*82527734SSukumar Swaminathan /* IOCB Command template for XMIT / XMIT_BCAST / RCV_SEQUENCE / XMIT_ELS */
299*82527734SSukumar Swaminathan typedef struct
300*82527734SSukumar Swaminathan {
301*82527734SSukumar Swaminathan 	ULP_BDE		xrsqbde[2];
302*82527734SSukumar Swaminathan 	uint32_t	xrsqRo;		/* Starting Relative Offset */
303*82527734SSukumar Swaminathan 	WORD5		w5;		/* Header control/status word */
304*82527734SSukumar Swaminathan } XR_SEQ_FIELDS;
305*82527734SSukumar Swaminathan 
306*82527734SSukumar Swaminathan /* IOCB Command template for ELS_REQUEST */
307*82527734SSukumar Swaminathan typedef struct
308*82527734SSukumar Swaminathan {
309*82527734SSukumar Swaminathan 	ULP_BDE		elsReq;
310*82527734SSukumar Swaminathan 	ULP_BDE		elsRsp;
311*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
312*82527734SSukumar Swaminathan 	uint32_t	word4Rsvd:7;
313*82527734SSukumar Swaminathan 	uint32_t	fl:1;
314*82527734SSukumar Swaminathan 	uint32_t	myID:24;
315*82527734SSukumar Swaminathan 
316*82527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
317*82527734SSukumar Swaminathan 	uint32_t	remoteID:24;
318*82527734SSukumar Swaminathan #endif
319*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
320*82527734SSukumar Swaminathan 	uint32_t	myID:24;
321*82527734SSukumar Swaminathan 	uint32_t	fl:1;
322*82527734SSukumar Swaminathan 	uint32_t	word4Rsvd:7;
323*82527734SSukumar Swaminathan 
324*82527734SSukumar Swaminathan 	uint32_t	remoteID:24;
325*82527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
326*82527734SSukumar Swaminathan #endif
327*82527734SSukumar Swaminathan } ELS_REQUEST;
328*82527734SSukumar Swaminathan 
329*82527734SSukumar Swaminathan /* IOCB Command template for RCV_ELS_REQ */
330*82527734SSukumar Swaminathan typedef struct
331*82527734SSukumar Swaminathan {
332*82527734SSukumar Swaminathan 	ULP_BDE		elsReq[2];
333*82527734SSukumar Swaminathan 	uint32_t	parmRo;
334*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
335*82527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
336*82527734SSukumar Swaminathan 	uint32_t	remoteID:24;
337*82527734SSukumar Swaminathan #endif
338*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
339*82527734SSukumar Swaminathan 	uint32_t	remoteID:24;
340*82527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
341*82527734SSukumar Swaminathan #endif
342*82527734SSukumar Swaminathan } RCV_ELS_REQ;
343*82527734SSukumar Swaminathan 
344*82527734SSukumar Swaminathan /* IOCB Command template for ABORT / CLOSE_XRI */
345*82527734SSukumar Swaminathan typedef struct
346*82527734SSukumar Swaminathan {
347*82527734SSukumar Swaminathan 	uint32_t	rsvd[3];
348*82527734SSukumar Swaminathan 	uint32_t	abortType;
349*82527734SSukumar Swaminathan #define	ABORT_TYPE_ABTX		0x00000000
350*82527734SSukumar Swaminathan #define	ABORT_TYPE_ABTS		0x00000001
351*82527734SSukumar Swaminathan 	uint32_t	parm;
352*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
353*82527734SSukumar Swaminathan 	uint16_t	abortContextTag;	/* ulpContext from command to */
354*82527734SSukumar Swaminathan 						/* abort/close */
355*82527734SSukumar Swaminathan 	uint16_t	abortIoTag;		/* ulpIoTag from command to */
356*82527734SSukumar Swaminathan 						/* abort/close */
357*82527734SSukumar Swaminathan #endif
358*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
359*82527734SSukumar Swaminathan 	uint16_t	abortIoTag;		/* ulpIoTag from command to */
360*82527734SSukumar Swaminathan 						/* abort/close */
361*82527734SSukumar Swaminathan 	uint16_t	abortContextTag;	/* ulpContext from command to */
362*82527734SSukumar Swaminathan 						/* abort/close */
363*82527734SSukumar Swaminathan #endif
364*82527734SSukumar Swaminathan } AC_XRI;
365*82527734SSukumar Swaminathan 
366*82527734SSukumar Swaminathan /* IOCB Command template for GET_RPI */
367*82527734SSukumar Swaminathan typedef struct
368*82527734SSukumar Swaminathan {
369*82527734SSukumar Swaminathan 	uint32_t	rsvd[4];
370*82527734SSukumar Swaminathan 	uint32_t	parmRo;
371*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
372*82527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
373*82527734SSukumar Swaminathan 	uint32_t	remoteID:24;
374*82527734SSukumar Swaminathan #endif
375*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
376*82527734SSukumar Swaminathan 	uint32_t	remoteID:24;
377*82527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
378*82527734SSukumar Swaminathan #endif
379*82527734SSukumar Swaminathan } GET_RPI;
380*82527734SSukumar Swaminathan 
381*82527734SSukumar Swaminathan /* IOCB Command template for all FCP Initiator commands */
382*82527734SSukumar Swaminathan typedef struct
383*82527734SSukumar Swaminathan {
384*82527734SSukumar Swaminathan 	ULP_BDE		fcpi_cmnd;	/* FCP_CMND payload descriptor */
385*82527734SSukumar Swaminathan 	ULP_BDE		fcpi_rsp;	/* Rcv buffer */
386*82527734SSukumar Swaminathan 	uint32_t	fcpi_parm;
387*82527734SSukumar Swaminathan 	uint32_t	fcpi_XRdy;	/* transfer ready for IWRITE */
388*82527734SSukumar Swaminathan } FCPI_FIELDS;
389*82527734SSukumar Swaminathan 
390*82527734SSukumar Swaminathan /* IOCB Command template for all FCP Target commands */
391*82527734SSukumar Swaminathan typedef struct
392*82527734SSukumar Swaminathan {
393*82527734SSukumar Swaminathan 	ULP_BDE		fcpt_Buffer[2];	/* FCP_CMND payload descriptor */
394*82527734SSukumar Swaminathan 	uint32_t	fcpt_Offset;
395*82527734SSukumar Swaminathan 	uint32_t	fcpt_Length;	/* transfer ready for IWRITE */
396*82527734SSukumar Swaminathan } FCPT_FIELDS;
397*82527734SSukumar Swaminathan 
398*82527734SSukumar Swaminathan /* SLI-2 IOCB structure definitions */
399*82527734SSukumar Swaminathan 
400*82527734SSukumar Swaminathan /* IOCB Command template for 64 bit XMIT / XMIT_BCAST / XMIT_ELS */
401*82527734SSukumar Swaminathan typedef struct
402*82527734SSukumar Swaminathan {
403*82527734SSukumar Swaminathan 	ULP_BDL		bdl;
404*82527734SSukumar Swaminathan 	uint32_t	xrsqRo;	/* Starting Relative Offset */
405*82527734SSukumar Swaminathan 	WORD5		w5;	/* Header control/status word */
406*82527734SSukumar Swaminathan } XMT_SEQ_FIELDS64;
407*82527734SSukumar Swaminathan 
408*82527734SSukumar Swaminathan 
409*82527734SSukumar Swaminathan /* IOCB Command template for 64 bit RCV_SEQUENCE64 */
410*82527734SSukumar Swaminathan typedef struct
411*82527734SSukumar Swaminathan {
412*82527734SSukumar Swaminathan 	ULP_BDE64	rcvBde;
413*82527734SSukumar Swaminathan 	uint32_t	rsvd1;
414*82527734SSukumar Swaminathan 	uint32_t	xrsqRo;	/* Starting Relative Offset */
415*82527734SSukumar Swaminathan 	WORD5		w5;	/* Header control/status word */
416*82527734SSukumar Swaminathan } RCV_SEQ_FIELDS64;
417*82527734SSukumar Swaminathan 
418*82527734SSukumar Swaminathan /* IOCB Command template for ELS_REQUEST64 */
419*82527734SSukumar Swaminathan typedef struct
420*82527734SSukumar Swaminathan {
421*82527734SSukumar Swaminathan 	ULP_BDL		bdl;
422*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
423*82527734SSukumar Swaminathan 	uint32_t	word4Rsvd:7;
424*82527734SSukumar Swaminathan 	uint32_t	fl:1;
425*82527734SSukumar Swaminathan 	uint32_t	myID:24;
426*82527734SSukumar Swaminathan 
427*82527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
428*82527734SSukumar Swaminathan 	uint32_t	remoteID:24;
429*82527734SSukumar Swaminathan #endif
430*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
431*82527734SSukumar Swaminathan 	uint32_t	myID:24;
432*82527734SSukumar Swaminathan 	uint32_t	fl:1;
433*82527734SSukumar Swaminathan 	uint32_t	word4Rsvd:7;
434*82527734SSukumar Swaminathan 
435*82527734SSukumar Swaminathan 	uint32_t	remoteID:24;
436*82527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
437*82527734SSukumar Swaminathan #endif
438*82527734SSukumar Swaminathan } ELS_REQUEST64;
439*82527734SSukumar Swaminathan 
440*82527734SSukumar Swaminathan 
441*82527734SSukumar Swaminathan /* IOCB Command template for ASYNC_STATUS */
442*82527734SSukumar Swaminathan typedef struct
443*82527734SSukumar Swaminathan {
444*82527734SSukumar Swaminathan 	ULP_BDL		resv;
445*82527734SSukumar Swaminathan 	uint32_t	parameter;
446*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
447*82527734SSukumar Swaminathan 	uint16_t	EventCode;
448*82527734SSukumar Swaminathan 	uint16_t	SubContext;
449*82527734SSukumar Swaminathan #endif
450*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
451*82527734SSukumar Swaminathan 	uint16_t	SubContext;
452*82527734SSukumar Swaminathan 	uint16_t	EventCode;
453*82527734SSukumar Swaminathan #endif
454*82527734SSukumar Swaminathan } ASYNC_STATUS;
455*82527734SSukumar Swaminathan 
456*82527734SSukumar Swaminathan 
457*82527734SSukumar Swaminathan /* IOCB Command template for QUE_RING_LIST64 */
458*82527734SSukumar Swaminathan typedef struct
459*82527734SSukumar Swaminathan {
460*82527734SSukumar Swaminathan 	ULP_BDL		bdl;
461*82527734SSukumar Swaminathan 	uint32_t	rsvd1;
462*82527734SSukumar Swaminathan 	uint32_t	rsvd2;
463*82527734SSukumar Swaminathan } QUE_RING_LIST64;
464*82527734SSukumar Swaminathan 
465*82527734SSukumar Swaminathan 
466*82527734SSukumar Swaminathan /* IOCB Command template for GEN_REQUEST64 */
467*82527734SSukumar Swaminathan typedef struct
468*82527734SSukumar Swaminathan {
469*82527734SSukumar Swaminathan 	ULP_BDL		bdl;
470*82527734SSukumar Swaminathan 	uint32_t	param;	/* Starting Relative Offset */
471*82527734SSukumar Swaminathan 	WORD5		w5;	/* Header control/status word */
472*82527734SSukumar Swaminathan } GEN_REQUEST64;
473*82527734SSukumar Swaminathan 
474*82527734SSukumar Swaminathan /* IOCB Command template for RCV_ELS_REQ64 */
475*82527734SSukumar Swaminathan typedef struct
476*82527734SSukumar Swaminathan {
477*82527734SSukumar Swaminathan 	ULP_BDE64	elsReq;
478*82527734SSukumar Swaminathan 	uint32_t	rsvd1;
479*82527734SSukumar Swaminathan 	uint32_t	parmRo;
480*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
481*82527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
482*82527734SSukumar Swaminathan 	uint32_t	remoteID:24;
483*82527734SSukumar Swaminathan #endif
484*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
485*82527734SSukumar Swaminathan 	uint32_t	remoteID:24;
486*82527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
487*82527734SSukumar Swaminathan #endif
488*82527734SSukumar Swaminathan } RCV_ELS_REQ64;
489*82527734SSukumar Swaminathan 
490*82527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Initiator commands */
491*82527734SSukumar Swaminathan typedef struct
492*82527734SSukumar Swaminathan {
493*82527734SSukumar Swaminathan 	ULP_BDL		bdl;
494*82527734SSukumar Swaminathan 	uint32_t	fcpi_parm;
495*82527734SSukumar Swaminathan 	uint32_t	fcpi_XRdy;	/* transfer ready for IWRITE */
496*82527734SSukumar Swaminathan } FCPI_FIELDS64;
497*82527734SSukumar Swaminathan 
498*82527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Target commands */
499*82527734SSukumar Swaminathan typedef struct
500*82527734SSukumar Swaminathan {
501*82527734SSukumar Swaminathan 	ULP_BDL		bdl;
502*82527734SSukumar Swaminathan 	uint32_t	fcpt_Offset;
503*82527734SSukumar Swaminathan 	uint32_t	fcpt_Length;	/* transfer ready for IWRITE */
504*82527734SSukumar Swaminathan } FCPT_FIELDS64;
505*82527734SSukumar Swaminathan 
506*82527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Target commands */
507*82527734SSukumar Swaminathan typedef struct
508*82527734SSukumar Swaminathan {
509*82527734SSukumar Swaminathan 	uint32_t	rsp_length;
510*82527734SSukumar Swaminathan 	uint32_t	rsvd1;
511*82527734SSukumar Swaminathan 	uint32_t	rsvd2;
512*82527734SSukumar Swaminathan 	uint32_t	iotag32;
513*82527734SSukumar Swaminathan 	uint32_t	status;
514*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
515*82527734SSukumar Swaminathan 	uint32_t	rsvd:30;
516*82527734SSukumar Swaminathan 	uint32_t	lnk:1;
517*82527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
518*82527734SSukumar Swaminathan 
519*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
520*82527734SSukumar Swaminathan 	uint32_t	lnk:1;
521*82527734SSukumar Swaminathan 	uint32_t	rsvd:30;
522*82527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
523*82527734SSukumar Swaminathan } AUTO_TRSP;
524*82527734SSukumar Swaminathan 
525*82527734SSukumar Swaminathan 
526*82527734SSukumar Swaminathan typedef struct
527*82527734SSukumar Swaminathan {
528*82527734SSukumar Swaminathan 	uint32_t	io_tag64_low;	/* Word 8 */
529*82527734SSukumar Swaminathan 	uint32_t	io_tag64_high;	/* Word 9 */
530*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
531*82527734SSukumar Swaminathan 	uint32_t	cs_ctl:8;	/* Word 10, bit 31:24 */
532*82527734SSukumar Swaminathan 	uint32_t	cs_en:1;	/* Word 10, bit 23 */
533*82527734SSukumar Swaminathan 	uint32_t	rsv:15;		/* Word 10, bit 22:8 */
534*82527734SSukumar Swaminathan 	uint32_t	ebde_count:8;	/* Word 10, bit 7:0 */
535*82527734SSukumar Swaminathan #endif
536*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
537*82527734SSukumar Swaminathan 	uint32_t	ebde_count:8;	/* Word 10, bit 7:0 */
538*82527734SSukumar Swaminathan 	uint32_t	rsv:15;		/* Word 10, bit 22:8 */
539*82527734SSukumar Swaminathan 	uint32_t	cs_en:1;	/* Word 10, bit 23 */
540*82527734SSukumar Swaminathan 	uint32_t	cs_ctl:8;	/* Word 10, bit 31:24 */
541*82527734SSukumar Swaminathan #endif
542*82527734SSukumar Swaminathan 	uint32_t	rsplen;		/* Word 11 */
543*82527734SSukumar Swaminathan 	ULP_BDE64	ebde1;		/* Word 12:14 */
544*82527734SSukumar Swaminathan 	ULP_BDE64	ebde2;		/* Word 15:17 */
545*82527734SSukumar Swaminathan 	ULP_BDE64	ebde3;		/* Word 18:20 */
546*82527734SSukumar Swaminathan 	ULP_BDE64	ebde4;		/* Word 21:23 */
547*82527734SSukumar Swaminathan 	ULP_BDE64	ebde5;		/* Word 24:26 */
548*82527734SSukumar Swaminathan 	ULP_BDE64	ebde6;		/* Word 27:29 */
549*82527734SSukumar Swaminathan } GENERIC_EXT_IOCB;
550*82527734SSukumar Swaminathan 
551*82527734SSukumar Swaminathan /*
552*82527734SSukumar Swaminathan  * IOCB Command Extension template for
553*82527734SSukumar Swaminathan  * CMD_RCV_ELS64_CX (0xB7) or CMD_RCV_SEQ64_CX (0xB5)
554*82527734SSukumar Swaminathan  */
555*82527734SSukumar Swaminathan 
556*82527734SSukumar Swaminathan typedef struct
557*82527734SSukumar Swaminathan {
558*82527734SSukumar Swaminathan 	uint32_t	hdr3;		/* word 8 */
559*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
560*82527734SSukumar Swaminathan 	uint16_t	vpi;		/* word 9 */
561*82527734SSukumar Swaminathan 	uint16_t	buddy_xri;
562*82527734SSukumar Swaminathan 
563*82527734SSukumar Swaminathan 	uint32_t	ccp:8;		/* word 10 */
564*82527734SSukumar Swaminathan 	uint32_t	ccpe:1;
565*82527734SSukumar Swaminathan 	uint32_t	rsvd:23;
566*82527734SSukumar Swaminathan #endif
567*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
568*82527734SSukumar Swaminathan 	uint16_t	buddy_xri;	/* word 9 */
569*82527734SSukumar Swaminathan 	uint16_t	vpi;
570*82527734SSukumar Swaminathan 
571*82527734SSukumar Swaminathan 	uint32_t	rsvd:23;	/* word 10 */
572*82527734SSukumar Swaminathan 	uint32_t	ccpe:1;
573*82527734SSukumar Swaminathan 	uint32_t	ccp:8;
574*82527734SSukumar Swaminathan #endif
575*82527734SSukumar Swaminathan 	uint32_t	seq_len;	/* received sequence length */
576*82527734SSukumar Swaminathan 	ULP_BDL		bde2;		/* total 4 words */
577*82527734SSukumar Swaminathan } RCV_SEQ_ELS_64_SLI3_EXT;
578*82527734SSukumar Swaminathan 
579*82527734SSukumar Swaminathan 
580*82527734SSukumar Swaminathan 
581*82527734SSukumar Swaminathan typedef volatile struct emlxs_iocb
582*82527734SSukumar Swaminathan { /* IOCB structure */
583*82527734SSukumar Swaminathan 	union
584*82527734SSukumar Swaminathan 	{
585*82527734SSukumar Swaminathan 		GENERIC_RSP		grsp;		/* Generic response */
586*82527734SSukumar Swaminathan 		XR_SEQ_FIELDS		xrseq;		/* XMIT/BCAST/RCV_SEQ */
587*82527734SSukumar Swaminathan 		ULP_BDE			cont[3];	/* up to 3 cont BDEs */
588*82527734SSukumar Swaminathan 		ELS_REQUEST		elsreq;		/* ELS_REQ template */
589*82527734SSukumar Swaminathan 		RCV_ELS_REQ		rcvels;		/* RCV_ELS_REQ */
590*82527734SSukumar Swaminathan 							/* template */
591*82527734SSukumar Swaminathan 		AC_XRI			acxri;		/* ABORT/CLOSE_XRI */
592*82527734SSukumar Swaminathan 							/* template */
593*82527734SSukumar Swaminathan 		GET_RPI			getrpi;		/* GET_RPI template */
594*82527734SSukumar Swaminathan 		FCPI_FIELDS		fcpi;		/* FCP Initiator */
595*82527734SSukumar Swaminathan 							/* template */
596*82527734SSukumar Swaminathan 		FCPT_FIELDS		fcpt;		/* FCP target */
597*82527734SSukumar Swaminathan 							/* template */
598*82527734SSukumar Swaminathan 
599*82527734SSukumar Swaminathan 		/* SLI-2 structures */
600*82527734SSukumar Swaminathan 
601*82527734SSukumar Swaminathan 		ULP_BDE64		cont64[2];	/* up to 2 64 bit */
602*82527734SSukumar Swaminathan 							/* cont BDE_64s */
603*82527734SSukumar Swaminathan 		ELS_REQUEST64		elsreq64;	/* ELS_REQ64 template */
604*82527734SSukumar Swaminathan 		QUE_RING_LIST64		qringlist64;	/* QUE RING LIST64 */
605*82527734SSukumar Swaminathan 							/* template */
606*82527734SSukumar Swaminathan 		GEN_REQUEST64		genreq64;	/* GEN_REQUEST64 */
607*82527734SSukumar Swaminathan 							/* template */
608*82527734SSukumar Swaminathan 		RCV_ELS_REQ64		rcvels64;	/* RCV_ELS_REQ */
609*82527734SSukumar Swaminathan 							/* template */
610*82527734SSukumar Swaminathan 		XMT_SEQ_FIELDS64	xseq64;		/* XMIT / BCAST cmd */
611*82527734SSukumar Swaminathan 		FCPI_FIELDS64		fcpi64;		/* FCP 64 bit */
612*82527734SSukumar Swaminathan 							/* Initiator template */
613*82527734SSukumar Swaminathan 		FCPT_FIELDS64		fcpt64;		/* FCP 64 bit target */
614*82527734SSukumar Swaminathan 							/* template */
615*82527734SSukumar Swaminathan 		AUTO_TRSP		atrsp;		/* FCP 64 bit target */
616*82527734SSukumar Swaminathan 							/* template */
617*82527734SSukumar Swaminathan 
618*82527734SSukumar Swaminathan 		RCV_SEQ_FIELDS64	rcvseq64;
619*82527734SSukumar Swaminathan 		ASYNC_STATUS		astat;
620*82527734SSukumar Swaminathan 
621*82527734SSukumar Swaminathan 		uint32_t		ulpWord[6];	/* generic 6 'words' */
622*82527734SSukumar Swaminathan 	} un;
623*82527734SSukumar Swaminathan 	union
624*82527734SSukumar Swaminathan 	{
625*82527734SSukumar Swaminathan 		struct
626*82527734SSukumar Swaminathan 		{
627*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
628*82527734SSukumar Swaminathan 			uint16_t	ulpContext;	/* High order bits */
629*82527734SSukumar Swaminathan 							/* word6 */
630*82527734SSukumar Swaminathan 			uint16_t	ulpIoTag;	/* Low order bits */
631*82527734SSukumar Swaminathan 							/* word6 */
632*82527734SSukumar Swaminathan #endif
633*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
634*82527734SSukumar Swaminathan 			uint16_t	ulpIoTag;	/* Low order bits */
635*82527734SSukumar Swaminathan 							/* word6 */
636*82527734SSukumar Swaminathan 			uint16_t	ulpContext;	/* High order bits */
637*82527734SSukumar Swaminathan 							/* word6 */
638*82527734SSukumar Swaminathan #endif
639*82527734SSukumar Swaminathan 		} t1;
640*82527734SSukumar Swaminathan 		struct
641*82527734SSukumar Swaminathan 		{
642*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
643*82527734SSukumar Swaminathan 			uint16_t	ulpContext;	/* High order bits */
644*82527734SSukumar Swaminathan 							/* word6 */
645*82527734SSukumar Swaminathan 			uint16_t	ulpIoTag1:2;	/* Low order bits */
646*82527734SSukumar Swaminathan 							/* word6 */
647*82527734SSukumar Swaminathan 			uint16_t	ulpIoTag0:14;	/* Low order bits */
648*82527734SSukumar Swaminathan 							/* word6 */
649*82527734SSukumar Swaminathan #endif
650*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
651*82527734SSukumar Swaminathan 			uint16_t	ulpIoTag0:14;	/* Low order bits */
652*82527734SSukumar Swaminathan 							/* word6 */
653*82527734SSukumar Swaminathan 			uint16_t	ulpIoTag1:2;	/* Low order bits */
654*82527734SSukumar Swaminathan 							/* word6 */
655*82527734SSukumar Swaminathan 			uint16_t	ulpContext;	/* High order bits */
656*82527734SSukumar Swaminathan 							/* word6 */
657*82527734SSukumar Swaminathan #endif
658*82527734SSukumar Swaminathan 		} t2;
659*82527734SSukumar Swaminathan 
660*82527734SSukumar Swaminathan 		uint32_t	ulpWord;
661*82527734SSukumar Swaminathan 	} un1;
662*82527734SSukumar Swaminathan #define	ULPCONTEXT	un1.t1.ulpContext
663*82527734SSukumar Swaminathan #define	ULPIOTAG	un1.t1.ulpIoTag
664*82527734SSukumar Swaminathan #define	ULPIOTAG0	un1.t2.ulpIoTag0
665*82527734SSukumar Swaminathan #define	ULPDELAYXMIT	un1.t2.ulpIoTag1
666*82527734SSukumar Swaminathan 
667*82527734SSukumar Swaminathan #define	IOCB_DELAYXMIT_MSK 0x3000
668*82527734SSukumar Swaminathan 
669*82527734SSukumar Swaminathan 
670*82527734SSukumar Swaminathan 	union
671*82527734SSukumar Swaminathan 	{
672*82527734SSukumar Swaminathan 		struct
673*82527734SSukumar Swaminathan 		{
674*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
675*82527734SSukumar Swaminathan 			uint32_t	ulpRsvdByte:8;
676*82527734SSukumar Swaminathan 			uint32_t	ulpXS:1;
677*82527734SSukumar Swaminathan 			uint32_t	ulpFCP2Rcvy:1;
678*82527734SSukumar Swaminathan 			uint32_t	ulpPU:2;
679*82527734SSukumar Swaminathan 			uint32_t	ulpIr:1;
680*82527734SSukumar Swaminathan 			uint32_t	ulpClass:3;
681*82527734SSukumar Swaminathan 			uint32_t	ulpCommand:8;
682*82527734SSukumar Swaminathan 			uint32_t	ulpStatus:4;
683*82527734SSukumar Swaminathan 			uint32_t	ulpBdeCount:2;
684*82527734SSukumar Swaminathan 			uint32_t	ulpLe:1;
685*82527734SSukumar Swaminathan 			uint32_t	ulpOwner:1;	/* Low order bit */
686*82527734SSukumar Swaminathan 							/* word 7 */
687*82527734SSukumar Swaminathan #endif
688*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
689*82527734SSukumar Swaminathan 			uint32_t	ulpOwner:1;	/* Low order bit */
690*82527734SSukumar Swaminathan 							/* word 7 */
691*82527734SSukumar Swaminathan 			uint32_t	ulpLe:1;
692*82527734SSukumar Swaminathan 			uint32_t	ulpBdeCount:2;
693*82527734SSukumar Swaminathan 			uint32_t	ulpStatus:4;
694*82527734SSukumar Swaminathan 			uint32_t	ulpCommand:8;
695*82527734SSukumar Swaminathan 			uint32_t	ulpClass:3;
696*82527734SSukumar Swaminathan 			uint32_t	ulpIr:1;
697*82527734SSukumar Swaminathan 			uint32_t	ulpPU:2;
698*82527734SSukumar Swaminathan 			uint32_t	ulpFCP2Rcvy:1;
699*82527734SSukumar Swaminathan 			uint32_t	ulpXS:1;
700*82527734SSukumar Swaminathan 			uint32_t	ulpRsvdByte:8;
701*82527734SSukumar Swaminathan #endif
702*82527734SSukumar Swaminathan 		} t1;
703*82527734SSukumar Swaminathan 
704*82527734SSukumar Swaminathan 		struct
705*82527734SSukumar Swaminathan 		{
706*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
707*82527734SSukumar Swaminathan 			uint32_t	ulpRsvdByte:8;
708*82527734SSukumar Swaminathan 			uint32_t	ulpCT:2;
709*82527734SSukumar Swaminathan 			uint32_t	ulpPU:2;
710*82527734SSukumar Swaminathan 			uint32_t	ulpIr:1;
711*82527734SSukumar Swaminathan 			uint32_t	ulpClass:3;
712*82527734SSukumar Swaminathan 			uint32_t	ulpCommand:8;
713*82527734SSukumar Swaminathan 			uint32_t	ulpStatus:4;
714*82527734SSukumar Swaminathan 			uint32_t	ulpBdeCount:2;
715*82527734SSukumar Swaminathan 			uint32_t	ulpLe:1;
716*82527734SSukumar Swaminathan 			uint32_t	ulpOwner:1;	/* Low order bit */
717*82527734SSukumar Swaminathan 							/* word 7 */
718*82527734SSukumar Swaminathan #endif
719*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
720*82527734SSukumar Swaminathan 			uint32_t	ulpOwner:1;	/* Low order bit */
721*82527734SSukumar Swaminathan 							/* word 7 */
722*82527734SSukumar Swaminathan 			uint32_t	ulpLe:1;
723*82527734SSukumar Swaminathan 			uint32_t	ulpBdeCount:2;
724*82527734SSukumar Swaminathan 			uint32_t	ulpStatus:4;
725*82527734SSukumar Swaminathan 			uint32_t	ulpCommand:8;
726*82527734SSukumar Swaminathan 			uint32_t	ulpClass:3;
727*82527734SSukumar Swaminathan 			uint32_t	ulpIr:1;
728*82527734SSukumar Swaminathan 			uint32_t	ulpPU:2;
729*82527734SSukumar Swaminathan 			uint32_t	ulpCT:2;
730*82527734SSukumar Swaminathan 			uint32_t	ulpRsvdByte:8;
731*82527734SSukumar Swaminathan #endif
732*82527734SSukumar Swaminathan 		} t2;
733*82527734SSukumar Swaminathan 
734*82527734SSukumar Swaminathan 		uint32_t	ulpWord;
735*82527734SSukumar Swaminathan 	} un2;
736*82527734SSukumar Swaminathan 
737*82527734SSukumar Swaminathan #define	ULPCT		un2.t2.ulpCT
738*82527734SSukumar Swaminathan #define	ULPRSVDBYTE	un2.t1.ulpRsvdByte
739*82527734SSukumar Swaminathan #define	ULPXS		un2.t1.ulpXS
740*82527734SSukumar Swaminathan #define	ULPFCP2RCVY	un2.t1.ulpFCP2Rcvy
741*82527734SSukumar Swaminathan #define	ULPPU		un2.t1.ulpPU
742*82527734SSukumar Swaminathan #define	ULPIR		un2.t1.ulpIr
743*82527734SSukumar Swaminathan #define	ULPCLASS	un2.t1.ulpClass
744*82527734SSukumar Swaminathan #define	ULPCOMMAND	un2.t1.ulpCommand
745*82527734SSukumar Swaminathan #define	ULPSTATUS	un2.t1.ulpStatus
746*82527734SSukumar Swaminathan #define	ULPBDECOUNT	un2.t1.ulpBdeCount
747*82527734SSukumar Swaminathan #define	ULPLE		un2.t1.ulpLe
748*82527734SSukumar Swaminathan #define	ULPOWNER	un2.t1.ulpOwner
749*82527734SSukumar Swaminathan 	/* 32 bytes at this point */
750*82527734SSukumar Swaminathan 
751*82527734SSukumar Swaminathan /* SLI4 */
752*82527734SSukumar Swaminathan #define	RXFCHDR		un.ulpWord
753*82527734SSukumar Swaminathan #define	RXSEQCNT	un1.ulpWord
754*82527734SSukumar Swaminathan #define	RXSEQLEN	un2.ulpWord
755*82527734SSukumar Swaminathan 
756*82527734SSukumar Swaminathan 	union
757*82527734SSukumar Swaminathan 	{
758*82527734SSukumar Swaminathan 		GENERIC_EXT_IOCB	ext_iocb;
759*82527734SSukumar Swaminathan 		RCV_SEQ_ELS_64_SLI3_EXT	ext_rcv;
760*82527734SSukumar Swaminathan 		uint32_t		sli3Words[24];	/* 96 extra bytes */
761*82527734SSukumar Swaminathan 							/* for SLI-3 */
762*82527734SSukumar Swaminathan 	} unsli3;
763*82527734SSukumar Swaminathan 	/* 128 bytes at this point */
764*82527734SSukumar Swaminathan 
765*82527734SSukumar Swaminathan #define	IOCB_FCP		1	/* IOCB is used for */
766*82527734SSukumar Swaminathan 					/* FCP ELS cmds - ulpRsvByte */
767*82527734SSukumar Swaminathan #define	IOCB_IP			2	/* IOCB is used for IP ELS cmds */
768*82527734SSukumar Swaminathan #define	PARM_UNUSED		0	/* PU field (Word 4) not used */
769*82527734SSukumar Swaminathan #define	PARM_REL_OFF		1	/* PU field (Word 4) = R. O. */
770*82527734SSukumar Swaminathan #define	PARM_READ_CHECK		2	/* PU field (Word 4) = Data Xfer Len */
771*82527734SSukumar Swaminathan #define	CLASS1			0	/* Class 1 */
772*82527734SSukumar Swaminathan #define	CLASS2			1	/* Class 2 */
773*82527734SSukumar Swaminathan #define	CLASS3			2	/* Class 3 */
774*82527734SSukumar Swaminathan #define	CLASS_FCP_INTERMIX	7	/* FCP Data->Cls 1, all else->Cls 2 */
775*82527734SSukumar Swaminathan 
776*82527734SSukumar Swaminathan #define	IOSTAT_SUCCESS			0x0	/* ulpStatus */
777*82527734SSukumar Swaminathan #define	IOSTAT_FCP_RSP_ERROR		0x1
778*82527734SSukumar Swaminathan #define	IOSTAT_REMOTE_STOP		0x2
779*82527734SSukumar Swaminathan #define	IOSTAT_LOCAL_REJECT		0x3
780*82527734SSukumar Swaminathan #define	IOSTAT_NPORT_RJT		0x4
781*82527734SSukumar Swaminathan #define	IOSTAT_FABRIC_RJT		0x5
782*82527734SSukumar Swaminathan #define	IOSTAT_NPORT_BSY		0x6
783*82527734SSukumar Swaminathan #define	IOSTAT_FABRIC_BSY		0x7
784*82527734SSukumar Swaminathan #define	IOSTAT_INTERMED_RSP		0x8
785*82527734SSukumar Swaminathan #define	IOSTAT_LS_RJT			0x9
786*82527734SSukumar Swaminathan #define	IOSTAT_RESERVED_A		0xA
787*82527734SSukumar Swaminathan #define	IOSTAT_CMD_REJECT		0xB
788*82527734SSukumar Swaminathan #define	IOSTAT_FCP_TGT_LENCHK		0xC
789*82527734SSukumar Swaminathan #define	IOSTAT_RESERVED_D		0xD
790*82527734SSukumar Swaminathan #define	IOSTAT_RESERVED_E		0xE
791*82527734SSukumar Swaminathan #define	IOSTAT_NEED_BUFF_ENTRY		0xF
792*82527734SSukumar Swaminathan 
793*82527734SSukumar Swaminathan /* Special error codes */
794*82527734SSukumar Swaminathan #define	IOSTAT_DATA_OVERRUN		0x10	/* Added for resid handling */
795*82527734SSukumar Swaminathan #define	IOSTAT_DATA_UNDERRUN		0x11	/* Added for resid handling */
796*82527734SSukumar Swaminathan } emlxs_iocb_t;
797*82527734SSukumar Swaminathan typedef emlxs_iocb_t IOCB;
798*82527734SSukumar Swaminathan 
799*82527734SSukumar Swaminathan 
800*82527734SSukumar Swaminathan typedef struct emlxs_iocbq
801*82527734SSukumar Swaminathan {
802*82527734SSukumar Swaminathan 	emlxs_iocb_t		iocb;
803*82527734SSukumar Swaminathan 	emlxs_wqe_t		wqe; /* SLI4 */
804*82527734SSukumar Swaminathan 
805*82527734SSukumar Swaminathan 	struct emlxs_iocbq	*next;
806*82527734SSukumar Swaminathan 
807*82527734SSukumar Swaminathan 	uint8_t			*bp;	/* ptr to data buffer structure */
808*82527734SSukumar Swaminathan 	void			*port;	/* Board info pointer */
809*82527734SSukumar Swaminathan 	void			*channel; /* IO Channel pointer */
810*82527734SSukumar Swaminathan 	void			*node;	/* Node pointer */
811*82527734SSukumar Swaminathan 	void			*sbp;	/* Pkt pointer */
812*82527734SSukumar Swaminathan 	uint32_t		flag;
813*82527734SSukumar Swaminathan 
814*82527734SSukumar Swaminathan #define	IOCB_POOL_ALLOCATED	0x00000001
815*82527734SSukumar Swaminathan #define	IOCB_PRIORITY		0x00000002
816*82527734SSukumar Swaminathan #define	IOCB_SPECIAL		0x00000004
817*82527734SSukumar Swaminathan #define	IOCB_FCP_CMD		0x00000008
818*82527734SSukumar Swaminathan #define	IOCB_FCT_DATA		0x00000020	/* tgt-mode */
819*82527734SSukumar Swaminathan 
820*82527734SSukumar Swaminathan } emlxs_iocbq_t;
821*82527734SSukumar Swaminathan typedef emlxs_iocbq_t IOCBQ;
822*82527734SSukumar Swaminathan 
823*82527734SSukumar Swaminathan 
824*82527734SSukumar Swaminathan #ifdef	__cplusplus
825*82527734SSukumar Swaminathan }
826*82527734SSukumar Swaminathan #endif
827*82527734SSukumar Swaminathan 
828*82527734SSukumar Swaminathan #endif	/* _EMLXS_IOCB_H */
829