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-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 */
144*8f23e9faSHans 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;
165*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
16682527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
16782527734SSukumar Swaminathan #endif
16882527734SSukumar Swaminathan } CQE_UnsolRcv_t;
16982527734SSukumar Swaminathan 
170*8f23e9faSHans Rosenfeld 
171*8f23e9faSHans Rosenfeld typedef struct CQE_UnsolRcvV1
172*8f23e9faSHans Rosenfeld {
173*8f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN
174*8f23e9faSHans Rosenfeld 	uint16_t	RQindex;	/* Word 0 */
175*8f23e9faSHans Rosenfeld 	uint8_t		Status;
176*8f23e9faSHans Rosenfeld 	uint8_t		Rsvd1;
177*8f23e9faSHans Rosenfeld 
178*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 26;	/* Word 1 */
179*8f23e9faSHans Rosenfeld 	uint32_t	FCFId: 6;
180*8f23e9faSHans Rosenfeld 
181*8f23e9faSHans Rosenfeld 	uint16_t	data_size;	/* Word 2 */
182*8f23e9faSHans Rosenfeld 	uint16_t	RQid;
183*8f23e9faSHans Rosenfeld 
184*8f23e9faSHans Rosenfeld 	uint32_t	Valid: 1;	/* Word 3 */
185*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
186*8f23e9faSHans Rosenfeld 	uint32_t	hdr_size: 6;
187*8f23e9faSHans Rosenfeld 	uint32_t	Code: 8;
188*8f23e9faSHans Rosenfeld 	uint32_t	eof: 8;
189*8f23e9faSHans Rosenfeld 	uint32_t	sof: 8;
190*8f23e9faSHans Rosenfeld #endif
191*8f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN
192*8f23e9faSHans Rosenfeld 	uint8_t		Rsvd1;
193*8f23e9faSHans Rosenfeld 	uint8_t		Status;
194*8f23e9faSHans Rosenfeld 	uint16_t	RQindex;	/* Word 0 */
195*8f23e9faSHans Rosenfeld 
196*8f23e9faSHans Rosenfeld 	uint32_t	FCFId: 6;
197*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 26;	/* Word 1 */
198*8f23e9faSHans Rosenfeld 
199*8f23e9faSHans Rosenfeld 	uint16_t	RQid;
200*8f23e9faSHans Rosenfeld 	uint16_t	data_size;	/* Word 2 */
201*8f23e9faSHans Rosenfeld 
202*8f23e9faSHans Rosenfeld 	uint32_t	sof: 8;
203*8f23e9faSHans Rosenfeld 	uint32_t	eof: 8;
204*8f23e9faSHans Rosenfeld 	uint32_t	Code: 8;
205*8f23e9faSHans Rosenfeld 	uint32_t	hdr_size: 6;
206*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
207*8f23e9faSHans Rosenfeld 	uint32_t	Valid: 1;	/* Word 3 */
208*8f23e9faSHans Rosenfeld #endif
209*8f23e9faSHans Rosenfeld } CQE_UnsolRcvV1_t;
210*8f23e9faSHans 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
267*8f23e9faSHans 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 
346*8f23e9faSHans Rosenfeld 
347*8f23e9faSHans Rosenfeld typedef struct CQE_ASYNC_FC_LINK_ATT
348*8f23e9faSHans Rosenfeld {
349*8f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN
350*8f23e9faSHans Rosenfeld 	uint8_t		port_speed;	/* Word 0 */
351*8f23e9faSHans Rosenfeld 	uint8_t		topology;
352*8f23e9faSHans Rosenfeld 	uint8_t		att_type;
353*8f23e9faSHans Rosenfeld 	uint8_t		link_number;
354*8f23e9faSHans Rosenfeld 
355*8f23e9faSHans Rosenfeld 	uint16_t	link_speed;	/* Word 1 */
356*8f23e9faSHans Rosenfeld 	uint8_t		shared_link_status;
357*8f23e9faSHans Rosenfeld 	uint8_t		port_fault;
358*8f23e9faSHans Rosenfeld 
359*8f23e9faSHans Rosenfeld 	uint32_t	event_tag;	/* Word 2 */
360*8f23e9faSHans Rosenfeld #endif
361*8f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN
362*8f23e9faSHans Rosenfeld 	uint8_t		link_number;
363*8f23e9faSHans Rosenfeld 	uint8_t		att_type;
364*8f23e9faSHans Rosenfeld 	uint8_t		topology;
365*8f23e9faSHans Rosenfeld 	uint8_t		port_speed;	/* Word 0 */
366*8f23e9faSHans Rosenfeld 
367*8f23e9faSHans Rosenfeld 	uint8_t		port_fault;
368*8f23e9faSHans Rosenfeld 	uint8_t		shared_link_status;
369*8f23e9faSHans Rosenfeld 	uint16_t	link_speed;	/* Word 1 */
370*8f23e9faSHans Rosenfeld 
371*8f23e9faSHans Rosenfeld 	uint32_t	event_tag;	/* Word 2 */
372*8f23e9faSHans Rosenfeld #endif
373*8f23e9faSHans Rosenfeld } CQE_ASYNC_FC_LINK_ATT_t;
374*8f23e9faSHans Rosenfeld 
375*8f23e9faSHans Rosenfeld typedef struct CQE_ASYNC_PORT
376*8f23e9faSHans Rosenfeld {
377*8f23e9faSHans Rosenfeld 	uint8_t		link_status[4];
378*8f23e9faSHans Rosenfeld 	uint32_t	data_word2;
379*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd;
380*8f23e9faSHans Rosenfeld } CQE_ASYNC_PORT_t;
381*8f23e9faSHans Rosenfeld 
382*8f23e9faSHans Rosenfeld /* topology */
383*8f23e9faSHans Rosenfeld #define	TOPOLOGY_UNKNOWN	0
384*8f23e9faSHans Rosenfeld #define	TOPOLOGY_NPORT		1
385*8f23e9faSHans Rosenfeld #define	TOPOLOGY_LPORT		2
386*8f23e9faSHans Rosenfeld #define	TOPOLOGY_INTERNAL_LB	3
387*8f23e9faSHans Rosenfeld #define	TOPOLOGY_SERDES_LB	4
388*8f23e9faSHans Rosenfeld 
389*8f23e9faSHans Rosenfeld /* att_type */
390*8f23e9faSHans Rosenfeld #define	ATT_TYPE_LINK_UP	1
391*8f23e9faSHans Rosenfeld #define	ATT_TYPE_LINK_DOWN	2
392*8f23e9faSHans Rosenfeld #define	ATT_TYPE_NO_HARD_ALPA	3
393*8f23e9faSHans Rosenfeld 
394*8f23e9faSHans Rosenfeld /* shared_link_status */
395*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_NONE			0
396*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LD_UNUSABLE		1
397*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LD_TRAN_FAULT		2
398*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LD_NO_SIGNAL		3
399*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LD_MGMT_DISABLED		4
400*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_FAILED_P2P		5
401*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_FAILED_FLOGI_TMO	6
402*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_FAILED_NO_FPORT	7
403*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_FAILED_NO_NPIV		8
404*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_FAILED_FLOGO		9
405*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_LOOPBACK		20
406*8f23e9faSHans Rosenfeld #define	SHARED_STATUS_LU_NORMAL			40
407*8f23e9faSHans Rosenfeld 
408*8f23e9faSHans Rosenfeld /* port_fault */
409*8f23e9faSHans Rosenfeld #define	PORT_FAULT_NONE		0
410*8f23e9faSHans Rosenfeld #define	PORT_FAULT_LOCAL	1
411*8f23e9faSHans Rosenfeld #define	PORT_FAULT_REMOTE	2
412*8f23e9faSHans 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;
421*8f23e9faSHans Rosenfeld 		CQE_ASYNC_FC_LINK_ATT_t fc;
422*8f23e9faSHans 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 */
448*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_FCOE_LINK_STATE	0x01
449*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_FCOE_FIP		0x02
450*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_DCBX			0x03
451*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_ISCSI			0x04
452*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_GRP_5			0x05
453*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_FC_EVENT		0x10
454*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_PORT			0x11
455*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_VF			0x12
456*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_CODE_MR			0x13
457*8f23e9faSHans Rosenfeld 
458*8f23e9faSHans Rosenfeld /* FC Event */
459*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_FC_LINK_ATT		1
460*8f23e9faSHans 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 
478*8f23e9faSHans Rosenfeld /* PORT - evt_type defines */
479*8f23e9faSHans Rosenfeld #define	ASYNC_EVENT_MISCONFIG_PORT	9
480*8f23e9faSHans Rosenfeld 
48182527734SSukumar Swaminathan typedef struct CQE_MBOX
48282527734SSukumar Swaminathan {
48382527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
48482527734SSukumar Swaminathan 	uint16_t	extend_status;	/* Word 0 */
48582527734SSukumar Swaminathan 	uint16_t	cmpl_status;
48682527734SSukumar Swaminathan 
48782527734SSukumar Swaminathan 	uint32_t	tag_low;	/* Word 1 */
48882527734SSukumar Swaminathan 	uint32_t	tag_high;	/* Word 2 */
48982527734SSukumar Swaminathan 
49082527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
49182527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
49282527734SSukumar Swaminathan 	uint32_t	hpi: 1;
49382527734SSukumar Swaminathan 	uint32_t	completed: 1;
49482527734SSukumar Swaminathan 	uint32_t	consumed: 1;
49582527734SSukumar Swaminathan 	uint32_t	Rsvd1: 27;
49682527734SSukumar Swaminathan #endif
49782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
49882527734SSukumar Swaminathan 	uint16_t	cmpl_status;
49982527734SSukumar Swaminathan 	uint16_t	extend_status;	/* Word 0 */
50082527734SSukumar Swaminathan 
50182527734SSukumar Swaminathan 	uint32_t	tag_low;	/* Word 1 */
50282527734SSukumar Swaminathan 	uint32_t	tag_high;	/* Word 2 */
50382527734SSukumar Swaminathan 
50482527734SSukumar Swaminathan 	uint32_t	Rsvd1: 27;
50582527734SSukumar Swaminathan 	uint32_t	consumed: 1;
50682527734SSukumar Swaminathan 	uint32_t	completed: 1;
50782527734SSukumar Swaminathan 	uint32_t	hpi: 1;
50882527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
50982527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
51082527734SSukumar Swaminathan #endif
51182527734SSukumar Swaminathan } CQE_MBOX_t;
51282527734SSukumar Swaminathan 
51382527734SSukumar Swaminathan typedef union
51482527734SSukumar Swaminathan {
51582527734SSukumar Swaminathan 	uint32_t	word[4];
51682527734SSukumar Swaminathan 
51782527734SSukumar Swaminathan 	/* Group 1 types */
51882527734SSukumar Swaminathan 	CQE_ASYNC_t	cqAsyncEntry;
51982527734SSukumar Swaminathan 	CQE_ASYNC_FCOE_t cqAsyncFCOEEntry;
52082527734SSukumar Swaminathan 	CQE_MBOX_t	cqMboxEntry;
52182527734SSukumar Swaminathan 
52282527734SSukumar Swaminathan 	/* Group 2 types */
52382527734SSukumar Swaminathan 	CQE_CmplWQ_t	cqCmplEntry;
52482527734SSukumar Swaminathan 	CQE_RelWQ_t	cqRelEntry;
52582527734SSukumar Swaminathan 	CQE_UnsolRcv_t	cqUnsolRcvEntry;
526*8f23e9faSHans Rosenfeld 	CQE_UnsolRcvV1_t cqUnsolRcvEntryV1;
52782527734SSukumar Swaminathan 	CQE_XRI_Abort_t	cqXRIEntry;
52882527734SSukumar Swaminathan } CQE_u;
52982527734SSukumar Swaminathan 
53082527734SSukumar Swaminathan /* RQ entries */
53182527734SSukumar Swaminathan typedef struct RQE
53282527734SSukumar Swaminathan {
53382527734SSukumar Swaminathan 	uint32_t	AddrHi;
53482527734SSukumar Swaminathan 	uint32_t	AddrLo;
53582527734SSukumar Swaminathan 
53682527734SSukumar Swaminathan } RQE_t;
53782527734SSukumar Swaminathan 
53882527734SSukumar Swaminathan 
53982527734SSukumar Swaminathan /* Definitions for WQEs */
54082527734SSukumar Swaminathan typedef struct
54182527734SSukumar Swaminathan {
542*8f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
54382527734SSukumar Swaminathan 	ULP_BDE64	Payload;
544*8f23e9faSHans Rosenfeld 
545*8f23e9faSHans Rosenfeld 	/* Word 3 */
54682527734SSukumar Swaminathan 	uint32_t	PayloadLength;
54782527734SSukumar Swaminathan 
54882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
549*8f23e9faSHans Rosenfeld 	/* Word 4 */
55082527734SSukumar Swaminathan 	uint32_t	Rsvd1: 6;
55182527734SSukumar Swaminathan 	uint32_t	VF: 1;
55282527734SSukumar Swaminathan 	uint32_t	SP: 1;
55382527734SSukumar Swaminathan 	uint32_t	LocalId: 24;
55482527734SSukumar Swaminathan 
555*8f23e9faSHans Rosenfeld 	/* Word 5 */
55682527734SSukumar Swaminathan 	uint32_t	Rsvd2:  8;
55782527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
55882527734SSukumar Swaminathan #endif
55982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
560*8f23e9faSHans Rosenfeld 	/* Word 4 */
56182527734SSukumar Swaminathan 	uint32_t	LocalId: 24;
56282527734SSukumar Swaminathan 	uint32_t	SP: 1;
56382527734SSukumar Swaminathan 	uint32_t	VF: 1;
56482527734SSukumar Swaminathan 	uint32_t	Rsvd1: 6;
56582527734SSukumar Swaminathan 
566*8f23e9faSHans Rosenfeld 	/* Word 5 */
56782527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
56882527734SSukumar Swaminathan 	uint32_t	Rsvd2:  8;
56982527734SSukumar Swaminathan #endif
57082527734SSukumar Swaminathan 
57182527734SSukumar Swaminathan } ELS_REQ_WQE;
57282527734SSukumar Swaminathan 
57382527734SSukumar Swaminathan typedef struct
57482527734SSukumar Swaminathan {
575*8f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
57682527734SSukumar Swaminathan 	ULP_BDE64	Payload;
577*8f23e9faSHans Rosenfeld 
578*8f23e9faSHans Rosenfeld 	/* Word 3 */
579*8f23e9faSHans Rosenfeld 	uint32_t	PayloadLength;
580*8f23e9faSHans Rosenfeld 
581*8f23e9faSHans Rosenfeld 	/* Word 4 */
582*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd1;
58382527734SSukumar Swaminathan 
58482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
585*8f23e9faSHans Rosenfeld 	/* Word 5 */
58682527734SSukumar Swaminathan 	uint32_t	Rsvd2: 8;
58782527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
58882527734SSukumar Swaminathan #endif
58982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
590*8f23e9faSHans Rosenfeld 	/* Word 5 */
59182527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
59282527734SSukumar Swaminathan 	uint32_t	Rsvd2: 8;
59382527734SSukumar Swaminathan #endif
59482527734SSukumar Swaminathan 
59582527734SSukumar Swaminathan } ELS_RSP_WQE;
59682527734SSukumar Swaminathan 
59782527734SSukumar Swaminathan typedef struct
59882527734SSukumar Swaminathan {
599*8f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
60082527734SSukumar Swaminathan 	ULP_BDE64	Payload;
601*8f23e9faSHans Rosenfeld 
602*8f23e9faSHans Rosenfeld 	/* Word 3 */
60382527734SSukumar Swaminathan 	uint32_t	PayloadLength;
60482527734SSukumar Swaminathan 
605*8f23e9faSHans Rosenfeld 	/* Word 4 */
60682527734SSukumar Swaminathan 	uint32_t	Parameter;
60782527734SSukumar Swaminathan 
60882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
609*8f23e9faSHans Rosenfeld 	/* Word 5 */
61082527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
61182527734SSukumar Swaminathan 	uint32_t	Type: 8;
61282527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
61382527734SSukumar Swaminathan 	uint32_t	Rsvd1: 4;
61482527734SSukumar Swaminathan 	uint32_t	la: 1;
61582527734SSukumar Swaminathan 	uint32_t	Rsvd2: 3;
61682527734SSukumar Swaminathan #endif
61782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
618*8f23e9faSHans Rosenfeld 	/* Word 5 */
61982527734SSukumar Swaminathan 	uint32_t	Rsvd2: 3;
62082527734SSukumar Swaminathan 	uint32_t	la: 1;
62182527734SSukumar Swaminathan 	uint32_t	Rsvd1: 4;
62282527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
62382527734SSukumar Swaminathan 	uint32_t	Type: 8;
62482527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
62582527734SSukumar Swaminathan #endif
62682527734SSukumar Swaminathan 
62782527734SSukumar Swaminathan } GEN_REQ_WQE;
62882527734SSukumar Swaminathan 
62982527734SSukumar Swaminathan typedef struct
63082527734SSukumar Swaminathan {
631*8f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
63282527734SSukumar Swaminathan 	ULP_BDE64	Payload;
63382527734SSukumar Swaminathan 
634*8f23e9faSHans Rosenfeld 	/* Word 3 */
635*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd0;
636*8f23e9faSHans Rosenfeld 
637*8f23e9faSHans Rosenfeld 	/* Word 4 */
63882527734SSukumar Swaminathan 	uint32_t	Parameter;
63982527734SSukumar Swaminathan 
64082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
641*8f23e9faSHans Rosenfeld 	/* Word 5 */
64282527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
64382527734SSukumar Swaminathan 	uint32_t	Type: 8;
64482527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
64582527734SSukumar Swaminathan 	uint32_t	ls: 1;
646*8f23e9faSHans Rosenfeld 	uint32_t	xo: 1;
647*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd1: 2;
648*8f23e9faSHans Rosenfeld 	uint32_t	ft: 1;
64982527734SSukumar Swaminathan 	uint32_t	si: 1;
65082527734SSukumar Swaminathan 	uint32_t	Rsvd2: 2;
65182527734SSukumar Swaminathan #endif
65282527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
653*8f23e9faSHans Rosenfeld 	/* Word 5 */
65482527734SSukumar Swaminathan 	uint32_t	Rsvd2: 2;
65582527734SSukumar Swaminathan 	uint32_t	si: 1;
656*8f23e9faSHans Rosenfeld 	uint32_t	ft: 1;
657*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd1: 2;
658*8f23e9faSHans Rosenfeld 	uint32_t	xo: 1;
65982527734SSukumar Swaminathan 	uint32_t	ls: 1;
66082527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
66182527734SSukumar Swaminathan 	uint32_t	Type: 8;
66282527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
66382527734SSukumar Swaminathan #endif
66482527734SSukumar Swaminathan 
66582527734SSukumar Swaminathan } XMIT_SEQ_WQE;
66682527734SSukumar Swaminathan 
66782527734SSukumar Swaminathan typedef struct
66882527734SSukumar Swaminathan {
669*8f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
670*8f23e9faSHans Rosenfeld 	ULP_BDE64	  Payload;
671*8f23e9faSHans Rosenfeld 
672*8f23e9faSHans Rosenfeld 	/* Word 3 */
673*8f23e9faSHans Rosenfeld 	uint32_t	  PayloadLength;
67482527734SSukumar Swaminathan 
675*8f23e9faSHans Rosenfeld 	/* Word 4 */
67682527734SSukumar Swaminathan 	uint32_t	TotalTransferCount;
677*8f23e9faSHans Rosenfeld 
678*8f23e9faSHans Rosenfeld 	/* Word 5 */
67982527734SSukumar Swaminathan 	uint32_t	Rsvd1;
68082527734SSukumar Swaminathan 
68182527734SSukumar Swaminathan } FCP_WQE;
68282527734SSukumar Swaminathan 
68382527734SSukumar Swaminathan 
68482527734SSukumar Swaminathan typedef struct
68582527734SSukumar Swaminathan {
686*8f23e9faSHans Rosenfeld 	/* Word 0 - 2 */
68782527734SSukumar Swaminathan 	uint32_t	Rsvd1[3];
68882527734SSukumar Swaminathan 
68982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
690*8f23e9faSHans Rosenfeld 	/* Word 3 */
69182527734SSukumar Swaminathan 	uint32_t	Rsvd2: 16;
69282527734SSukumar Swaminathan 	uint32_t	Criteria: 8;
69382527734SSukumar Swaminathan 	uint32_t	Rsvd3: 7;
69482527734SSukumar Swaminathan 	uint32_t	IA: 1;
69582527734SSukumar Swaminathan #endif
69682527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
697*8f23e9faSHans Rosenfeld 	/* Word 3 */
69882527734SSukumar Swaminathan 	uint32_t	IA: 1;
69982527734SSukumar Swaminathan 	uint32_t	Rsvd3: 7;
70082527734SSukumar Swaminathan 	uint32_t	Criteria: 8;
70182527734SSukumar Swaminathan 	uint32_t	Rsvd2: 16;
70282527734SSukumar Swaminathan #endif
70382527734SSukumar Swaminathan 
704*8f23e9faSHans Rosenfeld 	/* Word 4 - 5 */
70582527734SSukumar Swaminathan 	uint32_t	Rsvd4[2];
70682527734SSukumar Swaminathan 
70782527734SSukumar Swaminathan } ABORT_WQE;
70882527734SSukumar Swaminathan 
70982527734SSukumar Swaminathan #define	ABORT_XRI_TAG	1	/* Abort tag is a XRITag */
71082527734SSukumar Swaminathan #define	ABORT_ABT_TAG	2	/* Abort tag is a AbortTag */
71182527734SSukumar Swaminathan #define	ABORT_REQ_TAG	3	/* Abort tag is a RequestTag */
71282527734SSukumar Swaminathan 
71382527734SSukumar Swaminathan typedef struct
71482527734SSukumar Swaminathan {
71582527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
716*8f23e9faSHans Rosenfeld 	/* Word 0 */
71782527734SSukumar Swaminathan 	uint8_t		Payload0;
71882527734SSukumar Swaminathan 	uint8_t		Payload1;
71982527734SSukumar Swaminathan 	uint8_t		Payload2;
72082527734SSukumar Swaminathan 	uint8_t		Payload3;
72182527734SSukumar Swaminathan 
722*8f23e9faSHans Rosenfeld 	/* Word 1 */
72382527734SSukumar Swaminathan 	uint32_t	OXId: 16;
72482527734SSukumar Swaminathan 	uint32_t	RXId: 16;
72582527734SSukumar Swaminathan 
726*8f23e9faSHans Rosenfeld 	/* Word 2 */
72782527734SSukumar Swaminathan 	uint32_t	SeqCntLow: 16;
72882527734SSukumar Swaminathan 	uint32_t	SeqCntHigh: 16;
729*8f23e9faSHans Rosenfeld 
730*8f23e9faSHans Rosenfeld 	/* Word 3 */
731*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd1;
732*8f23e9faSHans Rosenfeld 
733*8f23e9faSHans Rosenfeld 	/* Word 4 */
734*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 8;
735*8f23e9faSHans Rosenfeld 	uint32_t	LocalId: 24;
736*8f23e9faSHans Rosenfeld 
737*8f23e9faSHans Rosenfeld 	/* Word 5 */
738*8f23e9faSHans Rosenfeld 	uint32_t	XO: 1;
739*8f23e9faSHans Rosenfeld 	uint32_t	AR: 1;
740*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 6;
741*8f23e9faSHans Rosenfeld 	uint32_t	RemoteId: 24;
74282527734SSukumar Swaminathan #endif
74382527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
744*8f23e9faSHans Rosenfeld 	/* Word 0 */
74582527734SSukumar Swaminathan 	uint8_t		Payload3;
74682527734SSukumar Swaminathan 	uint8_t		Payload2;
74782527734SSukumar Swaminathan 	uint8_t		Payload1;
74882527734SSukumar Swaminathan 	uint8_t		Payload0;
74982527734SSukumar Swaminathan 
750*8f23e9faSHans Rosenfeld 	/* Word 1 */
75182527734SSukumar Swaminathan 	uint32_t	RXId: 16;
75282527734SSukumar Swaminathan 	uint32_t	OXId: 16;
75382527734SSukumar Swaminathan 
754*8f23e9faSHans Rosenfeld 	/* Word 2 */
75582527734SSukumar Swaminathan 	uint32_t	SeqCntHigh: 16;
75682527734SSukumar Swaminathan 	uint32_t	SeqCntLow: 16;
757*8f23e9faSHans Rosenfeld 
758*8f23e9faSHans Rosenfeld 	/* Word 3 */
759*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd1;
760*8f23e9faSHans Rosenfeld 
761*8f23e9faSHans Rosenfeld 	/* Word 4 */
762*8f23e9faSHans Rosenfeld 	uint32_t	LocalId: 24;
763*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 8;
764*8f23e9faSHans Rosenfeld 
765*8f23e9faSHans Rosenfeld 	/* Word 5 */
76682527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
767*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 6;
76882527734SSukumar Swaminathan 	uint32_t	AR: 1;
76982527734SSukumar Swaminathan 	uint32_t	XO: 1;
77082527734SSukumar Swaminathan #endif
77182527734SSukumar Swaminathan 
77282527734SSukumar Swaminathan } BLS_WQE;
77382527734SSukumar Swaminathan 
77482527734SSukumar Swaminathan 
77582527734SSukumar Swaminathan typedef struct
77682527734SSukumar Swaminathan {
777*8f23e9faSHans Rosenfeld 	/* Word 0 - 4 */
77882527734SSukumar Swaminathan 	uint32_t	Rsvd1[5];
77982527734SSukumar Swaminathan 
78082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
781*8f23e9faSHans Rosenfeld 	/* Word 5 */
78282527734SSukumar Swaminathan 	uint32_t	XO: 1;
783*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 31;
78482527734SSukumar Swaminathan #endif
78582527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
786*8f23e9faSHans Rosenfeld 	/* Word 5 */
787*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 31;
78882527734SSukumar Swaminathan 	uint32_t	XO: 1;
78982527734SSukumar Swaminathan #endif
79082527734SSukumar Swaminathan 
79182527734SSukumar Swaminathan } CREATE_XRI_WQE;
79282527734SSukumar Swaminathan 
79382527734SSukumar Swaminathan typedef struct emlxs_wqe
79482527734SSukumar Swaminathan {
79582527734SSukumar Swaminathan 	/* Words 0-5 */
79682527734SSukumar Swaminathan 	union
79782527734SSukumar Swaminathan 	{
79882527734SSukumar Swaminathan 		uint32_t	word[6];	/* Words 0-5: cmd specific */
79982527734SSukumar Swaminathan 		ELS_REQ_WQE	ElsCmd;		/* ELS command overlay */
80082527734SSukumar Swaminathan 		GEN_REQ_WQE	GenReq;		/* CT command overlay */
80182527734SSukumar Swaminathan 		FCP_WQE		FcpCmd;		/* FCP command overlay */
80282527734SSukumar Swaminathan 		ELS_RSP_WQE	ElsRsp;		/* ELS response overlay */
80382527734SSukumar Swaminathan 		ABORT_WQE	Abort;		/* Abort overlay */
80482527734SSukumar Swaminathan 		BLS_WQE		BlsRsp;		/* BLS overlay */
80582527734SSukumar Swaminathan 		CREATE_XRI_WQE	CreateXri;	/* Create XRI */
80682527734SSukumar Swaminathan 		XMIT_SEQ_WQE	XmitSeq;	/* Xmit Sequence */
80782527734SSukumar Swaminathan 	} un;
80882527734SSukumar Swaminathan 
80982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
81082527734SSukumar Swaminathan 	/* Word 6 */
81182527734SSukumar Swaminathan 	uint16_t	ContextTag;	/* Context Tag */
81282527734SSukumar Swaminathan 	uint16_t	XRITag;		/* XRItag */
81382527734SSukumar Swaminathan 	/* Word 7 */
81482527734SSukumar Swaminathan 	uint32_t	Timer: 8;	/* TOV */
815*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd1: 1;
81682527734SSukumar Swaminathan 	uint32_t	ERP: 1;		/* ERP */
81782527734SSukumar Swaminathan 	uint32_t	PU: 2;		/* PU */
818*8f23e9faSHans Rosenfeld 	uint32_t	AR: 1;		/* Auto Response */
81982527734SSukumar Swaminathan 	uint32_t	Class: 3;	/* COS */
82082527734SSukumar Swaminathan 	uint32_t	Command: 8;	/* Command Code */
821*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd0: 1;
822*8f23e9faSHans Rosenfeld 	uint32_t	BsType: 3;	/* DIF Block Size type */
82382527734SSukumar Swaminathan 	uint32_t	ContextType: 2;	/* Context Type */
824*8f23e9faSHans Rosenfeld 	uint32_t	DIF: 2;
82582527734SSukumar Swaminathan 	/* Word 8 */
82682527734SSukumar Swaminathan 	uint32_t	AbortTag;	/* Abort Tag */
82782527734SSukumar Swaminathan 	/* Word 9 */
82882527734SSukumar Swaminathan 	uint16_t	OXId;		/* OXId on xmitted rsp */
82982527734SSukumar Swaminathan 	uint16_t	RequestTag;	/* Request Tag */
83082527734SSukumar Swaminathan 	/* Word 10 */
83182527734SSukumar Swaminathan 	uint32_t	CCP: 8;		/* CCP */
83282527734SSukumar Swaminathan 	uint32_t	CCPE: 1;	/* CCPEnabled */
833*8f23e9faSHans Rosenfeld 	uint32_t	CMD: 1;
83482527734SSukumar Swaminathan 	uint32_t	XC: 1;		/* Exchange Create */
83582527734SSukumar Swaminathan 	uint32_t	Rsvd5: 1;
83682527734SSukumar Swaminathan 	uint32_t	PV: 1;		/* PRIValid */
83782527734SSukumar Swaminathan 	uint32_t	PRI: 3;		/* PRI */
838*8f23e9faSHans Rosenfeld 					/* The following 16 bits may be */
839*8f23e9faSHans Rosenfeld 					/* overwritten by PHWQ */
840*8f23e9faSHans Rosenfeld 	uint32_t	WQES: 1;	/* WQE specify XBL */
841*8f23e9faSHans Rosenfeld 	uint32_t	DBDE: 1;	/* Data type for BDE 0 */
842*8f23e9faSHans Rosenfeld 	uint32_t	IOd: 1;		/* IO direction */
843*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd4: 1;
844*8f23e9faSHans Rosenfeld 	uint32_t	XBL: 1;		/* Explicit Buffer List */
845*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
846*8f23e9faSHans Rosenfeld 	uint32_t	QOSd: 1;	/* QOS disable */
847*8f23e9faSHans Rosenfeld 	uint32_t	LenLoc: 2;	/* Length Location */
848*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 3;
849*8f23e9faSHans Rosenfeld 	uint32_t	EBDEcnt: 4;	/* Extended BDE cnt */
85082527734SSukumar Swaminathan 	/* Word 11 */
851*8f23e9faSHans Rosenfeld 	uint32_t	CQId: 16;	/* CompletionQueueID */
85282527734SSukumar Swaminathan 	uint32_t	Rsvd8: 8;
85382527734SSukumar Swaminathan 	uint32_t	WQEC: 1;	/* Request WQE consumed CQE */
854*8f23e9faSHans Rosenfeld 	uint32_t	ELSId: 3;
85582527734SSukumar Swaminathan 	uint32_t	CmdType: 4;	/* Command Type */
85682527734SSukumar Swaminathan #endif
85782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
85882527734SSukumar Swaminathan 	/* Word 6 */
85982527734SSukumar Swaminathan 	uint16_t	XRITag;		/* XRItag */
86082527734SSukumar Swaminathan 	uint16_t	ContextTag;	/* Context Tag */
86182527734SSukumar Swaminathan 	/* Word 7 */
862*8f23e9faSHans Rosenfeld 	uint32_t	DIF: 2;
86382527734SSukumar Swaminathan 	uint32_t	ContextType: 2;	/* Context Type */
864*8f23e9faSHans Rosenfeld 	uint32_t	BsType: 3;	/* DIF Block Size type */
865*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd0: 1;
86682527734SSukumar Swaminathan 	uint32_t	Command: 8;	/* Command Code */
86782527734SSukumar Swaminathan 	uint32_t	Class: 3;	/* COS */
868*8f23e9faSHans Rosenfeld 	uint32_t	AR: 1;		/* Auto Response */
86982527734SSukumar Swaminathan 	uint32_t	PU: 2;		/* PU */
87082527734SSukumar Swaminathan 	uint32_t	ERP: 1;		/* ERP */
871*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd1: 1;
87282527734SSukumar Swaminathan 	uint32_t	Timer: 8;	/* TOV */
87382527734SSukumar Swaminathan 	/* Word 8 */
87482527734SSukumar Swaminathan 	uint32_t	AbortTag;	/* Abort Tag */
87582527734SSukumar Swaminathan 	/* Word 9 */
87682527734SSukumar Swaminathan 	uint16_t	RequestTag;	/* Request Tag */
87782527734SSukumar Swaminathan 	uint16_t	OXId;		/* OXId on xmitted rsp */
87882527734SSukumar Swaminathan 	/* Word 10 */
879*8f23e9faSHans Rosenfeld 					/* The following 16 bits may be */
880*8f23e9faSHans Rosenfeld 					/* overwritten by PHWQ */
881*8f23e9faSHans Rosenfeld 	uint32_t	EBDEcnt: 4;	/* Extended BDE cnt */
882*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd2: 3;
883*8f23e9faSHans Rosenfeld 	uint32_t	LenLoc: 2;	/* Length Location */
884*8f23e9faSHans Rosenfeld 	uint32_t	QOSd: 1;	/* QOS disable */
885*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd3: 1;
886*8f23e9faSHans Rosenfeld 	uint32_t	XBL: 1;		/* Explicit Buffer List */
887*8f23e9faSHans Rosenfeld 	uint32_t	Rsvd4: 1;
888*8f23e9faSHans Rosenfeld 	uint32_t	IOd: 1;		/* IO direction */
889*8f23e9faSHans Rosenfeld 	uint32_t	DBDE: 1;	/* Data type for BDE 0 */
890*8f23e9faSHans Rosenfeld 	uint32_t	WQES: 1;	/* WQE specify XBL */
89182527734SSukumar Swaminathan 	uint32_t	PRI: 3;		/* PRI */
89282527734SSukumar Swaminathan 	uint32_t	PV: 1;		/* PRIValid */
89382527734SSukumar Swaminathan 	uint32_t	Rsvd5: 1;
89482527734SSukumar Swaminathan 	uint32_t	XC: 1;		/* Exchange Create */
895*8f23e9faSHans Rosenfeld 	uint32_t	CMD: 1;
89682527734SSukumar Swaminathan 	uint32_t	CCPE: 1;	/* CCPEnabled */
89782527734SSukumar Swaminathan 	uint32_t	CCP: 8;		/* CCP */
89882527734SSukumar Swaminathan 	/* Word 11 */
89982527734SSukumar Swaminathan 	uint32_t	CmdType: 4;	/* Command Type */
900*8f23e9faSHans Rosenfeld 	uint32_t	ELSId: 3;
90182527734SSukumar Swaminathan 	uint32_t	WQEC: 1;	/* Request WQE consumed CQE */
90282527734SSukumar Swaminathan 	uint32_t	Rsvd8: 8;
903*8f23e9faSHans Rosenfeld 	uint32_t	CQId: 16;	/* CompletionQueueID */
90482527734SSukumar Swaminathan #endif
90582527734SSukumar Swaminathan 
906*8f23e9faSHans Rosenfeld 	/* Words 12 */
907*8f23e9faSHans Rosenfeld 	uint32_t	CmdSpecific;	/* Command specific information */
908*8f23e9faSHans Rosenfeld 
909*8f23e9faSHans Rosenfeld 	/* Words 13-15 */
910*8f23e9faSHans Rosenfeld 	ULP_BDE64	FirstData;
91182527734SSukumar Swaminathan } emlxs_wqe_t;
91282527734SSukumar Swaminathan 
913*8f23e9faSHans Rosenfeld /* Used if PHWQ is enabled */
914*8f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN
915*8f23e9faSHans Rosenfeld #define	WQE_PHWQ_WQID(wqe, qid)  *(((uint16_t *)(wqe)) + 21) = \
916*8f23e9faSHans Rosenfeld 				    ((qid << 1) & 0xfffe);
917*8f23e9faSHans Rosenfeld #endif
918*8f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN
919*8f23e9faSHans Rosenfeld #define	WQE_PHWQ_WQID(wqe, qid)  *(((uint16_t *)(wqe)) + 20) = \
920*8f23e9faSHans Rosenfeld 				    ((qid << 1) & 0xfffe);
921*8f23e9faSHans Rosenfeld #endif
922*8f23e9faSHans Rosenfeld 
92382527734SSukumar Swaminathan /* Defines for ContextType */
92482527734SSukumar Swaminathan #define	WQE_RPI_CONTEXT		0
92582527734SSukumar Swaminathan #define	WQE_VPI_CONTEXT		1
92682527734SSukumar Swaminathan #define	WQE_VFI_CONTEXT		2
92782527734SSukumar Swaminathan #define	WQE_FCFI_CONTEXT	3
92882527734SSukumar Swaminathan 
92982527734SSukumar Swaminathan /* Defines for CmdType */
93082527734SSukumar Swaminathan #define	WQE_TYPE_FCP_DATA_IN	0x00
93182527734SSukumar Swaminathan #define	WQE_TYPE_FCP_DATA_OUT	0x01
932*8f23e9faSHans Rosenfeld #define	WQE_TYPE_TRECEIVE	0x02
933*8f23e9faSHans Rosenfeld #define	WQE_TYPE_TRSP		0x03
934*8f23e9faSHans Rosenfeld #define	WQE_TYPE_SRR_RSP	0x06
935*8f23e9faSHans Rosenfeld #define	WQE_TYPE_TSEND		0x07
93682527734SSukumar Swaminathan #define	WQE_TYPE_GEN		0x08
93782527734SSukumar Swaminathan #define	WQE_TYPE_ABORT		0x08
938*8f23e9faSHans Rosenfeld #define	WQE_TYPE_ELS		0x0C
93982527734SSukumar Swaminathan #define	WQE_TYPE_MASK_FIP	0x01
94082527734SSukumar Swaminathan 
94182527734SSukumar Swaminathan /* Defines for ELSId */
942*8f23e9faSHans Rosenfeld #define	WQE_ELSID_PLOGI		0x04
94382527734SSukumar Swaminathan #define	WQE_ELSID_FLOGI		0x03
94482527734SSukumar Swaminathan #define	WQE_ELSID_FDISC		0x02
94582527734SSukumar Swaminathan #define	WQE_ELSID_LOGO		0x01
946*8f23e9faSHans Rosenfeld #define	WQE_ELSID_CMD		0x00
94782527734SSukumar Swaminathan 
94882527734SSukumar Swaminathan /* RQB */
94982527734SSukumar Swaminathan #define	RQB_HEADER_SIZE		32
95082527734SSukumar Swaminathan #define	RQB_DATA_SIZE		2048
95182527734SSukumar Swaminathan #define	RQB_COUNT		256
95282527734SSukumar Swaminathan 
95382527734SSukumar Swaminathan #define	EMLXS_NUM_WQ_PAGES	4
954*8f23e9faSHans Rosenfeld #define	WQE_SIZE		64
955*8f23e9faSHans Rosenfeld 
956*8f23e9faSHans Rosenfeld #define	EMLXS_NUM_CQ_PAGES_V2	4
957*8f23e9faSHans Rosenfeld #define	CQE_SIZE		16
95882527734SSukumar Swaminathan 
95982527734SSukumar Swaminathan #define	EQ_DEPTH		1024
96082527734SSukumar Swaminathan #define	CQ_DEPTH		256
961*8f23e9faSHans Rosenfeld #define	CQ_DEPTH_V2	((4096/CQE_SIZE) * EMLXS_NUM_CQ_PAGES_V2) /* 1024 */
962*8f23e9faSHans Rosenfeld #define	WQ_DEPTH	((4096/WQE_SIZE) * EMLXS_NUM_WQ_PAGES) /* 256 */
96382527734SSukumar Swaminathan #define	MQ_DEPTH		16
96482527734SSukumar Swaminathan #define	RQ_DEPTH		512 /* Multiple of RQB_COUNT */
96582527734SSukumar Swaminathan #define	RQ_DEPTH_EXPONENT	9
96682527734SSukumar Swaminathan 
967*8f23e9faSHans Rosenfeld #define	EMLXS_MAX_WQS_PER_EQ	4
968*8f23e9faSHans Rosenfeld 
96982527734SSukumar Swaminathan 
97082527734SSukumar Swaminathan /* Principal doorbell register layouts */
97182527734SSukumar Swaminathan typedef struct emlxs_rqdb
97282527734SSukumar Swaminathan {
97382527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
97482527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
97582527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
97682527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
97782527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* RQ id for posted RQE */
97882527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
97982527734SSukumar Swaminathan 
98082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
98182527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* RQ id for posted RQE */
98282527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
98382527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
98482527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
98582527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
98682527734SSukumar Swaminathan 
98782527734SSukumar Swaminathan } emlxs_rqdb_t;
98882527734SSukumar Swaminathan 
98982527734SSukumar Swaminathan 
99082527734SSukumar Swaminathan typedef union emlxs_rqdbu
99182527734SSukumar Swaminathan {
99282527734SSukumar Swaminathan 	uint32_t	word;
99382527734SSukumar Swaminathan 	emlxs_rqdb_t	db;
99482527734SSukumar Swaminathan 
99582527734SSukumar Swaminathan } emlxs_rqdbu_t;
99682527734SSukumar Swaminathan 
99782527734SSukumar Swaminathan 
99882527734SSukumar Swaminathan typedef struct emlxs_wqdb
99982527734SSukumar Swaminathan {
100082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
100182527734SSukumar Swaminathan 	uint32_t	NumPosted:8;	/* Number of entries posted */
100282527734SSukumar Swaminathan 	uint32_t	Index:8;	/* Queue index for posted command */
100382527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
100482527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* WQ id for posted WQE */
100582527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
100682527734SSukumar Swaminathan 
100782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
100882527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* WQ id for posted WQE */
100982527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
101082527734SSukumar Swaminathan 	uint32_t	Index:8;	/* Queue index for posted command */
101182527734SSukumar Swaminathan 	uint32_t	NumPosted:8;	/* Number of entries posted */
101282527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
101382527734SSukumar Swaminathan 
101482527734SSukumar Swaminathan } emlxs_wqdb_t;
101582527734SSukumar Swaminathan 
101682527734SSukumar Swaminathan 
101782527734SSukumar Swaminathan typedef union emlxs_wqdbu
101882527734SSukumar Swaminathan {
101982527734SSukumar Swaminathan 	uint32_t	word;
102082527734SSukumar Swaminathan 	emlxs_wqdb_t	db;
102182527734SSukumar Swaminathan 
102282527734SSukumar Swaminathan } emlxs_wqdbu_t;
102382527734SSukumar Swaminathan 
102482527734SSukumar Swaminathan 
102582527734SSukumar Swaminathan typedef struct emlxs_cqdb
102682527734SSukumar Swaminathan {
102782527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
102882527734SSukumar Swaminathan 	uint32_t	NumPosted:2;	/* Number of entries posted */
102982527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm CQ */
103082527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
103182527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
103282527734SSukumar Swaminathan 	uint32_t	Event:1;	/* 1 if processed entry is EQE */
103382527734SSukumar Swaminathan 				/* 0 if processed entry is CQE */
103482527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* CQ id for posted CQE */
103582527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
103682527734SSukumar Swaminathan 
103782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
103882527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* CQ id for posted CQE */
103982527734SSukumar Swaminathan 	uint32_t	Event:1;	/* 1 if processed entry is EQE */
104082527734SSukumar Swaminathan 				/* 0 if processed entry is CQE */
104182527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
104282527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
104382527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm CQ */
104482527734SSukumar Swaminathan 	uint32_t	NumPosted:2;	/* Number of entries posted */
104582527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
104682527734SSukumar Swaminathan 
104782527734SSukumar Swaminathan } emlxs_cqdb_t;
104882527734SSukumar Swaminathan 
104982527734SSukumar Swaminathan 
105082527734SSukumar Swaminathan typedef union emlxs_cqdbu
105182527734SSukumar Swaminathan {
105282527734SSukumar Swaminathan 	uint32_t	word;
105382527734SSukumar Swaminathan 	emlxs_cqdb_t	db;
105482527734SSukumar Swaminathan 
105582527734SSukumar Swaminathan } emlxs_cqdbu_t;
105682527734SSukumar Swaminathan 
105782527734SSukumar Swaminathan typedef struct emlxs_eqdb
105882527734SSukumar Swaminathan {
105982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
106082527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
106182527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm EQ */
106282527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
106382527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
106482527734SSukumar Swaminathan 	uint32_t	Event:1;	/* True iff processed entry is EQE */
106582527734SSukumar Swaminathan 	uint32_t	Clear:1;	/* clears EQ interrupt when set */
106682527734SSukumar Swaminathan 	uint32_t	Qid:9;		/* EQ id for posted EQE */
106782527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
106882527734SSukumar Swaminathan 
106982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
107082527734SSukumar Swaminathan 	uint32_t	Qid:9;		/* EQ id for posted EQE */
107182527734SSukumar Swaminathan 	uint32_t	Clear:1;	/* clears EQ interrupt when set */
107282527734SSukumar Swaminathan 	uint32_t	Event:1;	/* True iff processed entry is EQE */
107382527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
107482527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
107582527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm EQ */
107682527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
107782527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
107882527734SSukumar Swaminathan 
107982527734SSukumar Swaminathan } emlxs_eqdb_t;
108082527734SSukumar Swaminathan 
108182527734SSukumar Swaminathan 
108282527734SSukumar Swaminathan typedef union emlxs_eqdbu
108382527734SSukumar Swaminathan {
108482527734SSukumar Swaminathan 	uint32_t	word;
108582527734SSukumar Swaminathan 	emlxs_eqdb_t	db;
108682527734SSukumar Swaminathan 
108782527734SSukumar Swaminathan } emlxs_eqdbu_t;
108882527734SSukumar Swaminathan 
108982527734SSukumar Swaminathan 
109082527734SSukumar Swaminathan typedef struct emlxs_mqdb
109182527734SSukumar Swaminathan {
109282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
109382527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
109482527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
109582527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
109682527734SSukumar Swaminathan 	uint32_t	Qid:11;		/* MQ id for posted MQE */
109782527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
109882527734SSukumar Swaminathan 
109982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
110082527734SSukumar Swaminathan 	uint32_t	Qid:11;		/* MQ id for posted MQE */
110182527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
110282527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
110382527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
110482527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
110582527734SSukumar Swaminathan 
110682527734SSukumar Swaminathan } emlxs_mqdb_t;
110782527734SSukumar Swaminathan 
110882527734SSukumar Swaminathan 
110982527734SSukumar Swaminathan typedef union emlxs_mqdbu
111082527734SSukumar Swaminathan {
111182527734SSukumar Swaminathan 	uint32_t	word;
111282527734SSukumar Swaminathan 	emlxs_mqdb_t	db;
111382527734SSukumar Swaminathan 
111482527734SSukumar Swaminathan } emlxs_mqdbu_t;
111582527734SSukumar Swaminathan 
111682527734SSukumar Swaminathan 
111782527734SSukumar Swaminathan #ifdef	__cplusplus
111882527734SSukumar Swaminathan }
111982527734SSukumar Swaminathan #endif
112082527734SSukumar Swaminathan 
112182527734SSukumar Swaminathan #endif	/* _EMLXS_QUEUE_H */
1122