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  *
882527734SSukumar Swaminathan  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
982527734SSukumar Swaminathan  * or http://www.opensolaris.org/os/licensing.
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 /*
2382527734SSukumar Swaminathan  * Copyright 2009 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 */
14482527734SSukumar Swaminathan 	uint32_t	port: 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;
16582527734SSukumar Swaminathan 	uint32_t	port: 1;
16682527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
16782527734SSukumar Swaminathan #endif
16882527734SSukumar Swaminathan } CQE_UnsolRcv_t;
16982527734SSukumar Swaminathan 
17082527734SSukumar Swaminathan /* Status defines */
17182527734SSukumar Swaminathan #define	RQ_STATUS_SUCCESS		0x10
17282527734SSukumar Swaminathan #define	RQ_STATUS_BUFLEN_EXCEEDED	0x11
17382527734SSukumar Swaminathan #define	RQ_STATUS_NEED_BUFFER		0x12
17482527734SSukumar Swaminathan #define	RQ_STATUS_FRAME_DISCARDED	0x13
17582527734SSukumar Swaminathan 
17682527734SSukumar Swaminathan 
17782527734SSukumar Swaminathan typedef struct CQE_XRI_Abort
17882527734SSukumar Swaminathan {
17982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
18082527734SSukumar Swaminathan 	uint16_t	Rsvd1;		/* Word 0 */
18182527734SSukumar Swaminathan 	uint8_t		Status;
18282527734SSukumar Swaminathan 	uint8_t		Rsvd2;
18382527734SSukumar Swaminathan 
18482527734SSukumar Swaminathan 	uint32_t	rjtStatus;	/* Word 1 */
18582527734SSukumar Swaminathan 
18682527734SSukumar Swaminathan 	uint16_t	RemoteXID;	/* Word 2 */
18782527734SSukumar Swaminathan 	uint16_t	XRI;
18882527734SSukumar Swaminathan 
18982527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
19082527734SSukumar Swaminathan 	uint32_t	IA: 1;
19182527734SSukumar Swaminathan 	uint32_t	BR: 1;
19282527734SSukumar Swaminathan 	uint32_t	EO: 1;
19382527734SSukumar Swaminathan 	uint32_t	Rsvd3: 4;
19482527734SSukumar Swaminathan 	uint32_t	Code: 8;
19582527734SSukumar Swaminathan 	uint32_t	Rsvd4: 16;
19682527734SSukumar Swaminathan #endif
19782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
19882527734SSukumar Swaminathan 	uint8_t		Rsvd2;
19982527734SSukumar Swaminathan 	uint8_t		Status;
20082527734SSukumar Swaminathan 	uint16_t	Rsvd1;		/* Word 0 */
20182527734SSukumar Swaminathan 
20282527734SSukumar Swaminathan 	uint32_t	rjtStatus;	/* Word 1 */
20382527734SSukumar Swaminathan 
20482527734SSukumar Swaminathan 	uint16_t	XRI;
20582527734SSukumar Swaminathan 	uint16_t	RemoteXID;	/* Word 2 */
20682527734SSukumar Swaminathan 
20782527734SSukumar Swaminathan 	uint32_t	Rsvd4: 16;
20882527734SSukumar Swaminathan 	uint32_t	Code: 8;
20982527734SSukumar Swaminathan 	uint32_t	Rsvd3: 4;
21082527734SSukumar Swaminathan 	uint32_t	EO: 1;
21182527734SSukumar Swaminathan 	uint32_t	BR: 1;
21282527734SSukumar Swaminathan 	uint32_t	IA: 1;
21382527734SSukumar Swaminathan 	uint32_t	Valid: 1;	/* Word 3 */
21482527734SSukumar Swaminathan #endif
21582527734SSukumar Swaminathan } CQE_XRI_Abort_t;
21682527734SSukumar Swaminathan 
21782527734SSukumar Swaminathan 
21882527734SSukumar Swaminathan 
21982527734SSukumar Swaminathan #define	CQE_VALID    0x80000000  /* Mask for CQE valid */
22082527734SSukumar Swaminathan 
22182527734SSukumar Swaminathan /* Defines for CQE Codes */
22282527734SSukumar Swaminathan #define	CQE_TYPE_WQ_COMPLETION	1
22382527734SSukumar Swaminathan #define	CQE_TYPE_RELEASE_WQE	2
22482527734SSukumar Swaminathan #define	CQE_TYPE_UNSOL_RCV	4
22582527734SSukumar Swaminathan #define	CQE_TYPE_XRI_ABORTED	5
22682527734SSukumar Swaminathan 
22782527734SSukumar Swaminathan 
22882527734SSukumar Swaminathan typedef struct CQE_ASYNC_FCOE
22982527734SSukumar Swaminathan {
23082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
23182527734SSukumar Swaminathan 	uint32_t	ref_index;	/* Word 0 */
23282527734SSukumar Swaminathan 
23382527734SSukumar Swaminathan 	uint16_t	evt_type;	/* Word 1 */
23482527734SSukumar Swaminathan 	uint16_t	fcf_count;
23582527734SSukumar Swaminathan 
23682527734SSukumar Swaminathan 	uint32_t	event_tag;	/* Word 2 */
23782527734SSukumar Swaminathan 
23882527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
23982527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
24082527734SSukumar Swaminathan 	uint32_t	Rsvd2: 6;
24182527734SSukumar Swaminathan 	uint32_t	event_type: 8;
24282527734SSukumar Swaminathan 	uint32_t	event_code: 8;
24382527734SSukumar Swaminathan 	uint32_t	Rsvd3: 8;
24482527734SSukumar Swaminathan #endif
24582527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
24682527734SSukumar Swaminathan 	uint32_t	ref_index;	/* Word 0 */
24782527734SSukumar Swaminathan 
24882527734SSukumar Swaminathan 	uint16_t	fcf_count;
24982527734SSukumar Swaminathan 	uint16_t	evt_type;	/* Word 1 */
25082527734SSukumar Swaminathan 
25182527734SSukumar Swaminathan 	uint32_t	event_tag;	/* Word 2 */
25282527734SSukumar Swaminathan 
25382527734SSukumar Swaminathan 	uint32_t	Rsvd3: 8;
25482527734SSukumar Swaminathan 	uint32_t	event_code: 8;
25582527734SSukumar Swaminathan 	uint32_t	event_type: 8;
25682527734SSukumar Swaminathan 	uint32_t	Rsvd2: 6;
25782527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
25882527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
25982527734SSukumar Swaminathan #endif
26082527734SSukumar Swaminathan } CQE_ASYNC_FCOE_t;
26182527734SSukumar Swaminathan 
26282527734SSukumar Swaminathan typedef struct CQE_ASYNC
26382527734SSukumar Swaminathan {
26482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
26582527734SSukumar Swaminathan 	uint8_t		port_speed;	/* Word 0 */
26682527734SSukumar Swaminathan 	uint8_t		port_duplex;
26782527734SSukumar Swaminathan 	uint8_t		link_status;
26882527734SSukumar Swaminathan 	uint8_t		phys_port;
26982527734SSukumar Swaminathan 
270*b3660a96SSukumar Swaminathan 	uint16_t	qos_link_speed;	/* Word 1 */
271*b3660a96SSukumar Swaminathan 	uint8_t		Rsvd1;
272*b3660a96SSukumar Swaminathan 	uint8_t		port_fault;
27382527734SSukumar Swaminathan 
27482527734SSukumar Swaminathan 	uint32_t	event_tag;	/* Word 2 */
27582527734SSukumar Swaminathan 
27682527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
27782527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
27882527734SSukumar Swaminathan 	uint32_t	Rsvd2: 6;
27982527734SSukumar Swaminathan 	uint32_t	event_type: 8;
28082527734SSukumar Swaminathan 	uint32_t	event_code: 8;
28182527734SSukumar Swaminathan 	uint32_t	Rsvd3: 8;
28282527734SSukumar Swaminathan #endif
28382527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
28482527734SSukumar Swaminathan 	uint8_t		phys_port;
28582527734SSukumar Swaminathan 	uint8_t		link_status;
28682527734SSukumar Swaminathan 	uint8_t		port_duplex;
28782527734SSukumar Swaminathan 	uint8_t		port_speed;	/* Word 0 */
28882527734SSukumar Swaminathan 
289*b3660a96SSukumar Swaminathan 	uint8_t		port_fault;	/* Word 1 */
290*b3660a96SSukumar Swaminathan 	uint8_t		Rsvd1;
291*b3660a96SSukumar Swaminathan 	uint16_t	qos_link_speed;
29282527734SSukumar Swaminathan 
29382527734SSukumar Swaminathan 	uint32_t	event_tag;	/* Word 2 */
29482527734SSukumar Swaminathan 
29582527734SSukumar Swaminathan 	uint32_t	Rsvd3: 8;
29682527734SSukumar Swaminathan 	uint32_t	event_code: 8;
29782527734SSukumar Swaminathan 	uint32_t	event_type: 8;
29882527734SSukumar Swaminathan 	uint32_t	Rsvd2: 6;
29982527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
30082527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
30182527734SSukumar Swaminathan #endif
30282527734SSukumar Swaminathan } CQE_ASYNC_t;
30382527734SSukumar Swaminathan 
30482527734SSukumar Swaminathan /* port_speed defines */
30582527734SSukumar Swaminathan #define	PHY_1GHZ_LINK			3
30682527734SSukumar Swaminathan #define	PHY_10GHZ_LINK			4
30782527734SSukumar Swaminathan 
30882527734SSukumar Swaminathan /* event_code defines */
30982527734SSukumar Swaminathan #define	ASYNC_EVENT_CODE_LINK_STATE	1
31082527734SSukumar Swaminathan #define	ASYNC_EVENT_CODE_FCOE_FIP	2
31182527734SSukumar Swaminathan #define	ASYNC_EVENT_CODE_DCBX		3
31282527734SSukumar Swaminathan 
31382527734SSukumar Swaminathan /* LINK_STATE - link_status defines */
31482527734SSukumar Swaminathan #define	ASYNC_EVENT_PHYS_LINK_DOWN	0
31582527734SSukumar Swaminathan #define	ASYNC_EVENT_PHYS_LINK_UP	1
31682527734SSukumar Swaminathan #define	ASYNC_EVENT_LOGICAL_LINK_DOWN	2
31782527734SSukumar Swaminathan #define	ASYNC_EVENT_LOGICAL_LINK_UP	3
31882527734SSukumar Swaminathan 
31982527734SSukumar Swaminathan /* FCOE_FIP - evt_type defines */
32082527734SSukumar Swaminathan #define	ASYNC_EVENT_NEW_FCF_DISC	1
32182527734SSukumar Swaminathan #define	ASYNC_EVENT_FCF_TABLE_FULL	2
32282527734SSukumar Swaminathan #define	ASYNC_EVENT_FCF_DEAD		3
32382527734SSukumar Swaminathan #define	ASYNC_EVENT_VIRT_LINK_CLEAR	4
32482527734SSukumar Swaminathan 
32582527734SSukumar Swaminathan typedef struct CQE_MBOX
32682527734SSukumar Swaminathan {
32782527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
32882527734SSukumar Swaminathan 	uint16_t	extend_status;	/* Word 0 */
32982527734SSukumar Swaminathan 	uint16_t	cmpl_status;
33082527734SSukumar Swaminathan 
33182527734SSukumar Swaminathan 	uint32_t	tag_low;	/* Word 1 */
33282527734SSukumar Swaminathan 	uint32_t	tag_high;	/* Word 2 */
33382527734SSukumar Swaminathan 
33482527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
33582527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
33682527734SSukumar Swaminathan 	uint32_t	hpi: 1;
33782527734SSukumar Swaminathan 	uint32_t	completed: 1;
33882527734SSukumar Swaminathan 	uint32_t	consumed: 1;
33982527734SSukumar Swaminathan 	uint32_t	Rsvd1: 27;
34082527734SSukumar Swaminathan #endif
34182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
34282527734SSukumar Swaminathan 	uint16_t	cmpl_status;
34382527734SSukumar Swaminathan 	uint16_t	extend_status;	/* Word 0 */
34482527734SSukumar Swaminathan 
34582527734SSukumar Swaminathan 	uint32_t	tag_low;	/* Word 1 */
34682527734SSukumar Swaminathan 	uint32_t	tag_high;	/* Word 2 */
34782527734SSukumar Swaminathan 
34882527734SSukumar Swaminathan 	uint32_t	Rsvd1: 27;
34982527734SSukumar Swaminathan 	uint32_t	consumed: 1;
35082527734SSukumar Swaminathan 	uint32_t	completed: 1;
35182527734SSukumar Swaminathan 	uint32_t	hpi: 1;
35282527734SSukumar Swaminathan 	uint32_t	async_evt: 1;
35382527734SSukumar Swaminathan 	uint32_t	valid: 1;	/* Word 3 */
35482527734SSukumar Swaminathan #endif
35582527734SSukumar Swaminathan } CQE_MBOX_t;
35682527734SSukumar Swaminathan 
35782527734SSukumar Swaminathan typedef union
35882527734SSukumar Swaminathan {
35982527734SSukumar Swaminathan 	uint32_t	word[4];
36082527734SSukumar Swaminathan 
36182527734SSukumar Swaminathan 	/* Group 1 types */
36282527734SSukumar Swaminathan 	CQE_ASYNC_t	cqAsyncEntry;
36382527734SSukumar Swaminathan 	CQE_ASYNC_FCOE_t cqAsyncFCOEEntry;
36482527734SSukumar Swaminathan 	CQE_MBOX_t	cqMboxEntry;
36582527734SSukumar Swaminathan 
36682527734SSukumar Swaminathan 	/* Group 2 types */
36782527734SSukumar Swaminathan 	CQE_CmplWQ_t	cqCmplEntry;
36882527734SSukumar Swaminathan 	CQE_RelWQ_t	cqRelEntry;
36982527734SSukumar Swaminathan 	CQE_UnsolRcv_t	cqUnsolRcvEntry;
37082527734SSukumar Swaminathan 	CQE_XRI_Abort_t	cqXRIEntry;
37182527734SSukumar Swaminathan } CQE_u;
37282527734SSukumar Swaminathan 
37382527734SSukumar Swaminathan /* RQ entries */
37482527734SSukumar Swaminathan typedef struct RQE
37582527734SSukumar Swaminathan {
37682527734SSukumar Swaminathan 	uint32_t	AddrHi;
37782527734SSukumar Swaminathan 	uint32_t	AddrLo;
37882527734SSukumar Swaminathan 
37982527734SSukumar Swaminathan } RQE_t;
38082527734SSukumar Swaminathan 
38182527734SSukumar Swaminathan 
38282527734SSukumar Swaminathan /* Definitions for WQEs */
38382527734SSukumar Swaminathan typedef struct
38482527734SSukumar Swaminathan {
38582527734SSukumar Swaminathan 	ULP_BDE64	Payload;
38682527734SSukumar Swaminathan 	uint32_t	PayloadLength;
38782527734SSukumar Swaminathan 
38882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
38982527734SSukumar Swaminathan 	uint32_t	Rsvd1: 6;
39082527734SSukumar Swaminathan 	uint32_t	VF: 1;
39182527734SSukumar Swaminathan 	uint32_t	SP: 1;
39282527734SSukumar Swaminathan 	uint32_t	LocalId: 24;
39382527734SSukumar Swaminathan 
39482527734SSukumar Swaminathan 	uint32_t	Rsvd2:  8;
39582527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
39682527734SSukumar Swaminathan #endif
39782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
39882527734SSukumar Swaminathan 	uint32_t	LocalId: 24;
39982527734SSukumar Swaminathan 	uint32_t	SP: 1;
40082527734SSukumar Swaminathan 	uint32_t	VF: 1;
40182527734SSukumar Swaminathan 	uint32_t	Rsvd1: 6;
40282527734SSukumar Swaminathan 
40382527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
40482527734SSukumar Swaminathan 	uint32_t	Rsvd2:  8;
40582527734SSukumar Swaminathan #endif
40682527734SSukumar Swaminathan 
40782527734SSukumar Swaminathan } ELS_REQ_WQE;
40882527734SSukumar Swaminathan 
40982527734SSukumar Swaminathan typedef struct
41082527734SSukumar Swaminathan {
41182527734SSukumar Swaminathan 	ULP_BDE64	Payload;
41282527734SSukumar Swaminathan 	uint32_t	Rsvd1[2];
41382527734SSukumar Swaminathan 
41482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
41582527734SSukumar Swaminathan 	uint32_t	Rsvd2: 8;
41682527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
41782527734SSukumar Swaminathan #endif
41882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
41982527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
42082527734SSukumar Swaminathan 	uint32_t	Rsvd2: 8;
42182527734SSukumar Swaminathan #endif
42282527734SSukumar Swaminathan 
42382527734SSukumar Swaminathan } ELS_RSP_WQE;
42482527734SSukumar Swaminathan 
42582527734SSukumar Swaminathan typedef struct
42682527734SSukumar Swaminathan {
42782527734SSukumar Swaminathan 	ULP_BDE64	Payload;
42882527734SSukumar Swaminathan 	uint32_t	PayloadLength;
42982527734SSukumar Swaminathan 
43082527734SSukumar Swaminathan 	uint32_t	Parameter;
43182527734SSukumar Swaminathan 
43282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
43382527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
43482527734SSukumar Swaminathan 	uint32_t	Type: 8;
43582527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
43682527734SSukumar Swaminathan 	uint32_t	Rsvd1: 4;
43782527734SSukumar Swaminathan 	uint32_t	la: 1;
43882527734SSukumar Swaminathan 	uint32_t	Rsvd2: 3;
43982527734SSukumar Swaminathan #endif
44082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
44182527734SSukumar Swaminathan 	uint32_t	Rsvd2: 3;
44282527734SSukumar Swaminathan 	uint32_t	la: 1;
44382527734SSukumar Swaminathan 	uint32_t	Rsvd1: 4;
44482527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
44582527734SSukumar Swaminathan 	uint32_t	Type: 8;
44682527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
44782527734SSukumar Swaminathan #endif
44882527734SSukumar Swaminathan 
44982527734SSukumar Swaminathan } GEN_REQ_WQE;
45082527734SSukumar Swaminathan 
45182527734SSukumar Swaminathan typedef struct
45282527734SSukumar Swaminathan {
45382527734SSukumar Swaminathan 	ULP_BDE64	Payload;
45482527734SSukumar Swaminathan 	uint32_t	PayloadLength;
45582527734SSukumar Swaminathan 
45682527734SSukumar Swaminathan 	uint32_t	Parameter;
45782527734SSukumar Swaminathan 
45882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
45982527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
46082527734SSukumar Swaminathan 	uint32_t	Type: 8;
46182527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
46282527734SSukumar Swaminathan 	uint32_t	ls: 1;
46382527734SSukumar Swaminathan 	uint32_t	Rsvd1: 3;
46482527734SSukumar Swaminathan 	uint32_t	la: 1;
46582527734SSukumar Swaminathan 	uint32_t	si: 1;
46682527734SSukumar Swaminathan 	uint32_t	Rsvd2: 2;
46782527734SSukumar Swaminathan #endif
46882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
46982527734SSukumar Swaminathan 	uint32_t	Rsvd2: 2;
47082527734SSukumar Swaminathan 	uint32_t	si: 1;
47182527734SSukumar Swaminathan 	uint32_t	la: 1;
47282527734SSukumar Swaminathan 	uint32_t	Rsvd1: 3;
47382527734SSukumar Swaminathan 	uint32_t	ls: 1;
47482527734SSukumar Swaminathan 	uint32_t	DFctl: 8;
47582527734SSukumar Swaminathan 	uint32_t	Type: 8;
47682527734SSukumar Swaminathan 	uint32_t	Rctl: 8;
47782527734SSukumar Swaminathan #endif
47882527734SSukumar Swaminathan 
47982527734SSukumar Swaminathan } XMIT_SEQ_WQE;
48082527734SSukumar Swaminathan 
48182527734SSukumar Swaminathan typedef struct
48282527734SSukumar Swaminathan {
48382527734SSukumar Swaminathan 	ULP_BDE64	Payload;
48482527734SSukumar Swaminathan 	uint32_t	PayloadLength;
48582527734SSukumar Swaminathan 
48682527734SSukumar Swaminathan 	uint32_t	TotalTransferCount;
48782527734SSukumar Swaminathan 	uint32_t	Rsvd1;
48882527734SSukumar Swaminathan 
48982527734SSukumar Swaminathan } FCP_WQE;
49082527734SSukumar Swaminathan 
49182527734SSukumar Swaminathan 
49282527734SSukumar Swaminathan typedef struct
49382527734SSukumar Swaminathan {
49482527734SSukumar Swaminathan 	uint32_t	Rsvd1[3];
49582527734SSukumar Swaminathan 
49682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
49782527734SSukumar Swaminathan 	uint32_t	Rsvd2: 16;
49882527734SSukumar Swaminathan 	uint32_t	Criteria: 8;
49982527734SSukumar Swaminathan 	uint32_t	Rsvd3: 7;
50082527734SSukumar Swaminathan 	uint32_t	IA: 1;
50182527734SSukumar Swaminathan #endif
50282527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
50382527734SSukumar Swaminathan 	uint32_t	IA: 1;
50482527734SSukumar Swaminathan 	uint32_t	Rsvd3: 7;
50582527734SSukumar Swaminathan 	uint32_t	Criteria: 8;
50682527734SSukumar Swaminathan 	uint32_t	Rsvd2: 16;
50782527734SSukumar Swaminathan #endif
50882527734SSukumar Swaminathan 
50982527734SSukumar Swaminathan 	uint32_t	Rsvd4[2];
51082527734SSukumar Swaminathan 
51182527734SSukumar Swaminathan } ABORT_WQE;
51282527734SSukumar Swaminathan 
51382527734SSukumar Swaminathan #define	ABORT_XRI_TAG	1	/* Abort tag is a XRITag */
51482527734SSukumar Swaminathan #define	ABORT_ABT_TAG	2	/* Abort tag is a AbortTag */
51582527734SSukumar Swaminathan #define	ABORT_REQ_TAG	3	/* Abort tag is a RequestTag */
51682527734SSukumar Swaminathan 
51782527734SSukumar Swaminathan typedef struct
51882527734SSukumar Swaminathan {
51982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
52082527734SSukumar Swaminathan 	uint8_t		Payload0;
52182527734SSukumar Swaminathan 	uint8_t		Payload1;
52282527734SSukumar Swaminathan 	uint8_t		Payload2;
52382527734SSukumar Swaminathan 	uint8_t		Payload3;
52482527734SSukumar Swaminathan 
52582527734SSukumar Swaminathan 	uint32_t	OXId: 16;
52682527734SSukumar Swaminathan 	uint32_t	RXId: 16;
52782527734SSukumar Swaminathan 
52882527734SSukumar Swaminathan 	uint32_t	SeqCntLow: 16;
52982527734SSukumar Swaminathan 	uint32_t	SeqCntHigh: 16;
53082527734SSukumar Swaminathan #endif
53182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
53282527734SSukumar Swaminathan 	uint8_t		Payload3;
53382527734SSukumar Swaminathan 	uint8_t		Payload2;
53482527734SSukumar Swaminathan 	uint8_t		Payload1;
53582527734SSukumar Swaminathan 	uint8_t		Payload0;
53682527734SSukumar Swaminathan 
53782527734SSukumar Swaminathan 	uint32_t	RXId: 16;
53882527734SSukumar Swaminathan 	uint32_t	OXId: 16;
53982527734SSukumar Swaminathan 
54082527734SSukumar Swaminathan 	uint32_t	SeqCntHigh: 16;
54182527734SSukumar Swaminathan 	uint32_t	SeqCntLow: 16;
54282527734SSukumar Swaminathan #endif
54382527734SSukumar Swaminathan 	uint32_t	Rsvd1[2];
54482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
54582527734SSukumar Swaminathan 	uint32_t	XO: 1;
54682527734SSukumar Swaminathan 	uint32_t	AR: 1;
54782527734SSukumar Swaminathan 	uint32_t	PT: 1;
54882527734SSukumar Swaminathan 	uint32_t	Rsvd2: 5;
54982527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
55082527734SSukumar Swaminathan #endif
55182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
55282527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
55382527734SSukumar Swaminathan 	uint32_t	Rsvd2: 5;
55482527734SSukumar Swaminathan 	uint32_t	PT: 1;
55582527734SSukumar Swaminathan 	uint32_t	AR: 1;
55682527734SSukumar Swaminathan 	uint32_t	XO: 1;
55782527734SSukumar Swaminathan #endif
55882527734SSukumar Swaminathan 
55982527734SSukumar Swaminathan } BLS_WQE;
56082527734SSukumar Swaminathan 
56182527734SSukumar Swaminathan 
56282527734SSukumar Swaminathan typedef struct
56382527734SSukumar Swaminathan {
56482527734SSukumar Swaminathan 	uint32_t	Rsvd1[5];
56582527734SSukumar Swaminathan 
56682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
56782527734SSukumar Swaminathan 	uint32_t	XO: 1;
56882527734SSukumar Swaminathan 	uint32_t	Rsvd2: 7;
56982527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
57082527734SSukumar Swaminathan #endif
57182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
57282527734SSukumar Swaminathan 	uint32_t	RemoteId: 24;
57382527734SSukumar Swaminathan 	uint32_t	Rsvd2: 7;
57482527734SSukumar Swaminathan 	uint32_t	XO: 1;
57582527734SSukumar Swaminathan #endif
57682527734SSukumar Swaminathan 
57782527734SSukumar Swaminathan } CREATE_XRI_WQE;
57882527734SSukumar Swaminathan 
57982527734SSukumar Swaminathan typedef struct emlxs_wqe
58082527734SSukumar Swaminathan {
58182527734SSukumar Swaminathan 	/* Words 0-5 */
58282527734SSukumar Swaminathan 	union
58382527734SSukumar Swaminathan 	{
58482527734SSukumar Swaminathan 		uint32_t	word[6];	/* Words 0-5: cmd specific */
58582527734SSukumar Swaminathan 		ELS_REQ_WQE	ElsCmd;		/* ELS command overlay */
58682527734SSukumar Swaminathan 		GEN_REQ_WQE	GenReq;		/* CT command overlay */
58782527734SSukumar Swaminathan 		FCP_WQE		FcpCmd;		/* FCP command overlay */
58882527734SSukumar Swaminathan 		ELS_RSP_WQE	ElsRsp;		/* ELS response overlay */
58982527734SSukumar Swaminathan 		ABORT_WQE	Abort;		/* Abort overlay */
59082527734SSukumar Swaminathan 		BLS_WQE		BlsRsp;		/* BLS overlay */
59182527734SSukumar Swaminathan 		CREATE_XRI_WQE	CreateXri;	/* Create XRI */
59282527734SSukumar Swaminathan 		XMIT_SEQ_WQE	XmitSeq;	/* Xmit Sequence */
59382527734SSukumar Swaminathan 	} un;
59482527734SSukumar Swaminathan 
59582527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
59682527734SSukumar Swaminathan 	/* Word 6 */
59782527734SSukumar Swaminathan 	uint16_t	ContextTag;	/* Context Tag */
59882527734SSukumar Swaminathan 	uint16_t	XRITag;		/* XRItag */
59982527734SSukumar Swaminathan 	/* Word 7 */
60082527734SSukumar Swaminathan 	uint32_t	Timer: 8;	/* TOV */
60182527734SSukumar Swaminathan 	uint32_t	Rsvd2: 1;
60282527734SSukumar Swaminathan 	uint32_t	ERP: 1;		/* ERP */
60382527734SSukumar Swaminathan 	uint32_t	PU: 2;		/* PU */
60482527734SSukumar Swaminathan 	uint32_t	Rsvd1: 1;
60582527734SSukumar Swaminathan 	uint32_t	Class: 3;	/* COS */
60682527734SSukumar Swaminathan 	uint32_t	Command: 8;	/* Command Code */
60782527734SSukumar Swaminathan 	uint32_t	Status: 4;	/* Final Status */
60882527734SSukumar Swaminathan 	uint32_t	ContextType: 2;	/* Context Type */
60982527734SSukumar Swaminathan 	uint32_t	Rsvd0: 2;
61082527734SSukumar Swaminathan 	/* Word 8 */
61182527734SSukumar Swaminathan 	uint32_t	AbortTag;	/* Abort Tag */
61282527734SSukumar Swaminathan 	/* Word 9 */
61382527734SSukumar Swaminathan 	uint16_t	OXId;		/* OXId on xmitted rsp */
61482527734SSukumar Swaminathan 	uint16_t	RequestTag;	/* Request Tag */
61582527734SSukumar Swaminathan 	/* Word 10 */
61682527734SSukumar Swaminathan 	uint32_t	CCP: 8;		/* CCP */
61782527734SSukumar Swaminathan 	uint32_t	CCPE: 1;	/* CCPEnabled */
61882527734SSukumar Swaminathan 	uint32_t	Rsvd6: 1;
61982527734SSukumar Swaminathan 	uint32_t	XC: 1;		/* Exchange Create */
62082527734SSukumar Swaminathan 	uint32_t	Rsvd5: 1;
62182527734SSukumar Swaminathan 	uint32_t	PV: 1;		/* PRIValid */
62282527734SSukumar Swaminathan 	uint32_t	PRI: 3;		/* PRI */
62382527734SSukumar Swaminathan 	uint32_t	Rsvd4: 16;
62482527734SSukumar Swaminathan 	/* Word 11 */
62582527734SSukumar Swaminathan 	uint32_t	Rsvd9: 6;
62682527734SSukumar Swaminathan 	uint32_t	CQId: 10;	/* CompletionQueueID */
62782527734SSukumar Swaminathan 	uint32_t	Rsvd8: 8;
62882527734SSukumar Swaminathan 	uint32_t	WQEC: 1;	/* Request WQE consumed CQE */
62982527734SSukumar Swaminathan 	uint32_t	Rsvd7: 1;
63082527734SSukumar Swaminathan 	uint32_t	ELSId: 2;
63182527734SSukumar Swaminathan 	uint32_t	CmdType: 4;	/* Command Type */
63282527734SSukumar Swaminathan #endif
63382527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
63482527734SSukumar Swaminathan 	/* Word 6 */
63582527734SSukumar Swaminathan 	uint16_t	XRITag;		/* XRItag */
63682527734SSukumar Swaminathan 	uint16_t	ContextTag;	/* Context Tag */
63782527734SSukumar Swaminathan 	/* Word 7 */
63882527734SSukumar Swaminathan 	uint32_t	Rsvd0: 2;
63982527734SSukumar Swaminathan 	uint32_t	ContextType: 2;	/* Context Type */
64082527734SSukumar Swaminathan 	uint32_t	Status: 4;	/* Final Status */
64182527734SSukumar Swaminathan 	uint32_t	Command: 8;	/* Command Code */
64282527734SSukumar Swaminathan 	uint32_t	Class: 3;	/* COS */
64382527734SSukumar Swaminathan 	uint32_t	Rsvd1: 1;
64482527734SSukumar Swaminathan 	uint32_t	PU: 2;		/* PU */
64582527734SSukumar Swaminathan 	uint32_t	ERP: 1;		/* ERP */
64682527734SSukumar Swaminathan 	uint32_t	Rsvd2: 1;
64782527734SSukumar Swaminathan 	uint32_t	Timer: 8;	/* TOV */
64882527734SSukumar Swaminathan 	/* Word 8 */
64982527734SSukumar Swaminathan 	uint32_t	AbortTag;	/* Abort Tag */
65082527734SSukumar Swaminathan 	/* Word 9 */
65182527734SSukumar Swaminathan 	uint16_t	RequestTag;	/* Request Tag */
65282527734SSukumar Swaminathan 	uint16_t	OXId;		/* OXId on xmitted rsp */
65382527734SSukumar Swaminathan 	/* Word 10 */
65482527734SSukumar Swaminathan 	uint32_t	Rsvd4: 16;
65582527734SSukumar Swaminathan 	uint32_t	PRI: 3;		/* PRI */
65682527734SSukumar Swaminathan 	uint32_t	PV: 1;		/* PRIValid */
65782527734SSukumar Swaminathan 	uint32_t	Rsvd5: 1;
65882527734SSukumar Swaminathan 	uint32_t	XC: 1;		/* Exchange Create */
65982527734SSukumar Swaminathan 	uint32_t	Rsvd6: 1;
66082527734SSukumar Swaminathan 	uint32_t	CCPE: 1;	/* CCPEnabled */
66182527734SSukumar Swaminathan 	uint32_t	CCP: 8;		/* CCP */
66282527734SSukumar Swaminathan 	/* Word 11 */
66382527734SSukumar Swaminathan 	uint32_t	CmdType: 4;	/* Command Type */
66482527734SSukumar Swaminathan 	uint32_t	ELSId: 2;
66582527734SSukumar Swaminathan 	uint32_t	Rsvd7: 1;
66682527734SSukumar Swaminathan 	uint32_t	WQEC: 1;	/* Request WQE consumed CQE */
66782527734SSukumar Swaminathan 	uint32_t	Rsvd8: 8;
66882527734SSukumar Swaminathan 	uint32_t	CQId: 10;	/* CompletionQueueID */
66982527734SSukumar Swaminathan 	uint32_t	Rsvd9: 6;
67082527734SSukumar Swaminathan #endif
67182527734SSukumar Swaminathan 
67282527734SSukumar Swaminathan 	/* Words 12-15 */
67382527734SSukumar Swaminathan 	uint32_t	CmdSpecific[4];	/* Word12-15: commandspecific */
67482527734SSukumar Swaminathan } emlxs_wqe_t;
67582527734SSukumar Swaminathan 
67682527734SSukumar Swaminathan /* Defines for ContextType */
67782527734SSukumar Swaminathan #define	WQE_RPI_CONTEXT		0
67882527734SSukumar Swaminathan #define	WQE_VPI_CONTEXT		1
67982527734SSukumar Swaminathan #define	WQE_VFI_CONTEXT		2
68082527734SSukumar Swaminathan #define	WQE_FCFI_CONTEXT	3
68182527734SSukumar Swaminathan 
68282527734SSukumar Swaminathan /* Defines for CmdType */
68382527734SSukumar Swaminathan #define	WQE_TYPE_FCP_DATA_IN	0x00
68482527734SSukumar Swaminathan #define	WQE_TYPE_FCP_DATA_OUT	0x01
68582527734SSukumar Swaminathan #define	WQE_TYPE_ELS		0x0C
68682527734SSukumar Swaminathan #define	WQE_TYPE_GEN		0x08
68782527734SSukumar Swaminathan #define	WQE_TYPE_ABORT		0x08
68882527734SSukumar Swaminathan #define	WQE_TYPE_MASK_FIP	0x01
68982527734SSukumar Swaminathan 
69082527734SSukumar Swaminathan /* Defines for ELSId */
69182527734SSukumar Swaminathan #define	WQE_ELSID_FLOGI		0x03
69282527734SSukumar Swaminathan #define	WQE_ELSID_FDISC		0x02
69382527734SSukumar Swaminathan #define	WQE_ELSID_LOGO		0x01
69482527734SSukumar Swaminathan #define	WQE_ELSID_CMD		0x0
69582527734SSukumar Swaminathan 
69682527734SSukumar Swaminathan /* RQB */
69782527734SSukumar Swaminathan #define	RQB_HEADER_SIZE		32
69882527734SSukumar Swaminathan #define	RQB_DATA_SIZE		2048
69982527734SSukumar Swaminathan #define	RQB_COUNT		256
70082527734SSukumar Swaminathan 
70182527734SSukumar Swaminathan #define	EMLXS_NUM_WQ_PAGES	4
70282527734SSukumar Swaminathan 
70382527734SSukumar Swaminathan #define	EQ_DEPTH		1024
70482527734SSukumar Swaminathan #define	CQ_DEPTH		256
70582527734SSukumar Swaminathan #define	WQ_DEPTH		(64 * EMLXS_NUM_WQ_PAGES)
70682527734SSukumar Swaminathan #define	MQ_DEPTH		16
70782527734SSukumar Swaminathan #define	RQ_DEPTH		512 /* Multiple of RQB_COUNT */
70882527734SSukumar Swaminathan #define	RQ_DEPTH_EXPONENT	9
70982527734SSukumar Swaminathan 
71082527734SSukumar Swaminathan 
71182527734SSukumar Swaminathan /* Principal doorbell register layouts */
71282527734SSukumar Swaminathan typedef struct emlxs_rqdb
71382527734SSukumar Swaminathan {
71482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
71582527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
71682527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
71782527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
71882527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* RQ id for posted RQE */
71982527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
72082527734SSukumar Swaminathan 
72182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
72282527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* RQ id for posted RQE */
72382527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
72482527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
72582527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
72682527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
72782527734SSukumar Swaminathan 
72882527734SSukumar Swaminathan } emlxs_rqdb_t;
72982527734SSukumar Swaminathan 
73082527734SSukumar Swaminathan 
73182527734SSukumar Swaminathan typedef union emlxs_rqdbu
73282527734SSukumar Swaminathan {
73382527734SSukumar Swaminathan 	uint32_t	word;
73482527734SSukumar Swaminathan 	emlxs_rqdb_t	db;
73582527734SSukumar Swaminathan 
73682527734SSukumar Swaminathan } emlxs_rqdbu_t;
73782527734SSukumar Swaminathan 
73882527734SSukumar Swaminathan 
73982527734SSukumar Swaminathan typedef struct emlxs_wqdb
74082527734SSukumar Swaminathan {
74182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
74282527734SSukumar Swaminathan 	uint32_t	NumPosted:8;	/* Number of entries posted */
74382527734SSukumar Swaminathan 	uint32_t	Index:8;	/* Queue index for posted command */
74482527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
74582527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* WQ id for posted WQE */
74682527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
74782527734SSukumar Swaminathan 
74882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
74982527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* WQ id for posted WQE */
75082527734SSukumar Swaminathan 	uint32_t	Rsvd1:6;
75182527734SSukumar Swaminathan 	uint32_t	Index:8;	/* Queue index for posted command */
75282527734SSukumar Swaminathan 	uint32_t	NumPosted:8;	/* Number of entries posted */
75382527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
75482527734SSukumar Swaminathan 
75582527734SSukumar Swaminathan } emlxs_wqdb_t;
75682527734SSukumar Swaminathan 
75782527734SSukumar Swaminathan 
75882527734SSukumar Swaminathan typedef union emlxs_wqdbu
75982527734SSukumar Swaminathan {
76082527734SSukumar Swaminathan 	uint32_t	word;
76182527734SSukumar Swaminathan 	emlxs_wqdb_t	db;
76282527734SSukumar Swaminathan 
76382527734SSukumar Swaminathan } emlxs_wqdbu_t;
76482527734SSukumar Swaminathan 
76582527734SSukumar Swaminathan 
76682527734SSukumar Swaminathan typedef struct emlxs_cqdb
76782527734SSukumar Swaminathan {
76882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
76982527734SSukumar Swaminathan 	uint32_t	NumPosted:2;	/* Number of entries posted */
77082527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm CQ */
77182527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
77282527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
77382527734SSukumar Swaminathan 	uint32_t	Event:1;	/* 1 if processed entry is EQE */
77482527734SSukumar Swaminathan 				/* 0 if processed entry is CQE */
77582527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* CQ id for posted CQE */
77682527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
77782527734SSukumar Swaminathan 
77882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
77982527734SSukumar Swaminathan 	uint32_t	Qid:10;		/* CQ id for posted CQE */
78082527734SSukumar Swaminathan 	uint32_t	Event:1;	/* 1 if processed entry is EQE */
78182527734SSukumar Swaminathan 				/* 0 if processed entry is CQE */
78282527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
78382527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
78482527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm CQ */
78582527734SSukumar Swaminathan 	uint32_t	NumPosted:2;	/* Number of entries posted */
78682527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
78782527734SSukumar Swaminathan 
78882527734SSukumar Swaminathan } emlxs_cqdb_t;
78982527734SSukumar Swaminathan 
79082527734SSukumar Swaminathan 
79182527734SSukumar Swaminathan typedef union emlxs_cqdbu
79282527734SSukumar Swaminathan {
79382527734SSukumar Swaminathan 	uint32_t	word;
79482527734SSukumar Swaminathan 	emlxs_cqdb_t	db;
79582527734SSukumar Swaminathan 
79682527734SSukumar Swaminathan } emlxs_cqdbu_t;
79782527734SSukumar Swaminathan 
79882527734SSukumar Swaminathan typedef struct emlxs_eqdb
79982527734SSukumar Swaminathan {
80082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
80182527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
80282527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm EQ */
80382527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
80482527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
80582527734SSukumar Swaminathan 	uint32_t	Event:1;	/* True iff processed entry is EQE */
80682527734SSukumar Swaminathan 	uint32_t	Clear:1;	/* clears EQ interrupt when set */
80782527734SSukumar Swaminathan 	uint32_t	Qid:9;		/* EQ id for posted EQE */
80882527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
80982527734SSukumar Swaminathan 
81082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
81182527734SSukumar Swaminathan 	uint32_t	Qid:9;		/* EQ id for posted EQE */
81282527734SSukumar Swaminathan 	uint32_t	Clear:1;	/* clears EQ interrupt when set */
81382527734SSukumar Swaminathan 	uint32_t	Event:1;	/* True iff processed entry is EQE */
81482527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
81582527734SSukumar Swaminathan 	uint32_t	NumPopped:13;	/* Number of CQ entries processed */
81682527734SSukumar Swaminathan 	uint32_t	Rearm:1;	/* Rearm EQ */
81782527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
81882527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
81982527734SSukumar Swaminathan 
82082527734SSukumar Swaminathan } emlxs_eqdb_t;
82182527734SSukumar Swaminathan 
82282527734SSukumar Swaminathan 
82382527734SSukumar Swaminathan typedef union emlxs_eqdbu
82482527734SSukumar Swaminathan {
82582527734SSukumar Swaminathan 	uint32_t	word;
82682527734SSukumar Swaminathan 	emlxs_eqdb_t	db;
82782527734SSukumar Swaminathan 
82882527734SSukumar Swaminathan } emlxs_eqdbu_t;
82982527734SSukumar Swaminathan 
83082527734SSukumar Swaminathan 
83182527734SSukumar Swaminathan typedef struct emlxs_mqdb
83282527734SSukumar Swaminathan {
83382527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN
83482527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
83582527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
83682527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
83782527734SSukumar Swaminathan 	uint32_t	Qid:11;		/* MQ id for posted MQE */
83882527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */
83982527734SSukumar Swaminathan 
84082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN
84182527734SSukumar Swaminathan 	uint32_t	Qid:11;		/* MQ id for posted MQE */
84282527734SSukumar Swaminathan 	uint32_t	Rsvd1:5;
84382527734SSukumar Swaminathan 	uint32_t	NumPosted:14;	/* Number of entries posted */
84482527734SSukumar Swaminathan 	uint32_t	Rsvd2:2;
84582527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */
84682527734SSukumar Swaminathan 
84782527734SSukumar Swaminathan } emlxs_mqdb_t;
84882527734SSukumar Swaminathan 
84982527734SSukumar Swaminathan 
85082527734SSukumar Swaminathan typedef union emlxs_mqdbu
85182527734SSukumar Swaminathan {
85282527734SSukumar Swaminathan 	uint32_t	word;
85382527734SSukumar Swaminathan 	emlxs_mqdb_t	db;
85482527734SSukumar Swaminathan 
85582527734SSukumar Swaminathan } emlxs_mqdbu_t;
85682527734SSukumar Swaminathan 
85782527734SSukumar Swaminathan 
85882527734SSukumar Swaminathan #ifdef	__cplusplus
85982527734SSukumar Swaminathan }
86082527734SSukumar Swaminathan #endif
86182527734SSukumar Swaminathan 
86282527734SSukumar Swaminathan #endif	/* _EMLXS_QUEUE_H */
863