182527734SSukumar Swaminathan /*
282527734SSukumar Swaminathan  * CDDL HEADER START
382527734SSukumar Swaminathan  *
482527734SSukumar Swaminathan  * The contents of this file are subject to the terms of the
582527734SSukumar Swaminathan  * Common Development and Distribution License (the "License").
682527734SSukumar Swaminathan  * You may not use this file except in compliance with the License.
782527734SSukumar Swaminathan  *
8*8f23e9faSHans Rosenfeld  * You can obtain a copy of the license at
9*8f23e9faSHans Rosenfeld  * http://www.opensource.org/licenses/cddl1.txt.
1082527734SSukumar Swaminathan  * See the License for the specific language governing permissions
1182527734SSukumar Swaminathan  * and limitations under the License.
1282527734SSukumar Swaminathan  *
1382527734SSukumar Swaminathan  * When distributing Covered Code, include this CDDL HEADER in each
1482527734SSukumar Swaminathan  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1582527734SSukumar Swaminathan  * If applicable, add the following below this CDDL HEADER, with the
1682527734SSukumar Swaminathan  * fields enclosed by brackets "[]" replaced with your own identifying
1782527734SSukumar Swaminathan  * information: Portions Copyright [yyyy] [name of copyright owner]
1882527734SSukumar Swaminathan  *
1982527734SSukumar Swaminathan  * CDDL HEADER END
2082527734SSukumar Swaminathan  */
2182527734SSukumar Swaminathan 
2282527734SSukumar Swaminathan /*
23*8f23e9faSHans Rosenfeld  * Copyright (c) 2004-2011 Emulex. All rights reserved.
2482527734SSukumar Swaminathan  * Use is subject to license terms.
2582527734SSukumar Swaminathan  */
2682527734SSukumar Swaminathan 
2782527734SSukumar Swaminathan #ifndef _EMLXS_IOCB_H
2882527734SSukumar Swaminathan #define	_EMLXS_IOCB_H
2982527734SSukumar Swaminathan 
3082527734SSukumar Swaminathan #ifdef	__cplusplus
3182527734SSukumar Swaminathan extern "C" {
3282527734SSukumar Swaminathan #endif
3382527734SSukumar Swaminathan 
3482527734SSukumar Swaminathan /* ==== IOCB Commands ==== */
3582527734SSukumar Swaminathan 
3682527734SSukumar Swaminathan #define	CMD_RCV_SEQUENCE_CX	0x01
3782527734SSukumar Swaminathan #define	CMD_XMIT_SEQUENCE_CR	0x02
3882527734SSukumar Swaminathan #define	CMD_XMIT_SEQUENCE_CX	0x03
3982527734SSukumar Swaminathan #define	CMD_XMIT_BCAST_CN	0x04
4082527734SSukumar Swaminathan #define	CMD_XMIT_BCAST_CX	0x05
4182527734SSukumar Swaminathan #define	CMD_QUE_RING_BUF_CN	0x06
4282527734SSukumar Swaminathan #define	CMD_QUE_XRI_BUF_CX	0x07
4382527734SSukumar Swaminathan #define	CMD_IOCB_CONTINUE_CN	0x08
4482527734SSukumar Swaminathan #define	CMD_RET_XRI_BUF_CX	0x09
4582527734SSukumar Swaminathan #define	CMD_ELS_REQUEST_CR	0x0A
4682527734SSukumar Swaminathan #define	CMD_ELS_REQUEST_CX	0x0B
4782527734SSukumar Swaminathan #define	CMD_RCV_ELS_REQ_CX	0x0D
4882527734SSukumar Swaminathan #define	CMD_ABORT_XRI_CN	0x0E
4982527734SSukumar Swaminathan #define	CMD_ABORT_XRI_CX	0x0F
5082527734SSukumar Swaminathan #define	CMD_CLOSE_XRI_CN	0x10
5182527734SSukumar Swaminathan #define	CMD_CLOSE_XRI_CX	0x11
5282527734SSukumar Swaminathan #define	CMD_CREATE_XRI_CR	0x12
5382527734SSukumar Swaminathan #define	CMD_CREATE_XRI_CX	0x13
5482527734SSukumar Swaminathan #define	CMD_GET_RPI_CN		0x14
5582527734SSukumar Swaminathan #define	CMD_XMIT_ELS_RSP_CX	0x15
5682527734SSukumar Swaminathan #define	CMD_GET_RPI_CR		0x16
5782527734SSukumar Swaminathan #define	CMD_XRI_ABORTED_CX	0x17
5882527734SSukumar Swaminathan #define	CMD_FCP_IWRITE_CR	0x18
5982527734SSukumar Swaminathan #define	CMD_FCP_IWRITE_CX	0x19
6082527734SSukumar Swaminathan #define	CMD_FCP_IREAD_CR	0x1A
6182527734SSukumar Swaminathan #define	CMD_FCP_IREAD_CX	0x1B
6282527734SSukumar Swaminathan #define	CMD_FCP_ICMND_CR	0x1C
6382527734SSukumar Swaminathan #define	CMD_FCP_ICMND_CX	0x1D
6482527734SSukumar Swaminathan #define	CMD_FCP_TSEND_CX	0x1F	/* FCP_TARGET_MODE */
6582527734SSukumar Swaminathan #define	CMD_ADAPTER_MSG		0x20
6682527734SSukumar Swaminathan #define	CMD_FCP_TRECEIVE_CX	0x21	/* FCP_TARGET_MODE */
6782527734SSukumar Swaminathan #define	CMD_ADAPTER_DUMP	0x22
6882527734SSukumar Swaminathan #define	CMD_FCP_TRSP_CX		0x23	/* FCP_TARGET_MODE */
6982527734SSukumar Swaminathan #define	CMD_FCP_AUTO_TRSP_CX	0x29	/* FCP_TARGET_MODE */
7082527734SSukumar Swaminathan 
7182527734SSukumar Swaminathan /* LP3000 gasket IOCB Command Set */
7282527734SSukumar Swaminathan 
7382527734SSukumar Swaminathan #define	CMD_BPL_IWRITE_CR	0x48
7482527734SSukumar Swaminathan #define	CMD_BPL_IWRITE_CX	0x49
7582527734SSukumar Swaminathan #define	CMD_BPL_IREAD_CR	0x4A
7682527734SSukumar Swaminathan #define	CMD_BPL_IREAD_CX	0x4B
7782527734SSukumar Swaminathan #define	CMD_BPL_ICMND_CR	0x4C
7882527734SSukumar Swaminathan #define	CMD_BPL_ICMND_CX	0x4D
7982527734SSukumar Swaminathan 
8082527734SSukumar Swaminathan #define	CMD_ASYNC_STATUS	0x7C
8182527734SSukumar Swaminathan 
8282527734SSukumar Swaminathan /* SLI_2 IOCB Command Set */
8382527734SSukumar Swaminathan #define	CMD_RCV_SEQUENCE64_CX	0x81
8482527734SSukumar Swaminathan #define	CMD_XMIT_SEQUENCE64_CR	0x82
8582527734SSukumar Swaminathan #define	CMD_XMIT_SEQUENCE64_CX	0x83
8682527734SSukumar Swaminathan #define	CMD_XMIT_BCAST64_CN	0x84
8782527734SSukumar Swaminathan #define	CMD_XMIT_BCAST64_CX	0x85
8882527734SSukumar Swaminathan #define	CMD_QUE_RING_BUF64_CN	0x86
8982527734SSukumar Swaminathan #define	CMD_QUE_XRI_BUF64_CX	0x87
9082527734SSukumar Swaminathan #define	CMD_IOCB_CONTINUE64_CN	0x88
9182527734SSukumar Swaminathan #define	CMD_RET_XRI_BUF64_CX	0x89
9282527734SSukumar Swaminathan #define	CMD_ELS_REQUEST64_CR	0x8A
9382527734SSukumar Swaminathan #define	CMD_ELS_REQUEST64_CX	0x8B
9482527734SSukumar Swaminathan #define	CMD_RCV_ELS_REQ64_CX	0x8D
9582527734SSukumar Swaminathan #define	CMD_XMIT_ELS_RSP64_CX	0x95
9682527734SSukumar Swaminathan #define	CMD_XMIT_BLS_RSP64_CX	0x97
9782527734SSukumar Swaminathan #define	CMD_FCP_IWRITE64_CR	0x98
9882527734SSukumar Swaminathan #define	CMD_FCP_IWRITE64_CX	0x99
9982527734SSukumar Swaminathan #define	CMD_FCP_IREAD64_CR	0x9A
10082527734SSukumar Swaminathan #define	CMD_FCP_IREAD64_CX	0x9B
10182527734SSukumar Swaminathan #define	CMD_FCP_ICMND64_CR	0x9C
10282527734SSukumar Swaminathan #define	CMD_FCP_ICMND64_CX	0x9D
10382527734SSukumar Swaminathan #define	CMD_FCP_TSEND64_CX	0x9F	/* FCP_TARGET_MODE */
10482527734SSukumar Swaminathan #define	CMD_FCP_TRECEIVE64_CX	0xA1	/* FCP_TARGET_MODE */
10582527734SSukumar Swaminathan #define	CMD_FCP_TRSP64_CX	0xA3	/* FCP_TARGET_MODE */
10682527734SSukumar Swaminathan #define	CMD_RCV_SEQ64_CX	0xB5	/* SLI3 */
10782527734SSukumar Swaminathan #define	CMD_RCV_ELS64_CX	0xB7	/* SLI3 */
10882527734SSukumar Swaminathan #define	CMD_RCV_CONT64_CX	0xBB	/* SLI3 */
10982527734SSukumar Swaminathan #define	CMD_RCV_SEQ_LIST64_CX	0xC1
11082527734SSukumar Swaminathan #define	CMD_GEN_REQUEST64_CR	0xC2
11182527734SSukumar Swaminathan #define	CMD_GEN_REQUEST64_CX	0xC3
11282527734SSukumar Swaminathan #define	CMD_QUE_RING_LIST64_CN	0xC6
11382527734SSukumar Swaminathan 
11482527734SSukumar Swaminathan 
11582527734SSukumar Swaminathan /*
11682527734SSukumar Swaminathan  * Begin Structure Definitions for IOCB Commands
11782527734SSukumar Swaminathan  */
11882527734SSukumar Swaminathan 
11982527734SSukumar Swaminathan typedef struct
12082527734SSukumar Swaminathan {
12182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
12282527734SSukumar Swaminathan 	uint8_t		statAction;
12382527734SSukumar Swaminathan 	uint8_t		statRsn;
12482527734SSukumar Swaminathan 	uint8_t		statBaExp;
12582527734SSukumar Swaminathan 	uint8_t		statLocalError;
12682527734SSukumar Swaminathan #endif
12782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
12882527734SSukumar Swaminathan 	uint8_t		statLocalError;
12982527734SSukumar Swaminathan 	uint8_t		statBaExp;
13082527734SSukumar Swaminathan 	uint8_t		statRsn;
13182527734SSukumar Swaminathan 	uint8_t		statAction;
13282527734SSukumar Swaminathan #endif
13382527734SSukumar Swaminathan 	/* statAction  FBSY reason codes */
13482527734SSukumar Swaminathan #define	FBSY_RSN_MASK	0xF0	/* Rsn stored in upper nibble */
13582527734SSukumar Swaminathan #define	FBSY_FABRIC_BSY	0x10	/* F_bsy due to Fabric BSY */
13682527734SSukumar Swaminathan #define	FBSY_NPORT_BSY	0x30	/* F_bsy due to N_port BSY */
13782527734SSukumar Swaminathan 
13882527734SSukumar Swaminathan 	/* statAction  PBSY action codes */
13982527734SSukumar Swaminathan #define	PBSY_ACTION1	0x01	/* Sequence terminated - retry */
14082527734SSukumar Swaminathan #define	PBSY_ACTION2	0x02	/* Sequence active - retry */
14182527734SSukumar Swaminathan 
14282527734SSukumar Swaminathan 	/* statAction  P/FRJT action codes */
14382527734SSukumar Swaminathan #define	RJT_RETRYABLE	0x01	/* Retryable class of error */
14482527734SSukumar Swaminathan #define	RJT_NO_RETRY	0x02	/* Non-Retryable class of error */
14582527734SSukumar Swaminathan 
14682527734SSukumar Swaminathan 	/* statRsn  LS_RJT reason codes defined in LS_RJT structure */
14782527734SSukumar Swaminathan 
14882527734SSukumar Swaminathan 	/* statRsn  P_BSY reason codes */
14982527734SSukumar Swaminathan #define	PBSY_NPORT_BSY	0x01	/* Physical N_port BSY */
15082527734SSukumar Swaminathan #define	PBSY_RESRCE_BSY	0x03	/* N_port resource BSY */
15182527734SSukumar Swaminathan #define	PBSY_VU_BSY	0xFF	/* See VU field for rsn */
15282527734SSukumar Swaminathan 
15382527734SSukumar Swaminathan 	/* statRsn  P/F_RJT reason codes */
15482527734SSukumar Swaminathan #define	RJT_BAD_D_ID		0x01	/* Invalid D_ID field */
15582527734SSukumar Swaminathan #define	RJT_BAD_S_ID		0x02	/* Invalid S_ID field */
15682527734SSukumar Swaminathan #define	RJT_UNAVAIL_TEMP	0x03	/* N_Port unavailable temp. */
15782527734SSukumar Swaminathan #define	RJT_UNAVAIL_PERM	0x04	/* N_Port unavailable perm. */
15882527734SSukumar Swaminathan #define	RJT_UNSUP_CLASS		0x05	/* Class not supported */
15982527734SSukumar Swaminathan #define	RJT_DELIM_ERR		0x06	/* Delimiter usage error */
16082527734SSukumar Swaminathan #define	RJT_UNSUP_TYPE		0x07	/* Type not supported */
16182527734SSukumar Swaminathan #define	RJT_BAD_CONTROL		0x08	/* Invalid link conrtol */
16282527734SSukumar Swaminathan #define	RJT_BAD_RCTL		0x09	/* R_CTL invalid */
16382527734SSukumar Swaminathan #define	RJT_BAD_FCTL		0x0A	/* F_CTL invalid */
16482527734SSukumar Swaminathan #define	RJT_BAD_OXID		0x0B	/* OX_ID invalid */
16582527734SSukumar Swaminathan #define	RJT_BAD_RXID		0x0C	/* RX_ID invalid */
16682527734SSukumar Swaminathan #define	RJT_BAD_SEQID		0x0D	/* SEQ_ID invalid */
16782527734SSukumar Swaminathan #define	RJT_BAD_DFCTL		0x0E	/* DF_CTL invalid */
16882527734SSukumar Swaminathan #define	RJT_BAD_SEQCNT		0x0F	/* SEQ_CNT invalid */
16982527734SSukumar Swaminathan #define	RJT_BAD_PARM		0x10	/* Param. field invalid */
17082527734SSukumar Swaminathan #define	RJT_XCHG_ERR		0x11	/* Exchange error */
17182527734SSukumar Swaminathan #define	RJT_PROT_ERR		0x12	/* Protocol error */
17282527734SSukumar Swaminathan #define	RJT_BAD_LENGTH		0x13	/* Invalid Length */
17382527734SSukumar Swaminathan #define	RJT_UNEXPECTED_ACK	0x14	/* Unexpected ACK */
17482527734SSukumar Swaminathan #define	RJT_LOGIN_REQUIRED	0x16	/* Login required */
17582527734SSukumar Swaminathan #define	RJT_TOO_MANY_SEQ	0x17	/* Excessive sequences */
17682527734SSukumar Swaminathan #define	RJT_XCHG_NOT_STRT	0x18	/* Exchange not started */
17782527734SSukumar Swaminathan #define	RJT_UNSUP_SEC_HDR	0x19	/* Security hdr not supported */
17882527734SSukumar Swaminathan #define	RJT_UNAVAIL_PATH	0x1A	/* Fabric Path not available */
17982527734SSukumar Swaminathan #define	RJT_VENDOR_UNIQUE	0xFF	/* Vendor unique error */
18082527734SSukumar Swaminathan 
18182527734SSukumar Swaminathan 	/* statRsn  BA_RJT reason codes */
18282527734SSukumar Swaminathan #define	BARJT_BAD_CMD_CODE	0x01	/* Invalid command code */
18382527734SSukumar Swaminathan #define	BARJT_LOGICAL_ERR	0x03	/* Logical error */
18482527734SSukumar Swaminathan #define	BARJT_LOGICAL_BSY	0x05	/* Logical busy */
18582527734SSukumar Swaminathan #define	BARJT_PROTOCOL_ERR	0x07	/* Protocol error */
18682527734SSukumar Swaminathan #define	BARJT_VU_ERR		0xFF	/* Vendor unique error */
18782527734SSukumar Swaminathan 
18882527734SSukumar Swaminathan 	/* LS_RJT reason explanation defined in LS_RJT structure */
18982527734SSukumar Swaminathan 
19082527734SSukumar Swaminathan 	/* BA_RJT reason explanation */
19182527734SSukumar Swaminathan #define	BARJT_EXP_INVALID_ID	0x01	/* Invalid OX_ID/RX_ID */
19282527734SSukumar Swaminathan #define	BARJT_EXP_ABORT_SEQ	0x05	/* Abort SEQ, no more info */
19382527734SSukumar Swaminathan 
19482527734SSukumar Swaminathan 	/* Local Reject errors */
19582527734SSukumar Swaminathan #define	IOERR_SUCCESS			0x00
19682527734SSukumar Swaminathan #define	IOERR_MISSING_CONTINUE		0x01
19782527734SSukumar Swaminathan #define	IOERR_SEQUENCE_TIMEOUT		0x02
19882527734SSukumar Swaminathan #define	IOERR_INTERNAL_ERROR		0x03
19982527734SSukumar Swaminathan #define	IOERR_INVALID_RPI		0x04
20082527734SSukumar Swaminathan #define	IOERR_NO_XRI			0x05
20182527734SSukumar Swaminathan #define	IOERR_ILLEGAL_COMMAND		0x06
20282527734SSukumar Swaminathan #define	IOERR_XCHG_DROPPED		0x07
20382527734SSukumar Swaminathan #define	IOERR_ILLEGAL_FIELD		0x08
20482527734SSukumar Swaminathan /* RESERVED 0x09 */
20582527734SSukumar Swaminathan /* RESERVED 0x0A */
20682527734SSukumar Swaminathan #define	IOERR_RCV_BUFFER_WAITING	0x0B
20782527734SSukumar Swaminathan /* RESERVED 0x0C */
20882527734SSukumar Swaminathan #define	IOERR_TX_DMA_FAILED		0x0D
20982527734SSukumar Swaminathan #define	IOERR_RX_DMA_FAILED		0x0E
21082527734SSukumar Swaminathan #define	IOERR_ILLEGAL_FRAME		0x0F
21182527734SSukumar Swaminathan 
21282527734SSukumar Swaminathan /* RESERVED 0x10 */
21382527734SSukumar Swaminathan #define	IOERR_NO_RESOURCES		0x11
21482527734SSukumar Swaminathan /* RESERVED 0x12 */
21582527734SSukumar Swaminathan #define	IOERR_ILLEGAL_LENGTH		0x13
21682527734SSukumar Swaminathan #define	IOERR_UNSUPPORTED_FEATURE	0x14
21782527734SSukumar Swaminathan #define	IOERR_ABORT_IN_PROGRESS		0x15
21882527734SSukumar Swaminathan #define	IOERR_ABORT_REQUESTED		0x16
21982527734SSukumar Swaminathan #define	IOERR_RCV_BUFFER_TIMEOUT	0x17
22082527734SSukumar Swaminathan #define	IOERR_LOOP_OPEN_FAILURE		0x18
22182527734SSukumar Swaminathan #define	IOERR_RING_RESET		0x19
22282527734SSukumar Swaminathan #define	IOERR_LINK_DOWN			0x1A
22382527734SSukumar Swaminathan #define	IOERR_CORRUPTED_DATA		0x1B
22482527734SSukumar Swaminathan #define	IOERR_CORRUPTED_RPI		0x1C
22582527734SSukumar Swaminathan #define	IOERR_OUT_OF_ORDER_DATA		0x1D
22682527734SSukumar Swaminathan #define	IOERR_OUT_OF_ORDER_ACK		0x1E
22782527734SSukumar Swaminathan #define	IOERR_DUP_FRAME			0x1F
22882527734SSukumar Swaminathan 
22982527734SSukumar Swaminathan #define	IOERR_LINK_CONTROL_FRAME	0x20	/* ACK_N received */
23082527734SSukumar Swaminathan #define	IOERR_BAD_HOST_ADDRESS		0x21
23182527734SSukumar Swaminathan #define	IOERR_RCV_HDRBUF_WAITING	0x22
23282527734SSukumar Swaminathan #define	IOERR_MISSING_HDR_BUFFER	0x23
23382527734SSukumar Swaminathan #define	IOERR_MSEQ_CHAIN_CORRUPTED	0x24
23482527734SSukumar Swaminathan #define	IOERR_ABORTMULT_REQUESTED	0x25
23582527734SSukumar Swaminathan /* RESERVED 0x26 */
23682527734SSukumar Swaminathan /* RESERVED 0x27 */
23782527734SSukumar Swaminathan #define	IOERR_BUFFER_SHORTAGE		0x28
23882527734SSukumar Swaminathan #define	IOERR_XRIBUF_WAITING		0x29
23982527734SSukumar Swaminathan /* RESERVED 0x2A */
24082527734SSukumar Swaminathan #define	IOERR_MISSING_HBQ_ENTRY		0x2B
24182527734SSukumar Swaminathan #define	IOERR_ABORT_EXT_REQ		0x2C
24282527734SSukumar Swaminathan #define	IOERR_CLOSE_EXT_REQ		0x2D
243*8f23e9faSHans Rosenfeld #define	IOERR_INVALID_VPI		0x2E
24482527734SSukumar Swaminathan /* RESERVED 0x2F */
24582527734SSukumar Swaminathan 
24682527734SSukumar Swaminathan #define	IOERR_XRIBUF_MISSING		0x30
24782527734SSukumar Swaminathan #define	IOERR_ASSI_RSP_SUPPRESSED	0x31
24882527734SSukumar Swaminathan /* RESERVED 0x32 - 0x3F */
24982527734SSukumar Swaminathan 
25082527734SSukumar Swaminathan #define	IOERR_ROFFSET_INVAL		0x40
25182527734SSukumar Swaminathan #define	IOERR_ROFFSET_MISSING		0x41
25282527734SSukumar Swaminathan #define	IOERR_INSUF_BUFFER		0x42
25382527734SSukumar Swaminathan #define	IOERR_MISSING_SI		0x43
25482527734SSukumar Swaminathan #define	IOERR_MISSING_ES		0x44
25582527734SSukumar Swaminathan #define	IOERR_INCOMP_XFER		0x45
25682527734SSukumar Swaminathan /* RESERVED 0x46 - 0xFF */
25782527734SSukumar Swaminathan 
25882527734SSukumar Swaminathan 	/* Driver defined */
25982527734SSukumar Swaminathan #define	IOERR_ABORT_TIMEOUT		0xF0
26082527734SSukumar Swaminathan } PARM_ERR;
26182527734SSukumar Swaminathan 
26282527734SSukumar Swaminathan typedef union
26382527734SSukumar Swaminathan {
26482527734SSukumar Swaminathan 	struct
26582527734SSukumar Swaminathan 	{
26682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
26782527734SSukumar Swaminathan 		uint8_t		Rctl;	/* R_CTL field */
26882527734SSukumar Swaminathan 		uint8_t		Type;	/* TYPE field */
26982527734SSukumar Swaminathan 		uint8_t		Dfctl;	/* DF_CTL field */
27082527734SSukumar Swaminathan 		uint8_t		Fctl;	/* Bits 0-7 of IOCB word 5 */
27182527734SSukumar Swaminathan #endif
27282527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
27382527734SSukumar Swaminathan 		uint8_t		Fctl;	/* Bits 0-7 of IOCB word 5 */
27482527734SSukumar Swaminathan 		uint8_t		Dfctl;	/* DF_CTL field */
27582527734SSukumar Swaminathan 		uint8_t		Type;	/* TYPE field */
27682527734SSukumar Swaminathan 		uint8_t		Rctl;	/* R_CTL field */
27782527734SSukumar Swaminathan #endif
27882527734SSukumar Swaminathan #define	FCP_RTYPE	0x08	/* FCP_TARGET_MODE Type - Rctl */
27982527734SSukumar Swaminathan 
28082527734SSukumar Swaminathan #define	BC		0x02	/* Broadcast Received  - Fctl */
28182527734SSukumar Swaminathan #define	SI		0x04	/* Sequence Initiative */
28282527734SSukumar Swaminathan #define	LA		0x08	/* Ignore Link Attention state */
28382527734SSukumar Swaminathan #define	FSEQ		0x40	/* First Sequence */
28482527734SSukumar Swaminathan #define	LSEQ		0x80	/* Last Sequence */
28582527734SSukumar Swaminathan 	} hcsw;
28682527734SSukumar Swaminathan 	uint32_t	reserved;
28782527734SSukumar Swaminathan } WORD5;
28882527734SSukumar Swaminathan 
28982527734SSukumar Swaminathan 
29082527734SSukumar Swaminathan /* IOCB Command template for a generic response */
29182527734SSukumar Swaminathan typedef struct
29282527734SSukumar Swaminathan {
29382527734SSukumar Swaminathan 	uint32_t	reserved[4];
29482527734SSukumar Swaminathan 	PARM_ERR	perr;
29582527734SSukumar Swaminathan } GENERIC_RSP;
29682527734SSukumar Swaminathan 
29782527734SSukumar Swaminathan 
29882527734SSukumar Swaminathan /* IOCB Command template for XMIT / XMIT_BCAST / RCV_SEQUENCE / XMIT_ELS */
29982527734SSukumar Swaminathan typedef struct
30082527734SSukumar Swaminathan {
30182527734SSukumar Swaminathan 	ULP_BDE		xrsqbde[2];
30282527734SSukumar Swaminathan 	uint32_t	xrsqRo;		/* Starting Relative Offset */
30382527734SSukumar Swaminathan 	WORD5		w5;		/* Header control/status word */
30482527734SSukumar Swaminathan } XR_SEQ_FIELDS;
30582527734SSukumar Swaminathan 
30682527734SSukumar Swaminathan /* IOCB Command template for ELS_REQUEST */
30782527734SSukumar Swaminathan typedef struct
30882527734SSukumar Swaminathan {
30982527734SSukumar Swaminathan 	ULP_BDE		elsReq;
31082527734SSukumar Swaminathan 	ULP_BDE		elsRsp;
31182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
31282527734SSukumar Swaminathan 	uint32_t	word4Rsvd:7;
31382527734SSukumar Swaminathan 	uint32_t	fl:1;
31482527734SSukumar Swaminathan 	uint32_t	myID:24;
31582527734SSukumar Swaminathan 
31682527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
31782527734SSukumar Swaminathan 	uint32_t	remoteID:24;
31882527734SSukumar Swaminathan #endif
31982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
32082527734SSukumar Swaminathan 	uint32_t	myID:24;
32182527734SSukumar Swaminathan 	uint32_t	fl:1;
32282527734SSukumar Swaminathan 	uint32_t	word4Rsvd:7;
32382527734SSukumar Swaminathan 
32482527734SSukumar Swaminathan 	uint32_t	remoteID:24;
32582527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
32682527734SSukumar Swaminathan #endif
32782527734SSukumar Swaminathan } ELS_REQUEST;
32882527734SSukumar Swaminathan 
32982527734SSukumar Swaminathan /* IOCB Command template for RCV_ELS_REQ */
33082527734SSukumar Swaminathan typedef struct
33182527734SSukumar Swaminathan {
33282527734SSukumar Swaminathan 	ULP_BDE		elsReq[2];
33382527734SSukumar Swaminathan 	uint32_t	parmRo;
33482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
33582527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
33682527734SSukumar Swaminathan 	uint32_t	remoteID:24;
33782527734SSukumar Swaminathan #endif
33882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
33982527734SSukumar Swaminathan 	uint32_t	remoteID:24;
34082527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
34182527734SSukumar Swaminathan #endif
34282527734SSukumar Swaminathan } RCV_ELS_REQ;
34382527734SSukumar Swaminathan 
34482527734SSukumar Swaminathan /* IOCB Command template for ABORT / CLOSE_XRI */
34582527734SSukumar Swaminathan typedef struct
34682527734SSukumar Swaminathan {
34782527734SSukumar Swaminathan 	uint32_t	rsvd[3];
34882527734SSukumar Swaminathan 	uint32_t	abortType;
34982527734SSukumar Swaminathan #define	ABORT_TYPE_ABTX		0x00000000
35082527734SSukumar Swaminathan #define	ABORT_TYPE_ABTS		0x00000001
35182527734SSukumar Swaminathan 	uint32_t	parm;
35282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
35382527734SSukumar Swaminathan 	uint16_t	abortContextTag;	/* ulpContext from command to */
35482527734SSukumar Swaminathan 						/* abort/close */
35582527734SSukumar Swaminathan 	uint16_t	abortIoTag;		/* ulpIoTag from command to */
35682527734SSukumar Swaminathan 						/* abort/close */
35782527734SSukumar Swaminathan #endif
35882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
35982527734SSukumar Swaminathan 	uint16_t	abortIoTag;		/* ulpIoTag from command to */
36082527734SSukumar Swaminathan 						/* abort/close */
36182527734SSukumar Swaminathan 	uint16_t	abortContextTag;	/* ulpContext from command to */
36282527734SSukumar Swaminathan 						/* abort/close */
36382527734SSukumar Swaminathan #endif
36482527734SSukumar Swaminathan } AC_XRI;
36582527734SSukumar Swaminathan 
36682527734SSukumar Swaminathan /* IOCB Command template for GET_RPI */
36782527734SSukumar Swaminathan typedef struct
36882527734SSukumar Swaminathan {
36982527734SSukumar Swaminathan 	uint32_t	rsvd[4];
37082527734SSukumar Swaminathan 	uint32_t	parmRo;
37182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
37282527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
37382527734SSukumar Swaminathan 	uint32_t	remoteID:24;
37482527734SSukumar Swaminathan #endif
37582527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
37682527734SSukumar Swaminathan 	uint32_t	remoteID:24;
37782527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
37882527734SSukumar Swaminathan #endif
37982527734SSukumar Swaminathan } GET_RPI;
38082527734SSukumar Swaminathan 
38182527734SSukumar Swaminathan /* IOCB Command template for all FCP Initiator commands */
38282527734SSukumar Swaminathan typedef struct
38382527734SSukumar Swaminathan {
38482527734SSukumar Swaminathan 	ULP_BDE		fcpi_cmnd;	/* FCP_CMND payload descriptor */
38582527734SSukumar Swaminathan 	ULP_BDE		fcpi_rsp;	/* Rcv buffer */
38682527734SSukumar Swaminathan 	uint32_t	fcpi_parm;
38782527734SSukumar Swaminathan 	uint32_t	fcpi_XRdy;	/* transfer ready for IWRITE */
38882527734SSukumar Swaminathan } FCPI_FIELDS;
38982527734SSukumar Swaminathan 
39082527734SSukumar Swaminathan /* IOCB Command template for all FCP Target commands */
39182527734SSukumar Swaminathan typedef struct
39282527734SSukumar Swaminathan {
39382527734SSukumar Swaminathan 	ULP_BDE		fcpt_Buffer[2];	/* FCP_CMND payload descriptor */
39482527734SSukumar Swaminathan 	uint32_t	fcpt_Offset;
39582527734SSukumar Swaminathan 	uint32_t	fcpt_Length;	/* transfer ready for IWRITE */
39682527734SSukumar Swaminathan } FCPT_FIELDS;
39782527734SSukumar Swaminathan 
39882527734SSukumar Swaminathan /* SLI-2 IOCB structure definitions */
39982527734SSukumar Swaminathan 
40082527734SSukumar Swaminathan /* IOCB Command template for 64 bit XMIT / XMIT_BCAST / XMIT_ELS */
40182527734SSukumar Swaminathan typedef struct
40282527734SSukumar Swaminathan {
40382527734SSukumar Swaminathan 	ULP_BDL		bdl;
40482527734SSukumar Swaminathan 	uint32_t	xrsqRo;	/* Starting Relative Offset */
40582527734SSukumar Swaminathan 	WORD5		w5;	/* Header control/status word */
40682527734SSukumar Swaminathan } XMT_SEQ_FIELDS64;
40782527734SSukumar Swaminathan 
40882527734SSukumar Swaminathan 
40982527734SSukumar Swaminathan /* IOCB Command template for 64 bit RCV_SEQUENCE64 */
41082527734SSukumar Swaminathan typedef struct
41182527734SSukumar Swaminathan {
41282527734SSukumar Swaminathan 	ULP_BDE64	rcvBde;
41382527734SSukumar Swaminathan 	uint32_t	rsvd1;
41482527734SSukumar Swaminathan 	uint32_t	xrsqRo;	/* Starting Relative Offset */
41582527734SSukumar Swaminathan 	WORD5		w5;	/* Header control/status word */
41682527734SSukumar Swaminathan } RCV_SEQ_FIELDS64;
41782527734SSukumar Swaminathan 
41882527734SSukumar Swaminathan /* IOCB Command template for ELS_REQUEST64 */
41982527734SSukumar Swaminathan typedef struct
42082527734SSukumar Swaminathan {
42182527734SSukumar Swaminathan 	ULP_BDL		bdl;
42282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
42382527734SSukumar Swaminathan 	uint32_t	word4Rsvd:7;
42482527734SSukumar Swaminathan 	uint32_t	fl:1;
42582527734SSukumar Swaminathan 	uint32_t	myID:24;
42682527734SSukumar Swaminathan 
42782527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
42882527734SSukumar Swaminathan 	uint32_t	remoteID:24;
42982527734SSukumar Swaminathan #endif
43082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
43182527734SSukumar Swaminathan 	uint32_t	myID:24;
43282527734SSukumar Swaminathan 	uint32_t	fl:1;
43382527734SSukumar Swaminathan 	uint32_t	word4Rsvd:7;
43482527734SSukumar Swaminathan 
43582527734SSukumar Swaminathan 	uint32_t	remoteID:24;
43682527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
43782527734SSukumar Swaminathan #endif
43882527734SSukumar Swaminathan } ELS_REQUEST64;
43982527734SSukumar Swaminathan 
44082527734SSukumar Swaminathan 
44182527734SSukumar Swaminathan /* IOCB Command template for ASYNC_STATUS */
44282527734SSukumar Swaminathan typedef struct
44382527734SSukumar Swaminathan {
44482527734SSukumar Swaminathan 	ULP_BDL		resv;
44582527734SSukumar Swaminathan 	uint32_t	parameter;
44682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
44782527734SSukumar Swaminathan 	uint16_t	EventCode;
44882527734SSukumar Swaminathan 	uint16_t	SubContext;
44982527734SSukumar Swaminathan #endif
45082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
45182527734SSukumar Swaminathan 	uint16_t	SubContext;
45282527734SSukumar Swaminathan 	uint16_t	EventCode;
45382527734SSukumar Swaminathan #endif
45482527734SSukumar Swaminathan } ASYNC_STATUS;
45582527734SSukumar Swaminathan 
45682527734SSukumar Swaminathan 
45782527734SSukumar Swaminathan /* IOCB Command template for QUE_RING_LIST64 */
45882527734SSukumar Swaminathan typedef struct
45982527734SSukumar Swaminathan {
46082527734SSukumar Swaminathan 	ULP_BDL		bdl;
46182527734SSukumar Swaminathan 	uint32_t	rsvd1;
46282527734SSukumar Swaminathan 	uint32_t	rsvd2;
46382527734SSukumar Swaminathan } QUE_RING_LIST64;
46482527734SSukumar Swaminathan 
46582527734SSukumar Swaminathan 
46682527734SSukumar Swaminathan /* IOCB Command template for GEN_REQUEST64 */
46782527734SSukumar Swaminathan typedef struct
46882527734SSukumar Swaminathan {
46982527734SSukumar Swaminathan 	ULP_BDL		bdl;
47082527734SSukumar Swaminathan 	uint32_t	param;	/* Starting Relative Offset */
47182527734SSukumar Swaminathan 	WORD5		w5;	/* Header control/status word */
47282527734SSukumar Swaminathan } GEN_REQUEST64;
47382527734SSukumar Swaminathan 
47482527734SSukumar Swaminathan /* IOCB Command template for RCV_ELS_REQ64 */
47582527734SSukumar Swaminathan typedef struct
47682527734SSukumar Swaminathan {
47782527734SSukumar Swaminathan 	ULP_BDE64	elsReq;
47882527734SSukumar Swaminathan 	uint32_t	rsvd1;
47982527734SSukumar Swaminathan 	uint32_t	parmRo;
48082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
48182527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
48282527734SSukumar Swaminathan 	uint32_t	remoteID:24;
48382527734SSukumar Swaminathan #endif
48482527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
48582527734SSukumar Swaminathan 	uint32_t	remoteID:24;
48682527734SSukumar Swaminathan 	uint32_t	word5Rsvd:8;
48782527734SSukumar Swaminathan #endif
48882527734SSukumar Swaminathan } RCV_ELS_REQ64;
48982527734SSukumar Swaminathan 
49082527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Initiator commands */
49182527734SSukumar Swaminathan typedef struct
49282527734SSukumar Swaminathan {
49382527734SSukumar Swaminathan 	ULP_BDL		bdl;
49482527734SSukumar Swaminathan 	uint32_t	fcpi_parm;
49582527734SSukumar Swaminathan 	uint32_t	fcpi_XRdy;	/* transfer ready for IWRITE */
49682527734SSukumar Swaminathan } FCPI_FIELDS64;
49782527734SSukumar Swaminathan 
49882527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Target commands */
49982527734SSukumar Swaminathan typedef struct
50082527734SSukumar Swaminathan {
50182527734SSukumar Swaminathan 	ULP_BDL		bdl;
50282527734SSukumar Swaminathan 	uint32_t	fcpt_Offset;
50382527734SSukumar Swaminathan 	uint32_t	fcpt_Length;	/* transfer ready for IWRITE */
50482527734SSukumar Swaminathan } FCPT_FIELDS64;
50582527734SSukumar Swaminathan 
50682527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Target commands */
50782527734SSukumar Swaminathan typedef struct
50882527734SSukumar Swaminathan {
50982527734SSukumar Swaminathan 	uint32_t	rsp_length;
51082527734SSukumar Swaminathan 	uint32_t	rsvd1;
51182527734SSukumar Swaminathan 	uint32_t	rsvd2;
51282527734SSukumar Swaminathan 	uint32_t	iotag32;
51382527734SSukumar Swaminathan 	uint32_t	status;
51482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
51582527734SSukumar Swaminathan 	uint32_t	rsvd:30;
51682527734SSukumar Swaminathan 	uint32_t	lnk:1;
51782527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
51882527734SSukumar Swaminathan 
51982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
52082527734SSukumar Swaminathan 	uint32_t	lnk:1;
52182527734SSukumar Swaminathan 	uint32_t	rsvd:30;
52282527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
52382527734SSukumar Swaminathan } AUTO_TRSP;
52482527734SSukumar Swaminathan 
52582527734SSukumar Swaminathan 
52682527734SSukumar Swaminathan typedef struct
52782527734SSukumar Swaminathan {
52882527734SSukumar Swaminathan 	uint32_t	io_tag64_low;	/* Word 8 */
52982527734SSukumar Swaminathan 	uint32_t	io_tag64_high;	/* Word 9 */
53082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
53182527734SSukumar Swaminathan 	uint32_t	cs_ctl:8;	/* Word 10, bit 31:24 */
53282527734SSukumar Swaminathan 	uint32_t	cs_en:1;	/* Word 10, bit 23 */
53382527734SSukumar Swaminathan 	uint32_t	rsv:15;		/* Word 10, bit 22:8 */
53482527734SSukumar Swaminathan 	uint32_t	ebde_count:8;	/* Word 10, bit 7:0 */
53582527734SSukumar Swaminathan #endif
53682527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
53782527734SSukumar Swaminathan 	uint32_t	ebde_count:8;	/* Word 10, bit 7:0 */
53882527734SSukumar Swaminathan 	uint32_t	rsv:15;		/* Word 10, bit 22:8 */
53982527734SSukumar Swaminathan 	uint32_t	cs_en:1;	/* Word 10, bit 23 */
54082527734SSukumar Swaminathan 	uint32_t	cs_ctl:8;	/* Word 10, bit 31:24 */
54182527734SSukumar Swaminathan #endif
54282527734SSukumar Swaminathan 	uint32_t	rsplen;		/* Word 11 */
54382527734SSukumar Swaminathan 	ULP_BDE64	ebde1;		/* Word 12:14 */
54482527734SSukumar Swaminathan 	ULP_BDE64	ebde2;		/* Word 15:17 */
54582527734SSukumar Swaminathan 	ULP_BDE64	ebde3;		/* Word 18:20 */
54682527734SSukumar Swaminathan 	ULP_BDE64	ebde4;		/* Word 21:23 */
54782527734SSukumar Swaminathan 	ULP_BDE64	ebde5;		/* Word 24:26 */
54882527734SSukumar Swaminathan 	ULP_BDE64	ebde6;		/* Word 27:29 */
54982527734SSukumar Swaminathan } GENERIC_EXT_IOCB;
55082527734SSukumar Swaminathan 
55182527734SSukumar Swaminathan /*
55282527734SSukumar Swaminathan  * IOCB Command Extension template for
55382527734SSukumar Swaminathan  * CMD_RCV_ELS64_CX (0xB7) or CMD_RCV_SEQ64_CX (0xB5)
55482527734SSukumar Swaminathan  */
55582527734SSukumar Swaminathan 
55682527734SSukumar Swaminathan typedef struct
55782527734SSukumar Swaminathan {
55882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
559*8f23e9faSHans Rosenfeld 	uint16_t	oxid;		/* word 8 */
560*8f23e9faSHans Rosenfeld 	uint16_t	seq_cnt;
561*8f23e9faSHans Rosenfeld 
56282527734SSukumar Swaminathan 	uint16_t	vpi;		/* word 9 */
56382527734SSukumar Swaminathan 	uint16_t	buddy_xri;
56482527734SSukumar Swaminathan 
56582527734SSukumar Swaminathan 	uint32_t	ccp:8;		/* word 10 */
56682527734SSukumar Swaminathan 	uint32_t	ccpe:1;
56782527734SSukumar Swaminathan 	uint32_t	rsvd:23;
56882527734SSukumar Swaminathan #endif
56982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
570*8f23e9faSHans Rosenfeld 	uint16_t	seq_cnt;	/* word 8 */
571*8f23e9faSHans Rosenfeld 	uint16_t	oxid;
572*8f23e9faSHans Rosenfeld 
57382527734SSukumar Swaminathan 	uint16_t	buddy_xri;	/* word 9 */
57482527734SSukumar Swaminathan 	uint16_t	vpi;
57582527734SSukumar Swaminathan 
57682527734SSukumar Swaminathan 	uint32_t	rsvd:23;	/* word 10 */
57782527734SSukumar Swaminathan 	uint32_t	ccpe:1;
57882527734SSukumar Swaminathan 	uint32_t	ccp:8;
57982527734SSukumar Swaminathan #endif
58082527734SSukumar Swaminathan 	uint32_t	seq_len;	/* received sequence length */
58182527734SSukumar Swaminathan 	ULP_BDL		bde2;		/* total 4 words */
58282527734SSukumar Swaminathan } RCV_SEQ_ELS_64_SLI3_EXT;
58382527734SSukumar Swaminathan 
58482527734SSukumar Swaminathan 
58582527734SSukumar Swaminathan typedef volatile struct emlxs_iocb
58682527734SSukumar Swaminathan { /* IOCB structure */
58782527734SSukumar Swaminathan 	union
58882527734SSukumar Swaminathan 	{
58982527734SSukumar Swaminathan 		GENERIC_RSP		grsp;		/* Generic response */
59082527734SSukumar Swaminathan 		XR_SEQ_FIELDS		xrseq;		/* XMIT/BCAST/RCV_SEQ */
59182527734SSukumar Swaminathan 		ULP_BDE			cont[3];	/* up to 3 cont BDEs */
59282527734SSukumar Swaminathan 		ELS_REQUEST		elsreq;		/* ELS_REQ template */
59382527734SSukumar Swaminathan 		RCV_ELS_REQ		rcvels;		/* RCV_ELS_REQ */
59482527734SSukumar Swaminathan 							/* template */
59582527734SSukumar Swaminathan 		AC_XRI			acxri;		/* ABORT/CLOSE_XRI */
59682527734SSukumar Swaminathan 							/* template */
59782527734SSukumar Swaminathan 		GET_RPI			getrpi;		/* GET_RPI template */
59882527734SSukumar Swaminathan 		FCPI_FIELDS		fcpi;		/* FCP Initiator */
59982527734SSukumar Swaminathan 							/* template */
60082527734SSukumar Swaminathan 		FCPT_FIELDS		fcpt;		/* FCP target */
60182527734SSukumar Swaminathan 							/* template */
60282527734SSukumar Swaminathan 
60382527734SSukumar Swaminathan 		/* SLI-2 structures */
60482527734SSukumar Swaminathan 
60582527734SSukumar Swaminathan 		ULP_BDE64		cont64[2];	/* up to 2 64 bit */
60682527734SSukumar Swaminathan 							/* cont BDE_64s */
60782527734SSukumar Swaminathan 		ELS_REQUEST64		elsreq64;	/* ELS_REQ64 template */
60882527734SSukumar Swaminathan 		QUE_RING_LIST64		qringlist64;	/* QUE RING LIST64 */
60982527734SSukumar Swaminathan 							/* template */
61082527734SSukumar Swaminathan 		GEN_REQUEST64		genreq64;	/* GEN_REQUEST64 */
61182527734SSukumar Swaminathan 							/* template */
61282527734SSukumar Swaminathan 		RCV_ELS_REQ64		rcvels64;	/* RCV_ELS_REQ */
61382527734SSukumar Swaminathan 							/* template */
61482527734SSukumar Swaminathan 		XMT_SEQ_FIELDS64	xseq64;		/* XMIT / BCAST cmd */
61582527734SSukumar Swaminathan 		FCPI_FIELDS64		fcpi64;		/* FCP 64 bit */
61682527734SSukumar Swaminathan 							/* Initiator template */
61782527734SSukumar Swaminathan 		FCPT_FIELDS64		fcpt64;		/* FCP 64 bit target */
61882527734SSukumar Swaminathan 							/* template */
61982527734SSukumar Swaminathan 		AUTO_TRSP		atrsp;		/* FCP 64 bit target */
62082527734SSukumar Swaminathan 							/* template */
62182527734SSukumar Swaminathan 
62282527734SSukumar Swaminathan 		RCV_SEQ_FIELDS64	rcvseq64;
62382527734SSukumar Swaminathan 		ASYNC_STATUS		astat;
62482527734SSukumar Swaminathan 
62582527734SSukumar Swaminathan 		uint32_t		ulpWord[6];	/* generic 6 'words' */
62682527734SSukumar Swaminathan 	} un;
62782527734SSukumar Swaminathan 	union
62882527734SSukumar Swaminathan 	{
62982527734SSukumar Swaminathan 		struct
63082527734SSukumar Swaminathan 		{
63182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
63282527734SSukumar Swaminathan 			uint16_t	ulpContext;	/* High order bits */
63382527734SSukumar Swaminathan 							/* word6 */
63482527734SSukumar Swaminathan 			uint16_t	ulpIoTag;	/* Low order bits */
63582527734SSukumar Swaminathan 							/* word6 */
63682527734SSukumar Swaminathan #endif
63782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
63882527734SSukumar Swaminathan 			uint16_t	ulpIoTag;	/* Low order bits */
63982527734SSukumar Swaminathan 							/* word6 */
64082527734SSukumar Swaminathan 			uint16_t	ulpContext;	/* High order bits */
64182527734SSukumar Swaminathan 							/* word6 */
64282527734SSukumar Swaminathan #endif
64382527734SSukumar Swaminathan 		} t1;
64482527734SSukumar Swaminathan 		struct
64582527734SSukumar Swaminathan 		{
64682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
64782527734SSukumar Swaminathan 			uint16_t	ulpContext;	/* High order bits */
64882527734SSukumar Swaminathan 							/* word6 */
64982527734SSukumar Swaminathan 			uint16_t	ulpIoTag1:2;	/* Low order bits */
65082527734SSukumar Swaminathan 							/* word6 */
65182527734SSukumar Swaminathan 			uint16_t	ulpIoTag0:14;	/* Low order bits */
65282527734SSukumar Swaminathan 							/* word6 */
65382527734SSukumar Swaminathan #endif
65482527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
65582527734SSukumar Swaminathan 			uint16_t	ulpIoTag0:14;	/* Low order bits */
65682527734SSukumar Swaminathan 							/* word6 */
65782527734SSukumar Swaminathan 			uint16_t	ulpIoTag1:2;	/* Low order bits */
65882527734SSukumar Swaminathan 							/* word6 */
65982527734SSukumar Swaminathan 			uint16_t	ulpContext;	/* High order bits */
66082527734SSukumar Swaminathan 							/* word6 */
66182527734SSukumar Swaminathan #endif
66282527734SSukumar Swaminathan 		} t2;
66382527734SSukumar Swaminathan 
66482527734SSukumar Swaminathan 		uint32_t	ulpWord;
66582527734SSukumar Swaminathan 	} un1;
66682527734SSukumar Swaminathan #define	ULPCONTEXT	un1.t1.ulpContext
66782527734SSukumar Swaminathan #define	ULPIOTAG	un1.t1.ulpIoTag
66882527734SSukumar Swaminathan #define	ULPIOTAG0	un1.t2.ulpIoTag0
66982527734SSukumar Swaminathan #define	ULPDELAYXMIT	un1.t2.ulpIoTag1
67082527734SSukumar Swaminathan 
67182527734SSukumar Swaminathan #define	IOCB_DELAYXMIT_MSK 0x3000
67282527734SSukumar Swaminathan 
67382527734SSukumar Swaminathan 
67482527734SSukumar Swaminathan 	union
67582527734SSukumar Swaminathan 	{
67682527734SSukumar Swaminathan 		struct
67782527734SSukumar Swaminathan 		{
67882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
67982527734SSukumar Swaminathan 			uint32_t	ulpRsvdByte:8;
68082527734SSukumar Swaminathan 			uint32_t	ulpXS:1;
68182527734SSukumar Swaminathan 			uint32_t	ulpFCP2Rcvy:1;
68282527734SSukumar Swaminathan 			uint32_t	ulpPU:2;
68382527734SSukumar Swaminathan 			uint32_t	ulpIr:1;
68482527734SSukumar Swaminathan 			uint32_t	ulpClass:3;
68582527734SSukumar Swaminathan 			uint32_t	ulpCommand:8;
68682527734SSukumar Swaminathan 			uint32_t	ulpStatus:4;
68782527734SSukumar Swaminathan 			uint32_t	ulpBdeCount:2;
68882527734SSukumar Swaminathan 			uint32_t	ulpLe:1;
68982527734SSukumar Swaminathan 			uint32_t	ulpOwner:1;	/* Low order bit */
69082527734SSukumar Swaminathan 							/* word 7 */
69182527734SSukumar Swaminathan #endif
69282527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
69382527734SSukumar Swaminathan 			uint32_t	ulpOwner:1;	/* Low order bit */
69482527734SSukumar Swaminathan 							/* word 7 */
69582527734SSukumar Swaminathan 			uint32_t	ulpLe:1;
69682527734SSukumar Swaminathan 			uint32_t	ulpBdeCount:2;
69782527734SSukumar Swaminathan 			uint32_t	ulpStatus:4;
69882527734SSukumar Swaminathan 			uint32_t	ulpCommand:8;
69982527734SSukumar Swaminathan 			uint32_t	ulpClass:3;
70082527734SSukumar Swaminathan 			uint32_t	ulpIr:1;
70182527734SSukumar Swaminathan 			uint32_t	ulpPU:2;
70282527734SSukumar Swaminathan 			uint32_t	ulpFCP2Rcvy:1;
70382527734SSukumar Swaminathan 			uint32_t	ulpXS:1;
70482527734SSukumar Swaminathan 			uint32_t	ulpRsvdByte:8;
70582527734SSukumar Swaminathan #endif
70682527734SSukumar Swaminathan 		} t1;
70782527734SSukumar Swaminathan 
70882527734SSukumar Swaminathan 		struct
70982527734SSukumar Swaminathan 		{
71082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
71182527734SSukumar Swaminathan 			uint32_t	ulpRsvdByte:8;
71282527734SSukumar Swaminathan 			uint32_t	ulpCT:2;
71382527734SSukumar Swaminathan 			uint32_t	ulpPU:2;
71482527734SSukumar Swaminathan 			uint32_t	ulpIr:1;
71582527734SSukumar Swaminathan 			uint32_t	ulpClass:3;
71682527734SSukumar Swaminathan 			uint32_t	ulpCommand:8;
71782527734SSukumar Swaminathan 			uint32_t	ulpStatus:4;
71882527734SSukumar Swaminathan 			uint32_t	ulpBdeCount:2;
71982527734SSukumar Swaminathan 			uint32_t	ulpLe:1;
72082527734SSukumar Swaminathan 			uint32_t	ulpOwner:1;	/* Low order bit */
72182527734SSukumar Swaminathan 							/* word 7 */
72282527734SSukumar Swaminathan #endif
72382527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
72482527734SSukumar Swaminathan 			uint32_t	ulpOwner:1;	/* Low order bit */
72582527734SSukumar Swaminathan 							/* word 7 */
72682527734SSukumar Swaminathan 			uint32_t	ulpLe:1;
72782527734SSukumar Swaminathan 			uint32_t	ulpBdeCount:2;
72882527734SSukumar Swaminathan 			uint32_t	ulpStatus:4;
72982527734SSukumar Swaminathan 			uint32_t	ulpCommand:8;
73082527734SSukumar Swaminathan 			uint32_t	ulpClass:3;
73182527734SSukumar Swaminathan 			uint32_t	ulpIr:1;
73282527734SSukumar Swaminathan 			uint32_t	ulpPU:2;
73382527734SSukumar Swaminathan 			uint32_t	ulpCT:2;
73482527734SSukumar Swaminathan 			uint32_t	ulpRsvdByte:8;
73582527734SSukumar Swaminathan #endif
73682527734SSukumar Swaminathan 		} t2;
73782527734SSukumar Swaminathan 
73882527734SSukumar Swaminathan 		uint32_t	ulpWord;
73982527734SSukumar Swaminathan 	} un2;
74082527734SSukumar Swaminathan 
74182527734SSukumar Swaminathan #define	ULPCT		un2.t2.ulpCT
74282527734SSukumar Swaminathan #define	ULPRSVDBYTE	un2.t1.ulpRsvdByte
74382527734SSukumar Swaminathan #define	ULPXS		un2.t1.ulpXS
74482527734SSukumar Swaminathan #define	ULPFCP2RCVY	un2.t1.ulpFCP2Rcvy
74582527734SSukumar Swaminathan #define	ULPPU		un2.t1.ulpPU
74682527734SSukumar Swaminathan #define	ULPIR		un2.t1.ulpIr
74782527734SSukumar Swaminathan #define	ULPCLASS	un2.t1.ulpClass
74882527734SSukumar Swaminathan #define	ULPCOMMAND	un2.t1.ulpCommand
74982527734SSukumar Swaminathan #define	ULPSTATUS	un2.t1.ulpStatus
75082527734SSukumar Swaminathan #define	ULPBDECOUNT	un2.t1.ulpBdeCount
75182527734SSukumar Swaminathan #define	ULPLE		un2.t1.ulpLe
75282527734SSukumar Swaminathan #define	ULPOWNER	un2.t1.ulpOwner
75382527734SSukumar Swaminathan 	/* 32 bytes at this point */
75482527734SSukumar Swaminathan 
75582527734SSukumar Swaminathan /* SLI4 */
75682527734SSukumar Swaminathan #define	RXFCHDR		un.ulpWord
75782527734SSukumar Swaminathan #define	RXSEQCNT	un1.ulpWord
75882527734SSukumar Swaminathan #define	RXSEQLEN	un2.ulpWord
75982527734SSukumar Swaminathan 
76082527734SSukumar Swaminathan 	union
76182527734SSukumar Swaminathan 	{
76282527734SSukumar Swaminathan 		GENERIC_EXT_IOCB	ext_iocb;
76382527734SSukumar Swaminathan 		RCV_SEQ_ELS_64_SLI3_EXT	ext_rcv;
76482527734SSukumar Swaminathan 		uint32_t		sli3Words[24];	/* 96 extra bytes */
76582527734SSukumar Swaminathan 							/* for SLI-3 */
76682527734SSukumar Swaminathan 	} unsli3;
76782527734SSukumar Swaminathan 	/* 128 bytes at this point */
76882527734SSukumar Swaminathan 
76982527734SSukumar Swaminathan #define	IOCB_FCP		1	/* IOCB is used for */
77082527734SSukumar Swaminathan 					/* FCP ELS cmds - ulpRsvByte */
77182527734SSukumar Swaminathan #define	IOCB_IP			2	/* IOCB is used for IP ELS cmds */
77282527734SSukumar Swaminathan #define	PARM_UNUSED		0	/* PU field (Word 4) not used */
77382527734SSukumar Swaminathan #define	PARM_REL_OFF		1	/* PU field (Word 4) = R. O. */
774*8f23e9faSHans Rosenfeld #define	PARM_XFER_CHECK		2	/* PU field (Word 4) = Data Xfer Len */
77582527734SSukumar Swaminathan #define	CLASS1			0	/* Class 1 */
77682527734SSukumar Swaminathan #define	CLASS2			1	/* Class 2 */
77782527734SSukumar Swaminathan #define	CLASS3			2	/* Class 3 */
77882527734SSukumar Swaminathan #define	CLASS_FCP_INTERMIX	7	/* FCP Data->Cls 1, all else->Cls 2 */
77982527734SSukumar Swaminathan 
78082527734SSukumar Swaminathan #define	IOSTAT_SUCCESS			0x0	/* ulpStatus */
78182527734SSukumar Swaminathan #define	IOSTAT_FCP_RSP_ERROR		0x1
78282527734SSukumar Swaminathan #define	IOSTAT_REMOTE_STOP		0x2
78382527734SSukumar Swaminathan #define	IOSTAT_LOCAL_REJECT		0x3
78482527734SSukumar Swaminathan #define	IOSTAT_NPORT_RJT		0x4
78582527734SSukumar Swaminathan #define	IOSTAT_FABRIC_RJT		0x5
78682527734SSukumar Swaminathan #define	IOSTAT_NPORT_BSY		0x6
78782527734SSukumar Swaminathan #define	IOSTAT_FABRIC_BSY		0x7
78882527734SSukumar Swaminathan #define	IOSTAT_INTERMED_RSP		0x8
78982527734SSukumar Swaminathan #define	IOSTAT_LS_RJT			0x9
79082527734SSukumar Swaminathan #define	IOSTAT_RESERVED_A		0xA
79182527734SSukumar Swaminathan #define	IOSTAT_CMD_REJECT		0xB
79282527734SSukumar Swaminathan #define	IOSTAT_FCP_TGT_LENCHK		0xC
79382527734SSukumar Swaminathan #define	IOSTAT_RESERVED_D		0xD
79482527734SSukumar Swaminathan #define	IOSTAT_RESERVED_E		0xE
79582527734SSukumar Swaminathan #define	IOSTAT_NEED_BUFF_ENTRY		0xF
79682527734SSukumar Swaminathan 
79782527734SSukumar Swaminathan /* Special error codes */
79882527734SSukumar Swaminathan #define	IOSTAT_DATA_OVERRUN		0x10	/* Added for resid handling */
79982527734SSukumar Swaminathan #define	IOSTAT_DATA_UNDERRUN		0x11	/* Added for resid handling */
800*8f23e9faSHans Rosenfeld #define	IOSTAT_RSP_INVALID		0x12	/* Added for resp checking */
80182527734SSukumar Swaminathan } emlxs_iocb_t;
80282527734SSukumar Swaminathan typedef emlxs_iocb_t IOCB;
80382527734SSukumar Swaminathan 
80482527734SSukumar Swaminathan 
80582527734SSukumar Swaminathan typedef struct emlxs_iocbq
80682527734SSukumar Swaminathan {
80782527734SSukumar Swaminathan 	emlxs_iocb_t		iocb;
80882527734SSukumar Swaminathan 	emlxs_wqe_t		wqe; /* SLI4 */
80982527734SSukumar Swaminathan 
81082527734SSukumar Swaminathan 	struct emlxs_iocbq	*next;
81182527734SSukumar Swaminathan 
812a9800bebSGarrett D'Amore 	void			*bp;	/* ptr to data buffer structure */
81382527734SSukumar Swaminathan 	void			*port;	/* Board info pointer */
81482527734SSukumar Swaminathan 	void			*channel; /* IO Channel pointer */
81582527734SSukumar Swaminathan 	void			*node;	/* Node pointer */
81682527734SSukumar Swaminathan 	void			*sbp;	/* Pkt pointer */
81782527734SSukumar Swaminathan 	uint32_t		flag;
81882527734SSukumar Swaminathan 
81982527734SSukumar Swaminathan #define	IOCB_POOL_ALLOCATED	0x00000001
82082527734SSukumar Swaminathan #define	IOCB_PRIORITY		0x00000002
82182527734SSukumar Swaminathan #define	IOCB_SPECIAL		0x00000004
82282527734SSukumar Swaminathan #define	IOCB_FCP_CMD		0x00000008
82382527734SSukumar Swaminathan #define	IOCB_FCT_DATA		0x00000020	/* tgt-mode */
82482527734SSukumar Swaminathan 
82582527734SSukumar Swaminathan } emlxs_iocbq_t;
82682527734SSukumar Swaminathan typedef emlxs_iocbq_t IOCBQ;
82782527734SSukumar Swaminathan 
82882527734SSukumar Swaminathan 
82982527734SSukumar Swaminathan #ifdef	__cplusplus
83082527734SSukumar Swaminathan }
83182527734SSukumar Swaminathan #endif
83282527734SSukumar Swaminathan 
83382527734SSukumar Swaminathan #endif	/* _EMLXS_IOCB_H */
834