1fcf3ce44SJohn Forte /*
2fcf3ce44SJohn Forte  * CDDL HEADER START
3fcf3ce44SJohn Forte  *
4fcf3ce44SJohn Forte  * The contents of this file are subject to the terms of the
5fcf3ce44SJohn Forte  * Common Development and Distribution License (the "License").
6fcf3ce44SJohn Forte  * You may not use this file except in compliance with the License.
7fcf3ce44SJohn Forte  *
8fcf3ce44SJohn Forte  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9fcf3ce44SJohn Forte  * or http://www.opensolaris.org/os/licensing.
10fcf3ce44SJohn Forte  * See the License for the specific language governing permissions
11fcf3ce44SJohn Forte  * and limitations under the License.
12fcf3ce44SJohn Forte  *
13fcf3ce44SJohn Forte  * When distributing Covered Code, include this CDDL HEADER in each
14fcf3ce44SJohn Forte  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15fcf3ce44SJohn Forte  * If applicable, add the following below this CDDL HEADER, with the
16fcf3ce44SJohn Forte  * fields enclosed by brackets "[]" replaced with your own identifying
17fcf3ce44SJohn Forte  * information: Portions Copyright [yyyy] [name of copyright owner]
18fcf3ce44SJohn Forte  *
19fcf3ce44SJohn Forte  * CDDL HEADER END
20fcf3ce44SJohn Forte  */
21c4ddbbe1SDaniel Beauregard 
22c4ddbbe1SDaniel Beauregard /*
23*4c3888b8SHans Rosenfeld  * Copyright 2009-2015 QLogic Corporation.  All rights reserved.
24c4ddbbe1SDaniel Beauregard  * Use is subject to license terms.
25c4ddbbe1SDaniel Beauregard  */
26c4ddbbe1SDaniel Beauregard 
27fcf3ce44SJohn Forte /*
28*4c3888b8SHans Rosenfeld  * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
29fcf3ce44SJohn Forte  */
30c4ddbbe1SDaniel Beauregard 
31fcf3ce44SJohn Forte #ifndef	_QLT_REGS_H
32fcf3ce44SJohn Forte #define	_QLT_REGS_H
33fcf3ce44SJohn Forte 
344558d122SViswanathan Kannappan #include <sys/stmf_defines.h>
35fcf3ce44SJohn Forte 
36fcf3ce44SJohn Forte #ifdef	__cplusplus
37fcf3ce44SJohn Forte extern "C" {
38fcf3ce44SJohn Forte #endif
39fcf3ce44SJohn Forte 
40fcf3ce44SJohn Forte /*
41fcf3ce44SJohn Forte  * Register offsets
42fcf3ce44SJohn Forte  */
43fcf3ce44SJohn Forte #define	REG_FLASH_ADDR		0x00
44fcf3ce44SJohn Forte #define	REG_FLASH_DATA		0x04
45fcf3ce44SJohn Forte #define	REG_CTRL_STATUS		0x08
46fcf3ce44SJohn Forte #define	REG_INTR_CTRL		0x0C
47fcf3ce44SJohn Forte #define	REG_INTR_STATUS		0x10
48*4c3888b8SHans Rosenfeld 
49fcf3ce44SJohn Forte #define	REG_REQ_IN_PTR		0x1C
50fcf3ce44SJohn Forte #define	REG_REQ_OUT_PTR		0x20
51fcf3ce44SJohn Forte #define	REG_RESP_IN_PTR		0x24
52fcf3ce44SJohn Forte #define	REG_RESP_OUT_PTR	0x28
53fcf3ce44SJohn Forte #define	REG_PREQ_IN_PTR		0x2C
54fcf3ce44SJohn Forte #define	REG_PREQ_OUT_PTR	0x30
55fcf3ce44SJohn Forte #define	REG_ATIO_IN_PTR		0x3C
56fcf3ce44SJohn Forte #define	REG_ATIO_OUT_PTR	0x40
57*4c3888b8SHans Rosenfeld 
58fcf3ce44SJohn Forte #define	REG_RISC_STATUS		0x44
59fcf3ce44SJohn Forte #define	REG_HCCR		0x48
60fcf3ce44SJohn Forte #define	REG_GPIO_DATA		0x4C
61fcf3ce44SJohn Forte #define	REG_GPIO_ENABLE		0x50
62fcf3ce44SJohn Forte #define	REG_IOBUS_BASE_ADDR	0x54
63fcf3ce44SJohn Forte #define	REG_HOST_SEMA		0x58
64fcf3ce44SJohn Forte #define	REG_MBOX0		0x80
65fcf3ce44SJohn Forte 
66fcf3ce44SJohn Forte #define	REG_MBOX(n)		(REG_MBOX0 + (n << 1))
67fcf3ce44SJohn Forte 
68fcf3ce44SJohn Forte #define	MAX_MBOXES		32
69fcf3ce44SJohn Forte 
70fcf3ce44SJohn Forte /*
71fcf3ce44SJohn Forte  * Ctrl Status register definitions
72fcf3ce44SJohn Forte  */
73fcf3ce44SJohn Forte #define	FLASH_ERROR		BIT_18
74fcf3ce44SJohn Forte #define	DMA_ACTIVE_STATUS	BIT_17
75fcf3ce44SJohn Forte #define	DMA_SHUTDOWN_CTRL	BIT_16
76fcf3ce44SJohn Forte #define	FUNCTION_NUMBER		BIT_15
77*4c3888b8SHans Rosenfeld #define	H2RISC_INTR		BIT_6
78*4c3888b8SHans Rosenfeld #define	RISC_RESET		BIT_5
79c4ddbbe1SDaniel Beauregard /*
80c4ddbbe1SDaniel Beauregard  * #define	81XX_FUNCTION_NUMBER	BIT_15 | BIT_14 | BIT_13 | BIT_12
81c4ddbbe1SDaniel Beauregard  */
82fcf3ce44SJohn Forte #define	PCI_X_BUS_MODE		(BIT_8 | BIT_9 | BIT_10 | BIT_11)
83fcf3ce44SJohn Forte #define	PCI_X_XFER_CTRL		(BIT_4 | BIT_5)
84fcf3ce44SJohn Forte #define	PCI_64_BIT_SLOT		BIT_2
85fcf3ce44SJohn Forte #define	FLASH_WRITE_ENABLE	BIT_1
86fcf3ce44SJohn Forte #define	CHIP_SOFT_RESET		BIT_0
87fcf3ce44SJohn Forte 
88fcf3ce44SJohn Forte /*
89fcf3ce44SJohn Forte  * INTR_CTRL register
90fcf3ce44SJohn Forte  */
91fcf3ce44SJohn Forte #define	ENABLE_RISC_INTR	BIT_3
92fcf3ce44SJohn Forte 
93fcf3ce44SJohn Forte /*
94fcf3ce44SJohn Forte  * INTR_STATUS register
95fcf3ce44SJohn Forte  */
96a2255df3SDaniel Beauregard #define	RISC_PCI_INTR_REQUEST	BIT_3
97fcf3ce44SJohn Forte 
98fcf3ce44SJohn Forte /*
990ff6bfafSDaniel Beauregard  * RISC_STATUS register
1000ff6bfafSDaniel Beauregard  */
101a2255df3SDaniel Beauregard #define	FW_INTR_INFO_MASK		(BIT_15 | BIT_14 | BIT_13 | BIT_12 | \
102a2255df3SDaniel Beauregard 					BIT_11 | BIT_10 | BIT_9 | BIT_8 | \
103a2255df3SDaniel Beauregard 					BIT_7 | BIT_6 | BIT_5 | BIT_4 | \
104a2255df3SDaniel Beauregard 					BIT_3 | BIT_2 | BIT_1)
105a2255df3SDaniel Beauregard #define	FW_INTR_INFO_SHIFT		18
106a2255df3SDaniel Beauregard 
107a2255df3SDaniel Beauregard #define	FW_INTR_INFO(status)		(status & (FW_INTR_INFO_MASK << \
108a2255df3SDaniel Beauregard 					FW_INTR_INFO_SHIFT))
1090ff6bfafSDaniel Beauregard #define	RISC_HOST_INTR_REQUEST		BIT_15
110a2255df3SDaniel Beauregard #define	RISC_PAUSED			BIT_8
111a2255df3SDaniel Beauregard 
1120ff6bfafSDaniel Beauregard #define	FW_INTR_STATUS_MASK		(BIT_7 | BIT_6 | BIT_5 | BIT_4 | \
1130ff6bfafSDaniel Beauregard 					BIT_3 | BIT_2 | BIT_1 | BIT_0)
1140ff6bfafSDaniel Beauregard 
115a2255df3SDaniel Beauregard #define	ROM_MBX_CMD_SUCCESSFUL		0x01
116a2255df3SDaniel Beauregard #define	ROM_MBX_CMD_NOT_SUCCESSFUL	0x02
117a2255df3SDaniel Beauregard #define	MBX_CMD_SUCCESSFUL		0x10
118a2255df3SDaniel Beauregard #define	MBX_CMD_NOT_SUCCESSFUL		0x11
119a2255df3SDaniel Beauregard #define	ASYNC_EVENT			0x12
120a2255df3SDaniel Beauregard #define	RESP_Q_UPDATE			0x13
121a2255df3SDaniel Beauregard #define	ATIO_Q_UPDATE			0x1c
122a2255df3SDaniel Beauregard #define	RESP_ATIO_Q_UPDATE		0x1d
123a2255df3SDaniel Beauregard 
124*4c3888b8SHans Rosenfeld 
125*4c3888b8SHans Rosenfeld /*
126*4c3888b8SHans Rosenfeld  * Firmware state codes from get firmware state mailbox command
127*4c3888b8SHans Rosenfeld  */
128*4c3888b8SHans Rosenfeld #define	FSTATE_CONFIG_WAIT	0
129*4c3888b8SHans Rosenfeld #define	FSTATE_WAIT_AL_PA	1
130*4c3888b8SHans Rosenfeld #define	FSTATE_WAIT_LOGIN	2
131*4c3888b8SHans Rosenfeld #define	FSTATE_READY		3
132*4c3888b8SHans Rosenfeld #define	FSTATE_LOSS_SYNC	4
133*4c3888b8SHans Rosenfeld #define	FSTATE_ERROR		5
134*4c3888b8SHans Rosenfeld #define	FSTATE_NON_PART		7
135*4c3888b8SHans Rosenfeld 
136*4c3888b8SHans Rosenfeld #define	FSTATE_MPI_NIC_ERROR    0x10
137*4c3888b8SHans Rosenfeld 
138*4c3888b8SHans Rosenfeld 
139a2255df3SDaniel Beauregard /*
140a2255df3SDaniel Beauregard  * Mailbox command completion status.
141a2255df3SDaniel Beauregard  */
142a2255df3SDaniel Beauregard #define	QLT_MBX_CMD_SUCCESS		0x4000
143a2255df3SDaniel Beauregard 
144*4c3888b8SHans Rosenfeld 
1450ff6bfafSDaniel Beauregard /*
146fcf3ce44SJohn Forte  * HCCR commands
147fcf3ce44SJohn Forte  */
148a2255df3SDaniel Beauregard #define	NOP				0x00
149a2255df3SDaniel Beauregard #define	SET_RISC_RESET			0x01
150a2255df3SDaniel Beauregard #define	CLEAR_RISC_RESET		0x02
151a2255df3SDaniel Beauregard #define	SET_RISC_PAUSE			0x03
152a2255df3SDaniel Beauregard #define	CLEAR_RISC_PAUSE		0x04
153a2255df3SDaniel Beauregard #define	SET_HOST_TO_RISC_INTR		0x05
154a2255df3SDaniel Beauregard #define	CLEAR_HOST_TO_RISC_INTR		0x06
155a2255df3SDaniel Beauregard #define	CLEAR_RISC_TO_PCI_INTR		0x0A
156a2255df3SDaniel Beauregard 
157a2255df3SDaniel Beauregard #define	HCCR_CMD_SHIFT			28
158a2255df3SDaniel Beauregard #define	HCCR_CMD(cmd)			((uint32_t)cmd << HCCR_CMD_SHIFT)
159fcf3ce44SJohn Forte 
160*4c3888b8SHans Rosenfeld /*
161*4c3888b8SHans Rosenfeld  * ISP8100/83xx Multi-Queue MBAR definitions
162*4c3888b8SHans Rosenfeld  */
163*4c3888b8SHans Rosenfeld #define	MQBAR_REQ_IN			0x0
164*4c3888b8SHans Rosenfeld #define	MQBAR_REQ_OUT			0x4
165*4c3888b8SHans Rosenfeld #define	MQBAR_RESP_IN			0x8
166*4c3888b8SHans Rosenfeld #define	MQBAR_RESP_OUT			0xc
167*4c3888b8SHans Rosenfeld 
168*4c3888b8SHans Rosenfeld #define	MQBAR_ATIO_IN			0x10
169*4c3888b8SHans Rosenfeld #define	MQBAR_ATIO_OUT			0x14
170*4c3888b8SHans Rosenfeld 
171*4c3888b8SHans Rosenfeld /* 83xx uses 32 bytes per queue pair */
172*4c3888b8SHans Rosenfeld #define	MQBAR_REG_SIZE			0x20
173*4c3888b8SHans Rosenfeld #define	MQBAR_REG_OFFSET		4096
174*4c3888b8SHans Rosenfeld 
175*4c3888b8SHans Rosenfeld #define	MQ_MAX_QUEUES			8
176*4c3888b8SHans Rosenfeld 
1770ff6bfafSDaniel Beauregard 
178fcf3ce44SJohn Forte /*
179fcf3ce44SJohn Forte  * Flash/NVRAM definitions
180fcf3ce44SJohn Forte  */
181fcf3ce44SJohn Forte #define	FLASH_DATA_FLAG			BIT_31
182*4c3888b8SHans Rosenfeld 
183fcf3ce44SJohn Forte #define	FLASH_CONF_ADDR			0x7FFD0000
184*4c3888b8SHans Rosenfeld 
185fcf3ce44SJohn Forte #define	FLASH_DATA_ADDR			0x7FF00000
186*4c3888b8SHans Rosenfeld 
187*4c3888b8SHans Rosenfeld #define	FLASH_2400_DATA_ADDR		0x7FF00000
188*4c3888b8SHans Rosenfeld #define	FLASH_2500_DATA_ADDR		0x7FF00000
189*4c3888b8SHans Rosenfeld #define	FLASH_2700_DATA_ADDR		0x7F800000
190*4c3888b8SHans Rosenfeld #define	FLASH_8100_DATA_ADDR		0x7F800000
191*4c3888b8SHans Rosenfeld #define	FLASH_8200_DATA_ADDR		0
192*4c3888b8SHans Rosenfeld #define	FLASH_8300_DATA_ADDR		0x7F800000
193*4c3888b8SHans Rosenfeld 
194c4ddbbe1SDaniel Beauregard #define	FLASH_DATA_ADDR_81XX		0x7F8D0000
195*4c3888b8SHans Rosenfeld 					/* 0x7F80000 + 0xD0000 */
196*4c3888b8SHans Rosenfeld #define	FLASH_DATA_ADDR_83XX		0x7FA70000
197*4c3888b8SHans Rosenfeld 					/* 0x7F80000 + 0x270000 */
198*4c3888b8SHans Rosenfeld 
199fcf3ce44SJohn Forte #define	NVRAM_CONF_ADDR			0x7FFF0000
200fcf3ce44SJohn Forte #define	NVRAM_DATA_ADDR			0x7FFE0000
201fcf3ce44SJohn Forte 
202*4c3888b8SHans Rosenfeld #define	NVRAM_2400_FUNC0_ADDR		0x80
203*4c3888b8SHans Rosenfeld #define	NVRAM_2400_FUNC1_ADDR		0x180
204*4c3888b8SHans Rosenfeld 
205*4c3888b8SHans Rosenfeld #define	NVRAM_2500_FUNC0_ADDR		0x48080
206*4c3888b8SHans Rosenfeld #define	NVRAM_2500_FUNC1_ADDR		0x48180
207*4c3888b8SHans Rosenfeld 
208*4c3888b8SHans Rosenfeld #define	NVRAM_2700_FUNC0_ADDR		0x270080
209*4c3888b8SHans Rosenfeld #define	NVRAM_2700_FUNC1_ADDR		0x270180
210*4c3888b8SHans Rosenfeld #define	NVRAM_2700_FUNC2_ADDR		0x270280
211*4c3888b8SHans Rosenfeld #define	NVRAM_2700_FUNC3_ADDR		0x270380
212*4c3888b8SHans Rosenfeld 
213*4c3888b8SHans Rosenfeld #define	NVRAM_8100_FUNC0_ADDR		0xD0080
214*4c3888b8SHans Rosenfeld #define	NVRAM_8100_FUNC1_ADDR		0xD0180
215*4c3888b8SHans Rosenfeld 
216*4c3888b8SHans Rosenfeld #define	NVRAM_8300_FC_FUNC0_ADDR	0x270080
217*4c3888b8SHans Rosenfeld #define	NVRAM_8300_FC_FUNC1_ADDR	0x270180
218*4c3888b8SHans Rosenfeld 
219*4c3888b8SHans Rosenfeld #define	NVRAM_8300_FCOE_FUNC0_ADDR	0x274080
220*4c3888b8SHans Rosenfeld #define	NVRAM_8300_FCOE_FUNC1_ADDR	0x274180
221*4c3888b8SHans Rosenfeld 
222fcf3ce44SJohn Forte #define	NVRAM_FUNC0_ADDR		(NVRAM_DATA_ADDR + 0x80)
223fcf3ce44SJohn Forte #define	NVRAM_FUNC1_ADDR		(NVRAM_DATA_ADDR + 0x180)
224fcf3ce44SJohn Forte 
225fcf3ce44SJohn Forte #define	QLT25_NVRAM_FUNC0_ADDR		(FLASH_DATA_ADDR + 0x48080)
226fcf3ce44SJohn Forte #define	QLT25_NVRAM_FUNC1_ADDR		(FLASH_DATA_ADDR + 0x48180)
227fcf3ce44SJohn Forte 
228*4c3888b8SHans Rosenfeld #define	QLT27_NVRAM_FUNC0_ADDR		(FLASH_2700_DATA_ADDR + 0x270080)
229*4c3888b8SHans Rosenfeld #define	QLT27_NVRAM_FUNC1_ADDR		(FLASH_2700_DATA_ADDR + 0x270180)
230*4c3888b8SHans Rosenfeld #define	QLT27_NVRAM_FUNC2_ADDR		(FLASH_2700_DATA_ADDR + 0x270280)
231*4c3888b8SHans Rosenfeld #define	QLT27_NVRAM_FUNC3_ADDR		(FLASH_2700_DATA_ADDR + 0x270380)
232*4c3888b8SHans Rosenfeld 
233c4ddbbe1SDaniel Beauregard #define	QLT81_NVRAM_FUNC0_ADDR		(FLASH_DATA_ADDR_81XX + 0x80)
234c4ddbbe1SDaniel Beauregard #define	QLT81_NVRAM_FUNC1_ADDR		(FLASH_DATA_ADDR_81XX + 0x180)
235c4ddbbe1SDaniel Beauregard 
236*4c3888b8SHans Rosenfeld #define	QLT83FC_NVRAM_FUNC0_ADDR	(FLASH_DATA_ADDR_83XX + 0x80)
237*4c3888b8SHans Rosenfeld #define	QLT83FC_NVRAM_FUNC1_ADDR	(FLASH_DATA_ADDR_83XX + 0x180)
238*4c3888b8SHans Rosenfeld 
239*4c3888b8SHans Rosenfeld #define	QLT83FCOE_NVRAM_FUNC0_ADDR	(FLASH_DATA_ADDR_83XX + 0x4080)
240*4c3888b8SHans Rosenfeld #define	QLT83FCOE_NVRAM_FUNC1_ADDR	(FLASH_DATA_ADDR_83XX + 0x4180)
241*4c3888b8SHans Rosenfeld 
242*4c3888b8SHans Rosenfeld #define	VPD_2400_FUNC0_ADDR		0
243*4c3888b8SHans Rosenfeld #define	VPD_2400_FUNC1_ADDR		0x100
244*4c3888b8SHans Rosenfeld 
245*4c3888b8SHans Rosenfeld #define	VPD_2500_FUNC0_ADDR		0x48000
246*4c3888b8SHans Rosenfeld #define	VPD_2500_FUNC1_ADDR		0x48100
247*4c3888b8SHans Rosenfeld 
248*4c3888b8SHans Rosenfeld #define	VPD_2700_FUNC0_ADDR		0x270000
249*4c3888b8SHans Rosenfeld #define	VPD_2700_FUNC1_ADDR		0x270100
250*4c3888b8SHans Rosenfeld #define	VPD_2700_FUNC2_ADDR		0x270200
251*4c3888b8SHans Rosenfeld #define	VPD_2700_FUNC3_ADDR		0x270300
252*4c3888b8SHans Rosenfeld 
253*4c3888b8SHans Rosenfeld #define	VPD_8100_FUNC0_ADDR		0xD0000
254*4c3888b8SHans Rosenfeld #define	VPD_8100_FUNC1_ADDR		0xD0400
255*4c3888b8SHans Rosenfeld 
256*4c3888b8SHans Rosenfeld #define	VPD_8021_FUNC0_ADDR		0xFA300
257*4c3888b8SHans Rosenfeld #define	VPD_8021_FUNC1_ADDR		0xFA300
258*4c3888b8SHans Rosenfeld 
259*4c3888b8SHans Rosenfeld #define	VPD_8300_FC_FUNC0_ADDR		0x270000
260*4c3888b8SHans Rosenfeld #define	VPD_8300_FC_FUNC1_ADDR		0x270100
261*4c3888b8SHans Rosenfeld 
262*4c3888b8SHans Rosenfeld #define	VPD_8300_FCOE_FUNC0_ADDR	0x274000
263*4c3888b8SHans Rosenfeld #define	VPD_8300_FCOE_FUNC1_ADDR	0x274100
264*4c3888b8SHans Rosenfeld #define	VPD_SIZE			0x80
265*4c3888b8SHans Rosenfeld 
266*4c3888b8SHans Rosenfeld #define	QLT24_VPD_FUNC0_ADDR		(NVRAM_DATA_ADDR + 0x0)
267*4c3888b8SHans Rosenfeld #define	QLT24_VPD_FUNC1_ADDR		(NVRAM_DATA_ADDR + 0x100)
268*4c3888b8SHans Rosenfeld 
269*4c3888b8SHans Rosenfeld #define	QLT25_VPD_FUNC0_ADDR		(FLASH_DATA_ADDR + 0x48000)
270*4c3888b8SHans Rosenfeld #define	QLT25_VPD_FUNC1_ADDR		(FLASH_DATA_ADDR + 0x48100)
271*4c3888b8SHans Rosenfeld 
272*4c3888b8SHans Rosenfeld #define	QLT27_VPD_FUNC0_ADDR		(FLASH_2700_DATA_ADDR + 0x270000)
273*4c3888b8SHans Rosenfeld #define	QLT27_VPD_FUNC1_ADDR		(FLASH_2700_DATA_ADDR + 0x270100)
274*4c3888b8SHans Rosenfeld #define	QLT27_VPD_FUNC2_ADDR		(FLASH_2700_DATA_ADDR + 0x270200)
275*4c3888b8SHans Rosenfeld #define	QLT27_VPD_FUNC3_ADDR		(FLASH_2700_DATA_ADDR + 0x270300)
276*4c3888b8SHans Rosenfeld 
277*4c3888b8SHans Rosenfeld #define	QLT81_VPD_FUNC0_ADDR		(FLASH_8100_DATA_ADDR + 0xD0000)
278*4c3888b8SHans Rosenfeld #define	QLT81_VPD_FUNC1_ADDR		(FLASH_8100_DATA_ADDR + 0xD0400)
279*4c3888b8SHans Rosenfeld 
280*4c3888b8SHans Rosenfeld #define	QLT83FC_VPD_FUNC0_ADDR		(FLASH_8300_DATA_ADDR + 0x270000)
281*4c3888b8SHans Rosenfeld #define	QLT83FC_VPD_FUNC1_ADDR		(FLASH_8300_DATA_ADDR + 0x270100)
282*4c3888b8SHans Rosenfeld 
283*4c3888b8SHans Rosenfeld #define	QLT83FCOE_VPD_FUNC0_ADDR	(FLASH_8300_DATA_ADDR + 0x274000)
284*4c3888b8SHans Rosenfeld #define	QLT83FCOE_VPD_FUNC1_ADDR	(FLASH_8300_DATA_ADDR + 0x274100)
285*4c3888b8SHans Rosenfeld 
286*4c3888b8SHans Rosenfeld #define	FLASH_2400_FIRMWARE_ADDR	0x20000
287*4c3888b8SHans Rosenfeld #define	FLASH_2400_FIRMWARE_SIZE	0x10000
288*4c3888b8SHans Rosenfeld 
289*4c3888b8SHans Rosenfeld #define	FLASH_2500_FIRMWARE_ADDR	0x20000
290*4c3888b8SHans Rosenfeld #define	FLASH_2500_FIRMWARE_SIZE	0x10000
291*4c3888b8SHans Rosenfeld 
292*4c3888b8SHans Rosenfeld #define	FLASH_8100_FIRMWARE_ADDR	0xA0000
293*4c3888b8SHans Rosenfeld #define	FLASH_8100_FIRMWARE_SIZE	0x20000
294*4c3888b8SHans Rosenfeld 
295*4c3888b8SHans Rosenfeld #define	FLASH_8300_BFE_ADDR		0x200000 /* BIOS/FCode/EFI */
296*4c3888b8SHans Rosenfeld #define	FLASH_8300_BFE_SIZE		0x80000
297*4c3888b8SHans Rosenfeld 
298*4c3888b8SHans Rosenfeld #define	FLASH_8300_FC_FIRMWARE_ADDR	0x240000
299*4c3888b8SHans Rosenfeld #define	FLASH_8300_FCOE_FIRMWARE_ADDR	0x220000
300*4c3888b8SHans Rosenfeld #define	FLASH_8300_FIRMWARE_SIZE	0x20000
301*4c3888b8SHans Rosenfeld 
302*4c3888b8SHans Rosenfeld #define	FLASH_8300_FIRMWARE_IMAGE_ADDR	0x40000
303*4c3888b8SHans Rosenfeld #define	FLASH_8300_FIRMWARE_IMAGE_SIZE	0x80000
304*4c3888b8SHans Rosenfeld 
305*4c3888b8SHans Rosenfeld #define	FLASH_8200_BOOTLOADER_ADDR	0x4000
306*4c3888b8SHans Rosenfeld #define	FLASH_8200_BOOTLOADER_SIZE	0x8000
307*4c3888b8SHans Rosenfeld 
308*4c3888b8SHans Rosenfeld #define	FLASH_8300_BOOTLOADER_ADDR	0x4000
309*4c3888b8SHans Rosenfeld #define	FLASH_8300_BOOTLOADER_SIZE	0x8000
310*4c3888b8SHans Rosenfeld 
311*4c3888b8SHans Rosenfeld #define	FLASH_2400_DESCRIPTOR_TABLE	0
312*4c3888b8SHans Rosenfeld #define	FLASH_2500_DESCRIPTOR_TABLE	0x50000
313*4c3888b8SHans Rosenfeld #define	FLASH_8100_DESCRIPTOR_TABLE	0xD8000
314*4c3888b8SHans Rosenfeld #define	FLASH_8200_DESCRIPTOR_TABLE	0
315*4c3888b8SHans Rosenfeld #define	FLASH_8300_DESCRIPTOR_TABLE	0xFC000
316*4c3888b8SHans Rosenfeld 
317*4c3888b8SHans Rosenfeld #define	FLASH_2400_LAYOUT_TABLE		0x11400
318*4c3888b8SHans Rosenfeld #define	FLASH_2500_LAYOUT_TABLE		0x50400
319*4c3888b8SHans Rosenfeld #define	FLASH_8100_LAYOUT_TABLE		0xD8400
320*4c3888b8SHans Rosenfeld #define	FLASH_8200_LAYOUT_TABLE		0xFC400
321*4c3888b8SHans Rosenfeld #define	FLASH_8300_LAYOUT_TABLE		0xFC400
322*4c3888b8SHans Rosenfeld 
323*4c3888b8SHans Rosenfeld #define	FLASH_2400_BOOT_CODE_ADDR	0
324*4c3888b8SHans Rosenfeld #define	FLASH_2500_BOOT_CODE_ADDR	0
325*4c3888b8SHans Rosenfeld #define	FLASH_2700_BOOT_CODE_ADDR	0x200000
326*4c3888b8SHans Rosenfeld #define	FLASH_8100_BOOT_CODE_ADDR	0x80000
327*4c3888b8SHans Rosenfeld #define	FLASH_8300_BOOT_CODE_ADDR	0x200000
328*4c3888b8SHans Rosenfeld 
329*4c3888b8SHans Rosenfeld #define	VPD_TAG_END			0x78
330*4c3888b8SHans Rosenfeld #define	VPD_TAG_CHKSUM			"RV"
331*4c3888b8SHans Rosenfeld #define	VPD_TAG_SN			"SN"
332*4c3888b8SHans Rosenfeld #define	VPD_TAG_PN			"PN"
333*4c3888b8SHans Rosenfeld #define	VPD_TAG_PRODID			"\x82"
334*4c3888b8SHans Rosenfeld #define	VPD_TAG_LRT			0x90
335*4c3888b8SHans Rosenfeld #define	VPD_TAG_LRTC			0x91
336*4c3888b8SHans Rosenfeld 
337*4c3888b8SHans Rosenfeld typedef struct qlt_rom_header {
338*4c3888b8SHans Rosenfeld 	uint8_t		signature[2];
339*4c3888b8SHans Rosenfeld 	uint8_t		reserved[0x16];
340*4c3888b8SHans Rosenfeld 	uint8_t		dataoffset[2];
341*4c3888b8SHans Rosenfeld 	uint8_t		pad[6];
342*4c3888b8SHans Rosenfeld } qlt_rom_header_t;
343*4c3888b8SHans Rosenfeld 
344*4c3888b8SHans Rosenfeld typedef struct qlt_rom_data {
345*4c3888b8SHans Rosenfeld 	uint8_t		signature[4];
346*4c3888b8SHans Rosenfeld 	uint8_t		vid[2];
347*4c3888b8SHans Rosenfeld 	uint8_t		did[2];
348*4c3888b8SHans Rosenfeld 	uint8_t		reserved0[2];
349*4c3888b8SHans Rosenfeld 	uint8_t		pcidatalen[2];
350*4c3888b8SHans Rosenfeld 	uint8_t		pcidatarev;
351*4c3888b8SHans Rosenfeld 	uint8_t		classcode[3];
352*4c3888b8SHans Rosenfeld 	uint8_t		imagelength[2];	/* In sectors */
353*4c3888b8SHans Rosenfeld 	uint8_t		revisionlevel[2];
354*4c3888b8SHans Rosenfeld 	uint8_t		codetype;
355*4c3888b8SHans Rosenfeld 	uint8_t		indicator;
356*4c3888b8SHans Rosenfeld 	uint8_t		reserved1[2];
357*4c3888b8SHans Rosenfeld 	uint8_t		pad[8];
358*4c3888b8SHans Rosenfeld } qlt_rom_data_t;
359*4c3888b8SHans Rosenfeld 
360*4c3888b8SHans Rosenfeld typedef struct qlt_rom_image {
361*4c3888b8SHans Rosenfeld 	qlt_rom_header_t	header;
362*4c3888b8SHans Rosenfeld 	qlt_rom_data_t		data;
363*4c3888b8SHans Rosenfeld 	uint32_t		cksum;
364*4c3888b8SHans Rosenfeld } qlt_rom_image_t;
365*4c3888b8SHans Rosenfeld 
366*4c3888b8SHans Rosenfeld #define	PCI_HEADER0		0x55
367*4c3888b8SHans Rosenfeld #define	PCI_HEADER1		0xAA
368*4c3888b8SHans Rosenfeld #define	PCI_DATASIG		"PCIR"
369*4c3888b8SHans Rosenfeld #define	PCI_SECTOR_SIZE		0x200
370*4c3888b8SHans Rosenfeld #define	PCI_CODE_X86PC		0
371*4c3888b8SHans Rosenfeld #define	PCI_CODE_FCODE		1
372*4c3888b8SHans Rosenfeld #define	PCI_CODE_HPPA		2
373*4c3888b8SHans Rosenfeld #define	PCI_CODE_EFI		3
374*4c3888b8SHans Rosenfeld #define	PCI_CODE_FW		0xfe
375*4c3888b8SHans Rosenfeld #define	PCI_IND_LAST_IMAGE	0x80
376*4c3888b8SHans Rosenfeld #define	SBUS_CODE_FCODE		0xf1
377*4c3888b8SHans Rosenfeld 
378*4c3888b8SHans Rosenfeld /*
379*4c3888b8SHans Rosenfeld  * Firmware Dump structure definition
380*4c3888b8SHans Rosenfeld  */
381*4c3888b8SHans Rosenfeld #define	QL_2200_FW_DUMP_SIZE	0x68000		/* bytes */
382*4c3888b8SHans Rosenfeld #define	QL_2300_FW_DUMP_SIZE	0xE2000		/* bytes */
383*4c3888b8SHans Rosenfeld #define	QL_6322_FW_DUMP_SIZE	0xE2000		/* bytes */
384*4c3888b8SHans Rosenfeld #define	QL_24XX_FW_DUMP_SIZE	0x0330000	/* bytes */
385*4c3888b8SHans Rosenfeld #define	QL_25XX_FW_DUMP_SIZE	0x0330000	/* bytes */
386*4c3888b8SHans Rosenfeld 
387*4c3888b8SHans Rosenfeld #define	QL_24XX_VPD_SIZE	0x200		/* bytes */
388*4c3888b8SHans Rosenfeld #define	QL_24XX_SFP_SIZE	0x200		/* bytes */
389*4c3888b8SHans Rosenfeld 
390*4c3888b8SHans Rosenfeld #define	LNF_NVRAM_DATA		BIT_0
391*4c3888b8SHans Rosenfeld #define	LNF_VPD_DATA		BIT_1
392*4c3888b8SHans Rosenfeld #define	LNF_BFE_DATA		BIT_2
393*4c3888b8SHans Rosenfeld 
394fcf3ce44SJohn Forte typedef struct qlt_nvram {
395fcf3ce44SJohn Forte 	/* NVRAM header. */
396fcf3ce44SJohn Forte 	uint8_t id[4];
397fcf3ce44SJohn Forte 	uint8_t nvram_version[2];
398fcf3ce44SJohn Forte 	uint8_t reserved_0[2];
399fcf3ce44SJohn Forte 
400fcf3ce44SJohn Forte 	/* Firmware Initialization Control Block. */
401fcf3ce44SJohn Forte 	uint8_t version[2];
402fcf3ce44SJohn Forte 	uint8_t reserved_1[2];
403fcf3ce44SJohn Forte 	uint8_t max_frame_length[2];
404fcf3ce44SJohn Forte 	uint8_t execution_throttle[2];
405fcf3ce44SJohn Forte 	uint8_t exchange_count[2];
406fcf3ce44SJohn Forte 	uint8_t hard_address[2];
407fcf3ce44SJohn Forte 	uint8_t port_name[8];
408fcf3ce44SJohn Forte 	uint8_t node_name[8];
409fcf3ce44SJohn Forte 	uint8_t login_retry_count[2];
410fcf3ce44SJohn Forte 	uint8_t link_down_on_nos[2];
411fcf3ce44SJohn Forte 	uint8_t interrupt_delay_timer[2];
412fcf3ce44SJohn Forte 	uint8_t login_timeout[2];
413fcf3ce44SJohn Forte 
414fcf3ce44SJohn Forte 	/*
415fcf3ce44SJohn Forte 	 * BIT 0  = Hard Assigned Loop ID
416fcf3ce44SJohn Forte 	 * BIT 1  = Enable Fairness
417fcf3ce44SJohn Forte 	 * BIT 2  = Enable Full-Duplex
418fcf3ce44SJohn Forte 	 * BIT 3  = Reserved
419fcf3ce44SJohn Forte 	 * BIT 4  = Target Mode Enable
420fcf3ce44SJohn Forte 	 * BIT 5  = Initiator Mode Disable
421fcf3ce44SJohn Forte 	 * BIT 6  = Reserved
422fcf3ce44SJohn Forte 	 * BIT 7  = Reserved
423fcf3ce44SJohn Forte 	 *
424fcf3ce44SJohn Forte 	 * BIT 8  = Reserved
425fcf3ce44SJohn Forte 	 * BIT 9  = Disable Initial LIP
426fcf3ce44SJohn Forte 	 * BIT 10 = Descending Loop ID Search
427fcf3ce44SJohn Forte 	 * BIT 11 = Previous Assigned Loop ID
428fcf3ce44SJohn Forte 	 * BIT 12 = Reserved
429fcf3ce44SJohn Forte 	 * BIT 13 = Full Login after LIP
430fcf3ce44SJohn Forte 	 * BIT 14 = Node Name Option
431fcf3ce44SJohn Forte 	 * BIT 15-31 = Reserved
432fcf3ce44SJohn Forte 	 */
433fcf3ce44SJohn Forte 	uint8_t firmware_options_1[4];
434fcf3ce44SJohn Forte 
435fcf3ce44SJohn Forte 	/*
436fcf3ce44SJohn Forte 	 * BIT 0  = Operation Mode bit 0
437fcf3ce44SJohn Forte 	 * BIT 1  = Operation Mode bit 1
438fcf3ce44SJohn Forte 	 * BIT 2  = Operation Mode bit 2
439fcf3ce44SJohn Forte 	 * BIT 3  = Operation Mode bit 3
440fcf3ce44SJohn Forte 	 * BIT 4  = Connection Options bit 0
441fcf3ce44SJohn Forte 	 * BIT 5  = Connection Options bit 1
442fcf3ce44SJohn Forte 	 * BIT 6  = Connection Options bit 2
443fcf3ce44SJohn Forte 	 * BIT 7  = Enable Non part on LIHA failure
444fcf3ce44SJohn Forte 	 *
445fcf3ce44SJohn Forte 	 * BIT 8  = Enable Class 2
446fcf3ce44SJohn Forte 	 * BIT 9  = Enable ACK0
447fcf3ce44SJohn Forte 	 * BIT 10 = Reserved
448fcf3ce44SJohn Forte 	 * BIT 11 = Enable FC-SP Security
449fcf3ce44SJohn Forte 	 * BIT 12 = FC Tape Enable
450fcf3ce44SJohn Forte 	 * BIT 13-31 = Reserved
451fcf3ce44SJohn Forte 	 */
452fcf3ce44SJohn Forte 	uint8_t firmware_options_2[4];
453fcf3ce44SJohn Forte 
454fcf3ce44SJohn Forte 	/*
455fcf3ce44SJohn Forte 	 * BIT 0  = Reserved
456fcf3ce44SJohn Forte 	 * BIT 1  = Soft ID only
457fcf3ce44SJohn Forte 	 * BIT 2  = Reserved
458fcf3ce44SJohn Forte 	 * BIT 3  = Reserved
459fcf3ce44SJohn Forte 	 * BIT 4  = FCP RSP Payload bit 0
460fcf3ce44SJohn Forte 	 * BIT 5  = FCP RSP Payload bit 1
461fcf3ce44SJohn Forte 	 * BIT 6  = Enable Rec Out-of-Order data frame handling
462fcf3ce44SJohn Forte 	 * BIT 7  = Disable Automatic PLOGI on Local Loop
463fcf3ce44SJohn Forte 	 *
464fcf3ce44SJohn Forte 	 * BIT 8  = Reserved
465fcf3ce44SJohn Forte 	 * BIT 9  = Enable Out-of-Order FCP_XFER_RDY relative
466fcf3ce44SJohn Forte 	 *	    offset handling
467fcf3ce44SJohn Forte 	 * BIT 10 = Reserved
468fcf3ce44SJohn Forte 	 * BIT 11 = Reserved
469fcf3ce44SJohn Forte 	 * BIT 12 = Reserved
470fcf3ce44SJohn Forte 	 * BIT 13 = Data Rate bit 0
471fcf3ce44SJohn Forte 	 * BIT 14 = Data Rate bit 1
472fcf3ce44SJohn Forte 	 * BIT 15 = Data Rate bit 2
473fcf3ce44SJohn Forte 	 * BIT 16 = 75-ohm Termination Select
474fcf3ce44SJohn Forte 	 * BIT 17-31 = Reserved
475fcf3ce44SJohn Forte 	 */
476fcf3ce44SJohn Forte 	uint8_t firmware_options_3[4];
477fcf3ce44SJohn Forte 
478fcf3ce44SJohn Forte 	/*
479fcf3ce44SJohn Forte 	 * Serial Link Control (offset 56)
480fcf3ce44SJohn Forte 	 * BIT 0  = control enable
481fcf3ce44SJohn Forte 	 * BIT 1-15 = Reserved
482fcf3ce44SJohn Forte 	 */
483fcf3ce44SJohn Forte 	uint8_t swing_opt[2];
484fcf3ce44SJohn Forte 
485fcf3ce44SJohn Forte 	/*
486fcf3ce44SJohn Forte 	 * Serial Link Control 1G (offset 58)
487fcf3ce44SJohn Forte 	 * BIT 0-7   = Reserved
488fcf3ce44SJohn Forte 	 *
489fcf3ce44SJohn Forte 	 * BIT 8-10  = output swing
490fcf3ce44SJohn Forte 	 * BIT 11-13 = output emphasis
491fcf3ce44SJohn Forte 	 * BIT 14-15 = Reserved
492fcf3ce44SJohn Forte 	 */
493fcf3ce44SJohn Forte 	uint8_t swing_1g[2];
494fcf3ce44SJohn Forte 
495fcf3ce44SJohn Forte 	/*
496fcf3ce44SJohn Forte 	 * Serial Link Control 2G (offset 60)
497fcf3ce44SJohn Forte 	 * BIT 0-7   = Reserved
498fcf3ce44SJohn Forte 	 *
499fcf3ce44SJohn Forte 	 * BIT 8-10  = output swing
500fcf3ce44SJohn Forte 	 * BIT 11-13 = output emphasis
501fcf3ce44SJohn Forte 	 * BIT 14-15 = Reserved
502fcf3ce44SJohn Forte 	 */
503fcf3ce44SJohn Forte 	uint8_t swing_2g[2];
504fcf3ce44SJohn Forte 
505fcf3ce44SJohn Forte 	/*
506fcf3ce44SJohn Forte 	 * Serial Link Control 4G (offset 62)
507fcf3ce44SJohn Forte 	 * BIT 0-7   = Reserved
508fcf3ce44SJohn Forte 	 *
509fcf3ce44SJohn Forte 	 * BIT 8-10  = output swing
510fcf3ce44SJohn Forte 	 * BIT 11-13 = output emphasis
511fcf3ce44SJohn Forte 	 * BIT 14-15 = Reserved
512fcf3ce44SJohn Forte 	 */
513fcf3ce44SJohn Forte 	uint8_t swing_4g[2];
514fcf3ce44SJohn Forte 
515fcf3ce44SJohn Forte 	/* Offset 64. */
516fcf3ce44SJohn Forte 	uint8_t reserved_2[32];
517fcf3ce44SJohn Forte 
518fcf3ce44SJohn Forte 	/* Offset 96. */
519fcf3ce44SJohn Forte 	uint8_t reserved_3[32];
520fcf3ce44SJohn Forte 
521fcf3ce44SJohn Forte 	/* PCIe table entries. */
522fcf3ce44SJohn Forte 	uint8_t reserved_4[32];
523fcf3ce44SJohn Forte 
524fcf3ce44SJohn Forte 	/* Offset 160. */
525fcf3ce44SJohn Forte 	uint8_t reserved_5[32];
526fcf3ce44SJohn Forte 
527fcf3ce44SJohn Forte 	/* Offset 192. */
528fcf3ce44SJohn Forte 	uint8_t reserved_6[32];
529fcf3ce44SJohn Forte 
530fcf3ce44SJohn Forte 	/* Offset 224. */
531fcf3ce44SJohn Forte 	uint8_t reserved_7[32];
532fcf3ce44SJohn Forte 
533fcf3ce44SJohn Forte 	/*
534fcf3ce44SJohn Forte 	 * BIT 0  = Enable spinup delay
535fcf3ce44SJohn Forte 	 * BIT 1  = Disable BIOS
536fcf3ce44SJohn Forte 	 * BIT 2  = Enable Memory Map BIOS
537fcf3ce44SJohn Forte 	 * BIT 3  = Enable Selectable Boot
538fcf3ce44SJohn Forte 	 * BIT 4  = Disable RISC code load
539fcf3ce44SJohn Forte 	 * BIT 5  = Disable serdes
540fcf3ce44SJohn Forte 	 * BIT 6  = Enable opt boot mode
541fcf3ce44SJohn Forte 	 * BIT 7  = Enable int mode BIOS
542fcf3ce44SJohn Forte 	 *
543fcf3ce44SJohn Forte 	 * BIT 8  =
544fcf3ce44SJohn Forte 	 * BIT 9  =
545fcf3ce44SJohn Forte 	 * BIT 10 = Enable lip full login
546fcf3ce44SJohn Forte 	 * BIT 11 = Enable target reset
547fcf3ce44SJohn Forte 	 * BIT 12 =
548fcf3ce44SJohn Forte 	 * BIT 13 = Default Node Name Option
549fcf3ce44SJohn Forte 	 * BIT 14 = Default valid
550fcf3ce44SJohn Forte 	 * BIT 15 = Enable alternate WWN
551fcf3ce44SJohn Forte 	 *
552fcf3ce44SJohn Forte 	 * BIT 16-31 =
553fcf3ce44SJohn Forte 	 */
554fcf3ce44SJohn Forte 	uint8_t host_p[4];
555fcf3ce44SJohn Forte 
556fcf3ce44SJohn Forte 	uint8_t alternate_port_name[8];
557fcf3ce44SJohn Forte 	uint8_t alternate_node_name[8];
558fcf3ce44SJohn Forte 
559fcf3ce44SJohn Forte 	uint8_t boot_port_name[8];
560fcf3ce44SJohn Forte 	uint8_t boot_lun_number[2];
561fcf3ce44SJohn Forte 	uint8_t reserved_8[2];
562fcf3ce44SJohn Forte 
563fcf3ce44SJohn Forte 	uint8_t alt1_boot_port_name[8];
564fcf3ce44SJohn Forte 	uint8_t alt1_boot_lun_number[2];
565fcf3ce44SJohn Forte 	uint8_t reserved_9[2];
566fcf3ce44SJohn Forte 
567fcf3ce44SJohn Forte 	uint8_t alt2_boot_port_name[8];
568fcf3ce44SJohn Forte 	uint8_t alt2_boot_lun_number[2];
569fcf3ce44SJohn Forte 	uint8_t reserved_10[2];
570fcf3ce44SJohn Forte 
571fcf3ce44SJohn Forte 	uint8_t alt3_boot_port_name[8];
572fcf3ce44SJohn Forte 	uint8_t alt3_boot_lun_number[2];
573fcf3ce44SJohn Forte 	uint8_t reserved_11[2];
574fcf3ce44SJohn Forte 
575fcf3ce44SJohn Forte 	/*
576fcf3ce44SJohn Forte 	 * BIT 0 = Selective Login
577fcf3ce44SJohn Forte 	 * BIT 1 = Alt-Boot Enable
578fcf3ce44SJohn Forte 	 * BIT 2 = Reserved
579fcf3ce44SJohn Forte 	 * BIT 3 = Enable Boot Order List
580fcf3ce44SJohn Forte 	 * BIT 4 = Reserved
581fcf3ce44SJohn Forte 	 * BIT 5 = Enable Selective LUN
582fcf3ce44SJohn Forte 	 * BIT 6 = Reserved
583fcf3ce44SJohn Forte 	 * BIT 7-31 =
584fcf3ce44SJohn Forte 	 */
585fcf3ce44SJohn Forte 	uint8_t efi_parameters[4];
586fcf3ce44SJohn Forte 
587fcf3ce44SJohn Forte 	uint8_t reset_delay;
588fcf3ce44SJohn Forte 	uint8_t reserved_12;
589fcf3ce44SJohn Forte 	uint8_t reserved_13[2];
590fcf3ce44SJohn Forte 
591fcf3ce44SJohn Forte 	uint8_t boot_id_number[2];
592fcf3ce44SJohn Forte 	uint8_t reserved_14[2];
593fcf3ce44SJohn Forte 
594fcf3ce44SJohn Forte 	uint8_t max_luns_per_target[2];
595fcf3ce44SJohn Forte 	uint8_t reserved_15[2];
596fcf3ce44SJohn Forte 
597fcf3ce44SJohn Forte 	uint8_t port_down_retry_count[2];
598fcf3ce44SJohn Forte 	uint8_t link_down_timeout[2];
599fcf3ce44SJohn Forte 
600fcf3ce44SJohn Forte 	/*
601fcf3ce44SJohn Forte 	 * FCode parameters word (offset 344)
602fcf3ce44SJohn Forte 	 *
603fcf3ce44SJohn Forte 	 * BIT 0 = Enable BIOS pathname
604fcf3ce44SJohn Forte 	 * BIT 1 = fcode qlc
605fcf3ce44SJohn Forte 	 * BIT 2 = fcode host
606fcf3ce44SJohn Forte 	 * BIT 3-7 =
607fcf3ce44SJohn Forte 	 */
608fcf3ce44SJohn Forte 	uint8_t	fcode_p0;
609fcf3ce44SJohn Forte 	uint8_t reserved_16[7];
610fcf3ce44SJohn Forte 
611fcf3ce44SJohn Forte 	/* Offset 352. */
612fcf3ce44SJohn Forte 	uint8_t prev_drv_ver_major;
613fcf3ce44SJohn Forte 	uint8_t prev_drv_ver_submajob;
614fcf3ce44SJohn Forte 	uint8_t prev_drv_ver_minor;
615fcf3ce44SJohn Forte 	uint8_t prev_drv_ver_subminor;
616fcf3ce44SJohn Forte 
617fcf3ce44SJohn Forte 	uint8_t prev_bios_ver_major[2];
618fcf3ce44SJohn Forte 	uint8_t prev_bios_ver_minor[2];
619fcf3ce44SJohn Forte 
620fcf3ce44SJohn Forte 	uint8_t prev_efi_ver_major[2];
621fcf3ce44SJohn Forte 	uint8_t prev_efi_ver_minor[2];
622fcf3ce44SJohn Forte 
623fcf3ce44SJohn Forte 	uint8_t prev_fw_ver_major[2];
624fcf3ce44SJohn Forte 	uint8_t prev_fw_ver_minor;
625fcf3ce44SJohn Forte 	uint8_t prev_fw_ver_subminor;
626fcf3ce44SJohn Forte 
627fcf3ce44SJohn Forte 	uint8_t reserved_17[16];
628fcf3ce44SJohn Forte 
629fcf3ce44SJohn Forte 	/* Offset 384. */
630fcf3ce44SJohn Forte 	uint8_t	def_port_name[8];
631fcf3ce44SJohn Forte 	uint8_t def_node_name[8];
632fcf3ce44SJohn Forte 
633fcf3ce44SJohn Forte 	uint8_t reserved_18[16];
634fcf3ce44SJohn Forte 
635fcf3ce44SJohn Forte 	/* Offset 416. */
636fcf3ce44SJohn Forte 	uint8_t reserved_19[32];
637fcf3ce44SJohn Forte 
638fcf3ce44SJohn Forte 	/* Offset 448. */
639fcf3ce44SJohn Forte 	uint8_t reserved_20[28];
640fcf3ce44SJohn Forte 
641fcf3ce44SJohn Forte 	/* Offset 476. */
642fcf3ce44SJohn Forte 	uint8_t	fw_table_offset[2];
643fcf3ce44SJohn Forte 	uint8_t fw_table_sig[2];
644fcf3ce44SJohn Forte 
645fcf3ce44SJohn Forte 	/* Offset 480. */
646fcf3ce44SJohn Forte 	uint8_t model_name[8];
647fcf3ce44SJohn Forte 
648fcf3ce44SJohn Forte 	/* Offset 488. */
649fcf3ce44SJohn Forte 	uint8_t power_table[16];
650fcf3ce44SJohn Forte 
651fcf3ce44SJohn Forte 	uint8_t subsystem_vendor_id[2];
652fcf3ce44SJohn Forte 	uint8_t subsystem_device_id[2];
653fcf3ce44SJohn Forte 
654fcf3ce44SJohn Forte 	uint8_t checksum[4];
655fcf3ce44SJohn Forte } qlt_nvram_t;
656fcf3ce44SJohn Forte 
657c4ddbbe1SDaniel Beauregard /* ISP81xx Extended Initialisation Control Block */
658c4ddbbe1SDaniel Beauregard typedef struct qlt_ext_icb_81xx {
659c4ddbbe1SDaniel Beauregard 
660c4ddbbe1SDaniel Beauregard 	uint8_t version[2];
661c4ddbbe1SDaniel Beauregard 	uint8_t fcf_vlan_match;
662c4ddbbe1SDaniel Beauregard 	uint8_t reserved_6[3];
663c4ddbbe1SDaniel Beauregard 	uint8_t fcf_vlan_id[2];
664c4ddbbe1SDaniel Beauregard 	uint8_t fcf_fabric_name[8];
665c4ddbbe1SDaniel Beauregard 	uint8_t reserved_7[14];
666c4ddbbe1SDaniel Beauregard 	uint8_t spma_proposed_mac_address[6];
667c4ddbbe1SDaniel Beauregard 	uint8_t reserved_8[28];
668c4ddbbe1SDaniel Beauregard 
669c4ddbbe1SDaniel Beauregard } qlt_ext_icb_81xx_t;
670c4ddbbe1SDaniel Beauregard 
671c4ddbbe1SDaniel Beauregard typedef struct qlt_nvram_81xx {
672c4ddbbe1SDaniel Beauregard 	/* NVRAM header. */
673c4ddbbe1SDaniel Beauregard 	uint8_t id[4];
674c4ddbbe1SDaniel Beauregard 	uint8_t nvram_version[2];
675c4ddbbe1SDaniel Beauregard 	uint8_t reserved_0[2];
676c4ddbbe1SDaniel Beauregard 
677c4ddbbe1SDaniel Beauregard 	/* Firmware Initialization Control Block. */
678c4ddbbe1SDaniel Beauregard 	uint8_t version[2];
679c4ddbbe1SDaniel Beauregard 	uint8_t reserved_1[2];
680c4ddbbe1SDaniel Beauregard 	uint8_t max_frame_length[2];
681c4ddbbe1SDaniel Beauregard 	uint8_t execution_throttle[2];
682c4ddbbe1SDaniel Beauregard 	uint8_t exchange_count[2];
683c4ddbbe1SDaniel Beauregard 	uint8_t reserved_2[2];
684c4ddbbe1SDaniel Beauregard 	uint8_t port_name[8];
685c4ddbbe1SDaniel Beauregard 	uint8_t node_name[8];
686c4ddbbe1SDaniel Beauregard 	uint8_t login_retry_count[2];
687c4ddbbe1SDaniel Beauregard 	uint8_t reserved_3[2];
688c4ddbbe1SDaniel Beauregard 	uint8_t interrupt_delay_timer[2];
689c4ddbbe1SDaniel Beauregard 	uint8_t login_timeout[2];
690c4ddbbe1SDaniel Beauregard 
691c4ddbbe1SDaniel Beauregard 	/*
692c4ddbbe1SDaniel Beauregard 	 * BIT 0  = Hard Assigned Loop ID
693c4ddbbe1SDaniel Beauregard 	 * BIT 1  = Enable Fairness
694c4ddbbe1SDaniel Beauregard 	 * BIT 2  = Enable Full-Duplex
695c4ddbbe1SDaniel Beauregard 	 * BIT 3  = Reserved
696c4ddbbe1SDaniel Beauregard 	 * BIT 4  = Target Mode Enable
697c4ddbbe1SDaniel Beauregard 	 * BIT 5  = Initiator Mode Disable
698c4ddbbe1SDaniel Beauregard 	 * BIT 6  = Reserved
699c4ddbbe1SDaniel Beauregard 	 * BIT 7  = Reserved
700c4ddbbe1SDaniel Beauregard 	 *
701c4ddbbe1SDaniel Beauregard 	 * BIT 8  = Reserved
702c4ddbbe1SDaniel Beauregard 	 * BIT 9  = Reserved
703c4ddbbe1SDaniel Beauregard 	 * BIT 10 = Reserved
704c4ddbbe1SDaniel Beauregard 	 * BIT 11 = Reserved
705c4ddbbe1SDaniel Beauregard 	 * BIT 12 = Reserved
706c4ddbbe1SDaniel Beauregard 	 * BIT 13 = Reserved
707c4ddbbe1SDaniel Beauregard 	 * BIT 14 = Node Name Option
708c4ddbbe1SDaniel Beauregard 	 * BIT 15-31 = Reserved
709c4ddbbe1SDaniel Beauregard 	 */
710c4ddbbe1SDaniel Beauregard 	uint8_t firmware_options_1[4];
711c4ddbbe1SDaniel Beauregard 
712c4ddbbe1SDaniel Beauregard 	/*
713c4ddbbe1SDaniel Beauregard 	 * BIT 0  = Operation Mode bit 0
714c4ddbbe1SDaniel Beauregard 	 * BIT 1  = Operation Mode bit 1
715c4ddbbe1SDaniel Beauregard 	 * BIT 2  = Operation Mode bit 2
716c4ddbbe1SDaniel Beauregard 	 * BIT 3  = Operation Mode bit 3
717c4ddbbe1SDaniel Beauregard 	 * BIT 4  = Reserved
718c4ddbbe1SDaniel Beauregard 	 * BIT 5  = Reserved
719c4ddbbe1SDaniel Beauregard 	 * BIT 6  = Reserved
720c4ddbbe1SDaniel Beauregard 	 * BIT 7  = Reserved
721c4ddbbe1SDaniel Beauregard 	 *
722c4ddbbe1SDaniel Beauregard 	 * BIT 8  = Enable Class 2
723c4ddbbe1SDaniel Beauregard 	 * BIT 9  = Enable ACK0
724c4ddbbe1SDaniel Beauregard 	 * BIT 10 = Reserved
725c4ddbbe1SDaniel Beauregard 	 * BIT 11 = Enable FC-SP Security
726c4ddbbe1SDaniel Beauregard 	 * BIT 12 = FC Tape Enable
727c4ddbbe1SDaniel Beauregard 	 * BIT 13 = Reserved
728c4ddbbe1SDaniel Beauregard 	 * BIT 14 = Target PRLI Control
729c4ddbbe1SDaniel Beauregard 	 * BIT 15-31 = Reserved
730c4ddbbe1SDaniel Beauregard 	 */
731c4ddbbe1SDaniel Beauregard 	uint8_t firmware_options_2[4];
732c4ddbbe1SDaniel Beauregard 
733c4ddbbe1SDaniel Beauregard 	/*
734c4ddbbe1SDaniel Beauregard 	 * BIT 0  = Reserved
735c4ddbbe1SDaniel Beauregard 	 * BIT 1  = Soft ID only
736c4ddbbe1SDaniel Beauregard 	 * BIT 2  = Reserved
737c4ddbbe1SDaniel Beauregard 	 * BIT 3  = Reserved
738c4ddbbe1SDaniel Beauregard 	 * BIT 4  = FCP RSP Payload bit 0
739c4ddbbe1SDaniel Beauregard 	 * BIT 5  = FCP RSP Payload bit 1
740c4ddbbe1SDaniel Beauregard 	 * BIT 6  = Enable Rec Out-of-Order data frame handling
741c4ddbbe1SDaniel Beauregard 	 * BIT 7  = Reserved
742c4ddbbe1SDaniel Beauregard 	 *
743c4ddbbe1SDaniel Beauregard 	 * BIT 8  = Reserved
744c4ddbbe1SDaniel Beauregard 	 * BIT 9  = Enable Out-of-Order FCP_XFER_RDY relative
745c4ddbbe1SDaniel Beauregard 	 *	    offset handling
746c4ddbbe1SDaniel Beauregard 	 * BIT 10 = Reserved
747c4ddbbe1SDaniel Beauregard 	 * BIT 11 = Reserved
748c4ddbbe1SDaniel Beauregard 	 * BIT 12 = Reserved
749c4ddbbe1SDaniel Beauregard 	 * BIT 13 = Reserved
750c4ddbbe1SDaniel Beauregard 	 * BIT 14 = Reserved
751c4ddbbe1SDaniel Beauregard 	 * BIT 15 = Reserved
752c4ddbbe1SDaniel Beauregard 	 * BIT 16 = Reserved
753c4ddbbe1SDaniel Beauregard 	 * BIT 17 = Enable Multiple FCFs
754c4ddbbe1SDaniel Beauregard 	 * BIT 18-20 = MAC Addressing Mode
755c4ddbbe1SDaniel Beauregard 	 * BIT 21-25 = Ethernet Data Rate
756c4ddbbe1SDaniel Beauregard 	 * BIT 26 = Enable Ethernet Header Receive ATIO_Q
757c4ddbbe1SDaniel Beauregard 	 * BIT 27 = Enable Ethernet Header Receive RSP_Q
758c4ddbbe1SDaniel Beauregard 	 * BIT 28-29 = SPMA Selection
759c4ddbbe1SDaniel Beauregard 	 * BIT 30-31 = Reserved
760c4ddbbe1SDaniel Beauregard 	 */
761c4ddbbe1SDaniel Beauregard 	uint8_t firmware_options_3[4];
762c4ddbbe1SDaniel Beauregard 
763c4ddbbe1SDaniel Beauregard 	/* Offset 56 (38h). */
764c4ddbbe1SDaniel Beauregard 	uint8_t reserved_4[8];
765c4ddbbe1SDaniel Beauregard 
766c4ddbbe1SDaniel Beauregard 	/* Offset 64 (40h). */
767c4ddbbe1SDaniel Beauregard 	uint8_t enode_mac[6];
768c4ddbbe1SDaniel Beauregard 
769c4ddbbe1SDaniel Beauregard 	/* Offset 70 (46h). */
770c4ddbbe1SDaniel Beauregard 	uint8_t reserved_5[26];
771c4ddbbe1SDaniel Beauregard 
772c4ddbbe1SDaniel Beauregard 	/* Offset 96 (60h). */
773c4ddbbe1SDaniel Beauregard 	uint8_t oem_specific;
774c4ddbbe1SDaniel Beauregard 	uint8_t reserved_6[15];
775c4ddbbe1SDaniel Beauregard 
776c4ddbbe1SDaniel Beauregard 	/* Offset 112 (70h). */
777c4ddbbe1SDaniel Beauregard 	uint8_t reserved_7[16];
778c4ddbbe1SDaniel Beauregard 
779c4ddbbe1SDaniel Beauregard 	/* Offset 128 (80h). */
780c4ddbbe1SDaniel Beauregard 	qlt_ext_icb_81xx_t   ext_blk;
781c4ddbbe1SDaniel Beauregard 
782c4ddbbe1SDaniel Beauregard 	/* Offset 192. */
783c4ddbbe1SDaniel Beauregard 	uint8_t reserved_8[32];
784c4ddbbe1SDaniel Beauregard 
785c4ddbbe1SDaniel Beauregard 	/* Offset 224. */
786c4ddbbe1SDaniel Beauregard 	uint8_t reserved_9[32];
787c4ddbbe1SDaniel Beauregard 
788c4ddbbe1SDaniel Beauregard 	uint8_t host_p[4];
789c4ddbbe1SDaniel Beauregard 
790c4ddbbe1SDaniel Beauregard 	uint8_t alternate_port_name[8];
791c4ddbbe1SDaniel Beauregard 	uint8_t alternate_name_name[8];
792c4ddbbe1SDaniel Beauregard 
793c4ddbbe1SDaniel Beauregard 	uint8_t boot_port_name[8];
794c4ddbbe1SDaniel Beauregard 	uint8_t boot_lun_number[2];
795c4ddbbe1SDaniel Beauregard 	uint8_t reserved_10[2];
796c4ddbbe1SDaniel Beauregard 
797c4ddbbe1SDaniel Beauregard 	uint8_t alt1_boot_port_name[8];
798c4ddbbe1SDaniel Beauregard 	uint8_t alt1_boot_lun_number[2];
799c4ddbbe1SDaniel Beauregard 	uint8_t reserved_11[2];
800c4ddbbe1SDaniel Beauregard 
801c4ddbbe1SDaniel Beauregard 	uint8_t alt2_boot_port_name[8];
802c4ddbbe1SDaniel Beauregard 	uint8_t alt2_boot_lun_number[2];
803c4ddbbe1SDaniel Beauregard 	uint8_t reserved_12[2];
804c4ddbbe1SDaniel Beauregard 
805c4ddbbe1SDaniel Beauregard 	uint8_t alt3_boot_port_name[8];
806c4ddbbe1SDaniel Beauregard 	uint8_t alt3_boot_lun_number[2];
807c4ddbbe1SDaniel Beauregard 	uint8_t reserved_13[2];
808c4ddbbe1SDaniel Beauregard 
809c4ddbbe1SDaniel Beauregard 	/*
810c4ddbbe1SDaniel Beauregard 	 * BIT 0 = Selective Login
811c4ddbbe1SDaniel Beauregard 	 * BIT 1 = Alt-Boot Enable
812c4ddbbe1SDaniel Beauregard 	 * BIT 2 = Reserved
813c4ddbbe1SDaniel Beauregard 	 * BIT 3 = Enable Boot Order List
814c4ddbbe1SDaniel Beauregard 	 * BIT 4 = Reserved
815c4ddbbe1SDaniel Beauregard 	 * BIT 5 = Enable Selective LUN
816c4ddbbe1SDaniel Beauregard 	 * BIT 6 = Reserved
817c4ddbbe1SDaniel Beauregard 	 * BIT 7-31 =
818c4ddbbe1SDaniel Beauregard 	 */
819c4ddbbe1SDaniel Beauregard 	uint8_t efi_parameters[4];
820c4ddbbe1SDaniel Beauregard 
821c4ddbbe1SDaniel Beauregard 	uint8_t reset_delay;
822c4ddbbe1SDaniel Beauregard 	uint8_t reserved_14;
823c4ddbbe1SDaniel Beauregard 	uint8_t reserved_15[2];
824c4ddbbe1SDaniel Beauregard 
825c4ddbbe1SDaniel Beauregard 	uint8_t boot_id_number[2];
826c4ddbbe1SDaniel Beauregard 	uint8_t reserved_16[2];
827c4ddbbe1SDaniel Beauregard 
828c4ddbbe1SDaniel Beauregard 	uint8_t max_luns_per_target[2];
829c4ddbbe1SDaniel Beauregard 	uint8_t reserved_17[2];
830c4ddbbe1SDaniel Beauregard 
831c4ddbbe1SDaniel Beauregard 	uint8_t port_down_retry_count[2];
832c4ddbbe1SDaniel Beauregard 	uint8_t link_down_timeout[2];
833c4ddbbe1SDaniel Beauregard 
834c4ddbbe1SDaniel Beauregard 	/*
835c4ddbbe1SDaniel Beauregard 	 * FCode parameters word (offset 344)
836c4ddbbe1SDaniel Beauregard 	 *
837c4ddbbe1SDaniel Beauregard 	 * BIT 0 = Enable BIOS pathname
838c4ddbbe1SDaniel Beauregard 	 * BIT 1 = fcode qlc
839c4ddbbe1SDaniel Beauregard 	 * BIT 2 = fcode host
840c4ddbbe1SDaniel Beauregard 	 * BIT 3-7 =
841c4ddbbe1SDaniel Beauregard 	 */
842c4ddbbe1SDaniel Beauregard 	uint8_t	fcode_parameter[2];
843c4ddbbe1SDaniel Beauregard 	uint8_t reserved_18[6];
844c4ddbbe1SDaniel Beauregard 
845c4ddbbe1SDaniel Beauregard 	/* Offset 352. */
846c4ddbbe1SDaniel Beauregard 	uint8_t reserved_19[4];
847c4ddbbe1SDaniel Beauregard 	uint8_t reserved_20[10];
848c4ddbbe1SDaniel Beauregard 	uint8_t reserved_21[2];
849c4ddbbe1SDaniel Beauregard 	uint8_t reserved_22[16];
850c4ddbbe1SDaniel Beauregard 
851c4ddbbe1SDaniel Beauregard 	/* Offset 384. */
852c4ddbbe1SDaniel Beauregard 	uint8_t	reserved_23[16];
853c4ddbbe1SDaniel Beauregard 	uint8_t reserved_24[16];
854c4ddbbe1SDaniel Beauregard 
855c4ddbbe1SDaniel Beauregard 	/* Offset 416. */
856c4ddbbe1SDaniel Beauregard 	uint8_t reserved_25[64];
857c4ddbbe1SDaniel Beauregard 
858c4ddbbe1SDaniel Beauregard 	/* Offset 480. */
859c4ddbbe1SDaniel Beauregard 	uint8_t model_name[16];
860c4ddbbe1SDaniel Beauregard 
861c4ddbbe1SDaniel Beauregard 	/* Offset 496. */
862c4ddbbe1SDaniel Beauregard 	uint8_t feature_mask_l[2];
863c4ddbbe1SDaniel Beauregard 	uint8_t feature_mask_h[2];
864c4ddbbe1SDaniel Beauregard 	uint8_t reserved_26[4];
865c4ddbbe1SDaniel Beauregard 
866c4ddbbe1SDaniel Beauregard 	uint8_t subsystem_vendor_id[2];
867c4ddbbe1SDaniel Beauregard 	uint8_t subsystem_device_id[2];
868c4ddbbe1SDaniel Beauregard 
869c4ddbbe1SDaniel Beauregard 	uint8_t checksum[4];
870c4ddbbe1SDaniel Beauregard 
871c4ddbbe1SDaniel Beauregard } qlt_nvram_81xx_t;
872c4ddbbe1SDaniel Beauregard 
873*4c3888b8SHans Rosenfeld /*
874*4c3888b8SHans Rosenfeld  * firmware dump Entry Types
875*4c3888b8SHans Rosenfeld  */
876*4c3888b8SHans Rosenfeld #define	DT_NOP		 0
877*4c3888b8SHans Rosenfeld #define	DT_THDR		99
878*4c3888b8SHans Rosenfeld #define	DT_TEND		255
879*4c3888b8SHans Rosenfeld #define	DT_RIOB1	256
880*4c3888b8SHans Rosenfeld #define	DT_WIOB1	257
881*4c3888b8SHans Rosenfeld #define	DT_RIOB2	258
882*4c3888b8SHans Rosenfeld #define	DT_WIOB2	259
883*4c3888b8SHans Rosenfeld #define	DT_RPCI		260
884*4c3888b8SHans Rosenfeld #define	DT_WPCI		261
885*4c3888b8SHans Rosenfeld #define	DT_RRAM		262
886*4c3888b8SHans Rosenfeld #define	DT_GQUE		263
887*4c3888b8SHans Rosenfeld #define	DT_GFCE		264
888*4c3888b8SHans Rosenfeld #define	DT_PRISC	265
889*4c3888b8SHans Rosenfeld #define	DT_RRISC	266
890*4c3888b8SHans Rosenfeld #define	DT_DINT		267
891*4c3888b8SHans Rosenfeld #define	DT_GHBD		268
892*4c3888b8SHans Rosenfeld #define	DT_SCRA		269
893*4c3888b8SHans Rosenfeld #define	DT_RRREG	270
894*4c3888b8SHans Rosenfeld #define	DT_WRREG	271
895*4c3888b8SHans Rosenfeld #define	DT_RRRAM	272
896*4c3888b8SHans Rosenfeld #define	DT_RPCIC	273
897*4c3888b8SHans Rosenfeld #define	DT_GQUES	274
898*4c3888b8SHans Rosenfeld #define	DT_WDMP		275
899*4c3888b8SHans Rosenfeld 
900*4c3888b8SHans Rosenfeld /*
901*4c3888b8SHans Rosenfeld  * firmware dump Template Header (Entry Type 99)
902*4c3888b8SHans Rosenfeld  */
903*4c3888b8SHans Rosenfeld typedef struct qlt_dt_hdr {
904*4c3888b8SHans Rosenfeld 	uint32_t	type;
905*4c3888b8SHans Rosenfeld 	uint32_t	first_entry_offset;
906*4c3888b8SHans Rosenfeld 	uint32_t	size_of_template;
907*4c3888b8SHans Rosenfeld 	uint32_t	rsv;
908*4c3888b8SHans Rosenfeld 	uint32_t	num_of_entries;
909*4c3888b8SHans Rosenfeld 	uint32_t	version;
910*4c3888b8SHans Rosenfeld 	uint32_t	driver_timestamp;
911*4c3888b8SHans Rosenfeld 	uint32_t	checksum;
912*4c3888b8SHans Rosenfeld 	uint32_t	rsv_1;
913*4c3888b8SHans Rosenfeld 	uint32_t	driver_info[3];
914*4c3888b8SHans Rosenfeld 	uint32_t	saved_state_area[16];
915*4c3888b8SHans Rosenfeld 	uint32_t	rsv_2[8];
916*4c3888b8SHans Rosenfeld 	uint32_t	ver_attr[5];
917*4c3888b8SHans Rosenfeld } qlt_dt_hdr_t;
918*4c3888b8SHans Rosenfeld 
919*4c3888b8SHans Rosenfeld /*
920*4c3888b8SHans Rosenfeld  * firmware dump Common Entry Header
921*4c3888b8SHans Rosenfeld  */
922*4c3888b8SHans Rosenfeld typedef struct qlt_dt_entry_hdr {
923*4c3888b8SHans Rosenfeld 	uint32_t	type;
924*4c3888b8SHans Rosenfeld 	uint32_t	size;
925*4c3888b8SHans Rosenfeld 	uint32_t	rsv;
926*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN
927*4c3888b8SHans Rosenfeld 	uint8_t		driver_flags;
928*4c3888b8SHans Rosenfeld 	uint8_t		rsv_2;
929*4c3888b8SHans Rosenfeld 	uint8_t		rsv_1;
930*4c3888b8SHans Rosenfeld 	uint8_t		capture_flags;
931*4c3888b8SHans Rosenfeld #else
932*4c3888b8SHans Rosenfeld 	uint8_t		capture_flags;
933*4c3888b8SHans Rosenfeld 	uint8_t		rsv_1;
934*4c3888b8SHans Rosenfeld 	uint8_t		rsv_2;
935*4c3888b8SHans Rosenfeld 	uint8_t		driver_flags;
936*4c3888b8SHans Rosenfeld #endif
937*4c3888b8SHans Rosenfeld } qlt_dt_entry_hdr_t;
938*4c3888b8SHans Rosenfeld 
939*4c3888b8SHans Rosenfeld /*
940*4c3888b8SHans Rosenfeld  * Capture Flags
941*4c3888b8SHans Rosenfeld  */
942*4c3888b8SHans Rosenfeld #define	PF_ONLY_FLAG	BIT_0	/* Physical Function Only */
943*4c3888b8SHans Rosenfeld #define	PF_VF_FLAG	BIT_1	/* Physical and Virtual Functions */
944*4c3888b8SHans Rosenfeld 
945*4c3888b8SHans Rosenfeld /*
946*4c3888b8SHans Rosenfeld  * Driver Flags
947*4c3888b8SHans Rosenfeld  */
948*4c3888b8SHans Rosenfeld #define	SKIPPED_FLAG	BIT_7	/* driver skipped this entry  */
949*4c3888b8SHans Rosenfeld 
950*4c3888b8SHans Rosenfeld /*
951*4c3888b8SHans Rosenfeld  * firmware dump Entry Including Header
952*4c3888b8SHans Rosenfeld  */
953*4c3888b8SHans Rosenfeld typedef struct qlt_dt_entry {
954*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
955*4c3888b8SHans Rosenfeld 	uint32_t		data[1];
956*4c3888b8SHans Rosenfeld } qlt_dt_entry_t;
957*4c3888b8SHans Rosenfeld 
958*4c3888b8SHans Rosenfeld /*
959*4c3888b8SHans Rosenfeld  * firmware dump Template image
960*4c3888b8SHans Rosenfeld  */
961*4c3888b8SHans Rosenfeld typedef struct qlt_dmp_template {
962*4c3888b8SHans Rosenfeld 	uint32_t	rsv[2];
963*4c3888b8SHans Rosenfeld 	uint32_t	len;
964*4c3888b8SHans Rosenfeld 	uint32_t	major_ver;
965*4c3888b8SHans Rosenfeld 	uint32_t	minor_ver;
966*4c3888b8SHans Rosenfeld 	uint32_t	subminor_ver;
967*4c3888b8SHans Rosenfeld 	uint32_t	attribute;
968*4c3888b8SHans Rosenfeld 	qlt_dt_hdr_t	hdr;
969*4c3888b8SHans Rosenfeld 	qlt_dt_entry_t	entries[1];
970*4c3888b8SHans Rosenfeld } qlt_dmp_template_t;
971*4c3888b8SHans Rosenfeld 
972*4c3888b8SHans Rosenfeld typedef struct qlt_dt_riob1 {
973*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
974*4c3888b8SHans Rosenfeld 	uint32_t		addr;
975*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN
976*4c3888b8SHans Rosenfeld 	uint8_t			pci_offset;
977*4c3888b8SHans Rosenfeld 	uint8_t			reg_count_h;
978*4c3888b8SHans Rosenfeld 	uint8_t			reg_count_l;
979*4c3888b8SHans Rosenfeld 	uint8_t			reg_size;
980*4c3888b8SHans Rosenfeld #else
981*4c3888b8SHans Rosenfeld 	uint8_t			reg_size;
982*4c3888b8SHans Rosenfeld 	uint8_t			reg_count_l;
983*4c3888b8SHans Rosenfeld 	uint8_t			reg_count_h;
984*4c3888b8SHans Rosenfeld 	uint8_t			pci_offset;
985*4c3888b8SHans Rosenfeld #endif
986*4c3888b8SHans Rosenfeld } qlt_dt_riob1_t;
987*4c3888b8SHans Rosenfeld 
988*4c3888b8SHans Rosenfeld typedef struct qlt_dt_wiob1 {
989*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
990*4c3888b8SHans Rosenfeld 	uint32_t		addr;
991*4c3888b8SHans Rosenfeld 	uint32_t		data;
992*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN
993*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
994*4c3888b8SHans Rosenfeld 	uint8_t			pci_offset;
995*4c3888b8SHans Rosenfeld #else
996*4c3888b8SHans Rosenfeld 	uint8_t			pci_offset;
997*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
998*4c3888b8SHans Rosenfeld #endif
999*4c3888b8SHans Rosenfeld } qlt_dt_wiob1_t;
1000*4c3888b8SHans Rosenfeld 
1001*4c3888b8SHans Rosenfeld typedef struct qlt_dt_riob2 {
1002*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1003*4c3888b8SHans Rosenfeld 	uint32_t		addr;
1004*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN
1005*4c3888b8SHans Rosenfeld 	uint8_t			pci_offset;
1006*4c3888b8SHans Rosenfeld 	uint8_t			reg_count_h;
1007*4c3888b8SHans Rosenfeld 	uint8_t			reg_count_l;
1008*4c3888b8SHans Rosenfeld 	uint8_t			reg_size;
1009*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
1010*4c3888b8SHans Rosenfeld 	uint8_t			bank_sel_offset;
1011*4c3888b8SHans Rosenfeld #else
1012*4c3888b8SHans Rosenfeld 	uint8_t			reg_size;
1013*4c3888b8SHans Rosenfeld 	uint8_t			reg_count_l;
1014*4c3888b8SHans Rosenfeld 	uint8_t			reg_count_h;
1015*4c3888b8SHans Rosenfeld 	uint8_t			pci_offset;
1016*4c3888b8SHans Rosenfeld 	uint8_t			bank_sel_offset;
1017*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
1018*4c3888b8SHans Rosenfeld #endif
1019*4c3888b8SHans Rosenfeld 	uint32_t		reg_bank;
1020*4c3888b8SHans Rosenfeld } qlt_dt_riob2_t;
1021*4c3888b8SHans Rosenfeld 
1022*4c3888b8SHans Rosenfeld typedef struct qlt_dt_wiob2 {
1023*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1024*4c3888b8SHans Rosenfeld 	uint32_t		addr;
1025*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN
1026*4c3888b8SHans Rosenfeld 	uint8_t			rsv[2];
1027*4c3888b8SHans Rosenfeld 	uint8_t			data_h;
1028*4c3888b8SHans Rosenfeld 	uint8_t			data_l;
1029*4c3888b8SHans Rosenfeld 	uint8_t			bank_sel_offset;
1030*4c3888b8SHans Rosenfeld 	uint8_t			pci_offset;
1031*4c3888b8SHans Rosenfeld 	uint8_t			rsv1[2];
1032*4c3888b8SHans Rosenfeld #else
1033*4c3888b8SHans Rosenfeld 	uint8_t			data_l;
1034*4c3888b8SHans Rosenfeld 	uint8_t			data_h;
1035*4c3888b8SHans Rosenfeld 	uint8_t			rsv[2];
1036*4c3888b8SHans Rosenfeld 	uint8_t			rsv1[2];
1037*4c3888b8SHans Rosenfeld 	uint8_t			pci_offset;
1038*4c3888b8SHans Rosenfeld 	uint8_t			bank_sel_offset;
1039*4c3888b8SHans Rosenfeld #endif
1040*4c3888b8SHans Rosenfeld 	uint32_t		reg_bank;
1041*4c3888b8SHans Rosenfeld } qlt_dt_wiob2_t;
1042*4c3888b8SHans Rosenfeld 
1043*4c3888b8SHans Rosenfeld typedef struct qlt_dt_rpci {
1044*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1045*4c3888b8SHans Rosenfeld 	uint32_t		addr;
1046*4c3888b8SHans Rosenfeld } qlt_dt_rpci_t;
1047*4c3888b8SHans Rosenfeld 
1048*4c3888b8SHans Rosenfeld typedef struct qlt_dt_wpci {
1049*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1050*4c3888b8SHans Rosenfeld 	uint32_t		addr;
1051*4c3888b8SHans Rosenfeld 	uint32_t		data;
1052*4c3888b8SHans Rosenfeld } qlt_dt_wpci_t, qlt_dt_wrreg_t;
1053*4c3888b8SHans Rosenfeld 
1054*4c3888b8SHans Rosenfeld typedef struct qlt_dt_rram {
1055*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1056*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN
1057*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
1058*4c3888b8SHans Rosenfeld 	uint8_t			ram_area;
1059*4c3888b8SHans Rosenfeld #else
1060*4c3888b8SHans Rosenfeld 	uint8_t			ram_area;
1061*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
1062*4c3888b8SHans Rosenfeld #endif
1063*4c3888b8SHans Rosenfeld 	uint32_t		start_addr;
1064*4c3888b8SHans Rosenfeld 	uint32_t		end_addr;
1065*4c3888b8SHans Rosenfeld } qlt_dt_rram_t;
1066*4c3888b8SHans Rosenfeld 
1067*4c3888b8SHans Rosenfeld typedef struct qlt_dt_gque {
1068*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1069*4c3888b8SHans Rosenfeld 	uint32_t		num_queues;
1070*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN
1071*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
1072*4c3888b8SHans Rosenfeld 	uint8_t			queue_type;
1073*4c3888b8SHans Rosenfeld #else
1074*4c3888b8SHans Rosenfeld 	uint8_t			queue_type;
1075*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
1076*4c3888b8SHans Rosenfeld #endif
1077*4c3888b8SHans Rosenfeld } qlt_dt_gque_t, qlt_dt_gques_t;
1078*4c3888b8SHans Rosenfeld 
1079*4c3888b8SHans Rosenfeld typedef struct qlt_dt_gfce {
1080*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1081*4c3888b8SHans Rosenfeld 	uint32_t		fce_trace_size;
1082*4c3888b8SHans Rosenfeld 	uint32_t		write_pointer[2];
1083*4c3888b8SHans Rosenfeld 	uint32_t		base_pointer[2];
1084*4c3888b8SHans Rosenfeld 	uint32_t		fce_enable_mb0;
1085*4c3888b8SHans Rosenfeld 	uint32_t		fce_enable_mb2;
1086*4c3888b8SHans Rosenfeld 	uint32_t		fce_enable_mb3;
1087*4c3888b8SHans Rosenfeld 	uint32_t		fce_enable_mb4;
1088*4c3888b8SHans Rosenfeld 	uint32_t		fce_enable_mb5;
1089*4c3888b8SHans Rosenfeld 	uint32_t		fce_enable_mb6;
1090*4c3888b8SHans Rosenfeld } qlt_dt_gfce_t;
1091*4c3888b8SHans Rosenfeld 
1092*4c3888b8SHans Rosenfeld typedef struct qlt_dt_prisc {
1093*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1094*4c3888b8SHans Rosenfeld } qlt_dt_prisc_t, qlt_dt_rrisc_t;
1095*4c3888b8SHans Rosenfeld 
1096*4c3888b8SHans Rosenfeld typedef struct qlt_dt_dint {
1097*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1098*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN
1099*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
1100*4c3888b8SHans Rosenfeld 	uint8_t			pci_offset;
1101*4c3888b8SHans Rosenfeld #else
1102*4c3888b8SHans Rosenfeld 	uint8_t			pci_offset;
1103*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
1104*4c3888b8SHans Rosenfeld #endif
1105*4c3888b8SHans Rosenfeld 	uint32_t		data;
1106*4c3888b8SHans Rosenfeld } qlt_dt_dint_t;
1107*4c3888b8SHans Rosenfeld 
1108*4c3888b8SHans Rosenfeld typedef struct qlt_dt_ghbd {
1109*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1110*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN
1111*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
1112*4c3888b8SHans Rosenfeld 	uint8_t			host_buf_type;
1113*4c3888b8SHans Rosenfeld #else
1114*4c3888b8SHans Rosenfeld 	uint8_t			host_buf_type;
1115*4c3888b8SHans Rosenfeld 	uint8_t			rsv[3];
1116*4c3888b8SHans Rosenfeld #endif
1117*4c3888b8SHans Rosenfeld 	uint32_t		buf_size;
1118*4c3888b8SHans Rosenfeld 	uint32_t		start_addr;
1119*4c3888b8SHans Rosenfeld } qlt_dt_ghbd_t;
1120*4c3888b8SHans Rosenfeld 
1121*4c3888b8SHans Rosenfeld typedef struct qlt_dt_scra {
1122*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1123*4c3888b8SHans Rosenfeld 	uint32_t		scratch_size;
1124*4c3888b8SHans Rosenfeld } qlt_dt_scra_t;
1125*4c3888b8SHans Rosenfeld 
1126*4c3888b8SHans Rosenfeld typedef struct qlt_dt_rrreg {
1127*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1128*4c3888b8SHans Rosenfeld 	uint32_t		addr;
1129*4c3888b8SHans Rosenfeld 	uint32_t		count;
1130*4c3888b8SHans Rosenfeld } qlt_dt_rrreg_t, qlt_dt_rrram_t, qlt_dt_rpcic_t;
1131*4c3888b8SHans Rosenfeld 
1132*4c3888b8SHans Rosenfeld typedef struct qlt_dt_wdmp {
1133*4c3888b8SHans Rosenfeld 	qlt_dt_entry_hdr_t	h;
1134*4c3888b8SHans Rosenfeld 	uint32_t		length;
1135*4c3888b8SHans Rosenfeld 	uint32_t		data[1];
1136*4c3888b8SHans Rosenfeld } qlt_dt_wdmp_t;
1137*4c3888b8SHans Rosenfeld 
1138fcf3ce44SJohn Forte #ifdef	__cplusplus
1139fcf3ce44SJohn Forte }
1140fcf3ce44SJohn Forte #endif
1141fcf3ce44SJohn Forte 
1142fcf3ce44SJohn Forte #endif /* _QLT_REGS_H */
1143