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  *
88f23e9faSHans Rosenfeld  * You can obtain a copy of the license at
98f23e9faSHans 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 /*
238f23e9faSHans Rosenfeld  * Copyright (c) 2004-2012 Emulex. All rights reserved.
2482527734SSukumar Swaminathan  * Use is subject to license terms.
2582527734SSukumar Swaminathan  */
2682527734SSukumar Swaminathan 
2782527734SSukumar Swaminathan #ifndef _EMLXS_QUEUE_H
2882527734SSukumar Swaminathan #define	_EMLXS_QUEUE_H
2982527734SSukumar Swaminathan 
3082527734SSukumar Swaminathan #ifdef	__cplusplus
3182527734SSukumar Swaminathan extern "C" {
3282527734SSukumar Swaminathan #endif
3382527734SSukumar Swaminathan 
3482527734SSukumar Swaminathan 
3582527734SSukumar Swaminathan /* Queue entry defines */
3682527734SSukumar Swaminathan 
3782527734SSukumar Swaminathan /* EQ entries */
3882527734SSukumar Swaminathan typedef struct EQE
3982527734SSukumar Swaminathan {
4082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
4182527734SSukumar Swaminathan 	uint32_t	CQId: 16;
4282527734SSukumar Swaminathan 	uint32_t	MinorCode: 12;
4382527734SSukumar Swaminathan 	uint32_t	MajorCode: 3;
4482527734SSukumar Swaminathan 	uint32_t	Valid: 1;
4582527734SSukumar Swaminathan #endif
4682527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
4782527734SSukumar Swaminathan 	uint32_t	Valid: 1;
4882527734SSukumar Swaminathan 	uint32_t	MajorCode: 3;
4982527734SSukumar Swaminathan 	uint32_t	MinorCode: 12;
5082527734SSukumar Swaminathan 	uint32_t	CQId: 16;
5182527734SSukumar Swaminathan #endif
5282527734SSukumar Swaminathan 
5382527734SSukumar Swaminathan } EQE_t;
5482527734SSukumar Swaminathan 
5582527734SSukumar Swaminathan typedef union
5682527734SSukumar Swaminathan {
5782527734SSukumar Swaminathan 	uint32_t	word;
5882527734SSukumar Swaminathan 	EQE_t		entry;
5982527734SSukumar Swaminathan 
6082527734SSukumar Swaminathan } EQE_u;
6182527734SSukumar Swaminathan 
6282527734SSukumar Swaminathan #define	EQE_VALID	0x00000001  /* Mask for EQE valid */
6382527734SSukumar Swaminathan #define	EQE_CQID	0xFFFF0000  /* Mask for EQE CQID */
6482527734SSukumar Swaminathan 
6582527734SSukumar Swaminathan /* CQ entries */
6682527734SSukumar Swaminathan typedef struct CQE_CmplWQ
6782527734SSukumar Swaminathan {
6882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
6982527734SSukumar Swaminathan 	uint16_t	RequestTag;	/* Word 0 */
7082527734SSukumar Swaminathan 	uint8_t		Status;
7182527734SSukumar Swaminathan 	uint8_t		hw_status;
7282527734SSukumar Swaminathan 
7382527734SSukumar Swaminathan 	uint32_t	CmdSpecific;	/* Word 1 */
7482527734SSukumar Swaminathan 	uint32_t	Parameter;	/* Word 2 */
7582527734SSukumar Swaminathan 
7682527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
7782527734SSukumar Swaminathan 	uint32_t	Rsvd1: 2;
7882527734SSukumar Swaminathan 	uint32_t	XB: 1;
7982527734SSukumar Swaminathan 	uint32_t	PV: 1;
8082527734SSukumar Swaminathan 	uint32_t	Priority: 3;
8182527734SSukumar Swaminathan 	uint32_t	Code: 8;
8282527734SSukumar Swaminathan 	uint32_t	Rsvd2: 16;
8382527734SSukumar Swaminathan #endif
8482527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
8582527734SSukumar Swaminathan 	uint8_t		hw_status;
8682527734SSukumar Swaminathan 	uint8_t		Status;
8782527734SSukumar Swaminathan 	uint16_t	RequestTag;	/* Word 0 */
8882527734SSukumar Swaminathan 
8982527734SSukumar Swaminathan 	uint32_t	CmdSpecific;	/* Word 1 */
9082527734SSukumar Swaminathan 	uint32_t	Parameter;	/* Word 2 */
9182527734SSukumar Swaminathan 
9282527734SSukumar Swaminathan 	uint32_t	Rsvd2: 16;
9382527734SSukumar Swaminathan 	uint32_t	Code: 8;
9482527734SSukumar Swaminathan 	uint32_t	Priority: 3;
9582527734SSukumar Swaminathan 	uint32_t	PV: 1;
9682527734SSukumar Swaminathan 	uint32_t	XB: 1;
9782527734SSukumar Swaminathan 	uint32_t	Rsvd1: 2;
9882527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
9982527734SSukumar Swaminathan #endif
10082527734SSukumar Swaminathan } CQE_CmplWQ_t;
10182527734SSukumar Swaminathan 
10282527734SSukumar Swaminathan typedef struct CQE_RelWQ
10382527734SSukumar Swaminathan {
10482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
10582527734SSukumar Swaminathan 	uint32_t	Reserved1;	/* Word 0 */
10682527734SSukumar Swaminathan 	uint32_t	Reserved2;	/* Word 1 */
10782527734SSukumar Swaminathan 
10882527734SSukumar Swaminathan 	uint16_t	WQid;		/* Word 2 */
10982527734SSukumar Swaminathan 	uint16_t	WQindex;
11082527734SSukumar Swaminathan 
11182527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
11282527734SSukumar Swaminathan 	uint32_t	Rsvd1: 7;
11382527734SSukumar Swaminathan 	uint32_t	Code: 8;
11482527734SSukumar Swaminathan 	uint32_t	Rsvd2: 16;
11582527734SSukumar Swaminathan #endif
11682527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
11782527734SSukumar Swaminathan 	uint32_t	Reserved1;	/* Word 0 */
11882527734SSukumar Swaminathan 	uint32_t	Reserved2;	/* Word 1 */
11982527734SSukumar Swaminathan 
12082527734SSukumar Swaminathan 	uint16_t	WQindex;
12182527734SSukumar Swaminathan 	uint16_t	WQid;		/* Word 2 */
12282527734SSukumar Swaminathan 
12382527734SSukumar Swaminathan 	uint32_t	Rsvd2: 16;
12482527734SSukumar Swaminathan 	uint32_t	Code: 8;
12582527734SSukumar Swaminathan 	uint32_t	Rsvd1: 7;
12682527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
12782527734SSukumar Swaminathan #endif
12882527734SSukumar Swaminathan } CQE_RelWQ_t;
12982527734SSukumar Swaminathan 
13082527734SSukumar Swaminathan typedef struct CQE_UnsolRcv
13182527734SSukumar Swaminathan {
13282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
13382527734SSukumar Swaminathan 	uint16_t	RQindex;	/* Word 0 */
13482527734SSukumar Swaminathan 	uint8_t		Status;
13582527734SSukumar Swaminathan 	uint8_t		Rsvd1;
13682527734SSukumar Swaminathan 
13782527734SSukumar Swaminathan 	uint32_t	Rsvd2;		/* Word 1 */
13882527734SSukumar Swaminathan 
13982527734SSukumar Swaminathan 	uint32_t	data_size: 16;	/* Word 2 */
14082527734SSukumar Swaminathan 	uint32_t	RQid: 10;
14182527734SSukumar Swaminathan 	uint32_t	FCFId: 6;
14282527734SSukumar Swaminathan 
14382527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
1448f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
14582527734SSukumar Swaminathan 	uint32_t	hdr_size: 6;
14682527734SSukumar Swaminathan 	uint32_t	Code: 8;
14782527734SSukumar Swaminathan 	uint32_t	eof: 8;
14882527734SSukumar Swaminathan 	uint32_t	sof: 8;
14982527734SSukumar Swaminathan #endif
15082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
15182527734SSukumar Swaminathan 	uint8_t		Rsvd1;
15282527734SSukumar Swaminathan 	uint8_t		Status;
15382527734SSukumar Swaminathan 	uint16_t	RQindex;	/* Word 0 */
15482527734SSukumar Swaminathan 
15582527734SSukumar Swaminathan 	uint32_t	Rsvd2;		/* Word 1 */
15682527734SSukumar Swaminathan 
15782527734SSukumar Swaminathan 	uint32_t	FCFId: 6;
15882527734SSukumar Swaminathan 	uint32_t	RQid: 10;
15982527734SSukumar Swaminathan 	uint32_t	data_size: 16;	/* Word 2 */
16082527734SSukumar Swaminathan 
16182527734SSukumar Swaminathan 	uint32_t	sof: 8;
16282527734SSukumar Swaminathan 	uint32_t	eof: 8;
16382527734SSukumar Swaminathan 	uint32_t	Code: 8;
16482527734SSukumar Swaminathan 	uint32_t	hdr_size: 6;
1658f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
16682527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
16782527734SSukumar Swaminathan #endif
16882527734SSukumar Swaminathan } CQE_UnsolRcv_t;
16982527734SSukumar Swaminathan 
1708f23e9faSHans Rosenfeld 
1718f23e9faSHans Rosenfeld typedef struct CQE_UnsolRcvV1
1728f23e9faSHans Rosenfeld {
1738f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN
1748f23e9faSHans Rosenfeld 	uint16_t	RQindex;	/* Word 0 */
1758f23e9faSHans Rosenfeld 	uint8_t		Status;
1768f23e9faSHans Rosenfeld 	uint8_t		Rsvd1;
1778f23e9faSHans Rosenfeld 
1788f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 26;	/* Word 1 */
1798f23e9faSHans Rosenfeld 	uint32_t	FCFId: 6;
1808f23e9faSHans Rosenfeld 
1818f23e9faSHans Rosenfeld 	uint16_t	data_size;	/* Word 2 */
1828f23e9faSHans Rosenfeld 	uint16_t	RQid;
1838f23e9faSHans Rosenfeld 
1848f23e9faSHans Rosenfeld 	uint32_t	Valid: 1;	/* Word 3 */
1858f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
1868f23e9faSHans Rosenfeld 	uint32_t	hdr_size: 6;
1878f23e9faSHans Rosenfeld 	uint32_t	Code: 8;
1888f23e9faSHans Rosenfeld 	uint32_t	eof: 8;
1898f23e9faSHans Rosenfeld 	uint32_t	sof: 8;
1908f23e9faSHans Rosenfeld #endif
1918f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN
1928f23e9faSHans Rosenfeld 	uint8_t		Rsvd1;
1938f23e9faSHans Rosenfeld 	uint8_t		Status;
1948f23e9faSHans Rosenfeld 	uint16_t	RQindex;	/* Word 0 */
1958f23e9faSHans Rosenfeld 
1968f23e9faSHans Rosenfeld 	uint32_t	FCFId: 6;
1978f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 26;	/* Word 1 */
1988f23e9faSHans Rosenfeld 
1998f23e9faSHans Rosenfeld 	uint16_t	RQid;
2008f23e9faSHans Rosenfeld 	uint16_t	data_size;	/* Word 2 */
2018f23e9faSHans Rosenfeld 
2028f23e9faSHans Rosenfeld 	uint32_t	sof: 8;
2038f23e9faSHans Rosenfeld 	uint32_t	eof: 8;
2048f23e9faSHans Rosenfeld 	uint32_t	Code: 8;
2058f23e9faSHans Rosenfeld 	uint32_t	hdr_size: 6;
2068f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
2078f23e9faSHans Rosenfeld 	uint32_t	Valid: 1;	/* Word 3 */
2088f23e9faSHans Rosenfeld #endif
2098f23e9faSHans Rosenfeld } CQE_UnsolRcvV1_t;
2108f23e9faSHans Rosenfeld 
21182527734SSukumar Swaminathan /* Status defines */
21282527734SSukumar Swaminathan #define	RQ_STATUS_SUCCESS		0x10
21382527734SSukumar Swaminathan #define	RQ_STATUS_BUFLEN_EXCEEDED	0x11
21482527734SSukumar Swaminathan #define	RQ_STATUS_NEED_BUFFER		0x12
21582527734SSukumar Swaminathan #define	RQ_STATUS_FRAME_DISCARDED	0x13
21682527734SSukumar Swaminathan 
21782527734SSukumar Swaminathan 
21882527734SSukumar Swaminathan typedef struct CQE_XRI_Abort
21982527734SSukumar Swaminathan {
22082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
22182527734SSukumar Swaminathan 	uint16_t	Rsvd1;		/* Word 0 */
22282527734SSukumar Swaminathan 	uint8_t		Status;
22382527734SSukumar Swaminathan 	uint8_t		Rsvd2;
22482527734SSukumar Swaminathan 
22582527734SSukumar Swaminathan 	uint32_t	rjtStatus;	/* Word 1 */
22682527734SSukumar Swaminathan 
22782527734SSukumar Swaminathan 	uint16_t	RemoteXID;	/* Word 2 */
22882527734SSukumar Swaminathan 	uint16_t	XRI;
22982527734SSukumar Swaminathan 
23082527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
23182527734SSukumar Swaminathan 	uint32_t	IA: 1;
23282527734SSukumar Swaminathan 	uint32_t	BR: 1;
23382527734SSukumar Swaminathan 	uint32_t	EO: 1;
23482527734SSukumar Swaminathan 	uint32_t	Rsvd3: 4;
23582527734SSukumar Swaminathan 	uint32_t	Code: 8;
23682527734SSukumar Swaminathan 	uint32_t	Rsvd4: 16;
23782527734SSukumar Swaminathan #endif
23882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
23982527734SSukumar Swaminathan 	uint8_t		Rsvd2;
24082527734SSukumar Swaminathan 	uint8_t		Status;
24182527734SSukumar Swaminathan 	uint16_t	Rsvd1;		/* Word 0 */
24282527734SSukumar Swaminathan 
24382527734SSukumar Swaminathan 	uint32_t	rjtStatus;	/* Word 1 */
24482527734SSukumar Swaminathan 
24582527734SSukumar Swaminathan 	uint16_t	XRI;
24682527734SSukumar Swaminathan 	uint16_t	RemoteXID;	/* Word 2 */
24782527734SSukumar Swaminathan 
24882527734SSukumar Swaminathan 	uint32_t	Rsvd4: 16;
24982527734SSukumar Swaminathan 	uint32_t	Code: 8;
25082527734SSukumar Swaminathan 	uint32_t	Rsvd3: 4;
25182527734SSukumar Swaminathan 	uint32_t	EO: 1;
25282527734SSukumar Swaminathan 	uint32_t	BR: 1;
25382527734SSukumar Swaminathan 	uint32_t	IA: 1;
25482527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
25582527734SSukumar Swaminathan #endif
25682527734SSukumar Swaminathan } CQE_XRI_Abort_t;
25782527734SSukumar Swaminathan 
25882527734SSukumar Swaminathan 
25982527734SSukumar Swaminathan 
26082527734SSukumar Swaminathan #define	CQE_VALID    0x80000000  /* Mask for CQE valid */
26182527734SSukumar Swaminathan 
26282527734SSukumar Swaminathan /* Defines for CQE Codes */
26382527734SSukumar Swaminathan #define	CQE_TYPE_WQ_COMPLETION	1
26482527734SSukumar Swaminathan #define	CQE_TYPE_RELEASE_WQE	2
26582527734SSukumar Swaminathan #define	CQE_TYPE_UNSOL_RCV	4
26682527734SSukumar Swaminathan #define	CQE_TYPE_XRI_ABORTED	5
2678f23e9faSHans Rosenfeld #define	CQE_TYPE_UNSOL_RCV_V1	9
26882527734SSukumar Swaminathan 
26982527734SSukumar Swaminathan 
27082527734SSukumar Swaminathan typedef struct CQE_ASYNC_FCOE
27182527734SSukumar Swaminathan {
27282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
27382527734SSukumar Swaminathan 	uint32_t	ref_index;	/* Word 0 */
27482527734SSukumar Swaminathan 
27582527734SSukumar Swaminathan 	uint16_t	evt_type;	/* Word 1 */
27682527734SSukumar Swaminathan 	uint16_t	fcf_count;
27782527734SSukumar Swaminathan 
27882527734SSukumar Swaminathan 	uint32_t	event_tag;	/* Word 2 */
27982527734SSukumar Swaminathan #endif
28082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
28182527734SSukumar Swaminathan 	uint32_t	ref_index;	/* Word 0 */
28282527734SSukumar Swaminathan 
28382527734SSukumar Swaminathan 	uint16_t	fcf_count;
28482527734SSukumar Swaminathan 	uint16_t	evt_type;	/* Word 1 */
28582527734SSukumar Swaminathan 
28682527734SSukumar Swaminathan 	uint32_t	event_tag;	/* Word 2 */
28782527734SSukumar Swaminathan #endif
28882527734SSukumar Swaminathan } CQE_ASYNC_FCOE_t;
28982527734SSukumar Swaminathan 
290a9800bebSGarrett D'Amore typedef struct CQE_ASYNC_LINK_STATE
29182527734SSukumar Swaminathan {
29282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
29382527734SSukumar Swaminathan 	uint8_t		port_speed;	/* Word 0 */
29482527734SSukumar Swaminathan 	uint8_t		port_duplex;
29582527734SSukumar Swaminathan 	uint8_t		link_status;
29682527734SSukumar Swaminathan 	uint8_t		phys_port;
29782527734SSukumar Swaminathan 
298b3660a96SSukumar Swaminathan 	uint16_t	qos_link_speed;	/* Word 1 */
299b3660a96SSukumar Swaminathan 	uint8_t		Rsvd1;
300b3660a96SSukumar Swaminathan 	uint8_t		port_fault;
30182527734SSukumar Swaminathan 
30282527734SSukumar Swaminathan 	uint32_t	event_tag;	/* Word 2 */
30382527734SSukumar Swaminathan #endif
30482527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
30582527734SSukumar Swaminathan 	uint8_t		phys_port;
30682527734SSukumar Swaminathan 	uint8_t		link_status;
30782527734SSukumar Swaminathan 	uint8_t		port_duplex;
30882527734SSukumar Swaminathan 	uint8_t		port_speed;	/* Word 0 */
30982527734SSukumar Swaminathan 
310b3660a96SSukumar Swaminathan 	uint8_t		port_fault;	/* Word 1 */
311b3660a96SSukumar Swaminathan 	uint8_t		Rsvd1;
312b3660a96SSukumar Swaminathan 	uint16_t	qos_link_speed;
31382527734SSukumar Swaminathan 
31482527734SSukumar Swaminathan 	uint32_t	event_tag;	/* Word 2 */
315a9800bebSGarrett D'Amore #endif
316a9800bebSGarrett D'Amore } CQE_ASYNC_LINK_STATE_t;
317a9800bebSGarrett D'Amore 
318a9800bebSGarrett D'Amore typedef struct CQE_ASYNC_GRP_5_QOS
319a9800bebSGarrett D'Amore {
320a9800bebSGarrett D'Amore #ifdef EMLXS_BIG_ENDIAN
321a9800bebSGarrett D'Amore 	uint8_t		Rsvd2;
322a9800bebSGarrett D'Amore 	uint8_t		Rsvd1;
323a9800bebSGarrett D'Amore 	uint8_t		Rsvd0;
324a9800bebSGarrett D'Amore 	uint8_t		phys_port;	/* Word 0 */
325a9800bebSGarrett D'Amore 
326a9800bebSGarrett D'Amore 	uint16_t	qos_link_speed;
327a9800bebSGarrett D'Amore 	uint8_t		Rsvd4;
328a9800bebSGarrett D'Amore 	uint8_t		Rsvd3;		/* Word 1 */
329a9800bebSGarrett D'Amore 
330a9800bebSGarrett D'Amore 	uint32_t	event_tag;	/* Word 2 */
331a9800bebSGarrett D'Amore #endif
332a9800bebSGarrett D'Amore #ifdef EMLXS_LITTLE_ENDIAN
333a9800bebSGarrett D'Amore 	uint8_t		phys_port;
334a9800bebSGarrett D'Amore 	uint8_t		Rsvd0;
335a9800bebSGarrett D'Amore 	uint8_t		Rsvd1;
336a9800bebSGarrett D'Amore 	uint8_t		Rsvd2;		/* Word 0 */
337a9800bebSGarrett D'Amore 
338a9800bebSGarrett D'Amore 	uint8_t		Rsvd3;
339a9800bebSGarrett D'Amore 	uint8_t		Rsvd4;
340a9800bebSGarrett D'Amore 	uint16_t	qos_link_speed;	/* Word 1 */
341a9800bebSGarrett D'Amore 
342a9800bebSGarrett D'Amore 	uint32_t	event_tag;	/* Word 2 */
343a9800bebSGarrett D'Amore #endif
344a9800bebSGarrett D'Amore } CQE_ASYNC_GRP_5_QOS_t;
34582527734SSukumar Swaminathan 
3468f23e9faSHans Rosenfeld 
3478f23e9faSHans Rosenfeld typedef struct CQE_ASYNC_FC_LINK_ATT
3488f23e9faSHans Rosenfeld {
3498f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN
3508f23e9faSHans Rosenfeld 	uint8_t		port_speed;	/* Word 0 */
3518f23e9faSHans Rosenfeld 	uint8_t		topology;
3528f23e9faSHans Rosenfeld 	uint8_t		att_type;
3538f23e9faSHans Rosenfeld 	uint8_t		link_number;
3548f23e9faSHans Rosenfeld 
3558f23e9faSHans Rosenfeld 	uint16_t	link_speed;	/* Word 1 */
3568f23e9faSHans Rosenfeld 	uint8_t		shared_link_status;
3578f23e9faSHans Rosenfeld 	uint8_t		port_fault;
3588f23e9faSHans Rosenfeld 
3598f23e9faSHans Rosenfeld 	uint32_t	event_tag;	/* Word 2 */
3608f23e9faSHans Rosenfeld #endif
3618f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN
3628f23e9faSHans Rosenfeld 	uint8_t		link_number;
3638f23e9faSHans Rosenfeld 	uint8_t		att_type;
3648f23e9faSHans Rosenfeld 	uint8_t		topology;
3658f23e9faSHans Rosenfeld 	uint8_t		port_speed;	/* Word 0 */
3668f23e9faSHans Rosenfeld 
3678f23e9faSHans Rosenfeld 	uint8_t		port_fault;
3688f23e9faSHans Rosenfeld 	uint8_t		shared_link_status;
3698f23e9faSHans Rosenfeld 	uint16_t	link_speed;	/* Word 1 */
3708f23e9faSHans Rosenfeld 
3718f23e9faSHans Rosenfeld 	uint32_t	event_tag;	/* Word 2 */
3728f23e9faSHans Rosenfeld #endif
3738f23e9faSHans Rosenfeld } CQE_ASYNC_FC_LINK_ATT_t;
3748f23e9faSHans Rosenfeld 
3758f23e9faSHans Rosenfeld typedef struct CQE_ASYNC_PORT
3768f23e9faSHans Rosenfeld {
3778f23e9faSHans Rosenfeld 	uint8_t		link_status[4];
3788f23e9faSHans Rosenfeld 	uint32_t	data_word2;
3798f23e9faSHans Rosenfeld 	uint32_t	Rsvd;
3808f23e9faSHans Rosenfeld } CQE_ASYNC_PORT_t;
3818f23e9faSHans Rosenfeld 
3828f23e9faSHans Rosenfeld /* topology */
3838f23e9faSHans Rosenfeld #define	TOPOLOGY_UNKNOWN	0
3848f23e9faSHans Rosenfeld #define	TOPOLOGY_NPORT		1
3858f23e9faSHans Rosenfeld #define	TOPOLOGY_LPORT		2
3868f23e9faSHans Rosenfeld #define	TOPOLOGY_INTERNAL_LB	3
3878f23e9faSHans Rosenfeld #define	TOPOLOGY_SERDES_LB	4
3888f23e9faSHans Rosenfeld 
3898f23e9faSHans Rosenfeld /* att_type */
3908f23e9faSHans Rosenfeld #define	ATT_TYPE_LINK_UP	1
3918f23e9faSHans Rosenfeld #define	ATT_TYPE_LINK_DOWN	2
3928f23e9faSHans Rosenfeld #define	ATT_TYPE_NO_HARD_ALPA	3
3938f23e9faSHans Rosenfeld 
3948f23e9faSHans Rosenfeld /* shared_link_status */
3958f23e9faSHans Rosenfeld #define	SHARED_STATUS_NONE			0
3968f23e9faSHans Rosenfeld #define	SHARED_STATUS_LD_UNUSABLE		1
3978f23e9faSHans Rosenfeld #define	SHARED_STATUS_LD_TRAN_FAULT		2
3988f23e9faSHans Rosenfeld #define	SHARED_STATUS_LD_NO_SIGNAL		3
3998f23e9faSHans Rosenfeld #define	SHARED_STATUS_LD_MGMT_DISABLED		4
4008f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_FAILED_P2P		5
4018f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_FAILED_FLOGI_TMO	6
4028f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_FAILED_NO_FPORT	7
4038f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_FAILED_NO_NPIV		8
4048f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_FAILED_FLOGO		9
4058f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_LOOPBACK		20
4068f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_NORMAL			40
4078f23e9faSHans Rosenfeld 
4088f23e9faSHans Rosenfeld /* port_fault */
4098f23e9faSHans Rosenfeld #define	PORT_FAULT_NONE		0
4108f23e9faSHans Rosenfeld #define	PORT_FAULT_LOCAL	1
4118f23e9faSHans Rosenfeld #define	PORT_FAULT_REMOTE	2
4128f23e9faSHans Rosenfeld 
413a9800bebSGarrett D'Amore typedef struct CQE_ASYNC
414a9800bebSGarrett D'Amore {
415a9800bebSGarrett D'Amore 	/* Words 0-2 */
416a9800bebSGarrett D'Amore 	union
417a9800bebSGarrett D'Amore 	{
418a9800bebSGarrett D'Amore 		CQE_ASYNC_LINK_STATE_t	link;
419a9800bebSGarrett D'Amore 		CQE_ASYNC_FCOE_t	fcoe;
420a9800bebSGarrett D'Amore 		CQE_ASYNC_GRP_5_QOS_t	qos;
4218f23e9faSHans Rosenfeld 		CQE_ASYNC_FC_LINK_ATT_t fc;
4228f23e9faSHans Rosenfeld 		CQE_ASYNC_PORT_t 	port;
423a9800bebSGarrett D'Amore 	} un;
424a9800bebSGarrett D'Amore 
425a9800bebSGarrett D'Amore #ifdef EMLXS_BIG_ENDIAN
426a9800bebSGarrett D'Amore 	uint32_t	valid: 1;
427a9800bebSGarrett D'Amore 	uint32_t	async_evt: 1;
428a9800bebSGarrett D'Amore 	uint32_t	Rsvd2: 6;
429a9800bebSGarrett D'Amore 	uint32_t	event_type: 8;
430a9800bebSGarrett D'Amore 	uint32_t	event_code: 8;
431a9800bebSGarrett D'Amore 	uint32_t	Rsvd3: 8;	/* Word 3 */
432a9800bebSGarrett D'Amore #endif
433a9800bebSGarrett D'Amore #ifdef EMLXS_LITTLE_ENDIAN
43482527734SSukumar Swaminathan 	uint32_t	Rsvd3: 8;
43582527734SSukumar Swaminathan 	uint32_t	event_code: 8;
43682527734SSukumar Swaminathan 	uint32_t	event_type: 8;
43782527734SSukumar Swaminathan 	uint32_t	Rsvd2: 6;
43882527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
43982527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
44082527734SSukumar Swaminathan #endif
44182527734SSukumar Swaminathan } CQE_ASYNC_t;
44282527734SSukumar Swaminathan 
44382527734SSukumar Swaminathan /* port_speed defines */
44482527734SSukumar Swaminathan #define	PHY_1GHZ_LINK			3
44582527734SSukumar Swaminathan #define	PHY_10GHZ_LINK			4
44682527734SSukumar Swaminathan 
44782527734SSukumar Swaminathan /* event_code defines */
4488f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_FCOE_LINK_STATE	0x01
4498f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_FCOE_FIP		0x02
4508f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_DCBX			0x03
4518f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_ISCSI			0x04
4528f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_GRP_5			0x05
4538f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_FC_EVENT		0x10
4548f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_PORT			0x11
4558f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_VF			0x12
4568f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_MR			0x13
4578f23e9faSHans Rosenfeld 
4588f23e9faSHans Rosenfeld /* FC Event */
4598f23e9faSHans Rosenfeld #define	ASYNC_EVENT_FC_LINK_ATT		1
4608f23e9faSHans Rosenfeld #define	ASYNC_EVENT_FC_SHARED_LINK_ATT	2
46182527734SSukumar Swaminathan 
46282527734SSukumar Swaminathan /* LINK_STATE - link_status defines */
46382527734SSukumar Swaminathan #define	ASYNC_EVENT_PHYS_LINK_DOWN	0
46482527734SSukumar Swaminathan #define	ASYNC_EVENT_PHYS_LINK_UP	1
46582527734SSukumar Swaminathan #define	ASYNC_EVENT_LOGICAL_LINK_DOWN	2
46682527734SSukumar Swaminathan #define	ASYNC_EVENT_LOGICAL_LINK_UP	3
46782527734SSukumar Swaminathan 
46882527734SSukumar Swaminathan /* FCOE_FIP - evt_type defines */
46982527734SSukumar Swaminathan #define	ASYNC_EVENT_NEW_FCF_DISC	1
47082527734SSukumar Swaminathan #define	ASYNC_EVENT_FCF_TABLE_FULL	2
47182527734SSukumar Swaminathan #define	ASYNC_EVENT_FCF_DEAD		3
47282527734SSukumar Swaminathan #define	ASYNC_EVENT_VIRT_LINK_CLEAR	4
473a9800bebSGarrett D'Amore #define	ASYNC_EVENT_FCF_MODIFIED	5
474a9800bebSGarrett D'Amore 
475a9800bebSGarrett D'Amore /* GRP_5 - evt_type defines */
476a9800bebSGarrett D'Amore #define	ASYNC_EVENT_QOS_SPEED		1
47782527734SSukumar Swaminathan 
4788f23e9faSHans Rosenfeld /* PORT - evt_type defines */
479088c6f3fSHans Rosenfeld #define	ASYNC_EVENT_PORT_OTEMP		2
480088c6f3fSHans Rosenfeld #define	ASYNC_EVENT_PORT_NTEMP		3
4818f23e9faSHans Rosenfeld #define	ASYNC_EVENT_MISCONFIG_PORT	9
4828f23e9faSHans Rosenfeld 
48382527734SSukumar Swaminathan typedef struct CQE_MBOX
48482527734SSukumar Swaminathan {
48582527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
48682527734SSukumar Swaminathan 	uint16_t	extend_status;	/* Word 0 */
48782527734SSukumar Swaminathan 	uint16_t	cmpl_status;
48882527734SSukumar Swaminathan 
48982527734SSukumar Swaminathan 	uint32_t	tag_low;	/* Word 1 */
49082527734SSukumar Swaminathan 	uint32_t	tag_high;	/* Word 2 */
49182527734SSukumar Swaminathan 
49282527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
49382527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
49482527734SSukumar Swaminathan 	uint32_t	hpi: 1;
49582527734SSukumar Swaminathan 	uint32_t	completed: 1;
49682527734SSukumar Swaminathan 	uint32_t	consumed: 1;
49782527734SSukumar Swaminathan 	uint32_t	Rsvd1: 27;
49882527734SSukumar Swaminathan #endif
49982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
50082527734SSukumar Swaminathan 	uint16_t	cmpl_status;
50182527734SSukumar Swaminathan 	uint16_t	extend_status;	/* Word 0 */
50282527734SSukumar Swaminathan 
50382527734SSukumar Swaminathan 	uint32_t	tag_low;	/* Word 1 */
50482527734SSukumar Swaminathan 	uint32_t	tag_high;	/* Word 2 */
50582527734SSukumar Swaminathan 
50682527734SSukumar Swaminathan 	uint32_t	Rsvd1: 27;
50782527734SSukumar Swaminathan 	uint32_t	consumed: 1;
50882527734SSukumar Swaminathan 	uint32_t	completed: 1;
50982527734SSukumar Swaminathan 	uint32_t	hpi: 1;
51082527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
51182527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
51282527734SSukumar Swaminathan #endif
51382527734SSukumar Swaminathan } CQE_MBOX_t;
51482527734SSukumar Swaminathan 
51582527734SSukumar Swaminathan typedef union
51682527734SSukumar Swaminathan {
51782527734SSukumar Swaminathan 	uint32_t	word[4];
51882527734SSukumar Swaminathan 
51982527734SSukumar Swaminathan 	/* Group 1 types */
52082527734SSukumar Swaminathan 	CQE_ASYNC_t	cqAsyncEntry;
52182527734SSukumar Swaminathan 	CQE_ASYNC_FCOE_t cqAsyncFCOEEntry;
52282527734SSukumar Swaminathan 	CQE_MBOX_t	cqMboxEntry;
52382527734SSukumar Swaminathan 
52482527734SSukumar Swaminathan 	/* Group 2 types */
52582527734SSukumar Swaminathan 	CQE_CmplWQ_t	cqCmplEntry;
52682527734SSukumar Swaminathan 	CQE_RelWQ_t	cqRelEntry;
52782527734SSukumar Swaminathan 	CQE_UnsolRcv_t	cqUnsolRcvEntry;
5288f23e9faSHans Rosenfeld 	CQE_UnsolRcvV1_t cqUnsolRcvEntryV1;
52982527734SSukumar Swaminathan 	CQE_XRI_Abort_t	cqXRIEntry;
53082527734SSukumar Swaminathan } CQE_u;
53182527734SSukumar Swaminathan 
53282527734SSukumar Swaminathan /* RQ entries */
53382527734SSukumar Swaminathan typedef struct RQE
53482527734SSukumar Swaminathan {
53582527734SSukumar Swaminathan 	uint32_t	AddrHi;
53682527734SSukumar Swaminathan 	uint32_t	AddrLo;
53782527734SSukumar Swaminathan 
53882527734SSukumar Swaminathan } RQE_t;
53982527734SSukumar Swaminathan 
54082527734SSukumar Swaminathan 
54182527734SSukumar Swaminathan /* Definitions for WQEs */
54282527734SSukumar Swaminathan typedef struct
54382527734SSukumar Swaminathan {
5448f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
54582527734SSukumar Swaminathan 	ULP_BDE64	Payload;
5468f23e9faSHans Rosenfeld 
5478f23e9faSHans Rosenfeld 	/* Word 3 */
54882527734SSukumar Swaminathan 	uint32_t	PayloadLength;
54982527734SSukumar Swaminathan 
55082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
5518f23e9faSHans Rosenfeld 	/* Word 4 */
55282527734SSukumar Swaminathan 	uint32_t	Rsvd1: 6;
55382527734SSukumar Swaminathan 	uint32_t	VF: 1;
55482527734SSukumar Swaminathan 	uint32_t	SP: 1;
55582527734SSukumar Swaminathan 	uint32_t	LocalId: 24;
55682527734SSukumar Swaminathan 
5578f23e9faSHans Rosenfeld 	/* Word 5 */
55882527734SSukumar Swaminathan 	uint32_t	Rsvd2:  8;
55982527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
56082527734SSukumar Swaminathan #endif
56182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
5628f23e9faSHans Rosenfeld 	/* Word 4 */
56382527734SSukumar Swaminathan 	uint32_t	LocalId: 24;
56482527734SSukumar Swaminathan 	uint32_t	SP: 1;
56582527734SSukumar Swaminathan 	uint32_t	VF: 1;
56682527734SSukumar Swaminathan 	uint32_t	Rsvd1: 6;
56782527734SSukumar Swaminathan 
5688f23e9faSHans Rosenfeld 	/* Word 5 */
56982527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
57082527734SSukumar Swaminathan 	uint32_t	Rsvd2:  8;
57182527734SSukumar Swaminathan #endif
57282527734SSukumar Swaminathan 
57382527734SSukumar Swaminathan } ELS_REQ_WQE;
57482527734SSukumar Swaminathan 
57582527734SSukumar Swaminathan typedef struct
57682527734SSukumar Swaminathan {
5778f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
57882527734SSukumar Swaminathan 	ULP_BDE64	Payload;
5798f23e9faSHans Rosenfeld 
5808f23e9faSHans Rosenfeld 	/* Word 3 */
5818f23e9faSHans Rosenfeld 	uint32_t	PayloadLength;
5828f23e9faSHans Rosenfeld 
5838f23e9faSHans Rosenfeld 	/* Word 4 */
5848f23e9faSHans Rosenfeld 	uint32_t	Rsvd1;
58582527734SSukumar Swaminathan 
58682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
5878f23e9faSHans Rosenfeld 	/* Word 5 */
58882527734SSukumar Swaminathan 	uint32_t	Rsvd2: 8;
58982527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
59082527734SSukumar Swaminathan #endif
59182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
5928f23e9faSHans Rosenfeld 	/* Word 5 */
59382527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
59482527734SSukumar Swaminathan 	uint32_t	Rsvd2: 8;
59582527734SSukumar Swaminathan #endif
59682527734SSukumar Swaminathan 
59782527734SSukumar Swaminathan } ELS_RSP_WQE;
59882527734SSukumar Swaminathan 
59982527734SSukumar Swaminathan typedef struct
60082527734SSukumar Swaminathan {
6018f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
60282527734SSukumar Swaminathan 	ULP_BDE64	Payload;
6038f23e9faSHans Rosenfeld 
6048f23e9faSHans Rosenfeld 	/* Word 3 */
60582527734SSukumar Swaminathan 	uint32_t	PayloadLength;
60682527734SSukumar Swaminathan 
6078f23e9faSHans Rosenfeld 	/* Word 4 */
60882527734SSukumar Swaminathan 	uint32_t	Parameter;
60982527734SSukumar Swaminathan 
61082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
6118f23e9faSHans Rosenfeld 	/* Word 5 */
61282527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
61382527734SSukumar Swaminathan 	uint32_t	Type: 8;
61482527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
61582527734SSukumar Swaminathan 	uint32_t	Rsvd1: 4;
61682527734SSukumar Swaminathan 	uint32_t	la: 1;
61782527734SSukumar Swaminathan 	uint32_t	Rsvd2: 3;
61882527734SSukumar Swaminathan #endif
61982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
6208f23e9faSHans Rosenfeld 	/* Word 5 */
62182527734SSukumar Swaminathan 	uint32_t	Rsvd2: 3;
62282527734SSukumar Swaminathan 	uint32_t	la: 1;
62382527734SSukumar Swaminathan 	uint32_t	Rsvd1: 4;
62482527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
62582527734SSukumar Swaminathan 	uint32_t	Type: 8;
62682527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
62782527734SSukumar Swaminathan #endif
62882527734SSukumar Swaminathan 
62982527734SSukumar Swaminathan } GEN_REQ_WQE;
63082527734SSukumar Swaminathan 
63182527734SSukumar Swaminathan typedef struct
63282527734SSukumar Swaminathan {
6338f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
63482527734SSukumar Swaminathan 	ULP_BDE64	Payload;
63582527734SSukumar Swaminathan 
6368f23e9faSHans Rosenfeld 	/* Word 3 */
6378f23e9faSHans Rosenfeld 	uint32_t	Rsvd0;
6388f23e9faSHans Rosenfeld 
6398f23e9faSHans Rosenfeld 	/* Word 4 */
64082527734SSukumar Swaminathan 	uint32_t	Parameter;
64182527734SSukumar Swaminathan 
64282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
6438f23e9faSHans Rosenfeld 	/* Word 5 */
64482527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
64582527734SSukumar Swaminathan 	uint32_t	Type: 8;
64682527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
64782527734SSukumar Swaminathan 	uint32_t	ls: 1;
6488f23e9faSHans Rosenfeld 	uint32_t	xo: 1;
6498f23e9faSHans Rosenfeld 	uint32_t	Rsvd1: 2;
6508f23e9faSHans Rosenfeld 	uint32_t	ft: 1;
65182527734SSukumar Swaminathan 	uint32_t	si: 1;
65282527734SSukumar Swaminathan 	uint32_t	Rsvd2: 2;
65382527734SSukumar Swaminathan #endif
65482527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
6558f23e9faSHans Rosenfeld 	/* Word 5 */
65682527734SSukumar Swaminathan 	uint32_t	Rsvd2: 2;
65782527734SSukumar Swaminathan 	uint32_t	si: 1;
6588f23e9faSHans Rosenfeld 	uint32_t	ft: 1;
6598f23e9faSHans Rosenfeld 	uint32_t	Rsvd1: 2;
6608f23e9faSHans Rosenfeld 	uint32_t	xo: 1;
66182527734SSukumar Swaminathan 	uint32_t	ls: 1;
66282527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
66382527734SSukumar Swaminathan 	uint32_t	Type: 8;
66482527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
66582527734SSukumar Swaminathan #endif
66682527734SSukumar Swaminathan 
66782527734SSukumar Swaminathan } XMIT_SEQ_WQE;
66882527734SSukumar Swaminathan 
66982527734SSukumar Swaminathan typedef struct
67082527734SSukumar Swaminathan {
6718f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
6728f23e9faSHans Rosenfeld 	ULP_BDE64	  Payload;
6738f23e9faSHans Rosenfeld 
6748f23e9faSHans Rosenfeld 	/* Word 3 */
6758f23e9faSHans Rosenfeld 	uint32_t	  PayloadLength;
67682527734SSukumar Swaminathan 
6778f23e9faSHans Rosenfeld 	/* Word 4 */
67882527734SSukumar Swaminathan 	uint32_t	TotalTransferCount;
6798f23e9faSHans Rosenfeld 
6808f23e9faSHans Rosenfeld 	/* Word 5 */
68182527734SSukumar Swaminathan 	uint32_t	Rsvd1;
68282527734SSukumar Swaminathan 
68382527734SSukumar Swaminathan } FCP_WQE;
68482527734SSukumar Swaminathan 
68582527734SSukumar Swaminathan 
68682527734SSukumar Swaminathan typedef struct
68782527734SSukumar Swaminathan {
6888f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
68982527734SSukumar Swaminathan 	uint32_t	Rsvd1[3];
69082527734SSukumar Swaminathan 
69182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
6928f23e9faSHans Rosenfeld 	/* Word 3 */
69382527734SSukumar Swaminathan 	uint32_t	Rsvd2: 16;
69482527734SSukumar Swaminathan 	uint32_t	Criteria: 8;
69582527734SSukumar Swaminathan 	uint32_t	Rsvd3: 7;
69682527734SSukumar Swaminathan 	uint32_t	IA: 1;
69782527734SSukumar Swaminathan #endif
69882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
6998f23e9faSHans Rosenfeld 	/* Word 3 */
70082527734SSukumar Swaminathan 	uint32_t	IA: 1;
70182527734SSukumar Swaminathan 	uint32_t	Rsvd3: 7;
70282527734SSukumar Swaminathan 	uint32_t	Criteria: 8;
70382527734SSukumar Swaminathan 	uint32_t	Rsvd2: 16;
70482527734SSukumar Swaminathan #endif
70582527734SSukumar Swaminathan 
7068f23e9faSHans Rosenfeld 	/* Word 4 - 5 */
70782527734SSukumar Swaminathan 	uint32_t	Rsvd4[2];
70882527734SSukumar Swaminathan 
70982527734SSukumar Swaminathan } ABORT_WQE;
71082527734SSukumar Swaminathan 
71182527734SSukumar Swaminathan #define	ABORT_XRI_TAG	1	/* Abort tag is a XRITag */
71282527734SSukumar Swaminathan #define	ABORT_ABT_TAG	2	/* Abort tag is a AbortTag */
71382527734SSukumar Swaminathan #define	ABORT_REQ_TAG	3	/* Abort tag is a RequestTag */
71482527734SSukumar Swaminathan 
71582527734SSukumar Swaminathan typedef struct
71682527734SSukumar Swaminathan {
71782527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
7188f23e9faSHans Rosenfeld 	/* Word 0 */
71982527734SSukumar Swaminathan 	uint8_t		Payload0;
72082527734SSukumar Swaminathan 	uint8_t		Payload1;
72182527734SSukumar Swaminathan 	uint8_t		Payload2;
72282527734SSukumar Swaminathan 	uint8_t		Payload3;
72382527734SSukumar Swaminathan 
7248f23e9faSHans Rosenfeld 	/* Word 1 */
72582527734SSukumar Swaminathan 	uint32_t	OXId: 16;
72682527734SSukumar Swaminathan 	uint32_t	RXId: 16;
72782527734SSukumar Swaminathan 
7288f23e9faSHans Rosenfeld 	/* Word 2 */
72982527734SSukumar Swaminathan 	uint32_t	SeqCntLow: 16;
73082527734SSukumar Swaminathan 	uint32_t	SeqCntHigh: 16;
7318f23e9faSHans Rosenfeld 
7328f23e9faSHans Rosenfeld 	/* Word 3 */
7338f23e9faSHans Rosenfeld 	uint32_t	Rsvd1;
7348f23e9faSHans Rosenfeld 
7358f23e9faSHans Rosenfeld 	/* Word 4 */
7368f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 8;
7378f23e9faSHans Rosenfeld 	uint32_t	LocalId: 24;
7388f23e9faSHans Rosenfeld 
7398f23e9faSHans Rosenfeld 	/* Word 5 */
7408f23e9faSHans Rosenfeld 	uint32_t	XO: 1;
7418f23e9faSHans Rosenfeld 	uint32_t	AR: 1;
7428f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 6;
7438f23e9faSHans Rosenfeld 	uint32_t	RemoteId: 24;
74482527734SSukumar Swaminathan #endif
74582527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
7468f23e9faSHans Rosenfeld 	/* Word 0 */
74782527734SSukumar Swaminathan 	uint8_t		Payload3;
74882527734SSukumar Swaminathan 	uint8_t		Payload2;
74982527734SSukumar Swaminathan 	uint8_t		Payload1;
75082527734SSukumar Swaminathan 	uint8_t		Payload0;
75182527734SSukumar Swaminathan 
7528f23e9faSHans Rosenfeld 	/* Word 1 */
75382527734SSukumar Swaminathan 	uint32_t	RXId: 16;
75482527734SSukumar Swaminathan 	uint32_t	OXId: 16;
75582527734SSukumar Swaminathan 
7568f23e9faSHans Rosenfeld 	/* Word 2 */
75782527734SSukumar Swaminathan 	uint32_t	SeqCntHigh: 16;
75882527734SSukumar Swaminathan 	uint32_t	SeqCntLow: 16;
7598f23e9faSHans Rosenfeld 
7608f23e9faSHans Rosenfeld 	/* Word 3 */
7618f23e9faSHans Rosenfeld 	uint32_t	Rsvd1;
7628f23e9faSHans Rosenfeld 
7638f23e9faSHans Rosenfeld 	/* Word 4 */
7648f23e9faSHans Rosenfeld 	uint32_t	LocalId: 24;
7658f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 8;
7668f23e9faSHans Rosenfeld 
7678f23e9faSHans Rosenfeld 	/* Word 5 */
76882527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
7698f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 6;
77082527734SSukumar Swaminathan 	uint32_t	AR: 1;
77182527734SSukumar Swaminathan 	uint32_t	XO: 1;
77282527734SSukumar Swaminathan #endif
77382527734SSukumar Swaminathan 
77482527734SSukumar Swaminathan } BLS_WQE;
77582527734SSukumar Swaminathan 
77682527734SSukumar Swaminathan 
77782527734SSukumar Swaminathan typedef struct
77882527734SSukumar Swaminathan {
7798f23e9faSHans Rosenfeld 	/* Word 0 - 4 */
78082527734SSukumar Swaminathan 	uint32_t	Rsvd1[5];
78182527734SSukumar Swaminathan 
78282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
7838f23e9faSHans Rosenfeld 	/* Word 5 */
78482527734SSukumar Swaminathan 	uint32_t	XO: 1;
7858f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 31;
78682527734SSukumar Swaminathan #endif
78782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
7888f23e9faSHans Rosenfeld 	/* Word 5 */
7898f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 31;
79082527734SSukumar Swaminathan 	uint32_t	XO: 1;
79182527734SSukumar Swaminathan #endif
79282527734SSukumar Swaminathan 
79382527734SSukumar Swaminathan } CREATE_XRI_WQE;
79482527734SSukumar Swaminathan 
79582527734SSukumar Swaminathan typedef struct emlxs_wqe
79682527734SSukumar Swaminathan {
79782527734SSukumar Swaminathan 	/* Words 0-5 */
79882527734SSukumar Swaminathan 	union
79982527734SSukumar Swaminathan 	{
80082527734SSukumar Swaminathan 		uint32_t	word[6];	/* Words 0-5: cmd specific */
80182527734SSukumar Swaminathan 		ELS_REQ_WQE	ElsCmd;		/* ELS command overlay */
80282527734SSukumar Swaminathan 		GEN_REQ_WQE	GenReq;		/* CT command overlay */
80382527734SSukumar Swaminathan 		FCP_WQE		FcpCmd;		/* FCP command overlay */
80482527734SSukumar Swaminathan 		ELS_RSP_WQE	ElsRsp;		/* ELS response overlay */
80582527734SSukumar Swaminathan 		ABORT_WQE	Abort;		/* Abort overlay */
80682527734SSukumar Swaminathan 		BLS_WQE		BlsRsp;		/* BLS overlay */
80782527734SSukumar Swaminathan 		CREATE_XRI_WQE	CreateXri;	/* Create XRI */
80882527734SSukumar Swaminathan 		XMIT_SEQ_WQE	XmitSeq;	/* Xmit Sequence */
80982527734SSukumar Swaminathan 	} un;
81082527734SSukumar Swaminathan 
81182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
81282527734SSukumar Swaminathan 	/* Word 6 */
81382527734SSukumar Swaminathan 	uint16_t	ContextTag;	/* Context Tag */
81482527734SSukumar Swaminathan 	uint16_t	XRITag;		/* XRItag */
81582527734SSukumar Swaminathan 	/* Word 7 */
81682527734SSukumar Swaminathan 	uint32_t	Timer: 8;	/* TOV */
8178f23e9faSHans Rosenfeld 	uint32_t	Rsvd1: 1;
81882527734SSukumar Swaminathan 	uint32_t	ERP: 1;		/* ERP */
81982527734SSukumar Swaminathan 	uint32_t	PU: 2;		/* PU */
8208f23e9faSHans Rosenfeld 	uint32_t	AR: 1;		/* Auto Response */
82182527734SSukumar Swaminathan 	uint32_t	Class: 3;	/* COS */
82282527734SSukumar Swaminathan 	uint32_t	Command: 8;	/* Command Code */
8238f23e9faSHans Rosenfeld 	uint32_t	Rsvd0: 1;
8248f23e9faSHans Rosenfeld 	uint32_t	BsType: 3;	/* DIF Block Size type */
82582527734SSukumar Swaminathan 	uint32_t	ContextType: 2;	/* Context Type */
8268f23e9faSHans Rosenfeld 	uint32_t	DIF: 2;
82782527734SSukumar Swaminathan 	/* Word 8 */
82882527734SSukumar Swaminathan 	uint32_t	AbortTag;	/* Abort Tag */
82982527734SSukumar Swaminathan 	/* Word 9 */
83082527734SSukumar Swaminathan 	uint16_t	OXId;		/* OXId on xmitted rsp */
83182527734SSukumar Swaminathan 	uint16_t	RequestTag;	/* Request Tag */
83282527734SSukumar Swaminathan 	/* Word 10 */
83382527734SSukumar Swaminathan 	uint32_t	CCP: 8;		/* CCP */
83482527734SSukumar Swaminathan 	uint32_t	CCPE: 1;	/* CCPEnabled */
8358f23e9faSHans Rosenfeld 	uint32_t	CMD: 1;
83682527734SSukumar Swaminathan 	uint32_t	XC: 1;		/* Exchange Create */
83782527734SSukumar Swaminathan 	uint32_t	Rsvd5: 1;
83882527734SSukumar Swaminathan 	uint32_t	PV: 1;		/* PRIValid */
83982527734SSukumar Swaminathan 	uint32_t	PRI: 3;		/* PRI */
8408f23e9faSHans Rosenfeld 					/* The following 16 bits may be */
8418f23e9faSHans Rosenfeld 					/* overwritten by PHWQ */
8428f23e9faSHans Rosenfeld 	uint32_t	WQES: 1;	/* WQE specify XBL */
8438f23e9faSHans Rosenfeld 	uint32_t	DBDE: 1;	/* Data type for BDE 0 */
8448f23e9faSHans Rosenfeld 	uint32_t	IOd: 1;		/* IO direction */
8458f23e9faSHans Rosenfeld 	uint32_t	Rsvd4: 1;
8468f23e9faSHans Rosenfeld 	uint32_t	XBL: 1;		/* Explicit Buffer List */
8478f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
8488f23e9faSHans Rosenfeld 	uint32_t	QOSd: 1;	/* QOS disable */
8498f23e9faSHans Rosenfeld 	uint32_t	LenLoc: 2;	/* Length Location */
8508f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 3;
8518f23e9faSHans Rosenfeld 	uint32_t	EBDEcnt: 4;	/* Extended BDE cnt */
85282527734SSukumar Swaminathan 	/* Word 11 */
8538f23e9faSHans Rosenfeld 	uint32_t	CQId: 16;	/* CompletionQueueID */
85482527734SSukumar Swaminathan 	uint32_t	Rsvd8: 8;
85582527734SSukumar Swaminathan 	uint32_t	WQEC: 1;	/* Request WQE consumed CQE */
8568f23e9faSHans Rosenfeld 	uint32_t	ELSId: 3;
85782527734SSukumar Swaminathan 	uint32_t	CmdType: 4;	/* Command Type */
85882527734SSukumar Swaminathan #endif
85982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
86082527734SSukumar Swaminathan 	/* Word 6 */
86182527734SSukumar Swaminathan 	uint16_t	XRITag;		/* XRItag */
86282527734SSukumar Swaminathan 	uint16_t	ContextTag;	/* Context Tag */
86382527734SSukumar Swaminathan 	/* Word 7 */
8648f23e9faSHans Rosenfeld 	uint32_t	DIF: 2;
86582527734SSukumar Swaminathan 	uint32_t	ContextType: 2;	/* Context Type */
8668f23e9faSHans Rosenfeld 	uint32_t	BsType: 3;	/* DIF Block Size type */
8678f23e9faSHans Rosenfeld 	uint32_t	Rsvd0: 1;
86882527734SSukumar Swaminathan 	uint32_t	Command: 8;	/* Command Code */
86982527734SSukumar Swaminathan 	uint32_t	Class: 3;	/* COS */
8708f23e9faSHans Rosenfeld 	uint32_t	AR: 1;		/* Auto Response */
87182527734SSukumar Swaminathan 	uint32_t	PU: 2;		/* PU */
87282527734SSukumar Swaminathan 	uint32_t	ERP: 1;		/* ERP */
8738f23e9faSHans Rosenfeld 	uint32_t	Rsvd1: 1;
87482527734SSukumar Swaminathan 	uint32_t	Timer: 8;	/* TOV */
87582527734SSukumar Swaminathan 	/* Word 8 */
87682527734SSukumar Swaminathan 	uint32_t	AbortTag;	/* Abort Tag */
87782527734SSukumar Swaminathan 	/* Word 9 */
87882527734SSukumar Swaminathan 	uint16_t	RequestTag;	/* Request Tag */
87982527734SSukumar Swaminathan 	uint16_t	OXId;		/* OXId on xmitted rsp */
88082527734SSukumar Swaminathan 	/* Word 10 */
8818f23e9faSHans Rosenfeld 					/* The following 16 bits may be */
8828f23e9faSHans Rosenfeld 					/* overwritten by PHWQ */
8838f23e9faSHans Rosenfeld 	uint32_t	EBDEcnt: 4;	/* Extended BDE cnt */
8848f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 3;
8858f23e9faSHans Rosenfeld 	uint32_t	LenLoc: 2;	/* Length Location */
8868f23e9faSHans Rosenfeld 	uint32_t	QOSd: 1;	/* QOS disable */
8878f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
8888f23e9faSHans Rosenfeld 	uint32_t	XBL: 1;		/* Explicit Buffer List */
8898f23e9faSHans Rosenfeld 	uint32_t	Rsvd4: 1;
8908f23e9faSHans Rosenfeld 	uint32_t	IOd: 1;		/* IO direction */
8918f23e9faSHans Rosenfeld 	uint32_t	DBDE: 1;	/* Data type for BDE 0 */
8928f23e9faSHans Rosenfeld 	uint32_t	WQES: 1;	/* WQE specify XBL */
89382527734SSukumar Swaminathan 	uint32_t	PRI: 3;		/* PRI */
89482527734SSukumar Swaminathan 	uint32_t	PV: 1;		/* PRIValid */
89582527734SSukumar Swaminathan 	uint32_t	Rsvd5: 1;
89682527734SSukumar Swaminathan 	uint32_t	XC: 1;		/* Exchange Create */
8978f23e9faSHans Rosenfeld 	uint32_t	CMD: 1;
89882527734SSukumar Swaminathan 	uint32_t	CCPE: 1;	/* CCPEnabled */
89982527734SSukumar Swaminathan 	uint32_t	CCP: 8;		/* CCP */
90082527734SSukumar Swaminathan 	/* Word 11 */
90182527734SSukumar Swaminathan 	uint32_t	CmdType: 4;	/* Command Type */
9028f23e9faSHans Rosenfeld 	uint32_t	ELSId: 3;
90382527734SSukumar Swaminathan 	uint32_t	WQEC: 1;	/* Request WQE consumed CQE */
90482527734SSukumar Swaminathan 	uint32_t	Rsvd8: 8;
9058f23e9faSHans Rosenfeld 	uint32_t	CQId: 16;	/* CompletionQueueID */
90682527734SSukumar Swaminathan #endif
90782527734SSukumar Swaminathan 
9088f23e9faSHans Rosenfeld 	/* Words 12 */
9098f23e9faSHans Rosenfeld 	uint32_t	CmdSpecific;	/* Command specific information */
9108f23e9faSHans Rosenfeld 
9118f23e9faSHans Rosenfeld 	/* Words 13-15 */
9128f23e9faSHans Rosenfeld 	ULP_BDE64	FirstData;
91382527734SSukumar Swaminathan } emlxs_wqe_t;
91482527734SSukumar Swaminathan 
9158f23e9faSHans Rosenfeld /* Used if PHWQ is enabled */
9168f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN
9178f23e9faSHans Rosenfeld #define	WQE_PHWQ_WQID(wqe, qid)  *(((uint16_t *)(wqe)) + 21) = \
9188f23e9faSHans Rosenfeld 				    ((qid << 1) & 0xfffe);
9198f23e9faSHans Rosenfeld #endif
9208f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN
9218f23e9faSHans Rosenfeld #define	WQE_PHWQ_WQID(wqe, qid)  *(((uint16_t *)(wqe)) + 20) = \
9228f23e9faSHans Rosenfeld 				    ((qid << 1) & 0xfffe);
9238f23e9faSHans Rosenfeld #endif
9248f23e9faSHans Rosenfeld 
92582527734SSukumar Swaminathan /* Defines for ContextType */
92682527734SSukumar Swaminathan #define	WQE_RPI_CONTEXT		0
92782527734SSukumar Swaminathan #define	WQE_VPI_CONTEXT		1
92882527734SSukumar Swaminathan #define	WQE_VFI_CONTEXT		2
92982527734SSukumar Swaminathan #define	WQE_FCFI_CONTEXT	3
93082527734SSukumar Swaminathan 
93182527734SSukumar Swaminathan /* Defines for CmdType */
93282527734SSukumar Swaminathan #define	WQE_TYPE_FCP_DATA_IN	0x00
93382527734SSukumar Swaminathan #define	WQE_TYPE_FCP_DATA_OUT	0x01
9348f23e9faSHans Rosenfeld #define	WQE_TYPE_TRECEIVE	0x02
9358f23e9faSHans Rosenfeld #define	WQE_TYPE_TRSP		0x03
9368f23e9faSHans Rosenfeld #define	WQE_TYPE_SRR_RSP	0x06
9378f23e9faSHans Rosenfeld #define	WQE_TYPE_TSEND		0x07
93882527734SSukumar Swaminathan #define	WQE_TYPE_GEN		0x08
93982527734SSukumar Swaminathan #define	WQE_TYPE_ABORT		0x08
9408f23e9faSHans Rosenfeld #define	WQE_TYPE_ELS		0x0C
94182527734SSukumar Swaminathan #define	WQE_TYPE_MASK_FIP	0x01
94282527734SSukumar Swaminathan 
94382527734SSukumar Swaminathan /* Defines for ELSId */
9448f23e9faSHans Rosenfeld #define	WQE_ELSID_PLOGI		0x04
94582527734SSukumar Swaminathan #define	WQE_ELSID_FLOGI		0x03
94682527734SSukumar Swaminathan #define	WQE_ELSID_FDISC		0x02
94782527734SSukumar Swaminathan #define	WQE_ELSID_LOGO		0x01
9488f23e9faSHans Rosenfeld #define	WQE_ELSID_CMD		0x00
94982527734SSukumar Swaminathan 
95082527734SSukumar Swaminathan /* RQB */
95182527734SSukumar Swaminathan #define	RQB_HEADER_SIZE		32
95282527734SSukumar Swaminathan #define	RQB_DATA_SIZE		2048
95382527734SSukumar Swaminathan #define	RQB_COUNT		256
95482527734SSukumar Swaminathan 
95582527734SSukumar Swaminathan #define	EMLXS_NUM_WQ_PAGES	4
9568f23e9faSHans Rosenfeld #define	WQE_SIZE		64
9578f23e9faSHans Rosenfeld 
9588f23e9faSHans Rosenfeld #define	EMLXS_NUM_CQ_PAGES_V2	4
9598f23e9faSHans Rosenfeld #define	CQE_SIZE		16
96082527734SSukumar Swaminathan 
96182527734SSukumar Swaminathan #define	EQ_DEPTH		1024
96282527734SSukumar Swaminathan #define	CQ_DEPTH		256
9638f23e9faSHans Rosenfeld #define	CQ_DEPTH_V2	((4096/CQE_SIZE) * EMLXS_NUM_CQ_PAGES_V2) /* 1024 */
9648f23e9faSHans Rosenfeld #define	WQ_DEPTH	((4096/WQE_SIZE) * EMLXS_NUM_WQ_PAGES) /* 256 */
96582527734SSukumar Swaminathan #define	MQ_DEPTH		16
96682527734SSukumar Swaminathan #define	RQ_DEPTH		512 /* Multiple of RQB_COUNT */
96782527734SSukumar Swaminathan #define	RQ_DEPTH_EXPONENT	9
96882527734SSukumar Swaminathan 
9698f23e9faSHans Rosenfeld #define	EMLXS_MAX_WQS_PER_EQ	4
9708f23e9faSHans Rosenfeld 
97182527734SSukumar Swaminathan 
97282527734SSukumar Swaminathan /* Principal doorbell register layouts */
97382527734SSukumar Swaminathan typedef struct emlxs_rqdb
97482527734SSukumar Swaminathan {
97582527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
97682527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
97782527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
97882527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
97982527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* RQ id for posted RQE */
98082527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
98182527734SSukumar Swaminathan 
98282527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
98382527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* RQ id for posted RQE */
98482527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
98582527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
98682527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
98782527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
98882527734SSukumar Swaminathan 
98982527734SSukumar Swaminathan } emlxs_rqdb_t;
99082527734SSukumar Swaminathan 
99182527734SSukumar Swaminathan 
99282527734SSukumar Swaminathan typedef union emlxs_rqdbu
99382527734SSukumar Swaminathan {
99482527734SSukumar Swaminathan 	uint32_t	word;
99582527734SSukumar Swaminathan 	emlxs_rqdb_t	db;
99682527734SSukumar Swaminathan 
99782527734SSukumar Swaminathan } emlxs_rqdbu_t;
99882527734SSukumar Swaminathan 
99982527734SSukumar Swaminathan 
100082527734SSukumar Swaminathan typedef struct emlxs_wqdb
100182527734SSukumar Swaminathan {
100282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
100382527734SSukumar Swaminathan 	uint32_t	NumPosted:8;	/* Number of entries posted */
100482527734SSukumar Swaminathan 	uint32_t	Index:8;	/* Queue index for posted command */
100582527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
100682527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* WQ id for posted WQE */
100782527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
100882527734SSukumar Swaminathan 
100982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
101082527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* WQ id for posted WQE */
101182527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
101282527734SSukumar Swaminathan 	uint32_t	Index:8;	/* Queue index for posted command */
101382527734SSukumar Swaminathan 	uint32_t	NumPosted:8;	/* Number of entries posted */
101482527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
101582527734SSukumar Swaminathan 
101682527734SSukumar Swaminathan } emlxs_wqdb_t;
101782527734SSukumar Swaminathan 
101882527734SSukumar Swaminathan 
101982527734SSukumar Swaminathan typedef union emlxs_wqdbu
102082527734SSukumar Swaminathan {
102182527734SSukumar Swaminathan 	uint32_t	word;
102282527734SSukumar Swaminathan 	emlxs_wqdb_t	db;
102382527734SSukumar Swaminathan 
102482527734SSukumar Swaminathan } emlxs_wqdbu_t;
102582527734SSukumar Swaminathan 
102682527734SSukumar Swaminathan 
102782527734SSukumar Swaminathan typedef struct emlxs_cqdb
102882527734SSukumar Swaminathan {
102982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
103082527734SSukumar Swaminathan 	uint32_t	NumPosted:2;	/* Number of entries posted */
103182527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm CQ */
103282527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
1033*e2d1a434SCarsten Grzemba 	uint32_t	Qid_hi:5;
103482527734SSukumar Swaminathan 	uint32_t	Event:1;	/* 1 if processed entry is EQE */
103582527734SSukumar Swaminathan 				/* 0 if processed entry is CQE */
103682527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* CQ id for posted CQE */
103782527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
103882527734SSukumar Swaminathan 
103982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
104082527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* CQ id for posted CQE */
104182527734SSukumar Swaminathan 	uint32_t	Event:1;	/* 1 if processed entry is EQE */
104282527734SSukumar Swaminathan 				/* 0 if processed entry is CQE */
1043*e2d1a434SCarsten Grzemba 	uint32_t	Qid_hi:5;
104482527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
104582527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm CQ */
104682527734SSukumar Swaminathan 	uint32_t	NumPosted:2;	/* Number of entries posted */
104782527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
104882527734SSukumar Swaminathan 
104982527734SSukumar Swaminathan } emlxs_cqdb_t;
105082527734SSukumar Swaminathan 
1051*e2d1a434SCarsten Grzemba typedef struct emlxs_cqdb6
1052*e2d1a434SCarsten Grzemba {
1053*e2d1a434SCarsten Grzemba #ifdef EMLXS_BIG_ENDIAN
1054*e2d1a434SCarsten Grzemba 	uint32_t	NumPosted:2;	/* Number of entries posted */
1055*e2d1a434SCarsten Grzemba 	uint32_t	Rearm:1;	/* Rearm CQ */
1056*e2d1a434SCarsten Grzemba 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
1057*e2d1a434SCarsten Grzemba 	uint32_t	Qid:16;		/* CQ id for posted CQE */
1058*e2d1a434SCarsten Grzemba #endif /* EMLXS_BIG_ENDIAN */
1059*e2d1a434SCarsten Grzemba 
1060*e2d1a434SCarsten Grzemba #ifdef EMLXS_LITTLE_ENDIAN
1061*e2d1a434SCarsten Grzemba 	uint32_t	Qid:16;		/* CQ id for posted CQE */
1062*e2d1a434SCarsten Grzemba 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
1063*e2d1a434SCarsten Grzemba 	uint32_t	Rearm:1;	/* Rearm CQ */
1064*e2d1a434SCarsten Grzemba 	uint32_t	NumPosted:2;	/* Number of entries posted */
1065*e2d1a434SCarsten Grzemba #endif /* EMLXS_LITTLE_ENDIAN */
106682527734SSukumar Swaminathan 
1067*e2d1a434SCarsten Grzemba } emlxs_cqdb6_t;
1068*e2d1a434SCarsten Grzemba 
1069*e2d1a434SCarsten Grzemba typedef union
107082527734SSukumar Swaminathan {
107182527734SSukumar Swaminathan 	uint32_t	word;
1072*e2d1a434SCarsten Grzemba 	emlxs_cqdb_t	db2;		/* if_type 0,2 */
1073*e2d1a434SCarsten Grzemba 	emlxs_cqdb6_t	db6;		/* if_type 6 */
1074*e2d1a434SCarsten Grzemba } emlxs_cqdb_u;
107582527734SSukumar Swaminathan 
107682527734SSukumar Swaminathan typedef struct emlxs_eqdb
107782527734SSukumar Swaminathan {
107882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
107982527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
108082527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm EQ */
108182527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
1082*e2d1a434SCarsten Grzemba 	uint32_t	Qid_hi:5;
108382527734SSukumar Swaminathan 	uint32_t	Event:1;	/* True iff processed entry is EQE */
108482527734SSukumar Swaminathan 	uint32_t	Clear:1;	/* clears EQ interrupt when set */
108582527734SSukumar Swaminathan 	uint32_t	Qid:9;		/* EQ id for posted EQE */
108682527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
108782527734SSukumar Swaminathan 
108882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
108982527734SSukumar Swaminathan 	uint32_t	Qid:9;		/* EQ id for posted EQE */
109082527734SSukumar Swaminathan 	uint32_t	Clear:1;	/* clears EQ interrupt when set */
1091*e2d1a434SCarsten Grzemba 	uint32_t	Event:1;	/* True if processed entry is EQE */
1092*e2d1a434SCarsten Grzemba 	uint32_t	Qid_hi:5;
1093*e2d1a434SCarsten Grzemba 	uint32_t	NumPopped:13;	/* Number of EQ entries processed */
109482527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm EQ */
109582527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
109682527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
109782527734SSukumar Swaminathan 
109882527734SSukumar Swaminathan } emlxs_eqdb_t;
109982527734SSukumar Swaminathan 
1100*e2d1a434SCarsten Grzemba typedef struct emlxs_eqdb6
1101*e2d1a434SCarsten Grzemba {
1102*e2d1a434SCarsten Grzemba #ifdef EMLXS_BIG_ENDIAN
1103*e2d1a434SCarsten Grzemba 	uint32_t	NumPosted:2;	/* Number of entries posted */
1104*e2d1a434SCarsten Grzemba 	uint32_t	Rearm:1;	/* Rearm CQ */
1105*e2d1a434SCarsten Grzemba 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
1106*e2d1a434SCarsten Grzemba 	uint32_t	Rsvd1:4;
1107*e2d1a434SCarsten Grzemba 	uint32_t	Qid:12;		/* EQ id for posted EQE */
1108*e2d1a434SCarsten Grzemba #endif /* EMLXS_BIG_ENDIAN */
1109*e2d1a434SCarsten Grzemba 
1110*e2d1a434SCarsten Grzemba #ifdef EMLXS_LITTLE_ENDIAN
1111*e2d1a434SCarsten Grzemba 	uint32_t	Qid:12;		/* EQ id for posted EQE */
1112*e2d1a434SCarsten Grzemba 	uint32_t	Rsvd1:4;
1113*e2d1a434SCarsten Grzemba 	uint32_t	NumPopped:13;	/* Number of EQ entries processed */
1114*e2d1a434SCarsten Grzemba 	uint32_t	Rearm:1;	/* Rearm EQ */
1115*e2d1a434SCarsten Grzemba 	uint32_t	NumPosted:2;	/* Number of entries posted */
1116*e2d1a434SCarsten Grzemba #endif /* EMLXS_LITTLE_ENDIAN */
111782527734SSukumar Swaminathan 
1118*e2d1a434SCarsten Grzemba } emlxs_eqdb6_t;
1119*e2d1a434SCarsten Grzemba 
1120*e2d1a434SCarsten Grzemba 
1121*e2d1a434SCarsten Grzemba typedef union
112282527734SSukumar Swaminathan {
112382527734SSukumar Swaminathan 	uint32_t	word;
1124*e2d1a434SCarsten Grzemba 	emlxs_eqdb_t	db2;		/* if_type 0,2 */
1125*e2d1a434SCarsten Grzemba 	emlxs_eqdb6_t	db6;		/* if_type 6 */
1126*e2d1a434SCarsten Grzemba } emlxs_eqdb_u;
112782527734SSukumar Swaminathan 
112882527734SSukumar Swaminathan 
112982527734SSukumar Swaminathan typedef struct emlxs_mqdb
113082527734SSukumar Swaminathan {
113182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
113282527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
113382527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
113482527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
113582527734SSukumar Swaminathan 	uint32_t	Qid:11;		/* MQ id for posted MQE */
113682527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
113782527734SSukumar Swaminathan 
113882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
113982527734SSukumar Swaminathan 	uint32_t	Qid:11;		/* MQ id for posted MQE */
114082527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
114182527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
114282527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
114382527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
114482527734SSukumar Swaminathan 
114582527734SSukumar Swaminathan } emlxs_mqdb_t;
114682527734SSukumar Swaminathan 
114782527734SSukumar Swaminathan 
114882527734SSukumar Swaminathan typedef union emlxs_mqdbu
114982527734SSukumar Swaminathan {
115082527734SSukumar Swaminathan 	uint32_t	word;
115182527734SSukumar Swaminathan 	emlxs_mqdb_t	db;
115282527734SSukumar Swaminathan 
115382527734SSukumar Swaminathan } emlxs_mqdbu_t;
115482527734SSukumar Swaminathan 
115582527734SSukumar Swaminathan 
115682527734SSukumar Swaminathan #ifdef	__cplusplus
115782527734SSukumar Swaminathan }
115882527734SSukumar Swaminathan #endif
115982527734SSukumar Swaminathan 
116082527734SSukumar Swaminathan #endif	/* _EMLXS_QUEUE_H */
1161