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*8f23e9fa