1bafec742SSukumar Swaminathan /*
2bafec742SSukumar Swaminathan  * CDDL HEADER START
3bafec742SSukumar Swaminathan  *
4bafec742SSukumar Swaminathan  * The contents of this file are subject to the terms of the
5bafec742SSukumar Swaminathan  * Common Development and Distribution License (the "License").
6bafec742SSukumar Swaminathan  * You may not use this file except in compliance with the License.
7bafec742SSukumar Swaminathan  *
8bafec742SSukumar Swaminathan  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9bafec742SSukumar Swaminathan  * or http://www.opensolaris.org/os/licensing.
10bafec742SSukumar Swaminathan  * See the License for the specific language governing permissions
11bafec742SSukumar Swaminathan  * and limitations under the License.
12bafec742SSukumar Swaminathan  *
13bafec742SSukumar Swaminathan  * When distributing Covered Code, include this CDDL HEADER in each
14bafec742SSukumar Swaminathan  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15bafec742SSukumar Swaminathan  * If applicable, add the following below this CDDL HEADER, with the
16bafec742SSukumar Swaminathan  * fields enclosed by brackets "[]" replaced with your own identifying
17bafec742SSukumar Swaminathan  * information: Portions Copyright [yyyy] [name of copyright owner]
18bafec742SSukumar Swaminathan  *
19bafec742SSukumar Swaminathan  * CDDL HEADER END
20bafec742SSukumar Swaminathan  */
21bafec742SSukumar Swaminathan 
22bafec742SSukumar Swaminathan /*
23*accf27a5SSukumar Swaminathan  * Copyright 2010 QLogic Corporation. All rights reserved.
24bafec742SSukumar Swaminathan  */
25bafec742SSukumar Swaminathan 
26bafec742SSukumar Swaminathan #ifndef _QLGE_HW_H
27bafec742SSukumar Swaminathan #define	_QLGE_HW_H
28bafec742SSukumar Swaminathan 
29bafec742SSukumar Swaminathan #ifdef __cplusplus
30bafec742SSukumar Swaminathan extern "C" {
31bafec742SSukumar Swaminathan #endif
32bafec742SSukumar Swaminathan 
33bafec742SSukumar Swaminathan #define	ISP_SCHULTZ 0x8000
34bafec742SSukumar Swaminathan 
35bafec742SSukumar Swaminathan #define	MB_REG_COUNT		8
36bafec742SSukumar Swaminathan #define	MB_DATA_REG_COUNT	(MB_REG_COUNT-1)
37bafec742SSukumar Swaminathan 
38bafec742SSukumar Swaminathan 
39bafec742SSukumar Swaminathan #define	QLA_SCHULTZ(qlge) ((qlge)->device_id == ISP_SCHULTZ)
40bafec742SSukumar Swaminathan 
41bafec742SSukumar Swaminathan /*
42bafec742SSukumar Swaminathan  * Data bit definitions.
43bafec742SSukumar Swaminathan  */
44bafec742SSukumar Swaminathan #define	BIT_0	0x1
45bafec742SSukumar Swaminathan #define	BIT_1	0x2
46bafec742SSukumar Swaminathan #define	BIT_2	0x4
47bafec742SSukumar Swaminathan #define	BIT_3	0x8
48bafec742SSukumar Swaminathan #define	BIT_4	0x10
49bafec742SSukumar Swaminathan #define	BIT_5	0x20
50bafec742SSukumar Swaminathan #define	BIT_6	0x40
51bafec742SSukumar Swaminathan #define	BIT_7	0x80
52bafec742SSukumar Swaminathan #define	BIT_8	0x100
53bafec742SSukumar Swaminathan #define	BIT_9	0x200
54bafec742SSukumar Swaminathan #define	BIT_10	0x400
55bafec742SSukumar Swaminathan #define	BIT_11	0x800
56bafec742SSukumar Swaminathan #define	BIT_12	0x1000
57bafec742SSukumar Swaminathan #define	BIT_13	0x2000
58bafec742SSukumar Swaminathan #define	BIT_14	0x4000
59bafec742SSukumar Swaminathan #define	BIT_15	0x8000
60bafec742SSukumar Swaminathan #define	BIT_16	0x10000
61bafec742SSukumar Swaminathan #define	BIT_17	0x20000
62bafec742SSukumar Swaminathan #define	BIT_18	0x40000
63bafec742SSukumar Swaminathan #define	BIT_19	0x80000
64bafec742SSukumar Swaminathan #define	BIT_20	0x100000
65bafec742SSukumar Swaminathan #define	BIT_21	0x200000
66bafec742SSukumar Swaminathan #define	BIT_22	0x400000
67bafec742SSukumar Swaminathan #define	BIT_23	0x800000
68bafec742SSukumar Swaminathan #define	BIT_24	0x1000000
69bafec742SSukumar Swaminathan #define	BIT_25	0x2000000
70bafec742SSukumar Swaminathan #define	BIT_26	0x4000000
71bafec742SSukumar Swaminathan #define	BIT_27	0x8000000
72bafec742SSukumar Swaminathan #define	BIT_28	0x10000000
73bafec742SSukumar Swaminathan #define	BIT_29	0x20000000
74bafec742SSukumar Swaminathan #define	BIT_30	0x40000000
75bafec742SSukumar Swaminathan #define	BIT_31	0x80000000
76bafec742SSukumar Swaminathan 
77bafec742SSukumar Swaminathan typedef struct ql_stats
78bafec742SSukumar Swaminathan {
79bafec742SSukumar Swaminathan 	uint32_t	intr_type;
80bafec742SSukumar Swaminathan 	/* software statics */
81bafec742SSukumar Swaminathan 	uint32_t	intr;
82bafec742SSukumar Swaminathan 	uint64_t	speed;
83bafec742SSukumar Swaminathan 	uint32_t	duplex;
84bafec742SSukumar Swaminathan 	uint32_t	media;
85bafec742SSukumar Swaminathan 	/* TX */
86bafec742SSukumar Swaminathan 	uint64_t	obytes;
87bafec742SSukumar Swaminathan 	uint64_t	opackets;
88bafec742SSukumar Swaminathan 	uint32_t	nocarrier;
89bafec742SSukumar Swaminathan 	uint32_t	defer;
90bafec742SSukumar Swaminathan 	/* RX */
91bafec742SSukumar Swaminathan 	uint64_t	rbytes;
92bafec742SSukumar Swaminathan 	uint64_t	rpackets;
93bafec742SSukumar Swaminathan 	uint32_t	norcvbuf;
94bafec742SSukumar Swaminathan 	uint32_t	frame_too_long;
95bafec742SSukumar Swaminathan 	uint32_t	crc;
96bafec742SSukumar Swaminathan 	ulong_t		multircv;
97bafec742SSukumar Swaminathan 	ulong_t		brdcstrcv;
98bafec742SSukumar Swaminathan 	uint32_t	errrcv;
99bafec742SSukumar Swaminathan 	uint32_t	frame_too_short;
100bafec742SSukumar Swaminathan 	/* statics by hw */
101bafec742SSukumar Swaminathan 	uint32_t	errxmt;
102bafec742SSukumar Swaminathan 	uint32_t	frame_err;
103bafec742SSukumar Swaminathan 	ulong_t		multixmt;
104bafec742SSukumar Swaminathan 	ulong_t		brdcstxmt;
105bafec742SSukumar Swaminathan 	uint32_t	phy_addr;
106bafec742SSukumar Swaminathan 	uint32_t	jabber_err;
107bafec742SSukumar Swaminathan 
108bafec742SSukumar Swaminathan }ql_stats_t;
109bafec742SSukumar Swaminathan 
110bafec742SSukumar Swaminathan 
111bafec742SSukumar Swaminathan #define	ETHERNET_CRC_SIZE	4
112bafec742SSukumar Swaminathan 
113bafec742SSukumar Swaminathan /*
114bafec742SSukumar Swaminathan  * Register Definitions...
115bafec742SSukumar Swaminathan  */
116bafec742SSukumar Swaminathan #define	MAILBOX_COUNT	16
117bafec742SSukumar Swaminathan /* System Register 0x00 */
118bafec742SSukumar Swaminathan #define	PROC_ADDR_RDY	BIT_31
119bafec742SSukumar Swaminathan #define	PROC_ADDR_R	BIT_30
120bafec742SSukumar Swaminathan #define	PROC_ADDR_ERR	BIT_29
121bafec742SSukumar Swaminathan #define	PROC_ADDR_DA	BIT_28
122bafec742SSukumar Swaminathan #define	PROC_ADDR_FUNC0_MBI	0x00001180
123bafec742SSukumar Swaminathan #define	PROC_ADDR_FUNC0_MBO	(PROC_ADDR_FUNC0_MBI + MAILBOX_COUNT)
124bafec742SSukumar Swaminathan #define	PROC_ADDR_FUNC0_CTL	0x000011a1
125bafec742SSukumar Swaminathan #define	PROC_ADDR_FUNC2_MBI	0x00001280
126bafec742SSukumar Swaminathan #define	PROC_ADDR_FUNC2_MBO	(PROC_ADDR_FUNC2_MBI + MAILBOX_COUNT)
127bafec742SSukumar Swaminathan #define	PROC_ADDR_FUNC2_CTL	0x000012a1
128bafec742SSukumar Swaminathan #define	PROC_ADDR_MPI_RISC	0x00000000
129bafec742SSukumar Swaminathan #define	PROC_ADDR_MDE		0x00010000
130bafec742SSukumar Swaminathan #define	PROC_ADDR_REGBLOCK	0x00020000
131bafec742SSukumar Swaminathan #define	PROC_ADDR_RISC_REG	0x00030000
132bafec742SSukumar Swaminathan 
133bafec742SSukumar Swaminathan 
134bafec742SSukumar Swaminathan /* System Register 0x08 */
135bafec742SSukumar Swaminathan #define	SYSTEM_EFE_FAE		0x3u
136bafec742SSukumar Swaminathan #define	SYSTEM_EFE_FAE_MASK	(SYSTEM_EFE_FAE<<16)
137bafec742SSukumar Swaminathan enum {
138bafec742SSukumar Swaminathan 	SYS_EFE = (1 << 0),
139bafec742SSukumar Swaminathan 	SYS_FAE = (1 << 1),
140bafec742SSukumar Swaminathan 	SYS_MDC = (1 << 2),
141bafec742SSukumar Swaminathan 	SYS_DST = (1 << 3),
142bafec742SSukumar Swaminathan 	SYS_DWC = (1 << 4),
143bafec742SSukumar Swaminathan 	SYS_EVW = (1 << 5),
144bafec742SSukumar Swaminathan 	SYS_OMP_DLY_MASK = 0x3f000000,
145bafec742SSukumar Swaminathan 	/*
146bafec742SSukumar Swaminathan 	 * There are no values defined as of edit #15.
147bafec742SSukumar Swaminathan 	 */
148bafec742SSukumar Swaminathan 	SYS_ODI = (1 << 14)
149bafec742SSukumar Swaminathan };
150bafec742SSukumar Swaminathan 
151bafec742SSukumar Swaminathan /*
152bafec742SSukumar Swaminathan  * Reset/Failover Register (RST_FO) bit definitions.
153bafec742SSukumar Swaminathan  */
154bafec742SSukumar Swaminathan 
155bafec742SSukumar Swaminathan #define	RST_FO_TFO		(1 << 0)
156bafec742SSukumar Swaminathan #define	RST_FO_RR_MASK		0x00060000
157bafec742SSukumar Swaminathan #define	RST_FO_RR_CQ_CAM	0x00000000
158bafec742SSukumar Swaminathan #define	RST_FO_RR_DROP		0x00000001
159bafec742SSukumar Swaminathan #define	RST_FO_RR_DQ		0x00000002
160bafec742SSukumar Swaminathan #define	RST_FO_RR_RCV_FUNC_CQ	0x00000003
161bafec742SSukumar Swaminathan #define	RST_FO_FRB		BIT_12
162bafec742SSukumar Swaminathan #define	RST_FO_MOP		BIT_13
163bafec742SSukumar Swaminathan #define	RST_FO_REG		BIT_14
164bafec742SSukumar Swaminathan #define	RST_FO_FR		0x8000u
165bafec742SSukumar Swaminathan 
166bafec742SSukumar Swaminathan /*
167bafec742SSukumar Swaminathan  * Function Specific Control Register (FSC) bit definitions.
168bafec742SSukumar Swaminathan  */
169bafec742SSukumar Swaminathan enum {
170bafec742SSukumar Swaminathan 	FSC_DBRST_MASK = 0x00070000,
171bafec742SSukumar Swaminathan 	FSC_DBRST_256 = 0x00000000,
172bafec742SSukumar Swaminathan 	FSC_DBRST_512 = 0x00000001,
173bafec742SSukumar Swaminathan 	FSC_DBRST_768 = 0x00000002,
174bafec742SSukumar Swaminathan 	FSC_DBRST_1024 = 0x00000003,
175bafec742SSukumar Swaminathan 	FSC_DBL_MASK = 0x00180000,
176bafec742SSukumar Swaminathan 	FSC_DBL_DBRST = 0x00000000,
177bafec742SSukumar Swaminathan 	FSC_DBL_MAX_PLD = 0x00000008,
178bafec742SSukumar Swaminathan 	FSC_DBL_MAX_BRST = 0x00000010,
179bafec742SSukumar Swaminathan 	FSC_DBL_128_BYTES = 0x00000018,
180bafec742SSukumar Swaminathan 	FSC_EC = (1 << 5),
181bafec742SSukumar Swaminathan 	FSC_EPC_MASK = 0x00c00000,
182bafec742SSukumar Swaminathan 	FSC_EPC_INBOUND = (1 << 6),
183bafec742SSukumar Swaminathan 	FSC_EPC_OUTBOUND = (1 << 7),
184bafec742SSukumar Swaminathan 	FSC_VM_PAGESIZE_MASK = 0x07000000,
185bafec742SSukumar Swaminathan 	FSC_VM_PAGE_2K = 0x00000100,
186bafec742SSukumar Swaminathan 	FSC_VM_PAGE_4K = 0x00000200,
187bafec742SSukumar Swaminathan 	FSC_VM_PAGE_8K = 0x00000300,
188bafec742SSukumar Swaminathan 	FSC_VM_PAGE_64K = 0x00000600,
189bafec742SSukumar Swaminathan 	FSC_SH = (1 << 11),
190bafec742SSukumar Swaminathan 	FSC_DSB = (1 << 12),
191bafec742SSukumar Swaminathan 	FSC_STE = (1 << 13),
192bafec742SSukumar Swaminathan 	FSC_FE = (1 << 15)
193bafec742SSukumar Swaminathan };
194bafec742SSukumar Swaminathan 
195bafec742SSukumar Swaminathan /*
196bafec742SSukumar Swaminathan  * Host Command Status Register (CSR) bit definitions.
197bafec742SSukumar Swaminathan  */
198bafec742SSukumar Swaminathan #define	CSR_ERR_STS_MASK	0x0000003f
199bafec742SSukumar Swaminathan /*
200bafec742SSukumar Swaminathan  * There are no valued defined as of edit #15.
201bafec742SSukumar Swaminathan  */
202bafec742SSukumar Swaminathan #define	CSR_RR			BIT_8
203bafec742SSukumar Swaminathan #define	CSR_HRI			BIT_9
204bafec742SSukumar Swaminathan #define	CSR_RP			BIT_10
205bafec742SSukumar Swaminathan #define	CSR_CMD_PARM_SHIFT	22
206bafec742SSukumar Swaminathan #define	CSR_CMD_NOP		0x00000000
207bafec742SSukumar Swaminathan #define	CSR_CMD_SET_RST		0x1000000
208bafec742SSukumar Swaminathan #define	CSR_CMD_CLR_RST		0x20000000
209bafec742SSukumar Swaminathan #define	CSR_CMD_SET_PAUSE	0x30000000
210bafec742SSukumar Swaminathan #define	CSR_CMD_CLR_PAUSE	0x40000000
211bafec742SSukumar Swaminathan #define	CSR_CMD_SET_H2R_INT	0x50000000
212bafec742SSukumar Swaminathan #define	CSR_CMD_CLR_H2R_INT	0x60000000
213bafec742SSukumar Swaminathan #define	CSR_CMD_PAR_EN		0x70000000
214bafec742SSukumar Swaminathan #define	CSR_CMD_SET_BAD_PAR	0x80000000u
215bafec742SSukumar Swaminathan #define	CSR_CMD_CLR_BAD_PAR	0x90000000u
216bafec742SSukumar Swaminathan #define	CSR_CMD_CLR_R2PCI_INT	0xa0000000u
217bafec742SSukumar Swaminathan 
218bafec742SSukumar Swaminathan /*
219bafec742SSukumar Swaminathan  * Configuration Register (CFG) bit definitions.
220bafec742SSukumar Swaminathan  */
221bafec742SSukumar Swaminathan enum {
222bafec742SSukumar Swaminathan 	CFG_LRQ = (1 << 0),
223bafec742SSukumar Swaminathan 	CFG_DRQ = (1 << 1),
224bafec742SSukumar Swaminathan 	CFG_LR = (1 << 2),
225bafec742SSukumar Swaminathan 	CFG_DR = (1 << 3),
226bafec742SSukumar Swaminathan 	CFG_LE = (1 << 5),
227bafec742SSukumar Swaminathan 	CFG_LCQ = (1 << 6),
228bafec742SSukumar Swaminathan 	CFG_DCQ = (1 << 7),
229bafec742SSukumar Swaminathan 	CFG_Q_SHIFT = 8,
230bafec742SSukumar Swaminathan 	CFG_Q_MASK = 0x7f000000
231bafec742SSukumar Swaminathan };
232bafec742SSukumar Swaminathan 
233bafec742SSukumar Swaminathan /*
234bafec742SSukumar Swaminathan  *  Status Register (STS) bit definitions.
235bafec742SSukumar Swaminathan  */
236bafec742SSukumar Swaminathan enum {
237bafec742SSukumar Swaminathan 	STS_FE = (1 << 0),
238bafec742SSukumar Swaminathan 	STS_PI = (1 << 1),
239bafec742SSukumar Swaminathan 	STS_PL0 = (1 << 2),
240bafec742SSukumar Swaminathan 	STS_PL1 = (1 << 3),
241bafec742SSukumar Swaminathan 	STS_PI0 = (1 << 4),
242bafec742SSukumar Swaminathan 	STS_PI1 = (1 << 5),
243bafec742SSukumar Swaminathan 	STS_FUNC_ID_MASK = 0x000000c0,
244bafec742SSukumar Swaminathan 	STS_FUNC_ID_SHIFT = 6,
245bafec742SSukumar Swaminathan 	STS_F0E = (1 << 8),
246bafec742SSukumar Swaminathan 	STS_F1E = (1 << 9),
247bafec742SSukumar Swaminathan 	STS_F2E = (1 << 10),
248bafec742SSukumar Swaminathan 	STS_F3E = (1 << 11),
249bafec742SSukumar Swaminathan 	STS_NFE = (1 << 12)
250bafec742SSukumar Swaminathan };
251bafec742SSukumar Swaminathan 
252bafec742SSukumar Swaminathan /*
253bafec742SSukumar Swaminathan  * Register (REV_ID) bit definitions.
254bafec742SSukumar Swaminathan  */
255bafec742SSukumar Swaminathan enum {
256bafec742SSukumar Swaminathan 	REV_ID_MASK = 0x0000000f,
257bafec742SSukumar Swaminathan 	REV_ID_NICROLL_SHIFT = 0,
258bafec742SSukumar Swaminathan 	REV_ID_NICREV_SHIFT = 4,
259bafec742SSukumar Swaminathan 	REV_ID_XGROLL_SHIFT = 8,
260bafec742SSukumar Swaminathan 	REV_ID_XGREV_SHIFT = 12,
261bafec742SSukumar Swaminathan 	REV_ID_CHIPREV_SHIFT = 28
262bafec742SSukumar Swaminathan };
263bafec742SSukumar Swaminathan 
264bafec742SSukumar Swaminathan /*
265bafec742SSukumar Swaminathan  *  Force ECC Error Register (FRC_ECC_ERR) bit definitions.
266bafec742SSukumar Swaminathan  */
267bafec742SSukumar Swaminathan enum {
268bafec742SSukumar Swaminathan 	FRC_ECC_ERR_VW = (1 << 12),
269bafec742SSukumar Swaminathan 	FRC_ECC_ERR_VB = (1 << 13),
270bafec742SSukumar Swaminathan 	FRC_ECC_ERR_NI = (1 << 14),
271bafec742SSukumar Swaminathan 	FRC_ECC_ERR_NO = (1 << 15),
272bafec742SSukumar Swaminathan 	FRC_ECC_PFE_SHIFT = 16,
273bafec742SSukumar Swaminathan 	FRC_ECC_ERR_DO = (1 << 18),
274bafec742SSukumar Swaminathan 	FRC_ECC_P14 = (1 << 19)
275bafec742SSukumar Swaminathan };
276bafec742SSukumar Swaminathan 
277bafec742SSukumar Swaminathan /*
278bafec742SSukumar Swaminathan  * Error Status Register (ERR_STS) bit definitions.
279bafec742SSukumar Swaminathan  */
280bafec742SSukumar Swaminathan enum {
281bafec742SSukumar Swaminathan 	ERR_STS_NOF = (1 << 0),
282bafec742SSukumar Swaminathan 	ERR_STS_NIF = (1 << 1),
283bafec742SSukumar Swaminathan 	ERR_STS_DRP = (1 << 2),
284bafec742SSukumar Swaminathan 	ERR_STS_XGP = (1 << 3),
285bafec742SSukumar Swaminathan 	ERR_STS_FOU = (1 << 4),
286bafec742SSukumar Swaminathan 	ERR_STS_FOC = (1 << 5),
287bafec742SSukumar Swaminathan 	ERR_STS_FOF = (1 << 6),
288bafec742SSukumar Swaminathan 	ERR_STS_FIU = (1 << 7),
289bafec742SSukumar Swaminathan 	ERR_STS_FIC = (1 << 8),
290bafec742SSukumar Swaminathan 	ERR_STS_FIF = (1 << 9),
291bafec742SSukumar Swaminathan 	ERR_STS_MOF = (1 << 10),
292bafec742SSukumar Swaminathan 	ERR_STS_TA = (1 << 11),
293bafec742SSukumar Swaminathan 	ERR_STS_MA = (1 << 12),
294bafec742SSukumar Swaminathan 	ERR_STS_MPE = (1 << 13),
295bafec742SSukumar Swaminathan 	ERR_STS_SCE = (1 << 14),
296bafec742SSukumar Swaminathan 	ERR_STS_STE = (1 << 15),
297bafec742SSukumar Swaminathan 	ERR_STS_FOW = (1 << 16),
298bafec742SSukumar Swaminathan 	ERR_STS_UE = (1 << 17),
299bafec742SSukumar Swaminathan 	ERR_STS_MCH = (1 << 26),
300bafec742SSukumar Swaminathan 	ERR_STS_LOC_SHIFT = 27
301bafec742SSukumar Swaminathan };
302bafec742SSukumar Swaminathan 
303bafec742SSukumar Swaminathan /*
304bafec742SSukumar Swaminathan  * Semaphore Register (SEM) bit definitions.
305bafec742SSukumar Swaminathan  */
306bafec742SSukumar Swaminathan /*
307bafec742SSukumar Swaminathan  * Example:
308bafec742SSukumar Swaminathan  * reg = SEM_XGMAC0_MASK | (SEM_SET << SEM_XGMAC0_SHIFT)
309bafec742SSukumar Swaminathan  */
310bafec742SSukumar Swaminathan #define	SEM_CLEAR		0
311bafec742SSukumar Swaminathan #define	SEM_SET			1
312bafec742SSukumar Swaminathan #define	SEM_FORCE		3
313bafec742SSukumar Swaminathan #define	SEM_XGMAC0_SHIFT	0
314bafec742SSukumar Swaminathan #define	SEM_XGMAC1_SHIFT	2
315bafec742SSukumar Swaminathan #define	SEM_ICB_SHIFT		4
316bafec742SSukumar Swaminathan #define	SEM_MAC_ADDR_SHIFT	6
317bafec742SSukumar Swaminathan #define	SEM_FLASH_SHIFT		8
318bafec742SSukumar Swaminathan #define	SEM_PROBE_SHIFT		10
319bafec742SSukumar Swaminathan #define	SEM_RT_IDX_SHIFT	12
320bafec742SSukumar Swaminathan #define	SEM_PROC_REG_SHIFT	14
321bafec742SSukumar Swaminathan #define	SEM_XGMAC0_MASK		0x00030000
322bafec742SSukumar Swaminathan #define	SEM_XGMAC1_MASK		0x000c0000
323bafec742SSukumar Swaminathan #define	SEM_ICB_MASK		0x00300000
324bafec742SSukumar Swaminathan #define	SEM_MAC_ADDR_MASK	0x00c00000
325bafec742SSukumar Swaminathan #define	SEM_FLASH_MASK		0x03000000
326bafec742SSukumar Swaminathan #define	SEM_PROBE_MASK		0x0c000000
327bafec742SSukumar Swaminathan #define	SEM_RT_IDX_MASK		0x30000000
328bafec742SSukumar Swaminathan #define	SEM_PROC_REG_MASK	0xc0000000
329bafec742SSukumar Swaminathan 
330bafec742SSukumar Swaminathan /*
331bafec742SSukumar Swaminathan  * Stop CQ Processing Register (CQ_STOP) bit definitions.
332bafec742SSukumar Swaminathan  */
333bafec742SSukumar Swaminathan enum {
334bafec742SSukumar Swaminathan 	CQ_STOP_QUEUE_MASK = (0x007f0000),
335bafec742SSukumar Swaminathan 	CQ_STOP_TYPE_MASK = (0x03000000),
336bafec742SSukumar Swaminathan 	CQ_STOP_TYPE_START = 0x00000100,
337bafec742SSukumar Swaminathan 	CQ_STOP_TYPE_STOP = 0x00000200,
338bafec742SSukumar Swaminathan 	CQ_STOP_TYPE_READ = 0x00000300,
339bafec742SSukumar Swaminathan 	CQ_STOP_EN = (1 << 15)
340bafec742SSukumar Swaminathan };
341bafec742SSukumar Swaminathan 
342bafec742SSukumar Swaminathan /*
343bafec742SSukumar Swaminathan  * MAC Protocol Address Index Register (MAC_ADDR_IDX) bit definitions.
344bafec742SSukumar Swaminathan  */
345bafec742SSukumar Swaminathan #define	MAC_ADDR_IDX_SHIFT		4
346bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_SHIFT		16
347bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_MASK 		0x000f0000
348bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_CAM_MAC		0x00000000
349bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_MULTI_MAC		0x00010000
350bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_VLAN		0x00020000
351bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_MULTI_FLTR	0x00030000
352bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_FC_MAC		0x00040000
353bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_MGMT_MAC		0x00050000
354bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_MGMT_VLAN		0x00060000
355bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_MGMT_V4		0x00070000
356bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_MGMT_V6		0x00080000
357bafec742SSukumar Swaminathan #define	MAC_ADDR_TYPE_MGMT_TU_DP	0x00090000
358bafec742SSukumar Swaminathan #define	MAC_ADDR_ADR			BIT_25
359bafec742SSukumar Swaminathan #define	MAC_ADDR_RS			BIT_26
360bafec742SSukumar Swaminathan #define	MAC_ADDR_E  			BIT_27
361bafec742SSukumar Swaminathan #define	MAC_ADDR_MR  			BIT_30
362bafec742SSukumar Swaminathan #define	MAC_ADDR_MW  			BIT_31
363bafec742SSukumar Swaminathan #define	MAX_MULTICAST_HW_SIZE		32
364bafec742SSukumar Swaminathan 
365bafec742SSukumar Swaminathan /*
366bafec742SSukumar Swaminathan  *  MAC Protocol Address Index Register (SPLT_HDR, 0xC0) bit definitions.
367bafec742SSukumar Swaminathan  */
368bafec742SSukumar Swaminathan #define	SPLT_HDR_EP	BIT_31
369bafec742SSukumar Swaminathan 
370bafec742SSukumar Swaminathan /*
371bafec742SSukumar Swaminathan  * NIC Receive Configuration Register (NIC_RCV_CFG) bit definitions.
372bafec742SSukumar Swaminathan  */
373bafec742SSukumar Swaminathan enum {
374bafec742SSukumar Swaminathan 	NIC_RCV_CFG_PPE = (1 << 0),
375bafec742SSukumar Swaminathan 	NIC_RCV_CFG_VLAN_MASK = 0x00060000,
376bafec742SSukumar Swaminathan 	NIC_RCV_CFG_VLAN_ALL = 0x00000000,
377bafec742SSukumar Swaminathan 	NIC_RCV_CFG_VLAN_MATCH_ONLY = 0x00000002,
378bafec742SSukumar Swaminathan 	NIC_RCV_CFG_VLAN_MATCH_AND_NON = 0x00000004,
379bafec742SSukumar Swaminathan 	NIC_RCV_CFG_VLAN_NONE_AND_NON = 0x00000006,
380bafec742SSukumar Swaminathan 	NIC_RCV_CFG_RV = (1 << 3),
381bafec742SSukumar Swaminathan 	NIC_RCV_CFG_DFQ_MASK = (0x7f000000),
382bafec742SSukumar Swaminathan 	NIC_RCV_CFG_DFQ_SHIFT = 8,
383bafec742SSukumar Swaminathan 	NIC_RCV_CFG_DFQ = 0	/* HARDCODE default queue to 0. */
384bafec742SSukumar Swaminathan };
385bafec742SSukumar Swaminathan 
386bafec742SSukumar Swaminathan /*
387bafec742SSukumar Swaminathan  * Routing Index Register (RT_IDX) bit definitions.
388bafec742SSukumar Swaminathan  */
389bafec742SSukumar Swaminathan #define	RT_IDX_IDX_SHIFT	8
390bafec742SSukumar Swaminathan #define	RT_IDX_TYPE_MASK	0x000f0000
391bafec742SSukumar Swaminathan #define	RT_IDX_TYPE_RT		0x00000000
392bafec742SSukumar Swaminathan #define	RT_IDX_TYPE_RT_INV	0x00010000
393bafec742SSukumar Swaminathan #define	RT_IDX_TYPE_NICQ	0x00020000
394bafec742SSukumar Swaminathan #define	RT_IDX_TYPE_NICQ_INV	0x00030000
395bafec742SSukumar Swaminathan #define	RT_IDX_DST_MASK		0x00700000
396bafec742SSukumar Swaminathan #define	RT_IDX_DST_RSS		0x00000000
397bafec742SSukumar Swaminathan #define	RT_IDX_DST_CAM_Q	0x00100000
398bafec742SSukumar Swaminathan #define	RT_IDX_DST_COS_Q	0x00200000
399bafec742SSukumar Swaminathan #define	RT_IDX_DST_DFLT_Q	0x00300000
400bafec742SSukumar Swaminathan #define	RT_IDX_DST_DEST_Q	0x00400000
401bafec742SSukumar Swaminathan #define	RT_IDX_RS		BIT_26
402bafec742SSukumar Swaminathan #define	RT_IDX_E		BIT_27
403bafec742SSukumar Swaminathan #define	RT_IDX_MR		BIT_30
404bafec742SSukumar Swaminathan #define	RT_IDX_MW		BIT_31
405bafec742SSukumar Swaminathan 
406bafec742SSukumar Swaminathan /* Nic Queue format - type 2 bits */
407bafec742SSukumar Swaminathan #define	RT_IDX_BCAST		1
408bafec742SSukumar Swaminathan #define	RT_IDX_MCAST		BIT_1
409bafec742SSukumar Swaminathan #define	RT_IDX_MCAST_MATCH	BIT_2
410bafec742SSukumar Swaminathan #define	RT_IDX_MCAST_REG_MATCH	BIT_3
411bafec742SSukumar Swaminathan #define	RT_IDX_MCAST_HASH_MATCH	BIT_4
412bafec742SSukumar Swaminathan #define	RT_IDX_FC_MACH		BIT_5
413bafec742SSukumar Swaminathan #define	RT_IDX_ETH_FCOE		BIT_6
414bafec742SSukumar Swaminathan #define	RT_IDX_CAM_HIT		BIT_7
415bafec742SSukumar Swaminathan #define	RT_IDX_CAM_BIT0		BIT_8
416bafec742SSukumar Swaminathan #define	RT_IDX_CAM_BIT1		BIT_9
417bafec742SSukumar Swaminathan #define	RT_IDX_VLAN_TAG		BIT_10
418bafec742SSukumar Swaminathan #define	RT_IDX_VLAN_MATCH	BIT_11
419bafec742SSukumar Swaminathan #define	RT_IDX_VLAN_FILTER	BIT_12
420bafec742SSukumar Swaminathan #define	RT_IDX_ETH_SKIP1	BIT_13
421bafec742SSukumar Swaminathan #define	RT_IDX_ETH_SKIP2	BIT_14
422bafec742SSukumar Swaminathan #define	RT_IDX_BCAST_MCAST_MATCH	BIT_15
423bafec742SSukumar Swaminathan #define	RT_IDX_802_3		BIT_16
424bafec742SSukumar Swaminathan #define	RT_IDX_LLDP		BIT_17
425bafec742SSukumar Swaminathan #define	RT_IDX_UNUSED018	BIT_18
426bafec742SSukumar Swaminathan #define	RT_IDX_UNUSED019	BIT_19
427bafec742SSukumar Swaminathan #define	RT_IDX_UNUSED20		BIT_20
428bafec742SSukumar Swaminathan #define	RT_IDX_UNUSED21		BIT_21
429bafec742SSukumar Swaminathan #define	RT_IDX_ERR		BIT_22
430bafec742SSukumar Swaminathan #define	RT_IDX_VALID		BIT_23
431bafec742SSukumar Swaminathan #define	RT_IDX_TU_CSUM_ERR	BIT_24
432bafec742SSukumar Swaminathan #define	RT_IDX_IP_CSUM_ERR	BIT_25
433bafec742SSukumar Swaminathan #define	RT_IDX_MAC_ERR		BIT_26
434bafec742SSukumar Swaminathan #define	RT_IDX_RSS_TCP6		BIT_27
435bafec742SSukumar Swaminathan #define	RT_IDX_RSS_TCP4		BIT_28
436bafec742SSukumar Swaminathan #define	RT_IDX_RSS_IPV6		BIT_29
437bafec742SSukumar Swaminathan #define	RT_IDX_RSS_IPV4		BIT_30
438bafec742SSukumar Swaminathan #define	RT_IDX_RSS_MATCH	BIT_31
439bafec742SSukumar Swaminathan 
440bafec742SSukumar Swaminathan /* Hierarchy for the NIC Queue Mask */
441bafec742SSukumar Swaminathan enum {
442bafec742SSukumar Swaminathan 	RT_IDX_ALL_ERR_SLOT = 0,
443bafec742SSukumar Swaminathan 	RT_IDX_MAC_ERR_SLOT = 0,
444bafec742SSukumar Swaminathan 	RT_IDX_IP_CSUM_ERR_SLOT = 1,
445bafec742SSukumar Swaminathan 	RT_IDX_TCP_UDP_CSUM_ERR_SLOT = 2,
446bafec742SSukumar Swaminathan 	RT_IDX_BCAST_SLOT = 3,
447bafec742SSukumar Swaminathan 	RT_IDX_MCAST_MATCH_SLOT = 4,
448bafec742SSukumar Swaminathan 	RT_IDX_ALLMULTI_SLOT = 5,
449bafec742SSukumar Swaminathan 	RT_IDX_UNUSED6_SLOT = 6,
450bafec742SSukumar Swaminathan 	RT_IDX_UNUSED7_SLOT = 7,
451bafec742SSukumar Swaminathan 	RT_IDX_RSS_MATCH_SLOT = 8,
452bafec742SSukumar Swaminathan 	RT_IDX_RSS_IPV4_SLOT = 8,
453bafec742SSukumar Swaminathan 	RT_IDX_RSS_IPV6_SLOT = 9,
454bafec742SSukumar Swaminathan 	RT_IDX_RSS_TCP4_SLOT = 10,
455bafec742SSukumar Swaminathan 	RT_IDX_RSS_TCP6_SLOT = 11,
456bafec742SSukumar Swaminathan 	RT_IDX_CAM_HIT_SLOT = 12,
457bafec742SSukumar Swaminathan 	RT_IDX_UNUSED013 = 13,
458bafec742SSukumar Swaminathan 	RT_IDX_UNUSED014 = 14,
459bafec742SSukumar Swaminathan 	RT_IDX_PROMISCUOUS_SLOT = 15,
460bafec742SSukumar Swaminathan 	RT_IDX_MAX_SLOTS = 16
461bafec742SSukumar Swaminathan };
462bafec742SSukumar Swaminathan 
463bafec742SSukumar Swaminathan enum {
464bafec742SSukumar Swaminathan 	CAM_OUT_ROUTE_FC = 0,
465bafec742SSukumar Swaminathan 	CAM_OUT_ROUTE_NIC = 1,
466bafec742SSukumar Swaminathan 	CAM_OUT_FUNC_SHIFT = 2,
467bafec742SSukumar Swaminathan 	CAM_OUT_RV = (1 << 4),
468bafec742SSukumar Swaminathan 	CAM_OUT_SH = (1 << 15),
469bafec742SSukumar Swaminathan 	CAM_OUT_CQ_ID_SHIFT = 5
470bafec742SSukumar Swaminathan };
471bafec742SSukumar Swaminathan 
472bafec742SSukumar Swaminathan /* Reset/Failover Register 0C */
473bafec742SSukumar Swaminathan #define	FUNCTION_RESET		0x8000u
474bafec742SSukumar Swaminathan #define	FUNCTION_RESET_MASK	(FUNCTION_RESET<<16)
475bafec742SSukumar Swaminathan 
476bafec742SSukumar Swaminathan /* Function Specific Control Register 0x10 */
477bafec742SSukumar Swaminathan #define	FSC_MASK	(0x97ffu << 16)
478bafec742SSukumar Swaminathan #define	FSC_FE		0x8000
479bafec742SSukumar Swaminathan 
480bafec742SSukumar Swaminathan /* Configuration Register 0x28 */
481bafec742SSukumar Swaminathan #define	LOAD_LCQ	0x40
482bafec742SSukumar Swaminathan #define	LOAD_LCQ_MASK	(0x7F40u << 16)
483bafec742SSukumar Swaminathan #define	LOAD_ICB_ERR	0x20
484bafec742SSukumar Swaminathan #define	LOAD_LRQ	0x01
485bafec742SSukumar Swaminathan #define	LOAD_LRQ_MASK	(0x7F01u << 16)
486bafec742SSukumar Swaminathan 
487bafec742SSukumar Swaminathan #define	FN0_NET	0
488bafec742SSukumar Swaminathan #define	FN1_NET	1
489bafec742SSukumar Swaminathan #define	FN0_FC	2
490bafec742SSukumar Swaminathan #define	FN1_FC	3
491bafec742SSukumar Swaminathan 
492bafec742SSukumar Swaminathan /*
493bafec742SSukumar Swaminathan  * Semaphore Register (SEM) bit definitions.
494bafec742SSukumar Swaminathan  */
495bafec742SSukumar Swaminathan #define	SEM_CLEAR		0
496bafec742SSukumar Swaminathan #define	SEM_SET			1
497bafec742SSukumar Swaminathan #define	SEM_FORCE		3
498bafec742SSukumar Swaminathan #define	SEM_XGMAC0_SHIFT	0
499bafec742SSukumar Swaminathan #define	SEM_XGMAC1_SHIFT	2
500bafec742SSukumar Swaminathan #define	SEM_ICB_SHIFT		4
501bafec742SSukumar Swaminathan #define	SEM_MAC_ADDR_SHIFT	6
502bafec742SSukumar Swaminathan #define	SEM_FLASH_SHIFT		8
503bafec742SSukumar Swaminathan #define	SEM_PROBE_SHIFT		10
504bafec742SSukumar Swaminathan #define	SEM_RT_IDX_SHIFT	12
505bafec742SSukumar Swaminathan #define	SEM_PROC_REG_SHIFT	14
506bafec742SSukumar Swaminathan #define	SEM_XGMAC0_MASK		0x00030000
507bafec742SSukumar Swaminathan #define	SEM_XGMAC1_MASK		0x000c0000
508bafec742SSukumar Swaminathan #define	SEM_ICB_MASK		0x00300000
509bafec742SSukumar Swaminathan #define	SEM_MAC_ADDR_MASK	0x00c00000
510bafec742SSukumar Swaminathan #define	SEM_FLASH_MASK		0x03000000
511bafec742SSukumar Swaminathan #define	SEM_PROBE_MASK		0x0c000000
512bafec742SSukumar Swaminathan #define	SEM_RT_IDX_MASK		0x30000000
513bafec742SSukumar Swaminathan #define	SEM_PROC_REG_MASK	0xc0000000
514bafec742SSukumar Swaminathan 
515bafec742SSukumar Swaminathan /* System Register 0x08 */
516bafec742SSukumar Swaminathan #define	SYSTEM_EFE_FAE	0x3u
517bafec742SSukumar Swaminathan #define	SYSTEM_EFE_FAE_MASK	(SYSTEM_EFE_FAE<<16)
518bafec742SSukumar Swaminathan 
519bafec742SSukumar Swaminathan /* Interrupt Status Register-1		0x3C */
520bafec742SSukumar Swaminathan #define	CQ_0_NOT_EMPTY			BIT_0
521bafec742SSukumar Swaminathan #define	CQ_1_NOT_EMPTY			BIT_1
522bafec742SSukumar Swaminathan #define	CQ_2_NOT_EMPTY			BIT_2
523bafec742SSukumar Swaminathan #define	CQ_3_NOT_EMPTY			BIT_3
524bafec742SSukumar Swaminathan #define	CQ_4_NOT_EMPTY			BIT_4
525bafec742SSukumar Swaminathan #define	CQ_5_NOT_EMPTY			BIT_5
526bafec742SSukumar Swaminathan #define	CQ_6_NOT_EMPTY			BIT_6
527bafec742SSukumar Swaminathan #define	CQ_7_NOT_EMPTY			BIT_7
528bafec742SSukumar Swaminathan #define	CQ_8_NOT_EMPTY			BIT_8
529bafec742SSukumar Swaminathan #define	CQ_9_NOT_EMPTY			BIT_9
530bafec742SSukumar Swaminathan #define	CQ_10_NOT_EMPTY			BIT_10
531bafec742SSukumar Swaminathan #define	CQ_11_NOT_EMPTY			BIT_11
532bafec742SSukumar Swaminathan #define	CQ_12_NOT_EMPTY			BIT_12
533bafec742SSukumar Swaminathan #define	CQ_13_NOT_EMPTY			BIT_13
534bafec742SSukumar Swaminathan #define	CQ_14_NOT_EMPTY			BIT_14
535bafec742SSukumar Swaminathan #define	CQ_15_NOT_EMPTY			BIT_15
536bafec742SSukumar Swaminathan #define	CQ_16_NOT_EMPTY			BIT_16
537bafec742SSukumar Swaminathan /* Processor Address Register 0x00 */
538bafec742SSukumar Swaminathan #define	PROCESSOR_ADDRESS_RDY	(0x8000u<<16)
539bafec742SSukumar Swaminathan #define	PROCESSOR_ADDRESS_READ	(0x4000u<<16)
540bafec742SSukumar Swaminathan /* Host Command/Status Register 0x14 */
541bafec742SSukumar Swaminathan #define	HOST_CMD_SET_RISC_RESET			0x10000000u
542bafec742SSukumar Swaminathan #define	HOST_CMD_CLEAR_RISC_RESET		0x20000000u
543bafec742SSukumar Swaminathan #define	HOST_CMD_SET_RISC_PAUSE			0x30000000u
544bafec742SSukumar Swaminathan #define	HOST_CMD_RELEASE_RISC_PAUSE		0x40000000u
545bafec742SSukumar Swaminathan #define	HOST_CMD_SET_RISC_INTR			0x50000000u
546bafec742SSukumar Swaminathan #define	HOST_CMD_CLEAR_RISC_INTR		0x60000000u
547bafec742SSukumar Swaminathan #define	HOST_CMD_SET_PARITY_ENABLE		0x70000000u
548bafec742SSukumar Swaminathan #define	HOST_CMD_FORCE_BAD_PARITY		0x80000000u
549bafec742SSukumar Swaminathan #define	HOST_CMD_RELEASE_BAD_PARITY		0x90000000u
550bafec742SSukumar Swaminathan #define	HOST_CMD_CLEAR_RISC_TO_HOST_INTR	0xA0000000u
551bafec742SSukumar Swaminathan #define	HOST_TO_MPI_INTR_NOT_DONE		0x200
552bafec742SSukumar Swaminathan 
553bafec742SSukumar Swaminathan #define	RISC_RESET			BIT_8
554bafec742SSukumar Swaminathan #define	RISC_PAUSED			BIT_10
555bafec742SSukumar Swaminathan /* Semaphor Register 0x64 */
556bafec742SSukumar Swaminathan #define	QL_SEM_BITS_BASE_CODE		0x1u
557bafec742SSukumar Swaminathan #define	QL_PORT0_XGMAC_SEM_BITS		(QL_SEM_BITS_BASE_CODE)
558bafec742SSukumar Swaminathan #define	QL_PORT1_XGMAC_SEM_BITS		(QL_SEM_BITS_BASE_CODE << 2)
559bafec742SSukumar Swaminathan #define	QL_ICB_ACCESS_ADDRESS_SEM_BITS	(QL_SEM_BITS_BASE_CODE << 4)
560bafec742SSukumar Swaminathan #define	QL_MAC_PROTOCOL_SEM_BITS	(QL_SEM_BITS_BASE_CODE << 6)
561bafec742SSukumar Swaminathan #define	QL_FLASH_SEM_BITS		(QL_SEM_BITS_BASE_CODE << 8)
562bafec742SSukumar Swaminathan #define	QL_PROBE_MUX_SEM_BITS		(QL_SEM_BITS_BASE_CODE << 10)
563bafec742SSukumar Swaminathan #define	QL_ROUTING_INDEX_SEM_BITS	(QL_SEM_BITS_BASE_CODE << 12)
564bafec742SSukumar Swaminathan #define	QL_PROCESSOR_SEM_BITS		(QL_SEM_BITS_BASE_CODE << 14)
565bafec742SSukumar Swaminathan #define	QL_NIC_RECV_CONFIG_SEM_BITS	(QL_SEM_BITS_BASE_CODE << 14)
566bafec742SSukumar Swaminathan 
567bafec742SSukumar Swaminathan #define	QL_SEM_MASK_BASE_CODE		0x30000u
568bafec742SSukumar Swaminathan #define	QL_PORT0_XGMAC_SEM_MASK		(QL_SEM_MASK_BASE_CODE)
569bafec742SSukumar Swaminathan #define	QL_PORT1_XGMAC_SEM_MASK		(QL_SEM_MASK_BASE_CODE << 2)
570bafec742SSukumar Swaminathan #define	QL_ICB_ACCESS_ADDRESS_SEM_MASK	(QL_SEM_MASK_BASE_CODE << 4)
571bafec742SSukumar Swaminathan #define	QL_MAC_PROTOCOL_SEM_MASK	(QL_SEM_MASK_BASE_CODE << 6)
572bafec742SSukumar Swaminathan #define	QL_FLASH_SEM_MASK		(QL_SEM_MASK_BASE_CODE << 8)
573bafec742SSukumar Swaminathan #define	QL_PROBE_MUX_SEM_MASK		(QL_SEM_MASK_BASE_CODE << 10)
574bafec742SSukumar Swaminathan #define	QL_ROUTING_INDEX_SEM_MASK	(QL_SEM_MASK_BASE_CODE << 12)
575bafec742SSukumar Swaminathan #define	QL_PROCESSOR_SEM_MASK		(QL_SEM_MASK_BASE_CODE << 14)
576bafec742SSukumar Swaminathan #define	QL_NIC_RECV_CONFIG_SEM_MASK	(QL_SEM_MASK_BASE_CODE << 14)
577bafec742SSukumar Swaminathan 
578bafec742SSukumar Swaminathan /* XGMAC Address Register 0x78 */
579bafec742SSukumar Swaminathan #define	XGMAC_ADDRESS_RDY		(0x8000u<<16)
580bafec742SSukumar Swaminathan #define	XGMAC_ADDRESS_READ_TRANSACT	(0x4000u<<16)
581bafec742SSukumar Swaminathan #define	XGMAC_ADDRESS_ACCESS_ERROR	(0x2000u<<16)
582bafec742SSukumar Swaminathan 
583bafec742SSukumar Swaminathan /* XGMAC Register Set */
584bafec742SSukumar Swaminathan #define	REG_XGMAC_GLOBAL_CONFIGURATION	0x108
585bafec742SSukumar Swaminathan #define	GLOBAL_CONFIG_JUMBO_MODE	0x40
586bafec742SSukumar Swaminathan 
587bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_TX_CONFIGURATION	0x10C
588bafec742SSukumar Swaminathan #define	XGMAC_MAC_TX_ENABLE		0x02
589bafec742SSukumar Swaminathan 
590bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_CONFIGURATION	0x110
591bafec742SSukumar Swaminathan #define	XGMAC_MAC_RX_ENABLE		0x02
592bafec742SSukumar Swaminathan 
593bafec742SSukumar Swaminathan #define	REG_XGMAC_FLOW_CONTROL		0x11C
594bafec742SSukumar Swaminathan 
595bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_TX_PARAM		0x134
596bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_PARAM		0x138
597bafec742SSukumar Swaminathan 
598bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_TX_PKTS		0x200
599bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_TX_OCTETS		0x208
600bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_TX_MULTCAST_PKTS	0x210
601bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_TX_BROADCAST_PKTS	0x218
602bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_TX_PAUSE_PKTS	0x230
603bafec742SSukumar Swaminathan 
604bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_OCTETS		0x300
605bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_OCTETS_OK	0x308
606bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_PKTS		0x310
607bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_PKTS_OK	0x318
608bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_BROADCAST_PKTS	0x320
609bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_MULTCAST_PKTS	0x328
610bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_JABBER_PKTS	0x348
611bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_FCS_ERR		0x360
612bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_ALIGN_ERR		0x368
613bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_SYM_ERR	0x370
614bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_INT_ERR	0x378
615bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_PAUSE_PKTS	0x388
616bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_PHY_ADDR		0x430
617bafec742SSukumar Swaminathan #define	REG_XGMAC_MAC_RX_FIFO_DROPS	0x5B8
618bafec742SSukumar Swaminathan 
619bafec742SSukumar Swaminathan 
620bafec742SSukumar Swaminathan /* MAC Protocol Address Index Register Set 0xA8 */
621bafec742SSukumar Swaminathan #define	MAC_PROTOCOL_ADDRESS_INDEX_MW	(0x8000u<<16)
622bafec742SSukumar Swaminathan #define	MAC_PROTOCOL_ADDRESS_ENABLE	(1 << 27)
623bafec742SSukumar Swaminathan #define	MAC_PROTOCOL_TYPE_CAM_MAC	(0x0)
624bafec742SSukumar Swaminathan #define	MAC_PROTOCOL_TYPE_MULTICAST	(0x10000u)
625bafec742SSukumar Swaminathan 
626bafec742SSukumar Swaminathan /* NIC Receive Configuration Register 0xD4 */
627bafec742SSukumar Swaminathan #define	RECV_CONFIG_DEFAULT_Q_MASK	(0x7F000000u)
628bafec742SSukumar Swaminathan #define	RECV_CONFIG_VTAG_REMOVAL_MASK	(0x80000u)
629bafec742SSukumar Swaminathan #define	RECV_CONFIG_VTAG_RV		0x08
630bafec742SSukumar Swaminathan 
631bafec742SSukumar Swaminathan /*
632bafec742SSukumar Swaminathan  *  10G MAC Address  Register (XGMAC_ADDR) bit definitions.
633bafec742SSukumar Swaminathan  */
634bafec742SSukumar Swaminathan #define	XGMAC_ADDR_RDY	(1 << 31)
635bafec742SSukumar Swaminathan #define	XGMAC_ADDR_R	(1 << 30)
636bafec742SSukumar Swaminathan #define	XGMAC_ADDR_XME	(1 << 29)
637bafec742SSukumar Swaminathan 
638bafec742SSukumar Swaminathan #define	PAUSE_SRC_LO			0x00000100
639bafec742SSukumar Swaminathan #define	PAUSE_SRC_HI			0x00000104
640bafec742SSukumar Swaminathan #define	GLOBAL_CFG			0x00000108
641bafec742SSukumar Swaminathan #define	GLOBAL_CFG_RESET		(1 << 0)
642bafec742SSukumar Swaminathan #define	GLOBAL_CFG_JUMBO		(1 << 6)
643bafec742SSukumar Swaminathan #define	GLOBAL_CFG_TX_STAT_EN		(1 << 10)
644bafec742SSukumar Swaminathan #define	GLOBAL_CFG_RX_STAT_EN		(1 << 11)
645bafec742SSukumar Swaminathan #define	TX_CFG				0x0000010c
646bafec742SSukumar Swaminathan #define	TX_CFG_RESET			(1 << 0)
647bafec742SSukumar Swaminathan #define	TX_CFG_EN			(1 << 1)
648bafec742SSukumar Swaminathan #define	TX_CFG_PREAM			(1 << 2)
649bafec742SSukumar Swaminathan #define	RX_CFG				0x00000110
650bafec742SSukumar Swaminathan #define	RX_CFG_RESET			(1 << 0)
651bafec742SSukumar Swaminathan #define	RX_CFG_EN			(1 << 1)
652bafec742SSukumar Swaminathan #define	RX_CFG_PREAM			(1 << 2)
653bafec742SSukumar Swaminathan #define	FLOW_CTL			0x0000011c
654bafec742SSukumar Swaminathan #define	PAUSE_OPCODE			0x00000120
655bafec742SSukumar Swaminathan #define	PAUSE_TIMER			0x00000124
656bafec742SSukumar Swaminathan #define	PAUSE_FRM_DEST_LO		0x00000128
657bafec742SSukumar Swaminathan #define	PAUSE_FRM_DEST_HI		0x0000012c
658bafec742SSukumar Swaminathan #define	MAC_TX_PARAMS			0x00000134
659bafec742SSukumar Swaminathan #define	MAC_TX_PARAMS_JUMBO		(1 << 31)
660bafec742SSukumar Swaminathan #define	MAC_TX_PARAMS_SIZE_SHIFT	16
661bafec742SSukumar Swaminathan #define	MAC_RX_PARAMS			0x00000138
662bafec742SSukumar Swaminathan #define	MAC_SYS_INT			0x00000144
663bafec742SSukumar Swaminathan #define	MAC_SYS_INT_MASK		0x00000148
664bafec742SSukumar Swaminathan #define	MAC_MGMT_INT			0x0000014c
665bafec742SSukumar Swaminathan #define	MAC_MGMT_IN_MASK		0x00000150
666bafec742SSukumar Swaminathan #define	EXT_ARB_MODE			0x000001fc
667bafec742SSukumar Swaminathan #define	TX_PKTS				0x00000200
668bafec742SSukumar Swaminathan #define	TX_PKTS_LO			0x00000204
669bafec742SSukumar Swaminathan #define	TX_BYTES			0x00000208
670bafec742SSukumar Swaminathan #define	TX_BYTES_LO			0x0000020C
671bafec742SSukumar Swaminathan #define	TX_MCAST_PKTS			0x00000210
672bafec742SSukumar Swaminathan #define	TX_MCAST_PKTS_LO		0x00000214
673bafec742SSukumar Swaminathan #define	TX_BCAST_PKTS			0x00000218
674bafec742SSukumar Swaminathan #define	TX_BCAST_PKTS_LO		0x0000021C
675bafec742SSukumar Swaminathan #define	TX_UCAST_PKTS			0x00000220
676bafec742SSukumar Swaminathan #define	TX_UCAST_PKTS_LO		0x00000224
677bafec742SSukumar Swaminathan #define	TX_CTL_PKTS			0x00000228
678bafec742SSukumar Swaminathan #define	TX_CTL_PKTS_LO			0x0000022c
679bafec742SSukumar Swaminathan #define	TX_PAUSE_PKTS			0x00000230
680bafec742SSukumar Swaminathan #define	TX_PAUSE_PKTS_LO		0x00000234
681bafec742SSukumar Swaminathan #define	TX_64_PKT			0x00000238
682bafec742SSukumar Swaminathan #define	TX_64_PKT_LO			0x0000023c
683bafec742SSukumar Swaminathan #define	TX_65_TO_127_PKT		0x00000240
684bafec742SSukumar Swaminathan #define	TX_65_TO_127_PKT_LO		0x00000244
685bafec742SSukumar Swaminathan #define	TX_128_TO_255_PKT		0x00000248
686bafec742SSukumar Swaminathan #define	TX_128_TO_255_PKT_LO		0x0000024c
687bafec742SSukumar Swaminathan #define	TX_256_511_PKT			0x00000250
688bafec742SSukumar Swaminathan #define	TX_256_511_PKT_LO		0x00000254
689bafec742SSukumar Swaminathan #define	TX_512_TO_1023_PKT		0x00000258
690bafec742SSukumar Swaminathan #define	TX_512_TO_1023_PKT_LO		0x0000025c
691bafec742SSukumar Swaminathan #define	TX_1024_TO_1518_PKT		0x00000260
692bafec742SSukumar Swaminathan #define	TX_1024_TO_1518_PKT_LO		0x00000264
693bafec742SSukumar Swaminathan #define	TX_1519_TO_MAX_PKT		0x00000268
694bafec742SSukumar Swaminathan #define	TX_1519_TO_MAX_PKT_LO		0x0000026c
695bafec742SSukumar Swaminathan #define	TX_UNDERSIZE_PKT		0x00000270
696bafec742SSukumar Swaminathan #define	TX_UNDERSIZE_PKT_LO		0x00000274
697bafec742SSukumar Swaminathan #define	TX_OVERSIZE_PKT			0x00000278
698bafec742SSukumar Swaminathan #define	TX_OVERSIZE_PKT_LO		0x0000027c
699bafec742SSukumar Swaminathan #define	RX_HALF_FULL_DET		0x000002a0
700bafec742SSukumar Swaminathan #define	TX_HALF_FULL_DET_LO		0x000002a4
701bafec742SSukumar Swaminathan #define	RX_OVERFLOW_DET			0x000002a8
702bafec742SSukumar Swaminathan #define	TX_OVERFLOW_DET_LO		0x000002ac
703bafec742SSukumar Swaminathan #define	RX_HALF_FULL_MASK		0x000002b0
704bafec742SSukumar Swaminathan #define	TX_HALF_FULL_MASK_LO		0x000002b4
705bafec742SSukumar Swaminathan #define	RX_OVERFLOW_MASK		0x000002b8
706bafec742SSukumar Swaminathan #define	TX_OVERFLOW_MASK_LO		0x000002bc
707bafec742SSukumar Swaminathan #define	STAT_CNT_CTL			0x000002c0
708bafec742SSukumar Swaminathan #define	STAT_CNT_CTL_CLEAR_TX		(1 << 0)	/* Control */
709bafec742SSukumar Swaminathan #define	STAT_CNT_CTL_CLEAR_RX		(1 << 1)	/* Control */
710bafec742SSukumar Swaminathan #define	AUX_RX_HALF_FULL_DET		0x000002d0
711bafec742SSukumar Swaminathan #define	AUX_TX_HALF_FULL_DET		0x000002d4
712bafec742SSukumar Swaminathan #define	AUX_RX_OVERFLOW_DET		0x000002d8
713bafec742SSukumar Swaminathan #define	AUX_TX_OVERFLOW_DET		0x000002dc
714bafec742SSukumar Swaminathan #define	AUX_RX_HALF_FULL_MASK		0x000002f0
715bafec742SSukumar Swaminathan #define	AUX_TX_HALF_FULL_MASK		0x000002f4
716bafec742SSukumar Swaminathan #define	AUX_RX_OVERFLOW_MASK		0x000002f8
717bafec742SSukumar Swaminathan #define	AUX_TX_OVERFLOW_MASK		0x000002fc
718bafec742SSukumar Swaminathan #define	RX_BYTES			0x00000300
719bafec742SSukumar Swaminathan #define	RX_BYTES_LO			0x00000304
720bafec742SSukumar Swaminathan #define	RX_BYTES_OK			0x00000308
721bafec742SSukumar Swaminathan #define	RX_BYTES_OK_LO			0x0000030c
722bafec742SSukumar Swaminathan #define	RX_PKTS				0x00000310
723bafec742SSukumar Swaminathan #define	RX_PKTS_LO			0x00000314
724bafec742SSukumar Swaminathan #define	RX_PKTS_OK			0x00000318
725bafec742SSukumar Swaminathan #define	RX_PKTS_OK_LO			0x0000031c
726bafec742SSukumar Swaminathan #define	RX_BCAST_PKTS			0x00000320
727bafec742SSukumar Swaminathan #define	RX_BCAST_PKTS_LO		0x00000324
728bafec742SSukumar Swaminathan #define	RX_MCAST_PKTS			0x00000328
729bafec742SSukumar Swaminathan #define	RX_MCAST_PKTS_LO		0x0000032c
730bafec742SSukumar Swaminathan #define	RX_UCAST_PKTS			0x00000330
731bafec742SSukumar Swaminathan #define	RX_UCAST_PKTS_LO		0x00000334
732bafec742SSukumar Swaminathan #define	RX_UNDERSIZE_PKTS		0x00000338
733bafec742SSukumar Swaminathan #define	RX_UNDERSIZE_PKTS_LO		0x0000033c
734bafec742SSukumar Swaminathan #define	RX_OVERSIZE_PKTS		0x00000340
735bafec742SSukumar Swaminathan #define	RX_OVERSIZE_PKTS_LO		0x00000344
736bafec742SSukumar Swaminathan #define	RX_JABBER_PKTS			0x00000348
737bafec742SSukumar Swaminathan #define	RX_JABBER_PKTS_LO		0x0000034c
738bafec742SSukumar Swaminathan #define	RX_UNDERSIZE_FCERR_PKTS		0x00000350
739bafec742SSukumar Swaminathan #define	RX_UNDERSIZE_FCERR_PKTS_LO	0x00000354
740bafec742SSukumar Swaminathan #define	RX_DROP_EVENTS			0x00000358
741bafec742SSukumar Swaminathan #define	RX_DROP_EVENTS_LO		0x0000035c
742bafec742SSukumar Swaminathan #define	RX_FCERR_PKTS			0x00000360
743bafec742SSukumar Swaminathan #define	RX_FCERR_PKTS_LO		0x00000364
744bafec742SSukumar Swaminathan #define	RX_ALIGN_ERR			0x00000368
745bafec742SSukumar Swaminathan #define	RX_ALIGN_ERR_LO			0x0000036c
746bafec742SSukumar Swaminathan #define	RX_SYMBOL_ERR			0x00000370
747bafec742SSukumar Swaminathan #define	RX_SYMBOL_ERR_LO		0x00000374
748bafec742SSukumar Swaminathan #define	RX_MAC_ERR			0x00000378
749bafec742SSukumar Swaminathan #define	RX_MAC_ERR_LO			0x0000037c
750bafec742SSukumar Swaminathan #define	RX_CTL_PKTS			0x00000380
751bafec742SSukumar Swaminathan #define	RX_CTL_PKTS_LO			0x00000384
752bafec742SSukumar Swaminathan #define	RX_PAUSE_PKTS			0x00000388
753bafec742SSukumar Swaminathan #define	RX_PAUSE_PKTS_LO		0x0000038c
754bafec742SSukumar Swaminathan #define	RX_64_PKTS			0x00000390
755bafec742SSukumar Swaminathan #define	RX_64_PKTS_LO			0x00000394
756bafec742SSukumar Swaminathan #define	RX_65_TO_127_PKTS		0x00000398
757bafec742SSukumar Swaminathan #define	RX_65_TO_127_PKTS_LO		0x0000039c
758bafec742SSukumar Swaminathan #define	RX_128_255_PKTS			0x000003a0
759bafec742SSukumar Swaminathan #define	RX_128_255_PKTS_LO		0x000003a4
760bafec742SSukumar Swaminathan #define	RX_256_511_PKTS			0x000003a8
761bafec742SSukumar Swaminathan #define	RX_256_511_PKTS_LO		0x000003ac
762bafec742SSukumar Swaminathan #define	RX_512_TO_1023_PKTS		0x000003b0
763bafec742SSukumar Swaminathan #define	RX_512_TO_1023_PKTS_LO		0x000003b4
764bafec742SSukumar Swaminathan #define	RX_1024_TO_1518_PKTS		0x000003b8
765bafec742SSukumar Swaminathan #define	RX_1024_TO_1518_PKTS_LO		0x000003bc
766bafec742SSukumar Swaminathan #define	RX_1519_TO_MAX_PKTS		0x000003c0
767bafec742SSukumar Swaminathan #define	RX_1519_TO_MAX_PKTS_LO		0x000003c4
768bafec742SSukumar Swaminathan #define	RX_LEN_ERR_PKTS			0x000003c8
769bafec742SSukumar Swaminathan #define	RX_LEN_ERR_PKTS_LO		0x000003cc
770bafec742SSukumar Swaminathan #define	MDIO_TX_DATA			0x00000400
771bafec742SSukumar Swaminathan #define	MDIO_RX_DATA			0x00000410
772bafec742SSukumar Swaminathan #define	MDIO_CMD			0x00000420
773bafec742SSukumar Swaminathan #define	MDIO_PHY_ADDR			0x00000430
774bafec742SSukumar Swaminathan #define	MDIO_PORT			0x00000440
775bafec742SSukumar Swaminathan #define	MDIO_STATUS			0x00000450
776bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES0		0x00000500
777bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES0_LO	0x00000504
778bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES1		0x00000508
779bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES1_LO	0x0000050C
780bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES2		0x00000510
781bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES2_LO	0x00000514
782bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES3		0x00000518
783bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES3_LO	0x0000051C
784bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES4		0x00000520
785bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES4_LO	0x00000524
786bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES5		0x00000528
787bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES5_LO	0x0000052C
788bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES6		0x00000530
789bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES6_LO	0x00000534
790bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES7		0x00000538
791bafec742SSukumar Swaminathan #define	TX_CBFC_PAUSE_FRAMES7_LO	0x0000053C
792bafec742SSukumar Swaminathan #define	TX_FCOE_PKTS			0x00000540
793bafec742SSukumar Swaminathan #define	TX_FCOE_PKTS_LO			0x00000544
794bafec742SSukumar Swaminathan #define	TX_MGMT_PKTS			0x00000548
795bafec742SSukumar Swaminathan #define	TX_MGMT_PKTS_LO			0x0000054C
796bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES0		0x00000568
797bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES0_LO	0x0000056C
798bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES1		0x00000570
799bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES1_LO	0x00000574
800bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES2		0x00000578
801bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES2_LO	0x0000057C
802bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES3		0x00000580
803bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES3_LO	0x00000584
804bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES4		0x00000588
805bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES4_LO	0x0000058C
806bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES5		0x00000590
807bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES5_LO	0x00000594
808bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES6		0x00000598
809bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES6_LO	0x0000059C
810bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES7		0x000005A0
811bafec742SSukumar Swaminathan #define	RX_CBFC_PAUSE_FRAMES7_LO	0x000005A4
812bafec742SSukumar Swaminathan #define	RX_FCOE_PKTS			0x000005A8
813bafec742SSukumar Swaminathan #define	RX_FCOE_PKTS_LO			0x000005AC
814bafec742SSukumar Swaminathan #define	RX_MGMT_PKTS			0x000005B0
815bafec742SSukumar Swaminathan #define	RX_MGMT_PKTS_LO			0x000005B4
816bafec742SSukumar Swaminathan #define	RX_NIC_FIFO_DROP		0x000005B8
817bafec742SSukumar Swaminathan #define	RX_NIC_FIFO_DROP_LO		0x000005BC
818bafec742SSukumar Swaminathan #define	RX_FCOE_FIFO_DROP		0x000005C0
819bafec742SSukumar Swaminathan #define	RX_FCOE_FIFO_DROP_LO		0x000005C4
820bafec742SSukumar Swaminathan #define	RX_MGMT_FIFO_DROP		0x000005C8
821bafec742SSukumar Swaminathan #define	RX_MGMT_FIFO_DROP_LO		0x000005CC
822bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY0		0x00000600
823bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY0_LO		0x00000604
824bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY1		0x00000608
825bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY1_LO		0x0000060C
826bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY2		0x00000610
827bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY2_LO		0x00000614
828bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY3		0x00000618
829bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY3_LO		0x0000061C
830bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY4		0x00000620
831bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY4_LO		0x00000624
832bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY5		0x00000628
833bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY5_LO		0x0000062C
834bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY6		0x00000630
835bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY6_LO		0x00000634
836bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY7		0x00000638
837bafec742SSukumar Swaminathan #define	RX_PKTS_PRIORITY7_LO		0x0000063C
838bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY0		0x00000640
839bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY0_LO		0x00000644
840bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY1		0x00000648
841bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY1_LO		0x0000064C
842bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY2		0x00000650
843bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY2_LO		0x00000654
844bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY3		0x00000658
845bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY3_LO		0x0000065C
846bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY4		0x00000660
847bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY4_LO		0x00000664
848bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY5		0x00000668
849bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY5_LO		0x0000066C
850bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY6		0x00000670
851bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY6_LO		0x00000674
852bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY7		0x00000678
853bafec742SSukumar Swaminathan #define	RX_OCTETS_PRIORITY7_LO		0x0000067C
854bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY0		0x00000680
855bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY0_LO		0x00000684
856bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY1		0x00000688
857bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY1_LO		0x0000068C
858bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY2		0x00000690
859bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY2_LO		0x00000694
860bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY3		0x00000698
861bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY3_LO		0x0000069C
862bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY4		0x000006A0
863bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY4_LO		0x000006A4
864bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY5		0x000006A8
865bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY5_LO		0x000006AC
866bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY6		0x000006B0
867bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY6_LO		0x000006B4
868bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY7		0x000006B8
869bafec742SSukumar Swaminathan #define	TX_PKTS_PRIORITY7_LO		0x000006BC
870bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY0		0x000006C0
871bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY0_LO		0x000006C4
872bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY1		0x000006C8
873bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY1_LO		0x000006CC
874bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY2		0x000006D0
875bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY2_LO		0x000006D4
876bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY3		0x000006D8
877bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY3_LO		0x000006DC
878bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY4		0x000006E0
879bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY4_LO		0x000006E4
880bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY5		0x000006E8
881bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY5_LO		0x000006EC
882bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY6		0x000006F0
883bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY6_LO		0x000006F4
884bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY7		0x000006F8
885bafec742SSukumar Swaminathan #define	TX_OCTETS_PRIORITY7_LO		0x000006FC
886bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY0		0x00000700
887bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY0_LO		0x00000704
888bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY1		0x00000708
889bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY1_LO		0x0000070C
890bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY2		0x00000710
891bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY2_LO		0x00000714
892bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY3		0x00000718
893bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY3_LO		0x0000071C
894bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY4		0x00000720
895bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY4_LO		0x00000724
896bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY5		0x00000728
897bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY5_LO		0x0000072C
898bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY6		0x00000730
899bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY6_LO		0x00000734
900bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY7		0x00000738
901bafec742SSukumar Swaminathan #define	RX_DISCARD_PRIORITY7_LO		0x0000073C
902bafec742SSukumar Swaminathan 
903bafec742SSukumar Swaminathan 
904bafec742SSukumar Swaminathan #define	CQ0_ID				0x0
905bafec742SSukumar Swaminathan #define	NIC_CORE			0x1
906bafec742SSukumar Swaminathan /* Routing Index Register 0xE4 */
907bafec742SSukumar Swaminathan #define	ROUTING_INDEX_MW			BIT_31
908bafec742SSukumar Swaminathan #define	ROUTING_INDEX_DEFAULT_ENABLE_MASK	(0x8320000u)
909bafec742SSukumar Swaminathan #define	ROUTING_INDEX_DEFAULT_DISABLE_MASK	(0x0320000u)
910bafec742SSukumar Swaminathan 
911bafec742SSukumar Swaminathan /* Routing Data Register 0xE8 */
912bafec742SSukumar Swaminathan #define	ROUTE_AS_CAM_HIT		0x80
913bafec742SSukumar Swaminathan #define	ROUTE_AS_BCAST_MCAST_MATCH	0x8000u
914bafec742SSukumar Swaminathan #define	ROUTE_AS_VALID_PKT		0x800000u	/* promiscuous mode? */
915bafec742SSukumar Swaminathan 
916bafec742SSukumar Swaminathan enum {
917bafec742SSukumar Swaminathan 	ROUTING_MASK_INDEX_CAM_HIT,
918bafec742SSukumar Swaminathan 	ROUTING_MASK_INDEX_BCAST_MCAST_MATCH,
919bafec742SSukumar Swaminathan 	ROUTING_MASK_INDEX_VALID_PKT,
920bafec742SSukumar Swaminathan 	ROUTING_MASK_INDEX_TOTAL
921bafec742SSukumar Swaminathan };
922bafec742SSukumar Swaminathan 
923bafec742SSukumar Swaminathan #define	ROUTING_MASK_INDEX_MAX	16
924bafec742SSukumar Swaminathan /*
925bafec742SSukumar Swaminathan  * General definitions...
926bafec742SSukumar Swaminathan  */
927bafec742SSukumar Swaminathan 
928bafec742SSukumar Swaminathan /*
929bafec742SSukumar Swaminathan  * Below are a number compiler switches for controlling driver behavior.
930bafec742SSukumar Swaminathan  * Some are not supported under certain conditions and are notated as such.
931bafec742SSukumar Swaminathan  */
932bafec742SSukumar Swaminathan 
933bafec742SSukumar Swaminathan /* MTU & Frame Size stuff */
934bafec742SSukumar Swaminathan #define	JUMBO_MTU		9000
935bafec742SSukumar Swaminathan #define	NORMAL_FRAME_SIZE	2500	/* ETHERMTU,1500 */
936bafec742SSukumar Swaminathan #define	JUMBO_FRAME_SIZE	9600
937*accf27a5SSukumar Swaminathan #define	LRG_BUF_NORMAL_SIZE	NORMAL_FRAME_SIZE
938*accf27a5SSukumar Swaminathan #define	LRG_BUF_JUMBO_SIZE	JUMBO_FRAME_SIZE
939bafec742SSukumar Swaminathan #define	VLAN_ID_LEN		2
940bafec742SSukumar Swaminathan #define	VLAN_HEADER_LEN		sizeof (struct ether_vlan_header) /* 18 */
941bafec742SSukumar Swaminathan #define	ETHER_HEADER_LEN	sizeof (struct ether_header)	/* 14 */
942bafec742SSukumar Swaminathan 
943*accf27a5SSukumar Swaminathan #define	NUM_TX_RING_ENTRIES	(1024)
944*accf27a5SSukumar Swaminathan #define	NUM_RX_RING_ENTRIES	(1024)
945bafec742SSukumar Swaminathan 
946*accf27a5SSukumar Swaminathan #define	NUM_SMALL_BUFFERS	(1024)
947*accf27a5SSukumar Swaminathan #define	NUM_LARGE_BUFFERS	(1024)
948bafec742SSukumar Swaminathan 
949bafec742SSukumar Swaminathan #define	RX_TX_RING_SHADOW_SPACE	2	/* 1st one is wqicb and 2nd for cqicb */
950bafec742SSukumar Swaminathan #define	BUF_Q_PTR_SPACE		((((NUM_SMALL_BUFFERS * sizeof (uint64_t))  \
951bafec742SSukumar Swaminathan 				    / VM_PAGE_SIZE) + 1) + \
952bafec742SSukumar Swaminathan 				    (((NUM_LARGE_BUFFERS * sizeof (uint64_t))  \
953bafec742SSukumar Swaminathan 				    / VM_PAGE_SIZE) + 1))
954bafec742SSukumar Swaminathan 
955bafec742SSukumar Swaminathan #define	MAX_CQ				128
956*accf27a5SSukumar Swaminathan #define	DFLT_RX_COALESCE_WAIT		90	/* usec wait for coalescing */
957*accf27a5SSukumar Swaminathan #define	DFLT_RX_INTER_FRAME_WAIT	30  	/* max interframe-wait for */
958bafec742SSukumar Swaminathan 						/* coalescing */
959*accf27a5SSukumar Swaminathan #define	DFLT_TX_COALESCE_WAIT		90	/* usec wait for coalescing */
960*accf27a5SSukumar Swaminathan #define	DFLT_TX_INTER_FRAME_WAIT	30	/* max interframe-wait for */
961*accf27a5SSukumar Swaminathan 						/* coalescing */
962*accf27a5SSukumar Swaminathan #define	DFLT_RX_COALESCE_WAIT_JUMBO	40	/* usec wait for coalescing */
963*accf27a5SSukumar Swaminathan #define	DFLT_RX_INTER_FRAME_WAIT_JUMBO	10  	/* max interframe-wait for */
964*accf27a5SSukumar Swaminathan 						/* coalescing */
965*accf27a5SSukumar Swaminathan #define	DFLT_TX_COALESCE_WAIT_JUMBO	40	/* usec wait for coalescing */
966*accf27a5SSukumar Swaminathan #define	DFLT_TX_INTER_FRAME_WAIT_JUMBO	10	/* max interframe-wait for */
967bafec742SSukumar Swaminathan 						/* coalescing */
968bafec742SSukumar Swaminathan #define	DFLT_PAYLOAD_COPY_THRESH	6	/* must be at least 6 usec */
969bafec742SSukumar Swaminathan 
970bafec742SSukumar Swaminathan #define	UDELAY_COUNT			3
971bafec742SSukumar Swaminathan #define	UDELAY_DELAY			10
972bafec742SSukumar Swaminathan 
973bafec742SSukumar Swaminathan #define	MAX_RX_RINGS			128
974bafec742SSukumar Swaminathan #define	MAX_TX_RINGS			16
975bafec742SSukumar Swaminathan 
976bafec742SSukumar Swaminathan /*
977bafec742SSukumar Swaminathan  * Large & Small Buffers for Receives
978bafec742SSukumar Swaminathan  */
979bafec742SSukumar Swaminathan struct lrg_buf_q_entry {
980bafec742SSukumar Swaminathan 	uint32_t	addr0_lower;
981bafec742SSukumar Swaminathan #define	IAL_LAST_ENTRY	0x00000001
982bafec742SSukumar Swaminathan #define	IAL_CONT_ENTRY	0x00000002
983bafec742SSukumar Swaminathan #define	IAL_FLAG_MASK	0x00000003
984bafec742SSukumar Swaminathan 	uint32_t	addr0_upper;
985bafec742SSukumar Swaminathan };
986bafec742SSukumar Swaminathan 
987bafec742SSukumar Swaminathan struct bufq_addr_element {
988bafec742SSukumar Swaminathan 	uint32_t	addr_low;
989bafec742SSukumar Swaminathan 	uint32_t	addr_high;
990bafec742SSukumar Swaminathan };
991bafec742SSukumar Swaminathan 
992bafec742SSukumar Swaminathan #define	QL_NO_RESET	0
993bafec742SSukumar Swaminathan #define	QL_DO_RESET	1
994bafec742SSukumar Swaminathan 
995bafec742SSukumar Swaminathan /* Link must be in one of these states */
996bafec742SSukumar Swaminathan enum link_state_t {
997bafec742SSukumar Swaminathan 	LS_DOWN,
998bafec742SSukumar Swaminathan 	LS_UP
999bafec742SSukumar Swaminathan };
1000bafec742SSukumar Swaminathan 
1001bafec742SSukumar Swaminathan /* qlge->flags definitions. */
1002*accf27a5SSukumar Swaminathan #define	INTERRUPTS_ENABLED	BIT_0
1003*accf27a5SSukumar Swaminathan #define	ADAPTER_ERROR		BIT_1
1004*accf27a5SSukumar Swaminathan 
1005*accf27a5SSukumar Swaminathan #define	ADAPTER_SUSPENDED	BIT_8
1006bafec742SSukumar Swaminathan 
1007bafec742SSukumar Swaminathan /*
1008bafec742SSukumar Swaminathan  * ISP PCI Configuration Register Set structure definitions.
1009bafec742SSukumar Swaminathan  */
1010bafec742SSukumar Swaminathan typedef volatile struct
1011bafec742SSukumar Swaminathan {
1012bafec742SSukumar Swaminathan volatile uint16_t	vendor_id;
1013bafec742SSukumar Swaminathan volatile uint16_t	device_id;
1014bafec742SSukumar Swaminathan volatile uint16_t	command;
1015bafec742SSukumar Swaminathan volatile uint16_t	status;
1016bafec742SSukumar Swaminathan volatile uint8_t	revision;
1017bafec742SSukumar Swaminathan volatile uint8_t	prog_class;
1018bafec742SSukumar Swaminathan volatile uint8_t	sub_class;
1019bafec742SSukumar Swaminathan volatile uint8_t	base_class;
1020bafec742SSukumar Swaminathan volatile uint8_t	cache_line_size;
1021bafec742SSukumar Swaminathan volatile uint8_t	latency_timer;
1022bafec742SSukumar Swaminathan volatile uint8_t	header_type;
1023bafec742SSukumar Swaminathan volatile uint32_t	io_base_address;
1024bafec742SSukumar Swaminathan volatile uint32_t	pci_cntl_reg_set_mem_base_address_lower;
1025bafec742SSukumar Swaminathan volatile uint32_t	pci_cntl_reg_set_mem_base_address_upper;
1026bafec742SSukumar Swaminathan volatile uint32_t	pci_doorbell_mem_base_address_lower;
1027bafec742SSukumar Swaminathan volatile uint32_t	pci_doorbell_mem_base_address_upper;
1028bafec742SSukumar Swaminathan 
1029bafec742SSukumar Swaminathan volatile uint16_t	sub_vendor_id;
1030bafec742SSukumar Swaminathan volatile uint16_t	sub_device_id;
1031bafec742SSukumar Swaminathan volatile uint32_t	expansion_rom;
1032bafec742SSukumar Swaminathan volatile uint8_t	intr_line;
1033bafec742SSukumar Swaminathan volatile uint8_t	intr_pin;
1034bafec742SSukumar Swaminathan volatile uint8_t	min_grant;
1035bafec742SSukumar Swaminathan volatile uint8_t	max_latency;
1036bafec742SSukumar Swaminathan volatile uint16_t	pcie_device_control;
1037bafec742SSukumar Swaminathan volatile uint16_t	link_status;
1038bafec742SSukumar Swaminathan volatile uint16_t	msi_msg_control;
1039bafec742SSukumar Swaminathan volatile uint16_t	msi_x_msg_control;
1040bafec742SSukumar Swaminathan 
1041bafec742SSukumar Swaminathan } pci_cfg_t;
1042bafec742SSukumar Swaminathan 
1043bafec742SSukumar Swaminathan 
1044bafec742SSukumar Swaminathan /*
1045bafec742SSukumar Swaminathan  *
1046bafec742SSukumar Swaminathan  *      Schultz Control Registers Index
1047bafec742SSukumar Swaminathan  *
1048bafec742SSukumar Swaminathan  */
1049bafec742SSukumar Swaminathan #define	REG_PROCESSOR_ADDR		0x00
1050bafec742SSukumar Swaminathan #define	REG_PROCESSOR_DATA		0x04
1051bafec742SSukumar Swaminathan #define	REG_SYSTEM			0x08
1052bafec742SSukumar Swaminathan #define	REG_RESET_FAILOVER		0x0C
1053bafec742SSukumar Swaminathan #define	REG_FUNCTION_SPECIFIC_CONTROL	0x10
1054bafec742SSukumar Swaminathan #define	REG_HOST_CMD_STATUS		0x14
1055bafec742SSukumar Swaminathan #define	REG_ICB_RID			0x1C
1056bafec742SSukumar Swaminathan #define	REG_ICB_ACCESS_ADDRESS_LOWER	0x20
1057bafec742SSukumar Swaminathan #define	REG_ICB_ACCESS_ADDRESS_UPPER	0x24
1058bafec742SSukumar Swaminathan #define	REG_CONFIGURATION		0x28
1059bafec742SSukumar Swaminathan 
1060bafec742SSukumar Swaminathan #define	INTR_EN_INTR_MASK	0x007f0000
1061bafec742SSukumar Swaminathan #define	INTR_EN_TYPE_MASK	0x03000000
1062bafec742SSukumar Swaminathan #define	INTR_EN_TYPE_ENABLE	0x00000100
1063bafec742SSukumar Swaminathan #define	INTR_EN_TYPE_DISABLE	0x00000200
1064bafec742SSukumar Swaminathan #define	INTR_EN_TYPE_READ	0x00000300
1065bafec742SSukumar Swaminathan #define	INTR_EN_IHD		0x00002000
1066bafec742SSukumar Swaminathan #define	INTR_EN_IHD_MASK	(INTR_EN_IHD << 16)
1067bafec742SSukumar Swaminathan #define	INTR_EN_EI		0x00004000
1068bafec742SSukumar Swaminathan #define	INTR_EN_EN		0x00008000
1069bafec742SSukumar Swaminathan 
1070bafec742SSukumar Swaminathan #define	REG_STATUS				0x30
1071bafec742SSukumar Swaminathan #define	REG_INTERRUPT_ENABLE			0x34
1072bafec742SSukumar Swaminathan #define	REG_INTERRUPT_MASK			0x38
1073bafec742SSukumar Swaminathan #define	REG_INTERRUPT_STATUS_1			0x3C
1074bafec742SSukumar Swaminathan 
1075bafec742SSukumar Swaminathan #define	REG_ERROR_STATUS			0x54
1076bafec742SSukumar Swaminathan 
1077bafec742SSukumar Swaminathan #define	REG_SEMAPHORE				0x64
1078bafec742SSukumar Swaminathan 
1079bafec742SSukumar Swaminathan #define	REG_XGMAC_ADDRESS			0x78
1080bafec742SSukumar Swaminathan #define	REG_XGMAC_DATA				0x7C
1081bafec742SSukumar Swaminathan #define	REG_NIC_ENHANCED_TX_SCHEDULE		0x80
1082bafec742SSukumar Swaminathan #define	REG_CNA_ENHANCED_TX_SCHEDULE		0x84
1083bafec742SSukumar Swaminathan #define	REG_FLASH_ADDRESS			0x88
1084bafec742SSukumar Swaminathan #define	REG_FLASH_DATA				0x8C
1085bafec742SSukumar Swaminathan 
1086bafec742SSukumar Swaminathan #define	REG_STOP_CQ_PROCESSING			0x90
1087bafec742SSukumar Swaminathan #define	REG_PAGE_TABLE_RID			0x94
1088bafec742SSukumar Swaminathan #define	REG_WQ_PAGE_TABLE_BASE_ADDR_LOWER	0x98
1089bafec742SSukumar Swaminathan #define	REG_WQ_PAGE_TABLE_BASE_ADDR_UPPER	0x9C
1090bafec742SSukumar Swaminathan #define	REG_CQ_PAGE_TABLE_BASE_ADDR_LOWER	0xA0
1091bafec742SSukumar Swaminathan #define	REG_CQ_PAGE_TABLE_BASE_ADDR_UPPER	0xA4
1092bafec742SSukumar Swaminathan #define	REG_MAC_PROTOCOL_ADDRESS_INDEX		0xA8
1093bafec742SSukumar Swaminathan #define	REG_MAC_PROTOCOL_DATA			0xAC
1094bafec742SSukumar Swaminathan #define	REG_SPLIT_HEADER			0xC0
1095bafec742SSukumar Swaminathan #define	REG_NIC_RECEIVE_CONFIGURATION		0xD4
1096bafec742SSukumar Swaminathan 
1097bafec742SSukumar Swaminathan #define	REG_MGMT_RCV_CFG			0xE0
1098bafec742SSukumar Swaminathan #define	REG_ROUTING_INDEX			0xE4
1099bafec742SSukumar Swaminathan #define	REG_ROUTING_DATA			0xE8
1100bafec742SSukumar Swaminathan #define	REG_RSVD7				0xEC
1101bafec742SSukumar Swaminathan #define	REG_XG_SERDES_ADDR			0xF0
1102bafec742SSukumar Swaminathan #define	REG_XG_SERDES_DATA			0xF4
1103bafec742SSukumar Swaminathan #define	REG_PRB_MX_ADDR				0xF8
1104bafec742SSukumar Swaminathan #define	REG_PRB_MX_DATA				0xFC
1105bafec742SSukumar Swaminathan 
1106bafec742SSukumar Swaminathan #define	INTR_MASK_PI				0x00000001
1107bafec742SSukumar Swaminathan #define	INTR_MASK_HL0				0x00000002
1108bafec742SSukumar Swaminathan #define	INTR_MASK_LH0				0x00000004
1109bafec742SSukumar Swaminathan #define	INTR_MASK_HL1				0x00000008
1110bafec742SSukumar Swaminathan #define	INTR_MASK_LH1				0x00000010
1111bafec742SSukumar Swaminathan #define	INTR_MASK_SE				0x00000020
1112bafec742SSukumar Swaminathan #define	INTR_MASK_LSC				0x00000040
1113bafec742SSukumar Swaminathan #define	INTR_MASK_MC				0x00000080
1114bafec742SSukumar Swaminathan #define	INTR_MASK_LINK_IRQS = (INTR_MASK_LSC | INTR_MASK_SE | INTR_MASK_MC)
1115bafec742SSukumar Swaminathan 
1116bafec742SSukumar Swaminathan /* Interrupt Enable Register 0x34 */
1117bafec742SSukumar Swaminathan #define	INTR_ENABLED		0x8000
1118bafec742SSukumar Swaminathan #define	GLOBAL_ENABLE_INTR	0x4000
1119bafec742SSukumar Swaminathan #define	ENABLE_MSI_MULTI_INTR	0x2000
1120bafec742SSukumar Swaminathan #define	ONE_INTR_MASK		0x3FF0000u
1121bafec742SSukumar Swaminathan #define	ENABLE_INTR		0x0100
1122bafec742SSukumar Swaminathan #define	DISABLE_INTR		0x0200
1123bafec742SSukumar Swaminathan #define	VERIFY_INTR_ENABLED	0x0300
1124bafec742SSukumar Swaminathan #define	ISP_ENABLE_INTR(qlge)	ql_put32(qlge, \
1125bafec742SSukumar Swaminathan 				    REG_INTERRUPT_ENABLE,\
1126bafec742SSukumar Swaminathan 				    (ONE_INTR_MASK | ENABLE_INTR))
1127bafec742SSukumar Swaminathan #define	ISP_DISABLE_INTR(qlge)	ql_put32(qlge, \
1128bafec742SSukumar Swaminathan 				    REG_INTERRUPT_ENABLE, \
1129bafec742SSukumar Swaminathan 				    (ONE_INTR_MASK | DISABLE_INTR))
1130bafec742SSukumar Swaminathan #define	ISP_ENABLE_PI_INTR(qlge)	ql_put32(qlge, \
1131bafec742SSukumar Swaminathan 					    REG_INTERRUPT_MASK, (BIT_16|1))
1132bafec742SSukumar Swaminathan #define	ISP_DISABLE_PI_INTR(qlge)	ql_put32(qlge, \
1133bafec742SSukumar Swaminathan 					    REG_INTERRUPT_MASK, BIT_16)
1134bafec742SSukumar Swaminathan 
1135bafec742SSukumar Swaminathan #define	ISP_ENABLE_GLOBAL_INTRS(qlge) { \
1136bafec742SSukumar Swaminathan 				ql_put32(qlge, REG_INTERRUPT_ENABLE, \
1137bafec742SSukumar Swaminathan 				    (0x40000000u | GLOBAL_ENABLE_INTR)); \
1138bafec742SSukumar Swaminathan 				qlge->flags |= INTERRUPTS_ENABLED; \
1139bafec742SSukumar Swaminathan 				}
1140bafec742SSukumar Swaminathan #define	ISP_DISABLE_GLOBAL_INTRS(qlge) { \
1141bafec742SSukumar Swaminathan 				ql_put32(qlge, \
1142bafec742SSukumar Swaminathan 				    REG_INTERRUPT_ENABLE, (0x40000000u)); \
1143bafec742SSukumar Swaminathan 				qlge->flags &= ~INTERRUPTS_ENABLED; \
1144bafec742SSukumar Swaminathan 				}
1145bafec742SSukumar Swaminathan #define	REQ_Q_VALID		0x10
1146bafec742SSukumar Swaminathan #define	RSP_Q_VALID		0x10
1147bafec742SSukumar Swaminathan 
1148bafec742SSukumar Swaminathan /*
1149bafec742SSukumar Swaminathan  * Mailbox Registers
1150bafec742SSukumar Swaminathan  */
1151bafec742SSukumar Swaminathan #define	MPI_REG				0x1002
1152bafec742SSukumar Swaminathan #define	NUM_MAILBOX_REGS		16
1153bafec742SSukumar Swaminathan #define	FUNC_0_IN_MAILBOX_0_REG_OFFSET	0x1180
1154bafec742SSukumar Swaminathan #define	FUNC_0_OUT_MAILBOX_0_REG_OFFSET	0x1190
1155bafec742SSukumar Swaminathan #define	FUNC_1_IN_MAILBOX_0_REG_OFFSET	0x1280
1156bafec742SSukumar Swaminathan #define	FUNC_1_OUT_MAILBOX_0_REG_OFFSET	0x1290
1157bafec742SSukumar Swaminathan 
1158bafec742SSukumar Swaminathan /*
1159bafec742SSukumar Swaminathan  * Control Register Set definitions.
1160bafec742SSukumar Swaminathan  */
1161bafec742SSukumar Swaminathan typedef volatile struct
1162bafec742SSukumar Swaminathan {
1163bafec742SSukumar Swaminathan volatile uint32_t	processor_address;	/* 0x00 */
1164bafec742SSukumar Swaminathan volatile uint32_t	processor_data;		/* 0x04 */
1165bafec742SSukumar Swaminathan volatile uint32_t	system_data;		/* 0x08 */
1166bafec742SSukumar Swaminathan volatile uint32_t	reset_failover;		/* 0x0C */
1167bafec742SSukumar Swaminathan 
1168bafec742SSukumar Swaminathan volatile uint32_t	function_specific_control;	/* 0x10 */
1169bafec742SSukumar Swaminathan volatile uint32_t	host_command_status;	/* 0x14 */
1170bafec742SSukumar Swaminathan volatile uint32_t	led;			/* 0x18 */
1171bafec742SSukumar Swaminathan volatile uint32_t	icb_rid;		/* 0x1c */
1172bafec742SSukumar Swaminathan 
1173bafec742SSukumar Swaminathan volatile uint32_t	idb_access_address_low;	/* 0x20 */
1174bafec742SSukumar Swaminathan volatile uint32_t	idb_access_address_high; /* 0x24 */
1175bafec742SSukumar Swaminathan volatile uint32_t	configuration;		/* 0x28 */
1176bafec742SSukumar Swaminathan volatile uint32_t	bios_base;		/* 0x2C */
1177bafec742SSukumar Swaminathan 
1178bafec742SSukumar Swaminathan volatile uint32_t	status;			/* 0x30 */
1179bafec742SSukumar Swaminathan volatile uint32_t	interrupt_enable;	/* 0x34 */
1180bafec742SSukumar Swaminathan volatile uint32_t	interrupt_mask;		/* 0x38 */
1181bafec742SSukumar Swaminathan volatile uint32_t	interrupt_status_1;	/* 0x3c */
1182bafec742SSukumar Swaminathan 
1183bafec742SSukumar Swaminathan volatile uint32_t	interrupt_status_2;	/* 0x40 */
1184bafec742SSukumar Swaminathan volatile uint32_t	interrupt_status_3;	/* 0x44 */
1185bafec742SSukumar Swaminathan volatile uint32_t	interrupt_status_4;	/* 0x48 */
1186bafec742SSukumar Swaminathan volatile uint32_t	rev_id;			/* 0x4c */
1187bafec742SSukumar Swaminathan 
1188bafec742SSukumar Swaminathan volatile uint32_t	force_ecc_error;	/* 0x50 */
1189bafec742SSukumar Swaminathan volatile uint32_t	error_status;		/* 0x54 */
1190bafec742SSukumar Swaminathan volatile uint32_t	internal_ram_debug_address;	/* 0x58 */
1191bafec742SSukumar Swaminathan volatile uint32_t	internal_ram_data;	/* 0x5c */
1192bafec742SSukumar Swaminathan 
1193bafec742SSukumar Swaminathan volatile uint32_t	correctable_ecc_error;	/* 0x60 */
1194bafec742SSukumar Swaminathan volatile uint32_t	semaphore;		/* 0x64 */
1195bafec742SSukumar Swaminathan 
1196bafec742SSukumar Swaminathan volatile uint32_t	gpio1;			/* 0x68 */
1197bafec742SSukumar Swaminathan volatile uint32_t	gpio2;			/* 0x6c */
1198bafec742SSukumar Swaminathan 
1199bafec742SSukumar Swaminathan volatile uint32_t	gpio3;			/* 0x70 */
1200bafec742SSukumar Swaminathan volatile uint32_t	reserved1;		/* 0x74 */
1201bafec742SSukumar Swaminathan volatile uint32_t	xgmac_address;		/* 0x78 */
1202bafec742SSukumar Swaminathan volatile uint32_t	xgmac_data;		/* 0x7c */
1203bafec742SSukumar Swaminathan 
1204bafec742SSukumar Swaminathan volatile uint32_t	nic_enhanced_tx_schedule;	/* 0x80 */
1205bafec742SSukumar Swaminathan volatile uint32_t	cna_enhanced_tx_schedule;	/* 0x84 */
1206bafec742SSukumar Swaminathan volatile uint32_t	flash_address;			/* 0x88 */
1207bafec742SSukumar Swaminathan volatile uint32_t	flash_data;			/* 0x8c */
1208bafec742SSukumar Swaminathan 
1209bafec742SSukumar Swaminathan volatile uint32_t	stop_cq;			/* 0x90 */
1210bafec742SSukumar Swaminathan volatile uint32_t	page_table_rid;			/* 0x94 */
1211bafec742SSukumar Swaminathan volatile uint32_t	wq_page_table_base_address_lower; /* 0x98 */
1212bafec742SSukumar Swaminathan volatile uint32_t	wq_page_table_base_address_upper; /* 0x9c */
1213bafec742SSukumar Swaminathan 
1214bafec742SSukumar Swaminathan volatile uint32_t	cq_page_table_base_address_lower; /* 0xA0 */
1215bafec742SSukumar Swaminathan volatile uint32_t	cq_page_table_base_address_upper; /* 0xA4 */
1216bafec742SSukumar Swaminathan volatile uint32_t	mac_protocol_address_index;	/* 0xA8 */
1217bafec742SSukumar Swaminathan volatile uint32_t	mac_protocol_data;		/* 0xAc */
1218bafec742SSukumar Swaminathan 
1219bafec742SSukumar Swaminathan volatile uint32_t	cos_default_cq_reg1;		/* 0xB0 */
1220bafec742SSukumar Swaminathan volatile uint32_t	cos_default_cq_reg2;		/* 0xB4 */
1221bafec742SSukumar Swaminathan volatile uint32_t	ethertype_skip_reg1;		/* 0xB8 */
1222bafec742SSukumar Swaminathan volatile uint32_t	ethertype_skip_reg2;		/* 0xBC */
1223bafec742SSukumar Swaminathan 
1224bafec742SSukumar Swaminathan volatile uint32_t	split_header;			/* 0xC0 */
1225bafec742SSukumar Swaminathan volatile uint32_t	fcoe_pause_threshold;		/* 0xC4 */
1226bafec742SSukumar Swaminathan volatile uint32_t	nic_pause_threshold;		/* 0xC8 */
1227bafec742SSukumar Swaminathan volatile uint32_t	fc_ethertype;			/* 0xCC */
1228bafec742SSukumar Swaminathan 
1229bafec742SSukumar Swaminathan volatile uint32_t	fcoe_recv_configuration;	/* 0xD0 */
1230bafec742SSukumar Swaminathan volatile uint32_t	nic_recv_configuration;		/* 0xD4 */
1231bafec742SSukumar Swaminathan volatile uint32_t	cos_tags_in_fcoe_fifo;		/* 0xD8 */
1232bafec742SSukumar Swaminathan volatile uint32_t	cos_tags_in_nic_fifo;		/* 0xDc */
1233bafec742SSukumar Swaminathan 
1234bafec742SSukumar Swaminathan volatile uint32_t	mgmt_recv_configuration;	/* 0xE0 */
1235bafec742SSukumar Swaminathan volatile uint32_t	routing_index;			/* 0xE4 */
1236bafec742SSukumar Swaminathan volatile uint32_t	routing_data;			/* 0xE8 */
1237bafec742SSukumar Swaminathan volatile uint32_t	reserved2;			/* 0xEc */
1238bafec742SSukumar Swaminathan 
1239bafec742SSukumar Swaminathan volatile uint32_t	xg_serdes_address;		/* 0xF0 */
1240bafec742SSukumar Swaminathan volatile uint32_t	xg_serdes_data;			/* 0xF4 */
1241bafec742SSukumar Swaminathan volatile uint32_t	probe_mux_address;		/* 0xF8 */
1242bafec742SSukumar Swaminathan volatile uint32_t	probe_mux_read_data;		/* 0xFc */
1243bafec742SSukumar Swaminathan 
1244bafec742SSukumar Swaminathan #define	INTR_PENDING	(uint32_t)(CSR_COMPLETION_INTR)
1245bafec742SSukumar Swaminathan 
1246bafec742SSukumar Swaminathan } dev_reg_t;
1247bafec742SSukumar Swaminathan 
1248bafec742SSukumar Swaminathan typedef volatile struct
1249bafec742SSukumar Swaminathan {
1250bafec742SSukumar Swaminathan 	volatile uint32_t	doorbell_reg_address[256];	/* 0x00 */
1251bafec742SSukumar Swaminathan } dev_doorbell_reg_t;
1252bafec742SSukumar Swaminathan 
1253bafec742SSukumar Swaminathan #define	SET_RMASK(val)  ((val & 0xffff) | (val << 16))
1254bafec742SSukumar Swaminathan #define	CLR_RMASK(val)  (0 | (val << 16))
1255bafec742SSukumar Swaminathan 
1256bafec742SSukumar Swaminathan /*
1257bafec742SSukumar Swaminathan  * DMA registers read only
1258bafec742SSukumar Swaminathan  */
1259bafec742SSukumar Swaminathan typedef volatile struct
1260bafec742SSukumar Swaminathan {
1261bafec742SSukumar Swaminathan     volatile uint32_t req_q_out;
1262bafec742SSukumar Swaminathan     volatile uint32_t rsp_q_in;
1263bafec742SSukumar Swaminathan 
1264bafec742SSukumar Swaminathan } iop_dmaregs_t;
1265bafec742SSukumar Swaminathan 
1266bafec742SSukumar Swaminathan #define	DMAREGS_SIZE	(sizeof (iop_dmaregs_t))
1267bafec742SSukumar Swaminathan #define	DUMMY_SIZE	(32*1024)
1268bafec742SSukumar Swaminathan 
1269bafec742SSukumar Swaminathan #ifdef QL_DEBUG
1270bafec742SSukumar Swaminathan typedef struct crash_record {
1271bafec742SSukumar Swaminathan uint16_t	fw_major_version;	/* 00 - 01 */
1272bafec742SSukumar Swaminathan uint16_t	fw_minor_version;	/* 02 - 03 */
1273bafec742SSukumar Swaminathan uint16_t	fw_patch_version;	/* 04 - 05 */
1274bafec742SSukumar Swaminathan uint16_t	fw_build_version;	/* 06 - 07 */
1275bafec742SSukumar Swaminathan 
1276bafec742SSukumar Swaminathan uint8_t		build_date[16];		/* 08 - 17 */
1277bafec742SSukumar Swaminathan uint8_t		build_time[16];		/* 18 - 27 */
1278bafec742SSukumar Swaminathan uint8_t		build_user[16];		/* 28 - 37 */
1279bafec742SSukumar Swaminathan uint8_t		card_serial_num[16];	/* 38 - 47 */
1280bafec742SSukumar Swaminathan 
1281bafec742SSukumar Swaminathan uint32_t	time_of_crash_in_secs;	/* 48 - 4B */
1282bafec742SSukumar Swaminathan uint32_t	time_of_crash_in_ms;	/* 4C - 4F */
1283bafec742SSukumar Swaminathan 
1284bafec742SSukumar Swaminathan uint16_t	outb_risc_sd_num_frames; /* 50 - 51 */
1285bafec742SSukumar Swaminathan uint16_t	oap_sd_length;		/* 52 - 53 */
1286bafec742SSukumar Swaminathan uint16_t	iap_sd_num_frames;	/* 54 - 55 */
1287bafec742SSukumar Swaminathan uint16_t	inb_risc_sd_length;	/* 56 - 57 */
1288bafec742SSukumar Swaminathan 
1289bafec742SSukumar Swaminathan uint8_t		reserved[28];		/* 58 - 7F */
1290bafec742SSukumar Swaminathan 
1291bafec742SSukumar Swaminathan uint8_t		outb_risc_reg_dump[256]; /* 80 -17F */
1292bafec742SSukumar Swaminathan uint8_t		inb_risc_reg_dump[256];	/* 180 -27F */
1293bafec742SSukumar Swaminathan uint8_t		inb_outb_risc_stack_dump[1]; /* 280 - ??? */
1294bafec742SSukumar Swaminathan } crash_record_t;
1295bafec742SSukumar Swaminathan #endif
1296bafec742SSukumar Swaminathan 
1297bafec742SSukumar Swaminathan /*
1298bafec742SSukumar Swaminathan  * I/O register access macros
1299bafec742SSukumar Swaminathan  * #if QL_DEBUG & 1
1300bafec742SSukumar Swaminathan  */
1301bafec742SSukumar Swaminathan 
1302bafec742SSukumar Swaminathan #define	RD_REG_BYTE(qlge, addr) \
1303bafec742SSukumar Swaminathan     ddi_get8(qlge->dev_handle, (uint8_t *)addr)
1304bafec742SSukumar Swaminathan #define	RD_REG_DWORD(qlge, addr) \
1305bafec742SSukumar Swaminathan     ddi_get32(qlge->dev_handle, (uint32_t *)addr)
1306bafec742SSukumar Swaminathan #define	WRT_REG_BYTE(qlge, addr, data) \
1307bafec742SSukumar Swaminathan     ddi_put8(qlge->dev_handle, (uint8_t *)addr, data)
1308bafec742SSukumar Swaminathan #define	WRT_REG_WORD(qlge, addr, data) \
1309bafec742SSukumar Swaminathan     ddi_put16(qlge->dev_handle, (uint16_t *)addr, data)
1310bafec742SSukumar Swaminathan #define	WRT_REG_DWORD(qlge, addr, data) \
1311bafec742SSukumar Swaminathan     ddi_put32(qlge->dev_handle, (uint32_t *)addr, data)
1312bafec742SSukumar Swaminathan 
1313bafec742SSukumar Swaminathan /*
1314bafec742SSukumar Swaminathan  * QLGE-specific ioctls ...
1315bafec742SSukumar Swaminathan  */
1316bafec742SSukumar Swaminathan #define	QLA_IOC			((((('Q' << 8) + 'L') << 8) + 'A') << 8)
1317bafec742SSukumar Swaminathan 
1318bafec742SSukumar Swaminathan /*
1319bafec742SSukumar Swaminathan  * Definition of ioctls commands
1320bafec742SSukumar Swaminathan  */
1321bafec742SSukumar Swaminathan #define	QLA_PCI_STATUS			(QLA_IOC|1) /* Read all PCI registers */
1322bafec742SSukumar Swaminathan 
1323bafec742SSukumar Swaminathan #define	QLA_WRITE_REG			(QLA_IOC|3)
1324bafec742SSukumar Swaminathan #define	QLA_READ_PCI_REG		(QLA_IOC|4)
1325bafec742SSukumar Swaminathan #define	QLA_WRITE_PCI_REG		(QLA_IOC|5)
1326bafec742SSukumar Swaminathan #define	QLA_GET_DBGLEAVEL		(QLA_IOC|6)
1327bafec742SSukumar Swaminathan #define	QLA_SET_DBGLEAVEL		(QLA_IOC|7)
1328bafec742SSukumar Swaminathan #define	QLA_READ_CONTRL_REGISTERS	(QLA_IOC|8)
1329bafec742SSukumar Swaminathan 
1330bafec742SSukumar Swaminathan #define	QLA_MANUAL_READ_FLASH		(QLA_IOC|9)
1331bafec742SSukumar Swaminathan #define	QLA_MANUAL_WRITE_FLASH		(QLA_IOC|10)
1332bafec742SSukumar Swaminathan #define	QLA_SUPPORTED_DUMP_TYPES	(QLA_IOC|11)
1333bafec742SSukumar Swaminathan #define	QLA_GET_BINARY_CORE_DUMP	(QLA_IOC|12)
1334bafec742SSukumar Swaminathan #define	QLA_TRIGGER_SYS_ERROR_EVENT	(QLA_IOC|13)
1335bafec742SSukumar Swaminathan 
1336bafec742SSukumar Swaminathan #define	QLA_READ_FLASH			(QLA_IOC|15)
1337bafec742SSukumar Swaminathan #define	QLA_WRITE_FLASH			(QLA_IOC|16)
1338bafec742SSukumar Swaminathan #define	QLA_READ_VPD			(QLA_IOC|17)
1339bafec742SSukumar Swaminathan #define	QLA_GET_PROP			(QLA_IOC|18)
1340bafec742SSukumar Swaminathan #define	QLA_SHOW_REGION			(QLA_IOC|19)
1341bafec742SSukumar Swaminathan #define	QLA_LIST_ADAPTER_INFO		(QLA_IOC|20)
1342bafec742SSukumar Swaminathan #define	QLA_READ_FW_IMAGE		(QLA_IOC|21)
1343bafec742SSukumar Swaminathan #define	QLA_WRITE_FW_IMAGE_HEADERS	(QLA_IOC|22)
1344bafec742SSukumar Swaminathan 
1345bafec742SSukumar Swaminathan #define	QLA_CONTINUE_COPY_IN		(QLA_IOC|29)
1346bafec742SSukumar Swaminathan #define	QLA_CONTINUE_COPY_OUT		(QLA_IOC|30)
1347bafec742SSukumar Swaminathan #define	QLA_SOFT_RESET			(QLA_IOC|31)
1348bafec742SSukumar Swaminathan 
1349bafec742SSukumar Swaminathan #define	QLA_IOCTL_CMD_FIRST		QLA_PCI_STATUS
1350bafec742SSukumar Swaminathan #define	QLA_IOCTL_CMD_LAST		QLA_SOFT_RESET
1351bafec742SSukumar Swaminathan 
1352bafec742SSukumar Swaminathan /* Solaris IOCTL can copy in&out up to 1024 bytes each time */
1353bafec742SSukumar Swaminathan #define	IOCTL_BUFFER_SIZE		1024
1354bafec742SSukumar Swaminathan #define	IOCTL_MAX_BUF_SIZE		(IOCTL_BUFFER_SIZE*512) /* 512k */
1355bafec742SSukumar Swaminathan 
1356bafec742SSukumar Swaminathan typedef struct ioctl_header_info {
1357bafec742SSukumar Swaminathan uint8_t		version;
1358bafec742SSukumar Swaminathan uint8_t		reserved;
1359bafec742SSukumar Swaminathan uint8_t		option[2];
1360bafec742SSukumar Swaminathan uint16_t	expected_trans_times;
1361bafec742SSukumar Swaminathan uint16_t	payload_length;
1362bafec742SSukumar Swaminathan uint32_t	total_length;
1363bafec742SSukumar Swaminathan } ioctl_header_info_t;
1364bafec742SSukumar Swaminathan 
1365bafec742SSukumar Swaminathan #define	IOCTL_HEADER_LEN	sizeof (ioctl_header_info_t)
1366bafec742SSukumar Swaminathan #define	IOCTL_MAX_DATA_LEN	(IOCTL_BUFFER_SIZE - IOCTL_HEADER_LEN)
1367bafec742SSukumar Swaminathan 
1368bafec742SSukumar Swaminathan struct ql_pci_reg {
1369bafec742SSukumar Swaminathan uint16_t	addr;	/* register number [0..ff] */
1370bafec742SSukumar Swaminathan uint16_t	value;	/* data to write/data read */
1371bafec742SSukumar Swaminathan };
1372bafec742SSukumar Swaminathan 
1373bafec742SSukumar Swaminathan struct ql_device_reg {
1374bafec742SSukumar Swaminathan uint32_t	addr;	/* address to write/data read	*/
1375bafec742SSukumar Swaminathan uint32_t	value;	/* data to write/data read	*/
1376bafec742SSukumar Swaminathan };
1377bafec742SSukumar Swaminathan 
1378bafec742SSukumar Swaminathan struct ql_flash_io_info {
1379bafec742SSukumar Swaminathan uint32_t	addr;	/* register number [0..ff] */
1380bafec742SSukumar Swaminathan uint32_t	size;	/* number of data to write/data read */
1381bafec742SSukumar Swaminathan };
1382bafec742SSukumar Swaminathan 
1383bafec742SSukumar Swaminathan struct qlnic_mpi_version_info {
1384bafec742SSukumar Swaminathan uint32_t fw_version;
1385bafec742SSukumar Swaminathan uint32_t phy_version;
1386bafec742SSukumar Swaminathan };
1387bafec742SSukumar Swaminathan 
1388bafec742SSukumar Swaminathan struct qlnic_link_status_info {
1389bafec742SSukumar Swaminathan uint32_t link_status_info;
1390bafec742SSukumar Swaminathan uint32_t additional_info;
1391bafec742SSukumar Swaminathan uint32_t network_hw_info;
1392bafec742SSukumar Swaminathan uint32_t dcbx_frame_counters_info;
1393bafec742SSukumar Swaminathan uint32_t change_counters_info;
1394bafec742SSukumar Swaminathan };
1395bafec742SSukumar Swaminathan 
1396bafec742SSukumar Swaminathan struct qlnic_prop_info {
1397bafec742SSukumar Swaminathan struct qlnic_mpi_version_info	mpi_version;	/* MPI Version */
1398bafec742SSukumar Swaminathan uint32_t			fw_state;	/* MPI state */
1399bafec742SSukumar Swaminathan struct qlnic_link_status_info	link_status;	/* Link Status */
1400bafec742SSukumar Swaminathan };
1401bafec742SSukumar Swaminathan 
1402bafec742SSukumar Swaminathan typedef struct ql_adapter_info {
1403bafec742SSukumar Swaminathan uint32_t	pci_binding;	/* /bus/dev/func number per IEEE 1277 format */
1404bafec742SSukumar Swaminathan uint16_t	vendor_id;
1405bafec742SSukumar Swaminathan uint16_t	device_id;
1406bafec742SSukumar Swaminathan uint16_t	sub_vendor_id;
1407bafec742SSukumar Swaminathan uint16_t	sub_device_id;
1408bafec742SSukumar Swaminathan struct ether_addr	cur_addr;
1409bafec742SSukumar Swaminathan } ql_adapter_info_t;
1410bafec742SSukumar Swaminathan 
1411bafec742SSukumar Swaminathan #define	DUMP_DESCRIPTION_HEADER_SIGNATURE	0x42535451	/* "QTSB" */
1412bafec742SSukumar Swaminathan typedef struct ql_dump_header {
1413bafec742SSukumar Swaminathan uint32_t	signature;	/* QTSB */
1414bafec742SSukumar Swaminathan uint8_t		version;
1415bafec742SSukumar Swaminathan uint8_t		length;
1416bafec742SSukumar Swaminathan uint8_t		num_dumps;
1417bafec742SSukumar Swaminathan uint8_t		reserved;
1418bafec742SSukumar Swaminathan uint32_t	time_stamp_lo;
1419bafec742SSukumar Swaminathan uint32_t	time_stamp_hi;
1420bafec742SSukumar Swaminathan } ql_dump_header_t;
1421bafec742SSukumar Swaminathan 
1422bafec742SSukumar Swaminathan #define	DUMP_IMAGE_HEADER_SIGNATURE	0x504D4451	/* "QDMP" */
1423bafec742SSukumar Swaminathan 
1424bafec742SSukumar Swaminathan typedef struct ql_dump_image_header {
1425bafec742SSukumar Swaminathan uint32_t	signature;	/* QDMP */
1426bafec742SSukumar Swaminathan uint8_t		version;
1427bafec742SSukumar Swaminathan uint8_t		header_length;
1428bafec742SSukumar Swaminathan uint16_t	checksum;
1429bafec742SSukumar Swaminathan uint32_t	data_type;
1430bafec742SSukumar Swaminathan #define	DUMP_TYPE_CORE_DUMP	1
1431bafec742SSukumar Swaminathan #define	DUMP_TYPE_REGISTER_DUMP	2
1432bafec742SSukumar Swaminathan #define	DUMP_TYPE_DRIVER_DUMP 	3
1433bafec742SSukumar Swaminathan uint32_t	data_length;
1434bafec742SSukumar Swaminathan } ql_dump_image_header_t;
1435bafec742SSukumar Swaminathan 
1436bafec742SSukumar Swaminathan /* utility request */
1437bafec742SSukumar Swaminathan #define	DUMP_REQUEST_CORE 	BIT_1
1438bafec742SSukumar Swaminathan #define	DUMP_REQUEST_REGISTER	BIT_2
1439bafec742SSukumar Swaminathan #define	DUMP_REQUEST_DRIVER	BIT_3
1440bafec742SSukumar Swaminathan 
1441bafec742SSukumar Swaminathan #define	DUMP_REQUEST_ALL	BIT_7
1442bafec742SSukumar Swaminathan 
1443bafec742SSukumar Swaminathan #define	DUMP_DESCRIPTION_FOOTER_SIGNATURE	0x45535451	/* "QTSE" */
1444bafec742SSukumar Swaminathan typedef struct ql_dump_footer {
1445bafec742SSukumar Swaminathan uint32_t	signature;	/* QTSE */
1446bafec742SSukumar Swaminathan uint8_t		version;
1447bafec742SSukumar Swaminathan uint8_t		length;
1448bafec742SSukumar Swaminathan uint16_t	reserved;
1449bafec742SSukumar Swaminathan uint32_t	time_stamp_lo;
1450bafec742SSukumar Swaminathan uint32_t	time_stamp_hi;
1451bafec742SSukumar Swaminathan } ql_dump_footer_t;
1452bafec742SSukumar Swaminathan 
1453bafec742SSukumar Swaminathan 
1454bafec742SSukumar Swaminathan /*
1455bafec742SSukumar Swaminathan  * Solaris qlnic exit status.
1456bafec742SSukumar Swaminathan  */
1457bafec742SSukumar Swaminathan #define	QN_ERR_BASE		0x30000000
1458bafec742SSukumar Swaminathan #define	QN_ERR_OK		QN_ERR_BASE | 0 /* Success		*/
1459bafec742SSukumar Swaminathan #define	QN_ERR_NOT_SUPPORTED	QN_ERR_BASE | 1 /* Command not supported */
1460bafec742SSukumar Swaminathan #define	QN_ERR_INVALID_PARAM	QN_ERR_BASE | 2 /* Invalid parameter	*/
1461bafec742SSukumar Swaminathan #define	QN_ERR_WRONG_NO_PARAM	QN_ERR_BASE | 3 /* Wrong number of parameters */
1462bafec742SSukumar Swaminathan #define	QN_ERR_FILE_NOT_FOUND	QN_ERR_BASE | 4 /* File not found	*/
1463bafec742SSukumar Swaminathan #define	QN_ERR_FILE_READ_ERR	QN_ERR_BASE | 5 /* File read err	*/
1464bafec742SSukumar Swaminathan #define	QN_ERR_FILE_WRITE_ERR	QN_ERR_BASE | 6 /* File write err	*/
1465bafec742SSukumar Swaminathan #define	QN_ERR_NO_MEMORY	QN_ERR_BASE | 7 /* No Memory		*/
1466bafec742SSukumar Swaminathan 
1467bafec742SSukumar Swaminathan #define	FLT_REGION_FDT			0x1A
1468bafec742SSukumar Swaminathan #define	ISP_8100_FDT_ADDR		0x360000
1469bafec742SSukumar Swaminathan #define	ISP_8100_FDT_SIZE		0x80
1470bafec742SSukumar Swaminathan 
1471bafec742SSukumar Swaminathan #define	FLT_REGION_FLT			0x1C
1472bafec742SSukumar Swaminathan #define	ISP_8100_FLT_ADDR		0x361000
1473bafec742SSukumar Swaminathan #define	ISP_8100_FLT_SIZE		0x1000
1474bafec742SSukumar Swaminathan 
1475bafec742SSukumar Swaminathan #define	FLT_REGION_NIC_BOOT_CODE	0x2E
1476bafec742SSukumar Swaminathan #define	ISP_8100_NIC_BOOT_CODE_ADDR	0x0
1477bafec742SSukumar Swaminathan #define	ISP_8100_NIC_BOOT_CODE_SIZE	0x80000
1478bafec742SSukumar Swaminathan 
1479bafec742SSukumar Swaminathan #define	FLT_REGION_MPI_FW_USE		0x42
1480bafec742SSukumar Swaminathan #define	ISP_8100_MPI_FW_USE_ADDR 	0xF0000
1481bafec742SSukumar Swaminathan #define	ISP_8100_MPI_FW_USE_SIZE 	0x10000
1482bafec742SSukumar Swaminathan 
1483bafec742SSukumar Swaminathan #define	FLT_REGION_MPI_RISC_FW		0x40
1484bafec742SSukumar Swaminathan #define	ISP_8100_MPI_RISC_FW_ADDR 	0x100000
1485bafec742SSukumar Swaminathan #define	ISP_8100_MPI_RISC_FW_SIZE 	0x10000
1486bafec742SSukumar Swaminathan 
1487bafec742SSukumar Swaminathan #define	FLT_REGION_VPD0			0x2C
1488bafec742SSukumar Swaminathan #define	ISP_8100_VPD0_ADDR		0x140000
1489bafec742SSukumar Swaminathan #define	ISP_8100_VPD0_SIZE		0x200
1490bafec742SSukumar Swaminathan 
1491bafec742SSukumar Swaminathan #define	FLT_REGION_NIC_PARAM0		0x46
1492bafec742SSukumar Swaminathan #define	ISP_8100_NIC_PARAM0_ADDR	0x140200
1493bafec742SSukumar Swaminathan #define	ISP_8100_NIC_PARAM0_SIZE	0x200
1494bafec742SSukumar Swaminathan 
1495bafec742SSukumar Swaminathan #define	FLT_REGION_VPD1			0x2D
1496bafec742SSukumar Swaminathan #define	ISP_8100_VPD1_ADDR		0x140400
1497bafec742SSukumar Swaminathan #define	ISP_8100_VPD1_SIZE		0x200
1498bafec742SSukumar Swaminathan 
1499bafec742SSukumar Swaminathan #define	FLT_REGION_NIC_PARAM1		0x47
1500bafec742SSukumar Swaminathan #define	ISP_8100_NIC_PARAM1_ADDR	0x140600
1501bafec742SSukumar Swaminathan #define	ISP_8100_NIC_PARAM1_SIZE	0x200
1502bafec742SSukumar Swaminathan 
1503bafec742SSukumar Swaminathan #define	FLT_REGION_MPI_CFG		0x41
1504bafec742SSukumar Swaminathan #define	ISP_8100_MPI_CFG_ADDR		0x150000
1505bafec742SSukumar Swaminathan #define	ISP_8100_MPI_CFG_SIZE		0x10000
1506bafec742SSukumar Swaminathan 
1507bafec742SSukumar Swaminathan #define	FLT_REGION_EDC_PHY_FW		0x45
1508bafec742SSukumar Swaminathan #define	ISP_8100_EDC_PHY_FW_ADDR	0x170000
1509bafec742SSukumar Swaminathan #define	ISP_8100_EDC_PHY_FW_SIZE	0x20000
1510bafec742SSukumar Swaminathan 
1511bafec742SSukumar Swaminathan #define	FLT_REGION_FC_BOOT_CODE		0x07
1512bafec742SSukumar Swaminathan #define	ISP_8100_FC_BOOT_CODE_ADDR	0x200000
1513bafec742SSukumar Swaminathan #define	ISP_8100_FC_BOOT_CODE_SIZE	0x80000
1514bafec742SSukumar Swaminathan 
1515bafec742SSukumar Swaminathan #define	FLT_REGION_FC_FW		0x01
1516bafec742SSukumar Swaminathan #define	ISP_8100_FC_FW_ADDR		0x280000
1517bafec742SSukumar Swaminathan #define	ISP_8100_FC_FW_SIZE		0x80000
1518bafec742SSukumar Swaminathan 
1519bafec742SSukumar Swaminathan #define	FLT_REGION_FC_VPD0		0x14
1520bafec742SSukumar Swaminathan #define	ISP_8100_FC_VPD0_ADDR		0x340000
1521bafec742SSukumar Swaminathan #define	ISP_8100_FC_VPD0_SIZE		0x200
1522bafec742SSukumar Swaminathan 
1523bafec742SSukumar Swaminathan #define	FLT_REGION_FC_NVRAM0		0x15
1524bafec742SSukumar Swaminathan #define	ISP_8100_FC_NVRAM0_ADDR		0x340200
1525bafec742SSukumar Swaminathan #define	ISP_8100_FC_NVRAM0_SIZE		0x200
1526bafec742SSukumar Swaminathan 
1527bafec742SSukumar Swaminathan #define	FLT_REGION_FC_VPD1		0x16
1528bafec742SSukumar Swaminathan #define	ISP_8100_FC_VPD1_ADDR		0x340400
1529bafec742SSukumar Swaminathan #define	ISP_8100_FC_VPD1_SIZE		0x200
1530bafec742SSukumar Swaminathan 
1531bafec742SSukumar Swaminathan #define	FLT_REGION_FC_NVRAM1		0x17
1532bafec742SSukumar Swaminathan #define	ISP_8100_FC_NVRAM1_ADDR		0x340600
1533bafec742SSukumar Swaminathan #define	ISP_8100_FC_NVRAM1_SIZE		0x200
1534bafec742SSukumar Swaminathan 
1535bafec742SSukumar Swaminathan #define	FLT_REGION_FC_BOOT_CODE		0x07
1536bafec742SSukumar Swaminathan #define	ISP_8100_FC_BOOT_CODE_ADDR	0x200000
1537bafec742SSukumar Swaminathan #define	ISP_8100_FC_BOOT_CODE_SIZE	0x80000
1538bafec742SSukumar Swaminathan 
1539bafec742SSukumar Swaminathan #define	FLT_REGION_FC_FW		0x01
1540bafec742SSukumar Swaminathan #define	ISP_8100_FC_FW_ADDR		0x280000
1541bafec742SSukumar Swaminathan #define	ISP_8100_FC_FW_SIZE		0x80000
1542bafec742SSukumar Swaminathan 
1543bafec742SSukumar Swaminathan #define	FLT_REGION_TIME_STAMP		0x60
1544bafec742SSukumar Swaminathan 
1545bafec742SSukumar Swaminathan /* flash region for testing */
1546bafec742SSukumar Swaminathan #define	FLT_REGION_WIN_FW_DUMP0		0x48
1547bafec742SSukumar Swaminathan #define	ISP_8100_WIN_FW_DUMP0_ADDR	0x190000
1548bafec742SSukumar Swaminathan #define	ISP_8100_WIN_FW_DUMP0_SIZE	0x30000
1549bafec742SSukumar Swaminathan 
1550bafec742SSukumar Swaminathan #define	ISP_8100_FLASH_TEST_REGION_ADDR		ISP_8100_WIN_FW_DUMP0_ADDR
1551bafec742SSukumar Swaminathan #define	ISP_8100_FLASH_TEST_REGION_SIZE		0x10000
1552bafec742SSukumar Swaminathan 
1553bafec742SSukumar Swaminathan /* mailbox */
1554bafec742SSukumar Swaminathan #define	QL_8XXX_SFP_SIZE	256
1555bafec742SSukumar Swaminathan 
1556bafec742SSukumar Swaminathan #define	MAILBOX_TOV		30	/* Default Timeout value. */
1557bafec742SSukumar Swaminathan /*
1558bafec742SSukumar Swaminathan  * ISP mailbox commands from Host
1559bafec742SSukumar Swaminathan  */
1560bafec742SSukumar Swaminathan #define	MBC_NO_OPERATION		0	/* No Operation. */
1561bafec742SSukumar Swaminathan #define	MBC_LOAD_RAM			1	/* Load RAM. */
1562bafec742SSukumar Swaminathan #define	MBC_EXECUTE_FIRMWARE		2	/* Execute firmware. */
1563bafec742SSukumar Swaminathan #define	MBC_MAILBOX_REGISTER_TEST	6	/* Mailbox echo test */
1564bafec742SSukumar Swaminathan #define	MBC_VERIFY_CHECKSUM		7	/* Verify checksum. */
1565bafec742SSukumar Swaminathan #define	MBC_ABOUT_FIRMWARE		8	/* About Firmware. */
1566bafec742SSukumar Swaminathan #define	MBC_RISC_MEMORY_COPY		0xA	/* Copy RISC memory. */
1567bafec742SSukumar Swaminathan #define	MBC_LOAD_RISC_RAM		0xB	/* Load RISC RAM command. */
1568bafec742SSukumar Swaminathan #define	MBC_DUMP_RISC_RAM		0xC	/* Dump RISC RAM command. */
1569bafec742SSukumar Swaminathan #define	MBC_INIT_RISC_RAM		0xE
1570bafec742SSukumar Swaminathan #define	MBC_READ_RAM_WORD		0xF	/* Read RAM  */
1571bafec742SSukumar Swaminathan #define	MBC_STOP_FIRMWARE		0x14	/* Stop firmware */
1572bafec742SSukumar Swaminathan #define	MBC_GENERATE_SYS_ERROR		0x2A	/* Generate System Error */
1573bafec742SSukumar Swaminathan #define	MBC_WRITE_SFP			0x30	/* Write SFP. */
1574bafec742SSukumar Swaminathan #define	MBC_READ_SFP			0x31	/* Read SFP. */
1575bafec742SSukumar Swaminathan #define	MBC_INITIALIZE_FIRMWARE		0x60	/* Initialize firmware */
1576bafec742SSukumar Swaminathan #define	MBC_GET_INIT_CTRL_BLOCK		0x61	/* Get Initialization CBLK */
1577bafec742SSukumar Swaminathan #define	MBC_GET_FIRMWARE_STATE		0x69	/* Get firmware state. */
1578bafec742SSukumar Swaminathan #define	MBC_IDC_REQUEST			0x100	/* IDC Request. */
1579bafec742SSukumar Swaminathan #define	IDC_REQ_ALL_DEST_FUNC_MASK	BIT_4	/* Mailbox 1 */
1580bafec742SSukumar Swaminathan 
1581bafec742SSukumar Swaminathan #define	IDC_REQ_DEST_FUNC_0_MASK	BIT_0	/* Mailbox 2 */
1582bafec742SSukumar Swaminathan #define	IDC_REQ_DEST_FUNC_1_MASK	BIT_1
1583bafec742SSukumar Swaminathan #define	IDC_REQ_DEST_FUNC_2_MASK	BIT_2
1584bafec742SSukumar Swaminathan #define	IDC_REQ_DEST_FUNC_3_MASK	BIT_3
1585bafec742SSukumar Swaminathan 
1586bafec742SSukumar Swaminathan enum IDC_REQ_DEST_FUNC {
1587bafec742SSukumar Swaminathan IDC_REQ_DEST_FUNC_0,
1588bafec742SSukumar Swaminathan IDC_REQ_DEST_FUNC_1,
1589bafec742SSukumar Swaminathan IDC_REQ_DEST_FUNC_2,
1590bafec742SSukumar Swaminathan IDC_REQ_DEST_FUNC_3,
1591bafec742SSukumar Swaminathan IDC_REQ_DEST_FUNC_ALL = 0x0F
1592bafec742SSukumar Swaminathan };
1593bafec742SSukumar Swaminathan 
1594bafec742SSukumar Swaminathan #define	IDC_REQ_TIMEOUT_MASK		0x01
1595bafec742SSukumar Swaminathan 
1596bafec742SSukumar Swaminathan #define	MBC_IDC_ACK			0x101	/* IDC Acknowledge. */
1597bafec742SSukumar Swaminathan #define	MBC_IDC_TIME_EXTENDED		0x102	/* IDC Time Extended. */
1598bafec742SSukumar Swaminathan 
1599bafec742SSukumar Swaminathan #define	MBC_SET_WAKE_ON_LANE_MODE	0x110
1600bafec742SSukumar Swaminathan #define	MBC_SET_WAKE_ON_LANE_FILTER	0x111
1601bafec742SSukumar Swaminathan #define	MBC_CLEAR_WAKE_ON_LANE_FILTER	0x112
1602bafec742SSukumar Swaminathan #define	MBC_SET_WAKE_ON_LANE_MAGIC_PKT	0x113
1603bafec742SSukumar Swaminathan #define	MBC_CLEAR_WAKE_ON_LANE_MAGIC_PKT	0x114
1604bafec742SSukumar Swaminathan 
1605bafec742SSukumar Swaminathan #define	MBC_PORT_RESET			0x120
1606bafec742SSukumar Swaminathan #define	MBC_SET_PORT_CONFIG		0x122
1607bafec742SSukumar Swaminathan #define	MBC_GET_PORT_CONFIG		0x123
1608bafec742SSukumar Swaminathan #define	ENABLE_JUMBO_FRAME_SIZE_MASK	BIT_16
1609bafec742SSukumar Swaminathan #define	MBC_GET_LINK_STATUS		0x124
1610bafec742SSukumar Swaminathan 
1611bafec742SSukumar Swaminathan #define	MBC_SET_LED_CONFIG		0x125
1612bafec742SSukumar Swaminathan #define	MBC_GET_LED_CONFIG		0x126
1613bafec742SSukumar Swaminathan 
1614bafec742SSukumar Swaminathan /*
1615bafec742SSukumar Swaminathan  * ISP mailbox command complete status codes
1616bafec742SSukumar Swaminathan  */
1617bafec742SSukumar Swaminathan #define	MBS_COMMAND_COMPLETE		0x4000
1618bafec742SSukumar Swaminathan #define	MBS_INVALID_COMMAND		0x4001
1619bafec742SSukumar Swaminathan #define	MBS_HOST_INTERFACE_ERROR	0x4002
1620bafec742SSukumar Swaminathan #define	MBS_TEST_FAILED			0x4003
1621bafec742SSukumar Swaminathan #define	MBS_POST_ERROR			0x4004
1622bafec742SSukumar Swaminathan #define	MBS_COMMAND_ERROR		0x4005
1623bafec742SSukumar Swaminathan #define	MBS_COMMAND_PARAMETER_ERROR	0x4006
1624bafec742SSukumar Swaminathan #define	MBS_PORT_ID_USED		0x4007
1625bafec742SSukumar Swaminathan #define	MBS_LOOP_ID_USED		0x4008
1626bafec742SSukumar Swaminathan #define	MBS_ALL_IDS_IN_USE		0x4009
1627bafec742SSukumar Swaminathan #define	MBS_NOT_LOGGED_IN		0x400A
1628bafec742SSukumar Swaminathan #define	MBS_LOOP_DOWN			0x400B
1629bafec742SSukumar Swaminathan #define	MBS_LOOP_BACK_ERROR		0x400C
1630bafec742SSukumar Swaminathan #define	MBS_CHECKSUM_ERROR		0x4010
1631bafec742SSukumar Swaminathan 
1632bafec742SSukumar Swaminathan /* Async Event Status */
1633bafec742SSukumar Swaminathan #define	MBA_IDC_INTERMEDIATE_COMPLETE	0x1000
1634bafec742SSukumar Swaminathan #define	MBA_ASYNC_EVENT			0x8000 /* Asynchronous event. */
1635bafec742SSukumar Swaminathan #define	MBA_SYSTEM_ERR			0x8002
1636bafec742SSukumar Swaminathan #define	MBA_LINK_UP			0x8011
1637bafec742SSukumar Swaminathan enum {
1638bafec742SSukumar Swaminathan 	XFI_NETWORK_INTERFACE = 1,
1639bafec742SSukumar Swaminathan 	XAUI_NETWORK_INTERFACE,
1640bafec742SSukumar Swaminathan 	XFI_BACKPLANE_INTERFACE,
1641bafec742SSukumar Swaminathan 	XAUI_BACKPLANE_INTERFACE,
1642bafec742SSukumar Swaminathan 	EXT_10GBASE_T_PHY,
1643bafec742SSukumar Swaminathan 	EXT_EXT_EDC_PHY
1644bafec742SSukumar Swaminathan };
1645bafec742SSukumar Swaminathan #define	MBA_LINK_DOWN			0x8012
1646bafec742SSukumar Swaminathan #define	MBA_IDC_COMPLETE		0x8100
1647bafec742SSukumar Swaminathan #define	MBA_IDC_REQUEST_NOTIFICATION	0x8101
1648bafec742SSukumar Swaminathan #define	MBA_IDC_TIME_EXTENDED		0x8102
1649bafec742SSukumar Swaminathan #define	MBA_DCBX_CONFIG_CHANGE		0x8110
1650bafec742SSukumar Swaminathan #define	MBA_NOTIFICATION_LOST		0x8120
1651bafec742SSukumar Swaminathan #define	MBA_SFT_TRANSCEIVER_INSERTION	0x8130
1652bafec742SSukumar Swaminathan #define	MBA_SFT_TRANSCEIVER_REMOVAL	0x8131
1653bafec742SSukumar Swaminathan #define	MBA_FIRMWARE_INIT_COMPLETE	0x8400
1654bafec742SSukumar Swaminathan #define	MBA_FIRMWARE_INIT_FAILED	0x8401
1655bafec742SSukumar Swaminathan 
1656bafec742SSukumar Swaminathan typedef struct firmware_version_info {
1657bafec742SSukumar Swaminathan uint8_t	reserved;
1658bafec742SSukumar Swaminathan uint8_t	major_version;
1659bafec742SSukumar Swaminathan uint8_t	minor_version;
1660bafec742SSukumar Swaminathan uint8_t	sub_minor_version;
1661bafec742SSukumar Swaminathan } firmware_version_info_t;
1662bafec742SSukumar Swaminathan 
1663bafec742SSukumar Swaminathan typedef struct phy_firmware_version_info {
1664bafec742SSukumar Swaminathan uint8_t	reserved;
1665bafec742SSukumar Swaminathan uint8_t	major_version;
1666bafec742SSukumar Swaminathan uint8_t	minor_version;
1667bafec742SSukumar Swaminathan uint8_t	sub_minor_version;
1668bafec742SSukumar Swaminathan } phy_firmware_version_info_t;
1669bafec742SSukumar Swaminathan 
1670bafec742SSukumar Swaminathan #define	ENABLE_JUMBO BIT_16
1671bafec742SSukumar Swaminathan #define	STD_PAUSE 0x20
1672bafec742SSukumar Swaminathan #define	PP_PAUSE 0x40
1673*accf27a5SSukumar Swaminathan #define	DCBX_ENABLE 0x10
1674bafec742SSukumar Swaminathan #define	LOOP_INTERNAL_PARALLEL	0x02
1675bafec742SSukumar Swaminathan #define	LOOP_INTERNAL_SERIAL	0x04
1676bafec742SSukumar Swaminathan #define	LOOP_EXTERNAL_PHY	0x06
1677bafec742SSukumar Swaminathan 
1678bafec742SSukumar Swaminathan typedef struct port_cfg_info {
1679bafec742SSukumar Swaminathan uint32_t link_cfg;
1680bafec742SSukumar Swaminathan uint32_t max_frame_size;
1681bafec742SSukumar Swaminathan } port_cfg_info_t;
1682bafec742SSukumar Swaminathan 
1683bafec742SSukumar Swaminathan enum {
1684bafec742SSukumar Swaminathan 	PAUSE_MODE_DISABLED,
1685bafec742SSukumar Swaminathan 	PAUSE_MODE_STANDARD,	/* Standard Ethernet Pause */
1686bafec742SSukumar Swaminathan 	PAUSE_MODE_PER_PRIORITY	/* Class Based Pause */
1687bafec742SSukumar Swaminathan };
1688bafec742SSukumar Swaminathan 
1689bafec742SSukumar Swaminathan /* Mailbox command parameter structure definition. */
1690bafec742SSukumar Swaminathan typedef struct mbx_cmd {
1691bafec742SSukumar Swaminathan uint32_t from_mpi;	/* number of Incomming from MPI to driver */
1692bafec742SSukumar Swaminathan uint32_t mb[NUM_MAILBOX_REGS];
1693bafec742SSukumar Swaminathan clock_t  timeout;	/* Timeout in seconds. */
1694bafec742SSukumar Swaminathan } mbx_cmd_t;
1695bafec742SSukumar Swaminathan 
1696bafec742SSukumar Swaminathan /* Returned Mailbox registers. */
1697bafec742SSukumar Swaminathan typedef struct mbx_data {
1698bafec742SSukumar Swaminathan uint32_t from_mpi;	/* number of Incomming from MPI to driver */
1699bafec742SSukumar Swaminathan uint32_t mb[NUM_MAILBOX_REGS];
1700bafec742SSukumar Swaminathan } mbx_data_t;
1701bafec742SSukumar Swaminathan 
1702bafec742SSukumar Swaminathan /* Address/Length pairs for the coredump. */
1703bafec742SSukumar Swaminathan 
1704bafec742SSukumar Swaminathan #define	MPI_CORE_REGS_ADDR	0x00030000
1705bafec742SSukumar Swaminathan #define	MPI_CORE_REGS_CNT	127
1706bafec742SSukumar Swaminathan #define	MPI_CORE_SH_REGS_CNT	16
1707bafec742SSukumar Swaminathan #define	TEST_REGS_ADDR		0x00001000
1708bafec742SSukumar Swaminathan #define	TEST_REGS_CNT		23
1709bafec742SSukumar Swaminathan #define	RMII_REGS_ADDR		0x00001040
1710bafec742SSukumar Swaminathan #define	RMII_REGS_CNT		64
1711bafec742SSukumar Swaminathan #define	FCMAC1_REGS_ADDR	0x00001080
1712bafec742SSukumar Swaminathan #define	FCMAC2_REGS_ADDR	0x000010c0
1713bafec742SSukumar Swaminathan #define	FCMAC_REGS_CNT		64
1714bafec742SSukumar Swaminathan #define	FC1_MBX_REGS_ADDR	0x00001100
1715bafec742SSukumar Swaminathan #define	FC2_MBX_REGS_ADDR	0x00001240
1716bafec742SSukumar Swaminathan #define	FC_MBX_REGS_CNT		64
1717bafec742SSukumar Swaminathan #define	IDE_REGS_ADDR		0x00001140
1718bafec742SSukumar Swaminathan #define	IDE_REGS_CNT		64
1719bafec742SSukumar Swaminathan #define	NIC1_MBX_REGS_ADDR	0x00001180
1720bafec742SSukumar Swaminathan #define	NIC2_MBX_REGS_ADDR	0x00001280
1721bafec742SSukumar Swaminathan #define	NIC_MBX_REGS_CNT	64
1722bafec742SSukumar Swaminathan #define	SMBUS_REGS_ADDR		0x00001200
1723bafec742SSukumar Swaminathan #define	SMBUS_REGS_CNT		64
1724bafec742SSukumar Swaminathan #define	I2C_REGS_ADDR		0x00001fc0
1725bafec742SSukumar Swaminathan #define	I2C_REGS_CNT		64
1726bafec742SSukumar Swaminathan #define	MEMC_REGS_ADDR		0x00003000
1727bafec742SSukumar Swaminathan #define	MEMC_REGS_CNT		256
1728bafec742SSukumar Swaminathan #define	PBUS_REGS_ADDR		0x00007c00
1729bafec742SSukumar Swaminathan #define	PBUS_REGS_CNT		256
1730bafec742SSukumar Swaminathan #define	MDE_REGS_ADDR		0x00010000
1731bafec742SSukumar Swaminathan #define	MDE_REGS_CNT		6
1732bafec742SSukumar Swaminathan #define	CODE_RAM_ADDR		0x00020000
1733bafec742SSukumar Swaminathan #define	CODE_RAM_CNT		0x2000
1734bafec742SSukumar Swaminathan #define	MEMC_RAM_ADDR		0x00100000
1735bafec742SSukumar Swaminathan #define	MEMC_RAM_CNT		0x2000
1736bafec742SSukumar Swaminathan 
1737bafec742SSukumar Swaminathan /* 64 probes, 8 bytes per probe + 4 bytes to list the probe ID */
1738bafec742SSukumar Swaminathan #define	PROBE_DATA_LENGTH_WORDS		((64 * 2) + 1)
1739bafec742SSukumar Swaminathan #define	NUMBER_OF_PROBES		34
1740bafec742SSukumar Swaminathan #define	NUMBER_ROUTING_REG_ENTRIES	48
1741bafec742SSukumar Swaminathan #define	WORDS_PER_ROUTING_REG_ENTRY	4
1742bafec742SSukumar Swaminathan #define	MAC_PROTOCOL_REGISTER_WORDS	((512 * 3) + (32 * 2) + (4096 * 1) + \
1743bafec742SSukumar Swaminathan 					    (4096 * 1) + (4 * 2) + (8 * 2) + \
1744bafec742SSukumar Swaminathan 					    (16 * 1) + (4 * 1) + (4 * 4) + \
1745bafec742SSukumar Swaminathan 					    (4 * 1))
1746bafec742SSukumar Swaminathan /* Save both the address and data register */
1747bafec742SSukumar Swaminathan #define	WORDS_PER_MAC_PROT_ENTRY	2
1748bafec742SSukumar Swaminathan 
1749bafec742SSukumar Swaminathan #define	MPI_COREDUMP_COOKIE 0x5555aaaa
1750bafec742SSukumar Swaminathan typedef struct mpi_coredump_global_header {
1751bafec742SSukumar Swaminathan uint32_t	cookie;
1752bafec742SSukumar Swaminathan char		id_string[16];
1753bafec742SSukumar Swaminathan uint32_t	time_lo;
1754bafec742SSukumar Swaminathan uint32_t	time_hi;
1755bafec742SSukumar Swaminathan uint32_t	total_image_size;
1756bafec742SSukumar Swaminathan uint32_t	global_header_size;
1757bafec742SSukumar Swaminathan char		driver_info[0xE0];
1758bafec742SSukumar Swaminathan }mpi_coredump_global_header_t;
1759bafec742SSukumar Swaminathan 
1760bafec742SSukumar Swaminathan typedef struct mpi_coredump_segment_header {
1761bafec742SSukumar Swaminathan uint32_t	cookie;
1762bafec742SSukumar Swaminathan uint32_t	seg_number;
1763bafec742SSukumar Swaminathan uint32_t	seg_size;
1764bafec742SSukumar Swaminathan uint32_t	extra;
1765bafec742SSukumar Swaminathan char		description[16];
1766bafec742SSukumar Swaminathan }mpi_coredump_segment_header_t;
1767bafec742SSukumar Swaminathan 
1768bafec742SSukumar Swaminathan typedef struct	ql_mpi_coredump {
1769bafec742SSukumar Swaminathan mpi_coredump_global_header_t mpi_global_header;
1770bafec742SSukumar Swaminathan 
1771bafec742SSukumar Swaminathan mpi_coredump_segment_header_t core_regs_seg_hdr;
1772bafec742SSukumar Swaminathan uint32_t	mpi_core_regs[MPI_CORE_REGS_CNT];
1773bafec742SSukumar Swaminathan uint32_t	mpi_core_sh_regs[MPI_CORE_SH_REGS_CNT];
1774bafec742SSukumar Swaminathan 
1775bafec742SSukumar Swaminathan mpi_coredump_segment_header_t test_logic_regs_seg_hdr;
1776bafec742SSukumar Swaminathan uint32_t	test_logic_regs[TEST_REGS_CNT];
1777bafec742SSukumar Swaminathan 
1778bafec742SSukumar Swaminathan mpi_coredump_segment_header_t rmii_regs_seg_hdr;
1779bafec742SSukumar Swaminathan uint32_t	rmii_regs[RMII_REGS_CNT];
1780bafec742SSukumar Swaminathan 
1781bafec742SSukumar Swaminathan mpi_coredump_segment_header_t fcmac1_regs_seg_hdr;
1782bafec742SSukumar Swaminathan uint32_t	fcmac1_regs[FCMAC_REGS_CNT];
1783bafec742SSukumar Swaminathan 
1784bafec742SSukumar Swaminathan mpi_coredump_segment_header_t fcmac2_regs_seg_hdr;
1785bafec742SSukumar Swaminathan uint32_t	fcmac2_regs[FCMAC_REGS_CNT];
1786bafec742SSukumar Swaminathan 
1787bafec742SSukumar Swaminathan mpi_coredump_segment_header_t fc1_mbx_regs_seg_hdr;
1788bafec742SSukumar Swaminathan uint32_t	fc1_mbx_regs[FC_MBX_REGS_CNT];
1789bafec742SSukumar Swaminathan 
1790bafec742SSukumar Swaminathan mpi_coredump_segment_header_t ide_regs_seg_hdr;
1791bafec742SSukumar Swaminathan uint32_t	ide_regs[IDE_REGS_CNT];
1792bafec742SSukumar Swaminathan 
1793bafec742SSukumar Swaminathan mpi_coredump_segment_header_t nic1_mbx_regs_seg_hdr;
1794bafec742SSukumar Swaminathan uint32_t	nic1_mbx_regs[NIC_MBX_REGS_CNT];
1795bafec742SSukumar Swaminathan 
1796bafec742SSukumar Swaminathan mpi_coredump_segment_header_t smbus_regs_seg_hdr;
1797bafec742SSukumar Swaminathan uint32_t	smbus_regs[SMBUS_REGS_CNT];
1798bafec742SSukumar Swaminathan 
1799bafec742SSukumar Swaminathan mpi_coredump_segment_header_t fc2_mbx_regs_seg_hdr;
1800bafec742SSukumar Swaminathan uint32_t	fc2_mbx_regs[FC_MBX_REGS_CNT];
1801bafec742SSukumar Swaminathan 
1802bafec742SSukumar Swaminathan mpi_coredump_segment_header_t nic2_mbx_regs_seg_hdr;
1803bafec742SSukumar Swaminathan uint32_t	nic2_mbx_regs[NIC_MBX_REGS_CNT];
1804bafec742SSukumar Swaminathan 
1805bafec742SSukumar Swaminathan mpi_coredump_segment_header_t i2c_regs_seg_hdr;
1806bafec742SSukumar Swaminathan uint32_t	i2c_regs[I2C_REGS_CNT];
1807bafec742SSukumar Swaminathan 
1808bafec742SSukumar Swaminathan mpi_coredump_segment_header_t memc_regs_seg_hdr;
1809bafec742SSukumar Swaminathan uint32_t	memc_regs[MEMC_REGS_CNT];
1810bafec742SSukumar Swaminathan 
1811bafec742SSukumar Swaminathan mpi_coredump_segment_header_t pbus_regs_seg_hdr;
1812bafec742SSukumar Swaminathan uint32_t	pbus_regs[PBUS_REGS_CNT];
1813bafec742SSukumar Swaminathan 
1814bafec742SSukumar Swaminathan mpi_coredump_segment_header_t mde_regs_seg_hdr;
1815bafec742SSukumar Swaminathan uint32_t	mde_regs[MDE_REGS_CNT];
1816bafec742SSukumar Swaminathan 
1817bafec742SSukumar Swaminathan mpi_coredump_segment_header_t xaui_an_hdr;
1818bafec742SSukumar Swaminathan uint32_t	serdes_xaui_an[14];
1819bafec742SSukumar Swaminathan 
1820bafec742SSukumar Swaminathan mpi_coredump_segment_header_t xaui_hss_pcs_hdr;
1821bafec742SSukumar Swaminathan uint32_t	serdes_xaui_hss_pcs[33];
1822bafec742SSukumar Swaminathan 
1823bafec742SSukumar Swaminathan mpi_coredump_segment_header_t xfi_an_hdr;
1824bafec742SSukumar Swaminathan uint32_t	serdes_xfi_an[14];
1825bafec742SSukumar Swaminathan 
1826bafec742SSukumar Swaminathan mpi_coredump_segment_header_t xfi_train_hdr;
1827bafec742SSukumar Swaminathan uint32_t	serdes_xfi_train[12];
1828bafec742SSukumar Swaminathan 
1829bafec742SSukumar Swaminathan mpi_coredump_segment_header_t xfi_hss_pcs_hdr;
1830bafec742SSukumar Swaminathan uint32_t	serdes_xfi_hss_pcs[15];
1831bafec742SSukumar Swaminathan 
1832bafec742SSukumar Swaminathan mpi_coredump_segment_header_t xfi_hss_tx_hdr;
1833bafec742SSukumar Swaminathan uint32_t	serdes_xfi_hss_tx[32];
1834bafec742SSukumar Swaminathan 
1835bafec742SSukumar Swaminathan mpi_coredump_segment_header_t xfi_hss_rx_hdr;
1836bafec742SSukumar Swaminathan uint32_t	serdes_xfi_hss_rx[32];
1837bafec742SSukumar Swaminathan 
1838bafec742SSukumar Swaminathan mpi_coredump_segment_header_t xfi_hss_pll_hdr;
1839bafec742SSukumar Swaminathan uint32_t	serdes_xfi_hss_pll[32];
1840bafec742SSukumar Swaminathan 
1841bafec742SSukumar Swaminathan mpi_coredump_segment_header_t nic_regs_seg_hdr;
1842bafec742SSukumar Swaminathan uint32_t	nic_regs[64];
1843bafec742SSukumar Swaminathan 
1844bafec742SSukumar Swaminathan /* one interrupt state for each CQ */
1845bafec742SSukumar Swaminathan mpi_coredump_segment_header_t intr_states_seg_hdr;
1846bafec742SSukumar Swaminathan uint32_t	intr_states[MAX_RX_RINGS];
1847bafec742SSukumar Swaminathan 
1848bafec742SSukumar Swaminathan mpi_coredump_segment_header_t xgmac_seg_hdr;
1849bafec742SSukumar Swaminathan #define	XGMAC_REGISTER_END 0x740
1850bafec742SSukumar Swaminathan uint32_t xgmac[XGMAC_REGISTER_END];
1851bafec742SSukumar Swaminathan 
1852bafec742SSukumar Swaminathan mpi_coredump_segment_header_t probe_dump_seg_hdr;
1853bafec742SSukumar Swaminathan uint32_t probe_dump[PROBE_DATA_LENGTH_WORDS * NUMBER_OF_PROBES];
1854bafec742SSukumar Swaminathan 
1855bafec742SSukumar Swaminathan mpi_coredump_segment_header_t routing_reg_seg_hdr;
1856bafec742SSukumar Swaminathan uint32_t routing_regs[NUMBER_ROUTING_REG_ENTRIES * WORDS_PER_ROUTING_REG_ENTRY];
1857bafec742SSukumar Swaminathan 
1858bafec742SSukumar Swaminathan mpi_coredump_segment_header_t mac_prot_reg_seg_hdr;
1859bafec742SSukumar Swaminathan uint32_t mac_prot_regs[MAC_PROTOCOL_REGISTER_WORDS * WORDS_PER_MAC_PROT_ENTRY];
1860bafec742SSukumar Swaminathan 
1861bafec742SSukumar Swaminathan 
1862bafec742SSukumar Swaminathan mpi_coredump_segment_header_t ets_seg_hdr;
1863bafec742SSukumar Swaminathan uint32_t	ets[8+2];
1864bafec742SSukumar Swaminathan 
1865bafec742SSukumar Swaminathan mpi_coredump_segment_header_t code_ram_seg_hdr;
1866bafec742SSukumar Swaminathan uint32_t	code_ram[CODE_RAM_CNT];
1867bafec742SSukumar Swaminathan 
1868bafec742SSukumar Swaminathan mpi_coredump_segment_header_t memc_ram_seg_hdr;
1869bafec742SSukumar Swaminathan uint32_t	memc_ram[MEMC_RAM_CNT];
1870bafec742SSukumar Swaminathan 
1871bafec742SSukumar Swaminathan } ql_mpi_coredump_t;
1872bafec742SSukumar Swaminathan 
1873bafec742SSukumar Swaminathan #define	WCS_MPI_CODE_RAM_LENGTH		(0x2000*4)
1874bafec742SSukumar Swaminathan #define	MEMC_MPI_RAM_LENGTH		(0x2000*4)
1875bafec742SSukumar Swaminathan 
1876bafec742SSukumar Swaminathan #define	XG_SERDES_ADDR_RDY	BIT_31
1877bafec742SSukumar Swaminathan #define	XG_SERDES_ADDR_R	BIT_30
1878bafec742SSukumar Swaminathan 
1879bafec742SSukumar Swaminathan #define	CORE_SEG_NUM		1
1880bafec742SSukumar Swaminathan #define	TEST_LOGIC_SEG_NUM	2
1881bafec742SSukumar Swaminathan #define	RMII_SEG_NUM		3
1882bafec742SSukumar Swaminathan #define	FCMAC1_SEG_NUM		4
1883bafec742SSukumar Swaminathan #define	FCMAC2_SEG_NUM		5
1884bafec742SSukumar Swaminathan #define	FC1_MBOX_SEG_NUM	6
1885bafec742SSukumar Swaminathan #define	IDE_SEG_NUM		7
1886bafec742SSukumar Swaminathan #define	NIC1_MBOX_SEG_NUM	8
1887bafec742SSukumar Swaminathan #define	SMBUS_SEG_NUM		9
1888bafec742SSukumar Swaminathan #define	FC2_MBOX_SEG_NUM	10
1889bafec742SSukumar Swaminathan #define	NIC2_MBOX_SEG_NUM	11
1890bafec742SSukumar Swaminathan #define	I2C_SEG_NUM		12
1891bafec742SSukumar Swaminathan #define	MEMC_SEG_NUM		13
1892bafec742SSukumar Swaminathan #define	PBUS_SEG_NUM		14
1893bafec742SSukumar Swaminathan #define	MDE_SEG_NUM		15
1894bafec742SSukumar Swaminathan #define	NIC1_CONTROL_SEG_NUM	16
1895bafec742SSukumar Swaminathan #define	NIC2_CONTROL_SEG_NUM	17
1896bafec742SSukumar Swaminathan #define	NIC1_XGMAC_SEG_NUM	18
1897bafec742SSukumar Swaminathan #define	NIC2_XGMAC_SEG_NUM	19
1898bafec742SSukumar Swaminathan #define	WCS_RAM_SEG_NUM		20
1899bafec742SSukumar Swaminathan #define	MEMC_RAM_SEG_NUM	21
1900bafec742SSukumar Swaminathan #define	XAUI_AN_SEG_NUM		22
1901bafec742SSukumar Swaminathan #define	XAUI_HSS_PCS_SEG_NUM	23
1902bafec742SSukumar Swaminathan #define	XFI_AN_SEG_NUM		24
1903bafec742SSukumar Swaminathan #define	XFI_TRAIN_SEG_NUM	25
1904bafec742SSukumar Swaminathan #define	XFI_HSS_PCS_SEG_NUM	26
1905bafec742SSukumar Swaminathan #define	XFI_HSS_TX_SEG_NUM	27
1906bafec742SSukumar Swaminathan #define	XFI_HSS_RX_SEG_NUM	28
1907bafec742SSukumar Swaminathan #define	XFI_HSS_PLL_SEG_NUM	29
1908bafec742SSukumar Swaminathan #define	INTR_STATES_SEG_NUM	31
1909bafec742SSukumar Swaminathan #define	ETS_SEG_NUM		34
1910bafec742SSukumar Swaminathan #define	PROBE_DUMP_SEG_NUM	35
1911bafec742SSukumar Swaminathan #define	ROUTING_INDEX_SEG_NUM	36
1912bafec742SSukumar Swaminathan #define	MAC_PROTOCOL_SEG_NUM	37
1913bafec742SSukumar Swaminathan 
1914bafec742SSukumar Swaminathan /* Force byte packing for the following structures */
1915bafec742SSukumar Swaminathan #pragma pack(1)
1916bafec742SSukumar Swaminathan 
1917bafec742SSukumar Swaminathan /*
1918bafec742SSukumar Swaminathan  * Work Queue (Request Queue) Initialization Control Block (WQICB)
1919bafec742SSukumar Swaminathan  */
1920bafec742SSukumar Swaminathan 
1921bafec742SSukumar Swaminathan struct wqicb_t {
1922bafec742SSukumar Swaminathan 	uint16_t len;
1923bafec742SSukumar Swaminathan #define	Q_LEN_V		(1 << 4)
1924bafec742SSukumar Swaminathan #define	Q_LEN_CPP_CONT	0x0000
1925bafec742SSukumar Swaminathan #define	Q_LEN_CPP_16	0x0001
1926bafec742SSukumar Swaminathan #define	Q_LEN_CPP_32	0x0002
1927bafec742SSukumar Swaminathan #define	Q_LEN_CPP_64	0x0003
1928bafec742SSukumar Swaminathan #define	Q_LEN_CPP_512	0x0006
1929bafec742SSukumar Swaminathan 	uint16_t flags;
1930bafec742SSukumar Swaminathan #define	Q_PRI_SHIFT	1
1931bafec742SSukumar Swaminathan #define	Q_FLAGS_LC	0x1000
1932bafec742SSukumar Swaminathan #define	Q_FLAGS_LB	0x2000
1933bafec742SSukumar Swaminathan #define	Q_FLAGS_LI	0x4000
1934bafec742SSukumar Swaminathan #define	Q_FLAGS_LO	0x8000
1935bafec742SSukumar Swaminathan 	uint16_t cq_id_rss;
1936bafec742SSukumar Swaminathan #define	Q_CQ_ID_RSS_RV 0x8000
1937bafec742SSukumar Swaminathan 	uint16_t rid;
1938bafec742SSukumar Swaminathan 	uint32_t wq_addr_lo;
1939bafec742SSukumar Swaminathan 	uint32_t wq_addr_hi;
1940bafec742SSukumar Swaminathan 	uint32_t cnsmr_idx_addr_lo;
1941bafec742SSukumar Swaminathan 	uint32_t cnsmr_idx_addr_hi;
1942bafec742SSukumar Swaminathan };
1943bafec742SSukumar Swaminathan 
1944bafec742SSukumar Swaminathan /*
1945bafec742SSukumar Swaminathan  * Completion Queue (Response Queue) Initialization Control Block (CQICB)
1946bafec742SSukumar Swaminathan  */
1947bafec742SSukumar Swaminathan 
1948bafec742SSukumar Swaminathan struct cqicb_t {
1949bafec742SSukumar Swaminathan 	uint8_t	msix_vect;
1950bafec742SSukumar Swaminathan 	uint8_t	reserved1;
1951bafec742SSukumar Swaminathan 	uint8_t	reserved2;
1952bafec742SSukumar Swaminathan 	uint8_t	flags;
1953bafec742SSukumar Swaminathan #define	FLAGS_LV	0x08
1954bafec742SSukumar Swaminathan #define	FLAGS_LS	0x10
1955bafec742SSukumar Swaminathan #define	FLAGS_LL	0x20
1956bafec742SSukumar Swaminathan #define	FLAGS_LI	0x40
1957bafec742SSukumar Swaminathan #define	FLAGS_LC	0x80
1958bafec742SSukumar Swaminathan 	uint16_t	len;
1959bafec742SSukumar Swaminathan #define	LEN_V		(1 << 4)
1960bafec742SSukumar Swaminathan #define	LEN_CPP_CONT	0x0000
1961bafec742SSukumar Swaminathan #define	LEN_CPP_32	0x0001
1962bafec742SSukumar Swaminathan #define	LEN_CPP_64	0x0002
1963bafec742SSukumar Swaminathan #define	LEN_CPP_128	0x0003
1964bafec742SSukumar Swaminathan 	uint16_t	rid;
1965bafec742SSukumar Swaminathan 	uint32_t	cq_base_addr_lo; /* completion queue base address */
1966bafec742SSukumar Swaminathan 	uint32_t	cq_base_addr_hi;
1967bafec742SSukumar Swaminathan 	uint32_t	prod_idx_addr_lo; /* completion queue host copy */
1968bafec742SSukumar Swaminathan 					/* producer index host shadow  */
1969bafec742SSukumar Swaminathan 	uint32_t	prod_idx_addr_hi;
1970bafec742SSukumar Swaminathan 	uint16_t	pkt_delay;
1971bafec742SSukumar Swaminathan 	uint16_t	irq_delay;
1972bafec742SSukumar Swaminathan 	uint32_t	lbq_addr_lo;
1973bafec742SSukumar Swaminathan 	uint32_t	lbq_addr_hi;
1974bafec742SSukumar Swaminathan 	uint16_t	lbq_buf_size;
1975bafec742SSukumar Swaminathan 	uint16_t	lbq_len;	/* entry count */
1976bafec742SSukumar Swaminathan 	uint32_t	sbq_addr_lo;
1977bafec742SSukumar Swaminathan 	uint32_t	sbq_addr_hi;
1978bafec742SSukumar Swaminathan 	uint16_t	sbq_buf_size;
1979bafec742SSukumar Swaminathan 	uint16_t	sbq_len;	/* entry count */
1980bafec742SSukumar Swaminathan };
1981bafec742SSukumar Swaminathan 
1982bafec742SSukumar Swaminathan struct ricb {
1983bafec742SSukumar Swaminathan 	uint8_t		base_cq;
1984bafec742SSukumar Swaminathan #define	RSS_L4K	0x80
1985bafec742SSukumar Swaminathan 	uint8_t		flags;
1986bafec742SSukumar Swaminathan #define	RSS_L6K	0x01
1987bafec742SSukumar Swaminathan #define	RSS_LI	0x02
1988bafec742SSukumar Swaminathan #define	RSS_LB	0x04
1989bafec742SSukumar Swaminathan #define	RSS_LM	0x08
1990bafec742SSukumar Swaminathan #define	RSS_RI4	0x10
1991bafec742SSukumar Swaminathan #define	RSS_RT4	0x20
1992bafec742SSukumar Swaminathan #define	RSS_RI6	0x40
1993bafec742SSukumar Swaminathan #define	RSS_RT6	0x80
1994bafec742SSukumar Swaminathan 	uint16_t	mask;
1995bafec742SSukumar Swaminathan #define	RSS_HASH_CQ_ID_MAX	1024
1996bafec742SSukumar Swaminathan 	uint8_t		hash_cq_id[RSS_HASH_CQ_ID_MAX];
1997bafec742SSukumar Swaminathan 	uint32_t	ipv6_hash_key[10];
1998bafec742SSukumar Swaminathan 	uint32_t	ipv4_hash_key[4];
1999bafec742SSukumar Swaminathan };
2000bafec742SSukumar Swaminathan 
2001bafec742SSukumar Swaminathan /*
2002bafec742SSukumar Swaminathan  * Host Command IOCB Formats
2003bafec742SSukumar Swaminathan  */
2004bafec742SSukumar Swaminathan 
2005bafec742SSukumar Swaminathan #define	OPCODE_OB_MAC_IOCB		0x01
2006bafec742SSukumar Swaminathan #define	OPCODE_OB_MAC_OFFLOAD_IOCB 	0x02
2007bafec742SSukumar Swaminathan 
2008bafec742SSukumar Swaminathan #define	OPCODE_IB_MAC_IOCB		0x20
2009bafec742SSukumar Swaminathan #define	OPCODE_IB_SYS_EVENT_IOCB	0x3f
2010bafec742SSukumar Swaminathan 
2011bafec742SSukumar Swaminathan /*
2012bafec742SSukumar Swaminathan  * The following constants define control bits for buffer
2013bafec742SSukumar Swaminathan  * length fields for all IOCB's.
2014bafec742SSukumar Swaminathan  */
2015bafec742SSukumar Swaminathan #define	OAL_LAST_ENTRY	0x80000000	/* Last valid buffer in list. */
2016bafec742SSukumar Swaminathan #define	OAL_CONT_ENTRY	0x40000000	/* points to an OAL. (continuation) */
2017bafec742SSukumar Swaminathan 
2018bafec742SSukumar Swaminathan struct oal_entry {
2019bafec742SSukumar Swaminathan uint32_t buf_addr_low;
2020bafec742SSukumar Swaminathan uint32_t buf_addr_high;
2021bafec742SSukumar Swaminathan uint32_t buf_len;
2022bafec742SSukumar Swaminathan };
2023bafec742SSukumar Swaminathan 
2024bafec742SSukumar Swaminathan /* 32 words, 128 bytes */
2025bafec742SSukumar Swaminathan #define	TX_DESC_PER_IOCB	8	/* Number of descs in one TX IOCB */
2026bafec742SSukumar Swaminathan 
2027bafec742SSukumar Swaminathan struct ob_mac_iocb_req {
2028bafec742SSukumar Swaminathan 	uint8_t opcode;
2029bafec742SSukumar Swaminathan 	uint8_t flag0;
2030bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_IPv6	0x80
2031bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_IPv4	0x40
2032bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_D	0x08	/* disable generation of comp. msg */
2033bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_I	0x02	/* disable generation of intr at comp */
2034bafec742SSukumar Swaminathan 	uint8_t flag1;
2035bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_TC	0x80	/* enable TCP checksum offload */
2036bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_UC	0x40	/* enable UDP checksum offload */
2037bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_LSO	0x20	/* enable LSO offload */
2038bafec742SSukumar Swaminathan 	uint8_t flag2;
2039bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_VLAN_OFFSET_MASK	0xF8 /* VLAN TCI insert */
2040bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_V	0x04	/* insert VLAN TCI */
2041bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_DFP	0x02	/* Drop for Failover port */
2042bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_REQ_IC	0x01	/* enable IP checksum offload */
2043bafec742SSukumar Swaminathan 	uint32_t unused;
2044bafec742SSukumar Swaminathan 	uint32_t reserved_cq_tag;
2045bafec742SSukumar Swaminathan 	uint32_t frame_len;		/* max 9000,for none LSO, 16M for LSO */
2046bafec742SSukumar Swaminathan 	uint32_t tid;
2047bafec742SSukumar Swaminathan 	uint32_t txq_idx;
2048bafec742SSukumar Swaminathan 	uint16_t protocol_hdr_len;
2049bafec742SSukumar Swaminathan 	uint16_t hdr_off;		/* tcp/udp hdr offset */
2050bafec742SSukumar Swaminathan 	uint16_t vlan_tci;
2051bafec742SSukumar Swaminathan 	uint16_t mss;
2052bafec742SSukumar Swaminathan 
2053bafec742SSukumar Swaminathan 	struct oal_entry oal_entry[TX_DESC_PER_IOCB]; /* max FFFFF 1M bytes */
2054bafec742SSukumar Swaminathan 
2055bafec742SSukumar Swaminathan };
2056bafec742SSukumar Swaminathan /* 16 words, 64 bytes */
2057bafec742SSukumar Swaminathan struct ob_mac_iocb_rsp {
2058bafec742SSukumar Swaminathan 	uint8_t opcode;
2059bafec742SSukumar Swaminathan 	uint8_t flags1;
2060bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_RSP_OI	0x01	/* */
2061bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_RSP_I	0x02	/* */
2062bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_RSP_E	0x08	/* */
2063bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_RSP_S	0x10	/* too Short */
2064bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_RSP_L	0x20	/* too Large */
2065bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_RSP_P	0x40	/* Padded */
2066bafec742SSukumar Swaminathan 
2067bafec742SSukumar Swaminathan 	uint8_t flags2;
2068bafec742SSukumar Swaminathan 	uint8_t flags3;
2069bafec742SSukumar Swaminathan 
2070bafec742SSukumar Swaminathan #define	OB_MAC_IOCB_RSP_B	0x80
2071bafec742SSukumar Swaminathan 
2072bafec742SSukumar Swaminathan 	uint32_t tid;
2073bafec742SSukumar Swaminathan 	uint32_t txq_idx;
2074bafec742SSukumar Swaminathan 
2075bafec742SSukumar Swaminathan 	uint32_t reserved[13];
2076bafec742SSukumar Swaminathan };
2077bafec742SSukumar Swaminathan 
2078bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_VLAN_MASK	0x0ffff
2079bafec742SSukumar Swaminathan 
2080bafec742SSukumar Swaminathan struct ib_mac_iocb_rsp {
2081bafec742SSukumar Swaminathan 	uint8_t	opcode;		/* 0x20 */
2082bafec742SSukumar Swaminathan 	uint8_t	flags1;
2083bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_OI	0x01	/* Overide intr delay */
2084bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_I	0x02	/* Disble Intr Generation */
2085bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_TE	0x04	/* Checksum error */
2086bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_NU	0x08	/* No checksum rcvd */
2087bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_IE	0x10	/* IPv4 checksum error */
2088bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_M_MASK	0x60	/* Multicast info */
2089bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_M_NONE	0x00	/* Not mcast frame */
2090bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_M_HASH	0x20	/* HASH mcast frame */
2091bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_M_REG 	0x40	/* Registered mcast frame */
2092bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_M_PROM 	0x60	/* Promiscuous mcast frame */
2093bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_B	0x80	/* Broadcast frame */
2094bafec742SSukumar Swaminathan 	uint8_t	flags2;
2095bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_P	0x01	/* Promiscuous frame */
2096bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_V	0x02	/* Vlan tag present */
2097bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_ERR_MASK	0x1c	/*  */
2098bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_ERR_CODE_ERR	0x04
2099bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_ERR_OVERSIZE	0x08
2100bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_ERR_UNDERSIZE	0x10
2101bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_ERR_PREAMBLE	0x14
2102bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_ERR_FRAME_LEN	0x18
2103bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_ERR_CRC		0x1c
2104bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_U	0x20	/* UDP packet */
2105bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_T	0x40	/* TCP packet */
2106bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_FO	0x80	/* Failover port */
2107bafec742SSukumar Swaminathan 	uint8_t	flags3;
2108bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_RSS_MASK	0x07	/* RSS mask */
2109bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_M_NONE	0x00	/* No RSS match */
2110bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_M_IPV4	0x04	/* IPv4 RSS match */
2111bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_M_IPV6	0x02	/* IPv6 RSS match */
2112bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_M_TCP_V4 	0x05	/* TCP with IPv4 */
2113bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_M_TCP_V6 	0x03	/* TCP with IPv6 */
2114bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_V4	0x08	/* IPV4 */
2115bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_V6	0x10	/* IPV6 */
2116bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_IH	0x20	/* Split after IP header */
2117bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_DS	0x40	/* data is in small buffer */
2118bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_DL	0x80	/* data is in large buffer */
2119bafec742SSukumar Swaminathan 	uint32_t	data_len;
2120bafec742SSukumar Swaminathan 	uint64_t	data_addr;
2121bafec742SSukumar Swaminathan 	uint32_t	rss;
2122bafec742SSukumar Swaminathan 	uint16_t	vlan_id;	/* 12 bits */
2123bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_VLAN_ID_MASK	0xFFF
2124bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_C		0x1000	/* VLAN CFI bit */
2125bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_COS_SHIFT	12	/* class of service value */
2126bafec742SSukumar Swaminathan 
2127bafec742SSukumar Swaminathan 	uint16_t reserved1;
2128bafec742SSukumar Swaminathan 	uint32_t reserved2[6];
2129bafec742SSukumar Swaminathan 	uint8_t reserved3[3];
2130bafec742SSukumar Swaminathan 	uint8_t flags4;
2131bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_HV	0x20
2132bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_HS	0x40
2133bafec742SSukumar Swaminathan #define	IB_MAC_IOCB_RSP_HL	0x80
2134bafec742SSukumar Swaminathan 	uint32_t hdr_len;
2135bafec742SSukumar Swaminathan 	uint64_t hdr_addr;
2136bafec742SSukumar Swaminathan };
2137bafec742SSukumar Swaminathan 
2138bafec742SSukumar Swaminathan /* 16 words, 64 bytes */
2139bafec742SSukumar Swaminathan struct ib_sys_event_iocb_rsp {
2140bafec742SSukumar Swaminathan 	uint8_t opcode;
2141bafec742SSukumar Swaminathan 	uint8_t flag0;
2142bafec742SSukumar Swaminathan 	uint8_t event_type;
2143bafec742SSukumar Swaminathan 	uint8_t q_id;
2144bafec742SSukumar Swaminathan 	uint32_t reserved[15];
2145bafec742SSukumar Swaminathan };
2146bafec742SSukumar Swaminathan #define	SYS_EVENT_PORT_LINK_UP		0x0
2147bafec742SSukumar Swaminathan #define	SYS_EVENT_PORT_LINK_DOWN	0x1
2148bafec742SSukumar Swaminathan #define	SYS_EVENT_MULTIPLE_CAM_HITS	0x6
2149bafec742SSukumar Swaminathan #define	SYS_EVENT_SOFT_ECC_ERR		0x7
2150bafec742SSukumar Swaminathan #define	SYS_EVENT_MGMT_FATAL_ERR	0x8	/* MPI_PROCESSOR */
2151bafec742SSukumar Swaminathan #define	SYS_EVENT_MAC_INTERRUPT		0x9
2152bafec742SSukumar Swaminathan #define	SYS_EVENT_PCI_ERR_READING_SML_LRG_BUF	0x40
2153bafec742SSukumar Swaminathan 
2154bafec742SSukumar Swaminathan /*
2155bafec742SSukumar Swaminathan  *  Status Register (#define STATUS) bit definitions.
2156bafec742SSukumar Swaminathan  */
2157bafec742SSukumar Swaminathan #define	STATUS_FE	(1 << 0)
2158bafec742SSukumar Swaminathan #define	STATUS_PI	(1 << 1)
2159bafec742SSukumar Swaminathan #define	STATUS_PL0	(1 << 2),
2160bafec742SSukumar Swaminathan #define	STATUS_PL1	(1 << 3)
2161bafec742SSukumar Swaminathan #define	STATUS_PI0	(1 << 4)
2162bafec742SSukumar Swaminathan #define	STATUS_PI1	(1 << 5)
2163bafec742SSukumar Swaminathan #define	STATUS_FUNC_ID_MASK	0x000000c0
2164bafec742SSukumar Swaminathan #define	STATUS_FUNC_ID_SHIFT	6
2165bafec742SSukumar Swaminathan #define	STATUS_F0E	(1 << 8)
2166bafec742SSukumar Swaminathan #define	STATUS_F1E	(1 << 9)
2167bafec742SSukumar Swaminathan #define	STATUS_F2E	(1 << 10)
2168bafec742SSukumar Swaminathan #define	STATUS_F3E	(1 << 11)
2169bafec742SSukumar Swaminathan #define	STATUS_NFE	(1 << 12)
2170bafec742SSukumar Swaminathan 
2171bafec742SSukumar Swaminathan /*
2172bafec742SSukumar Swaminathan  * Generic Response Queue IOCB Format which abstracts the difference between
2173bafec742SSukumar Swaminathan  * IB_MAC, OB_MAC IOCBs
2174bafec742SSukumar Swaminathan  */
2175bafec742SSukumar Swaminathan struct net_rsp_iocb {
2176bafec742SSukumar Swaminathan 	uint8_t	opcode;
2177bafec742SSukumar Swaminathan 	uint8_t	flag0;
2178bafec742SSukumar Swaminathan 	uint8_t	flag1;
2179bafec742SSukumar Swaminathan 	uint8_t	flag2;
2180bafec742SSukumar Swaminathan 	uint32_t	reserved[15];
2181bafec742SSukumar Swaminathan };
2182bafec742SSukumar Swaminathan 
2183bafec742SSukumar Swaminathan /* Restore original packing rules */
2184bafec742SSukumar Swaminathan #pragma pack()
2185bafec742SSukumar Swaminathan 
2186bafec742SSukumar Swaminathan #define	RESPONSE_ENTRY_SIZE	(sizeof (struct net_rsp_iocb))
2187bafec742SSukumar Swaminathan #define	REQUEST_ENTRY_SIZE	(sizeof (struct ob_mac_iocb_req))
2188bafec742SSukumar Swaminathan 
2189bafec742SSukumar Swaminathan /* flash */
2190bafec742SSukumar Swaminathan /* Little endian machine correction defines. */
2191bafec742SSukumar Swaminathan #ifdef _LITTLE_ENDIAN
2192bafec742SSukumar Swaminathan #define	LITTLE_ENDIAN_16(x)
2193bafec742SSukumar Swaminathan #define	LITTLE_ENDIAN_24(x)
2194bafec742SSukumar Swaminathan #define	LITTLE_ENDIAN_32(x)
2195bafec742SSukumar Swaminathan #define	LITTLE_ENDIAN_64(x)
2196bafec742SSukumar Swaminathan #define	LITTLE_ENDIAN(bp, bytes)
2197bafec742SSukumar Swaminathan #define	BIG_ENDIAN_16(x)	ql_change_endian((uint8_t *)x, 2)
2198bafec742SSukumar Swaminathan #define	BIG_ENDIAN_24(x)	ql_change_endian((uint8_t *)x, 3)
2199bafec742SSukumar Swaminathan #define	BIG_ENDIAN_32(x)	ql_change_endian((uint8_t *)x, 4)
2200bafec742SSukumar Swaminathan #define	BIG_ENDIAN_64(x)	ql_change_endian((uint8_t *)x, 8)
2201bafec742SSukumar Swaminathan #define	BIG_ENDIAN(bp, bytes)	ql_change_endian((uint8_t *)bp, bytes)
2202bafec742SSukumar Swaminathan #endif /* _LITTLE_ENDIAN */
2203bafec742SSukumar Swaminathan 
2204bafec742SSukumar Swaminathan /* Big endian machine correction defines. */
2205bafec742SSukumar Swaminathan #ifdef	_BIG_ENDIAN
2206bafec742SSukumar Swaminathan #define	LITTLE_ENDIAN_16(x)		ql_change_endian((uint8_t *)x, 2)
2207bafec742SSukumar Swaminathan #define	LITTLE_ENDIAN_24(x)		ql_change_endian((uint8_t *)x, 3)
2208bafec742SSukumar Swaminathan #define	LITTLE_ENDIAN_32(x)		ql_change_endian((uint8_t *)x, 4)
2209bafec742SSukumar Swaminathan #define	LITTLE_ENDIAN_64(x)		ql_change_endian((uint8_t *)x, 8)
2210bafec742SSukumar Swaminathan #define	LITTLE_ENDIAN(bp, bytes)	ql_change_endian((uint8_t *)bp, bytes)
2211bafec742SSukumar Swaminathan #define	BIG_ENDIAN_16(x)
2212bafec742SSukumar Swaminathan #define	BIG_ENDIAN_24(x)
2213bafec742SSukumar Swaminathan #define	BIG_ENDIAN_32(x)
2214bafec742SSukumar Swaminathan #define	BIG_ENDIAN_64(x)
2215bafec742SSukumar Swaminathan #define	BIG_ENDIAN(bp, bytes)
2216bafec742SSukumar Swaminathan #endif	/* _BIG_ENDIAN */
2217bafec742SSukumar Swaminathan 
2218bafec742SSukumar Swaminathan void ql_change_endian(uint8_t *, size_t);
2219bafec742SSukumar Swaminathan 
2220bafec742SSukumar Swaminathan /* Flash Address Register 0x88 */
2221bafec742SSukumar Swaminathan #define	FLASH_RDY_FLAG		BIT_31
2222bafec742SSukumar Swaminathan #define	FLASH_R_FLAG		BIT_30
2223bafec742SSukumar Swaminathan #define	FLASH_ERR_FLAG		BIT_29
2224bafec742SSukumar Swaminathan #define	FLASH_CONF_ADDR		0x7D0000u
2225bafec742SSukumar Swaminathan #define	FLASH_ADDR_MASK		0x7F0000
2226bafec742SSukumar Swaminathan 
2227bafec742SSukumar Swaminathan #define	FLASH_WRSR_CMD		0x01
2228bafec742SSukumar Swaminathan #define	FLASH_PP_CMD		0x02
2229bafec742SSukumar Swaminathan #define	FLASH_READ_CMD		0x03
2230bafec742SSukumar Swaminathan #define	FLASH_WRDI_CMD		0x04
2231bafec742SSukumar Swaminathan #define	FLASH_RDSR_CMD		0x05
2232bafec742SSukumar Swaminathan #define	FLASH_WREN_CMD		0x06
2233bafec742SSukumar Swaminathan #define	FLASH_RDID_CMD		0x9F
2234bafec742SSukumar Swaminathan #define	FLASH_RES_CMD		0xAB
2235bafec742SSukumar Swaminathan 
2236bafec742SSukumar Swaminathan /*
2237bafec742SSukumar Swaminathan  * Flash definitions.
2238bafec742SSukumar Swaminathan  */
2239bafec742SSukumar Swaminathan typedef struct ql_flash_info {
2240bafec742SSukumar Swaminathan 	uint32_t	type;		/* flash type */
2241bafec742SSukumar Swaminathan 	uint32_t	flash_size;	/* length in bytes of flash */
2242bafec742SSukumar Swaminathan 	uint32_t	sec_mask;	/* sector number mask */
2243bafec742SSukumar Swaminathan 	uint8_t		flash_manuf;	/* flash chip manufacturer id */
2244bafec742SSukumar Swaminathan 	uint8_t		flash_id;	/* flash chip id */
2245bafec742SSukumar Swaminathan 	uint8_t		flash_cap;	/* flash chip capacity */
2246bafec742SSukumar Swaminathan } ql_flash_info_t;
2247bafec742SSukumar Swaminathan 
2248bafec742SSukumar Swaminathan /*
2249bafec742SSukumar Swaminathan  * Flash Description Table
2250bafec742SSukumar Swaminathan  */
2251bafec742SSukumar Swaminathan #define	FLASH_DESC_VERSION	1
2252bafec742SSukumar Swaminathan #define	FLASH_DESC_VAILD	0x44494C51	/* "QLID" */
2253bafec742SSukumar Swaminathan typedef struct flash_desc {
2254bafec742SSukumar Swaminathan 	uint32_t	flash_valid;
2255bafec742SSukumar Swaminathan 	uint16_t	flash_version;
2256bafec742SSukumar Swaminathan 	uint16_t	flash_len; /* flash description table length */
2257bafec742SSukumar Swaminathan 	uint16_t	flash_checksum;
2258bafec742SSukumar Swaminathan 	uint16_t	flash_unused;
2259bafec742SSukumar Swaminathan 	uint8_t		flash_model[16];
2260bafec742SSukumar Swaminathan 	uint16_t	flash_manuf;
2261bafec742SSukumar Swaminathan 	uint16_t	flash_id;
2262bafec742SSukumar Swaminathan 	uint8_t		flash_flag;
2263bafec742SSukumar Swaminathan 	uint8_t		erase_cmd;
2264bafec742SSukumar Swaminathan 	uint8_t		alt_erase_cmd;
2265bafec742SSukumar Swaminathan 	uint8_t		write_enable_cmd;
2266bafec742SSukumar Swaminathan 	uint8_t		write_enable_bits;
2267bafec742SSukumar Swaminathan 	uint8_t		write_statusreg_cmd;
2268bafec742SSukumar Swaminathan 	uint8_t		unprotect_sector_cmd;
2269bafec742SSukumar Swaminathan 	uint8_t		read_manuf_cmd;
2270bafec742SSukumar Swaminathan 	uint32_t	block_size;
2271bafec742SSukumar Swaminathan 	uint32_t	alt_block_size;
2272bafec742SSukumar Swaminathan 	uint32_t	flash_size;
2273bafec742SSukumar Swaminathan 	uint32_t	write_enable_data;
2274bafec742SSukumar Swaminathan 	uint8_t		readid_address_len;
2275bafec742SSukumar Swaminathan 	uint8_t		write_disable_bits;
2276bafec742SSukumar Swaminathan 	uint8_t		read_device_id_len;
2277bafec742SSukumar Swaminathan 	uint8_t		chip_erase_cmd;
2278bafec742SSukumar Swaminathan 	uint16_t	read_timeout;
2279bafec742SSukumar Swaminathan 	uint8_t		protect_sector_cmd;
2280bafec742SSukumar Swaminathan 	uint8_t		exp_reserved[65];
2281bafec742SSukumar Swaminathan } flash_desc_t;
2282bafec742SSukumar Swaminathan 
2283bafec742SSukumar Swaminathan /* flash manufacturer id's */
2284bafec742SSukumar Swaminathan #define	AMD_FLASH		0x01	/* AMD / Spansion */
2285bafec742SSukumar Swaminathan #define	ST_FLASH		0x20	/* ST Electronics */
2286bafec742SSukumar Swaminathan #define	SST_FLASH		0xbf	/* SST Electronics */
2287bafec742SSukumar Swaminathan #define	MXIC_FLASH		0xc2	/* Macronix (MXIC) */
2288bafec742SSukumar Swaminathan #define	ATMEL_FLASH		0x1f	/* Atmel (AT26DF081A) */
2289bafec742SSukumar Swaminathan #define	WINBOND_FLASH		0xef	/* Winbond (W25X16,W25X32) */
2290bafec742SSukumar Swaminathan #define	INTEL_FLASH		0x89	/* Intel (QB25F016S33B8) */
2291bafec742SSukumar Swaminathan 
2292bafec742SSukumar Swaminathan /* flash id defines */
2293bafec742SSukumar Swaminathan #define	AMD_FLASHID_128K	0x6e	/* 128k AMD flash chip */
2294bafec742SSukumar Swaminathan #define	AMD_FLASHID_512K	0x4f	/* 512k AMD flash chip */
2295bafec742SSukumar Swaminathan #define	AMD_FLASHID_512Kt	0xb9	/* 512k AMD flash chip - top boot blk */
2296bafec742SSukumar Swaminathan #define	AMD_FLASHID_512Kb	0xba	/* 512k AMD flash chip - btm boot blk */
2297bafec742SSukumar Swaminathan #define	AMD_FLASHID_1024K	0x38	/* 1 MB AMD flash chip */
2298bafec742SSukumar Swaminathan #define	ST_FLASHID_128K		0x23	/* 128k ST flash chip */
2299bafec742SSukumar Swaminathan #define	ST_FLASHID_512K		0xe3	/* 512k ST flash chip */
2300bafec742SSukumar Swaminathan #define	ST_FLASHID_M25PXX	0x20	/* M25Pxx ST flash chip */
2301bafec742SSukumar Swaminathan #define	SST_FLASHID_128K	0xd5	/* 128k SST flash chip */
2302bafec742SSukumar Swaminathan #define	SST_FLASHID_1024K	0xd8	/* 1 MB SST flash chip */
2303bafec742SSukumar Swaminathan #define	SST_FLASHID_1024K_A	0x80	/* 1 MB SST 25LF080A flash chip */
2304bafec742SSukumar Swaminathan #define	SST_FLASHID_1024K_B	0x8e	/* 1 MB SST 25VF080B flash chip */
2305bafec742SSukumar Swaminathan #define	SST_FLASHID_2048K	0x25	/* 2 MB SST 25VF016B flash chip */
2306bafec742SSukumar Swaminathan #define	MXIC_FLASHID_512K	0x4f	/* 512k MXIC flash chip */
2307bafec742SSukumar Swaminathan #define	MXIC_FLASHID_1024K	0x38	/* 1 MB MXIC flash chip */
2308bafec742SSukumar Swaminathan #define	MXIC_FLASHID_25LXX	0x20	/* 25Lxx MXIC flash chip */
2309bafec742SSukumar Swaminathan #define	ATMEL_FLASHID_1024K	0x45	/* 1 MB ATMEL flash chip */
2310bafec742SSukumar Swaminathan #define	SPAN_FLASHID_2048K	0x02	/* 2 MB Spansion flash chip */
2311bafec742SSukumar Swaminathan #define	WINBOND_FLASHID		0x30	/* Winbond W25Xxx flash chip */
2312bafec742SSukumar Swaminathan #define	INTEL_FLASHID		0x89	/* Intel QB25F016S33B8 flash chip */
2313bafec742SSukumar Swaminathan 
2314bafec742SSukumar Swaminathan /* flash type defines */
2315bafec742SSukumar Swaminathan #define	FLASH128	BIT_0
2316bafec742SSukumar Swaminathan #define	FLASH512	BIT_1
2317bafec742SSukumar Swaminathan #define	FLASH512S	BIT_2
2318bafec742SSukumar Swaminathan #define	FLASH1024	BIT_3
2319bafec742SSukumar Swaminathan #define	FLASH2048	BIT_4
2320bafec742SSukumar Swaminathan #define	FLASH4096	BIT_5
2321bafec742SSukumar Swaminathan #define	FLASH8192	BIT_6
2322bafec742SSukumar Swaminathan #define	FLASH_PAGE	BIT_31
2323bafec742SSukumar Swaminathan #define	FLASH_LEGACY	(FLASH128 | FLASH512S)
2324bafec742SSukumar Swaminathan 
2325bafec742SSukumar Swaminathan #define	FLASH_FIRMWARE_IMAGE_ADDR	0x100000 /* 1M */
2326bafec742SSukumar Swaminathan typedef struct {
2327bafec742SSukumar Swaminathan 	uint8_t		signature[2];
2328bafec742SSukumar Swaminathan 	uint8_t		reserved[0x16];
2329bafec742SSukumar Swaminathan 	uint8_t		dataoffset[2];
2330bafec742SSukumar Swaminathan 	uint8_t		pad[6];
2331bafec742SSukumar Swaminathan } pci_header_t;
2332bafec742SSukumar Swaminathan 
2333bafec742SSukumar Swaminathan typedef struct {
2334bafec742SSukumar Swaminathan 	uint8_t		 signature[4];
2335bafec742SSukumar Swaminathan 	uint8_t		 vid[2];
2336bafec742SSukumar Swaminathan 	uint8_t		 did[2];
2337bafec742SSukumar Swaminathan 	uint8_t		 reserved0[2];
2338bafec742SSukumar Swaminathan 	uint8_t		 pcidatalen[2];
2339bafec742SSukumar Swaminathan 	uint8_t		 pcidatarev;
2340bafec742SSukumar Swaminathan 	uint8_t		 classcode[3];
2341bafec742SSukumar Swaminathan 	uint8_t		 imagelength[2];	/* In sectors */
2342bafec742SSukumar Swaminathan 	uint8_t		 revisionlevel[2];
2343bafec742SSukumar Swaminathan 	uint8_t		 codetype;
2344bafec742SSukumar Swaminathan 	uint8_t		 indicator;
2345bafec742SSukumar Swaminathan 	uint8_t		 reserved1[2];
2346bafec742SSukumar Swaminathan 	uint8_t		 pad[8];
2347bafec742SSukumar Swaminathan } pci_data_t;
2348bafec742SSukumar Swaminathan 
2349bafec742SSukumar Swaminathan #define	PCI_HEADER0		0x55
2350bafec742SSukumar Swaminathan #define	PCI_HEADER1		0xAA
2351bafec742SSukumar Swaminathan #define	PCI_DATASIG		"PCIR"
2352bafec742SSukumar Swaminathan #define	PCI_SECTOR_SIZE		0x200
2353bafec742SSukumar Swaminathan #define	PCI_CODE_X86PC		0
2354bafec742SSukumar Swaminathan #define	PCI_CODE_FCODE		1
2355bafec742SSukumar Swaminathan #define	PCI_CODE_HPPA		2
2356bafec742SSukumar Swaminathan #define	PCI_CODE_EFI		3
2357bafec742SSukumar Swaminathan #define	PCI_CODE_FW		0xfe
2358bafec742SSukumar Swaminathan #define	PCI_IND_LAST_IMAGE	0x80
2359bafec742SSukumar Swaminathan #define	SBUS_CODE_FCODE		0xf1
2360bafec742SSukumar Swaminathan 
2361bafec742SSukumar Swaminathan #define	FBUFSIZE	100
2362bafec742SSukumar Swaminathan /* Flash Layout Table Data Structure(FLTDS) */
2363bafec742SSukumar Swaminathan #define	FLASH_FLTDS_SIGNATURE	0x544C4651	/* "QFLT" */
2364bafec742SSukumar Swaminathan 
2365bafec742SSukumar Swaminathan typedef struct ql_fltds {
2366bafec742SSukumar Swaminathan 	uint32_t	signature;
2367bafec742SSukumar Swaminathan 	uint16_t	flt_addr_lo;
2368bafec742SSukumar Swaminathan 	uint16_t	flt_addr_hi;
2369bafec742SSukumar Swaminathan 	uint8_t		version;
2370bafec742SSukumar Swaminathan 	uint8_t		reserved;
2371bafec742SSukumar Swaminathan 	uint16_t	checksum;
2372bafec742SSukumar Swaminathan } ql_fltds_t;
2373bafec742SSukumar Swaminathan /* Image Layout Table Data Structure(ILTDS) */
2374bafec742SSukumar Swaminathan #define	FLASH_ILTDS_SIGNATURE	0x4D494651	/* "QFIM" */
2375bafec742SSukumar Swaminathan typedef struct ql_iltds_header {
2376bafec742SSukumar Swaminathan 	uint32_t	signature;
2377bafec742SSukumar Swaminathan 	uint16_t	table_version;	/* version of this structure */
2378bafec742SSukumar Swaminathan 	uint16_t	length;		/* length of the table */
2379bafec742SSukumar Swaminathan 	uint16_t	checksum;
2380bafec742SSukumar Swaminathan 	uint16_t	number_entries;	/* Number of type/len/size entries */
2381bafec742SSukumar Swaminathan 	uint16_t	reserved;
2382bafec742SSukumar Swaminathan 	uint16_t	version;	/* version of the image */
2383bafec742SSukumar Swaminathan } ql_iltds_header_t;
2384bafec742SSukumar Swaminathan 
2385bafec742SSukumar Swaminathan #define	IMAGE_TABLE_HEADER_LEN	sizeof (ql_iltds_header_t)
2386bafec742SSukumar Swaminathan 
2387bafec742SSukumar Swaminathan #define	ILTDS_REGION_VERSION_LEN_NA	0	/* version not applicable */
2388bafec742SSukumar Swaminathan typedef struct ql_iltds_img_entry {
2389bafec742SSukumar Swaminathan 	uint16_t	region_type;
2390bafec742SSukumar Swaminathan 	uint8_t		region_version_len;
2391bafec742SSukumar Swaminathan 	uint8_t		region_version[3];
2392bafec742SSukumar Swaminathan 	uint16_t	offset_lo;
2393bafec742SSukumar Swaminathan 	uint16_t	offset_hi;
2394bafec742SSukumar Swaminathan 	uint16_t	size_lo;
2395bafec742SSukumar Swaminathan 	uint16_t	size_hi;
2396bafec742SSukumar Swaminathan 	uint8_t		swap_mode;
2397bafec742SSukumar Swaminathan #define	ILTDS_IMG_SWAP_NONE		0	/* no swap needed */
2398bafec742SSukumar Swaminathan #define	ILTDS_IMG_SWAP_WORD		1
2399bafec742SSukumar Swaminathan 
2400bafec742SSukumar Swaminathan 	uint8_t		card_type;
2401bafec742SSukumar Swaminathan #define	ILTDS_IMG_CARD_TYPE_ALL		0	/* apply to all types */
2402bafec742SSukumar Swaminathan #define	ILTDS_IMG_CARD_TYPE_SR		1	/* apply to SR/fc cards */
2403bafec742SSukumar Swaminathan #define	ILTDS_IMG_CARD_TYPE_COPPER	2	/* apply to Copper cards */
2404bafec742SSukumar Swaminathan #define	ILTDS_IMG_CARD_TYPE_MEZZ	4	/* apply to Mezz   cards */
2405bafec742SSukumar Swaminathan } ql_iltds_img_entry_t;
2406bafec742SSukumar Swaminathan 
2407bafec742SSukumar Swaminathan #define	IMAGE_TABLE_ENTRY_LEN	sizeof (ql_iltds_img_entry_t)
2408bafec742SSukumar Swaminathan 
2409bafec742SSukumar Swaminathan typedef struct ql_iltds_time_stamp {
2410bafec742SSukumar Swaminathan 	uint16_t	region_type;
2411bafec742SSukumar Swaminathan 	uint8_t		region_version_len;
2412bafec742SSukumar Swaminathan 	uint8_t		region_version[3];
2413bafec742SSukumar Swaminathan 	uint8_t		year;
2414bafec742SSukumar Swaminathan 	uint8_t		month;
2415bafec742SSukumar Swaminathan 	uint8_t		day;
2416bafec742SSukumar Swaminathan 	uint8_t		hour;
2417bafec742SSukumar Swaminathan 	uint8_t		min;
2418bafec742SSukumar Swaminathan 	uint8_t		sec;
2419bafec742SSukumar Swaminathan 	uint32_t	reserved;
2420bafec742SSukumar Swaminathan } ql_iltds_time_stamp_t;
2421bafec742SSukumar Swaminathan 
2422bafec742SSukumar Swaminathan #define	IMAGE_TABLE_TIME_STAMP_LEN	sizeof (ql_iltds_time_stamp_t)
2423bafec742SSukumar Swaminathan 
2424bafec742SSukumar Swaminathan #define	IMAGE_TABLE_IMAGE_DEFAULT_ENTRIES	5
2425bafec742SSukumar Swaminathan 
2426bafec742SSukumar Swaminathan typedef struct ql_iltds_description_header {
2427bafec742SSukumar Swaminathan 	ql_iltds_header_t 	iltds_table_header;
2428bafec742SSukumar Swaminathan 	ql_iltds_img_entry_t	img_entry[IMAGE_TABLE_IMAGE_DEFAULT_ENTRIES];
2429bafec742SSukumar Swaminathan 	ql_iltds_time_stamp_t	time_stamp;
2430bafec742SSukumar Swaminathan }ql_iltds_description_header_t;
2431bafec742SSukumar Swaminathan 
2432bafec742SSukumar Swaminathan #define	ILTDS_DESCRIPTION_HEADERS_LEN	sizeof (ql_iltds_description_header_t)
2433bafec742SSukumar Swaminathan 
2434bafec742SSukumar Swaminathan /* flash layout table definition */
2435bafec742SSukumar Swaminathan /* header */
2436bafec742SSukumar Swaminathan typedef struct ql_flt_header {
2437bafec742SSukumar Swaminathan 	uint16_t	version;
2438bafec742SSukumar Swaminathan 	uint16_t	length;	/* length of the flt table,no table header */
2439bafec742SSukumar Swaminathan 	uint16_t	checksum;
2440bafec742SSukumar Swaminathan 	uint16_t	reserved;
2441bafec742SSukumar Swaminathan } ql_flt_header_t;
2442bafec742SSukumar Swaminathan 
2443bafec742SSukumar Swaminathan /* table entry */
2444bafec742SSukumar Swaminathan typedef struct ql_flt_entry {
2445bafec742SSukumar Swaminathan 	uint8_t		region;
2446bafec742SSukumar Swaminathan 	uint8_t		reserved0;
2447bafec742SSukumar Swaminathan 	uint8_t		attr;
2448bafec742SSukumar Swaminathan #define	FLT_ATTR_READ_ONLY		BIT_0
2449bafec742SSukumar Swaminathan #define	FLT_ATTR_NEED_FW_RESTART	BIT_1
2450bafec742SSukumar Swaminathan #define	FLT_ATTR_NEED_DATA_REALOAD	BIT_2
2451bafec742SSukumar Swaminathan 	uint8_t		reserved1;
2452bafec742SSukumar Swaminathan 	uint32_t	size;
2453bafec742SSukumar Swaminathan 	uint32_t	begin_addr;
2454bafec742SSukumar Swaminathan 	uint32_t	end_addr;
2455bafec742SSukumar Swaminathan } ql_flt_entry_t;
2456bafec742SSukumar Swaminathan 
2457bafec742SSukumar Swaminathan /* flt table */
2458bafec742SSukumar Swaminathan typedef struct ql_flt {
2459bafec742SSukumar Swaminathan 	ql_flt_header_t	header;
2460bafec742SSukumar Swaminathan 	uint16_t	num_entries;
2461bafec742SSukumar Swaminathan 	ql_flt_entry_t	*ql_flt_entry_ptr;
2462bafec742SSukumar Swaminathan } ql_flt_t;
2463bafec742SSukumar Swaminathan 
2464bafec742SSukumar Swaminathan /* Nic Configuration Table */
2465bafec742SSukumar Swaminathan #define	FLASH_NIC_CONFIG_SIGNATURE	0x30303038	/* "8000" */
2466bafec742SSukumar Swaminathan 
2467bafec742SSukumar Swaminathan enum {
2468bafec742SSukumar Swaminathan 	DATA_TYPE_NONE,
2469bafec742SSukumar Swaminathan 	DATA_TYPE_FACTORY_MAC_ADDR,
2470bafec742SSukumar Swaminathan 	DATA_TYPE_CLP_MAC_ADDR,
2471bafec742SSukumar Swaminathan 	DATA_TYPE_CLP_VLAN_MAC_ADDR,
2472bafec742SSukumar Swaminathan 	DATA_TYPE_RESERVED,
2473bafec742SSukumar Swaminathan 	DATA_TYPE_LAST_ENTRY
2474bafec742SSukumar Swaminathan };
2475bafec742SSukumar Swaminathan 
2476bafec742SSukumar Swaminathan typedef struct ql_nic_config {
2477bafec742SSukumar Swaminathan 	uint32_t	signature;
2478bafec742SSukumar Swaminathan 	uint16_t	version;
2479bafec742SSukumar Swaminathan 	uint16_t	size;
2480bafec742SSukumar Swaminathan 	uint16_t	checksum;
2481bafec742SSukumar Swaminathan 	uint16_t	reserved0;
2482bafec742SSukumar Swaminathan 	uint16_t	total_data_size;
2483bafec742SSukumar Swaminathan 	uint16_t	num_of_entries;
2484bafec742SSukumar Swaminathan 	uint8_t		factory_data_type;
2485bafec742SSukumar Swaminathan 	uint8_t		factory_data_type_size;
2486bafec742SSukumar Swaminathan 	uint8_t		factory_MAC[6];
2487bafec742SSukumar Swaminathan 	uint8_t		clp_data_type;
2488bafec742SSukumar Swaminathan 	uint8_t		clp_data_type_size;
2489bafec742SSukumar Swaminathan 	uint8_t		clp_MAC[6];
2490bafec742SSukumar Swaminathan 	uint8_t		clp_vlan_data_type;
2491bafec742SSukumar Swaminathan 	uint8_t		clp_vlan_data_type_size;
2492bafec742SSukumar Swaminathan 	uint16_t	vlan_id;
2493bafec742SSukumar Swaminathan 	uint8_t		last_data_type;
2494bafec742SSukumar Swaminathan 	uint8_t		last_data_type_size;
2495bafec742SSukumar Swaminathan 	uint16_t	last_entry;
2496bafec742SSukumar Swaminathan 	uint8_t		reserved1[464];
2497bafec742SSukumar Swaminathan 	uint16_t	subsys_vendor_id;
2498bafec742SSukumar Swaminathan 	uint16_t	subsys_device_id;
2499bafec742SSukumar Swaminathan 	uint8_t		reserved2[4];
2500bafec742SSukumar Swaminathan } ql_nic_config_t;
2501bafec742SSukumar Swaminathan 
2502bafec742SSukumar Swaminathan #ifdef __cplusplus
2503bafec742SSukumar Swaminathan }
2504bafec742SSukumar Swaminathan #endif
2505bafec742SSukumar Swaminathan 
2506bafec742SSukumar Swaminathan #endif /* _QLGE_HW_H */
2507