xref: /freebsd/sys/dev/qlxge/qls_dump.h (revision 7ef62cebc2f965b0f640263e179276928885e33d)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2013-2014 Qlogic Corporation
5  * All rights reserved.
6  *
7  *  Redistribution and use in source and binary forms, with or without
8  *  modification, are permitted provided that the following conditions
9  *  are met:
10  *
11  *  1. Redistributions of source code must retain the above copyright
12  *     notice, this list of conditions and the following disclaimer.
13  *  2. Redistributions in binary form must reproduce the above copyright
14  *     notice, this list of conditions and the following disclaimer in the
15  *     documentation and/or other materials provided with the distribution.
16  *
17  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  *  POSSIBILITY OF SUCH DAMAGE.
28  *
29  * $FreeBSD$
30  */
31 
32 /*
33  * File: qls_dump.h
34  */
35 
36 #ifndef _QLS_DUMP_H_
37 #define _QLS_DUMP_H_
38 
39 #define Q81_MPID_COOKIE 0x5555aaaa
40 
41 typedef struct qls_mpid_glbl_hdr
42 {
43 	uint32_t	cookie;
44 	uint8_t		id[16];
45 	uint32_t	time_lo;
46 	uint32_t	time_hi;
47 	uint32_t	img_size;
48 	uint32_t	hdr_size;
49 	uint8_t		info[220];
50 } qls_mpid_glbl_hdr_t;
51 
52 typedef struct qls_mpid_seg_hdr
53 {
54 	uint32_t	cookie;
55 	uint32_t	seg_num;
56 	uint32_t	seg_size;
57 	uint32_t	extra;
58 	uint8_t		desc[16];
59 } qls_mpid_seg_hdr_t;
60 
61 enum
62 {
63 	Q81_MPI_CORE_REGS_ADDR		= 0x00030000,
64 	Q81_MPI_CORE_REGS_CNT		= 127,
65 	Q81_MPI_CORE_SH_REGS_CNT	= 16,
66 	Q81_TEST_REGS_ADDR		= 0x00001000,
67 	Q81_TEST_REGS_CNT		= 23,
68 	Q81_RMII_REGS_ADDR		= 0x00001040,
69 	Q81_RMII_REGS_CNT		= 64,
70 	Q81_FCMAC1_REGS_ADDR		= 0x00001080,
71 	Q81_FCMAC2_REGS_ADDR		= 0x000010c0,
72 	Q81_FCMAC_REGS_CNT		= 64,
73 	Q81_FC1_MBX_REGS_ADDR		= 0x00001100,
74 	Q81_FC2_MBX_REGS_ADDR		= 0x00001240,
75 	Q81_FC_MBX_REGS_CNT		= 64,
76 	Q81_IDE_REGS_ADDR		= 0x00001140,
77 	Q81_IDE_REGS_CNT		= 64,
78 	Q81_NIC1_MBX_REGS_ADDR		= 0x00001180,
79 	Q81_NIC2_MBX_REGS_ADDR		= 0x00001280,
80 	Q81_NIC_MBX_REGS_CNT		= 64,
81 	Q81_SMBUS_REGS_ADDR		= 0x00001200,
82 	Q81_SMBUS_REGS_CNT		= 64,
83 	Q81_I2C_REGS_ADDR		= 0x00001fc0,
84 	Q81_I2C_REGS_CNT		= 64,
85 	Q81_MEMC_REGS_ADDR		= 0x00003000,
86 	Q81_MEMC_REGS_CNT		= 256,
87 	Q81_PBUS_REGS_ADDR		= 0x00007c00,
88 	Q81_PBUS_REGS_CNT		= 256,
89 	Q81_MDE_REGS_ADDR		= 0x00010000,
90 	Q81_MDE_REGS_CNT		= 6,
91 	Q81_CODE_RAM_ADDR		= 0x00020000,
92 	Q81_CODE_RAM_CNT		= 0x2000,
93 	Q81_MEMC_RAM_ADDR		= 0x00100000,
94 	Q81_MEMC_RAM_CNT		= 0x2000,
95 	Q81_XGMAC_REGISTER_END		= 0x740,
96 };
97 
98 #define Q81_PROBE_DATA_LENGTH_WORDS	((64*2) + 1)
99 #define Q81_NUMBER_OF_PROBES		34
100 
101 #define Q81_PROBE_SIZE		\
102 		(Q81_PROBE_DATA_LENGTH_WORDS * Q81_NUMBER_OF_PROBES)
103 
104 #define Q81_NUMBER_ROUTING_REG_ENTRIES	48
105 #define Q81_WORDS_PER_ROUTING_REG_ENTRY	4
106 
107 #define Q81_ROUT_REG_SIZE		\
108 	(Q81_NUMBER_ROUTING_REG_ENTRIES * Q81_WORDS_PER_ROUTING_REG_ENTRY)
109 
110 #define Q81_MAC_PROTOCOL_REGISTER_WORDS	((512 * 3) + (32 * 2) + (4096 * 1) +\
111 					 (4096 * 1) + (4 * 2) +\
112 					 (8 * 2) + (16 * 1) +\
113 					 (4 * 1) + (4 * 4) + (4 * 1))
114 
115 #define Q81_WORDS_PER_MAC_PROT_ENTRY	2
116 #define Q81_MAC_REG_SIZE		\
117 		(Q81_MAC_PROTOCOL_REGISTER_WORDS * Q81_WORDS_PER_MAC_PROT_ENTRY)
118 
119 #define Q81_MAX_SEMAPHORE_FUNCTIONS 5
120 
121 #define Q81_WQC_WORD_SIZE	6
122 #define Q81_NUMBER_OF_WQCS	128
123 #define Q81_WQ_SIZE		(Q81_WQC_WORD_SIZE * Q81_NUMBER_OF_WQCS)
124 
125 #define Q81_CQC_WORD_SIZE	13
126 #define Q81_NUMBER_OF_CQCS	128
127 #define Q81_CQ_SIZE		(Q81_CQC_WORD_SIZE * Q81_NUMBER_OF_CQCS)
128 
129 struct qls_mpi_coredump {
130 	qls_mpid_glbl_hdr_t	mpi_global_header;
131 
132 	qls_mpid_seg_hdr_t	core_regs_seg_hdr;
133 	uint32_t		mpi_core_regs[Q81_MPI_CORE_REGS_CNT];
134 	uint32_t		mpi_core_sh_regs[Q81_MPI_CORE_SH_REGS_CNT];
135 
136 	qls_mpid_seg_hdr_t	test_logic_regs_seg_hdr;
137 	uint32_t		test_logic_regs[Q81_TEST_REGS_CNT];
138 
139 	qls_mpid_seg_hdr_t	rmii_regs_seg_hdr;
140 	uint32_t		rmii_regs[Q81_RMII_REGS_CNT];
141 
142 	qls_mpid_seg_hdr_t	fcmac1_regs_seg_hdr;
143 	uint32_t		fcmac1_regs[Q81_FCMAC_REGS_CNT];
144 
145 	qls_mpid_seg_hdr_t	fcmac2_regs_seg_hdr;
146 	uint32_t		fcmac2_regs[Q81_FCMAC_REGS_CNT];
147 
148 	qls_mpid_seg_hdr_t	fc1_mbx_regs_seg_hdr;
149 	uint32_t		fc1_mbx_regs[Q81_FC_MBX_REGS_CNT];
150 
151 	qls_mpid_seg_hdr_t	ide_regs_seg_hdr;
152 	uint32_t		ide_regs[Q81_IDE_REGS_CNT];
153 
154 	qls_mpid_seg_hdr_t	nic1_mbx_regs_seg_hdr;
155 	uint32_t		nic1_mbx_regs[Q81_NIC_MBX_REGS_CNT];
156 
157 	qls_mpid_seg_hdr_t	smbus_regs_seg_hdr;
158 	uint32_t		smbus_regs[Q81_SMBUS_REGS_CNT];
159 
160 	qls_mpid_seg_hdr_t	fc2_mbx_regs_seg_hdr;
161 	uint32_t		fc2_mbx_regs[Q81_FC_MBX_REGS_CNT];
162 
163 	qls_mpid_seg_hdr_t	nic2_mbx_regs_seg_hdr;
164 	uint32_t		nic2_mbx_regs[Q81_NIC_MBX_REGS_CNT];
165 
166 	qls_mpid_seg_hdr_t	i2c_regs_seg_hdr;
167 	uint32_t		i2c_regs[Q81_I2C_REGS_CNT];
168 
169 	qls_mpid_seg_hdr_t	memc_regs_seg_hdr;
170 	uint32_t		memc_regs[Q81_MEMC_REGS_CNT];
171 
172 	qls_mpid_seg_hdr_t	pbus_regs_seg_hdr;
173 	uint32_t		pbus_regs[Q81_PBUS_REGS_CNT];
174 
175 	qls_mpid_seg_hdr_t	mde_regs_seg_hdr;
176 	uint32_t		mde_regs[Q81_MDE_REGS_CNT];
177 
178 	qls_mpid_seg_hdr_t	xaui1_an_hdr;
179 	uint32_t		serdes1_xaui_an[14];
180 
181 	qls_mpid_seg_hdr_t	xaui1_hss_pcs_hdr;
182 	uint32_t		serdes1_xaui_hss_pcs[33];
183 
184 	qls_mpid_seg_hdr_t	xfi1_an_hdr;
185 	uint32_t		serdes1_xfi_an[14];
186 
187 	qls_mpid_seg_hdr_t	xfi1_train_hdr;
188 	uint32_t		serdes1_xfi_train[12];
189 
190 	qls_mpid_seg_hdr_t	xfi1_hss_pcs_hdr;
191 	uint32_t		serdes1_xfi_hss_pcs[15];
192 
193 	qls_mpid_seg_hdr_t	xfi1_hss_tx_hdr;
194 	uint32_t		serdes1_xfi_hss_tx[32];
195 
196 	qls_mpid_seg_hdr_t	xfi1_hss_rx_hdr;
197 	uint32_t		serdes1_xfi_hss_rx[32];
198 
199 	qls_mpid_seg_hdr_t	xfi1_hss_pll_hdr;
200 	uint32_t		serdes1_xfi_hss_pll[32];
201 
202 	qls_mpid_seg_hdr_t	xaui2_an_hdr;
203 	uint32_t		serdes2_xaui_an[14];
204 
205 	qls_mpid_seg_hdr_t	xaui2_hss_pcs_hdr;
206 	uint32_t		serdes2_xaui_hss_pcs[33];
207 
208 	qls_mpid_seg_hdr_t	xfi2_an_hdr;
209 	uint32_t		serdes2_xfi_an[14];
210 
211 	qls_mpid_seg_hdr_t	xfi2_train_hdr;
212 	uint32_t		serdes2_xfi_train[12];
213 
214 	qls_mpid_seg_hdr_t	xfi2_hss_pcs_hdr;
215 	uint32_t		serdes2_xfi_hss_pcs[15];
216 
217 	qls_mpid_seg_hdr_t	xfi2_hss_tx_hdr;
218 	uint32_t		serdes2_xfi_hss_tx[32];
219 
220 	qls_mpid_seg_hdr_t	xfi2_hss_rx_hdr;
221 	uint32_t		serdes2_xfi_hss_rx[32];
222 
223 	qls_mpid_seg_hdr_t	xfi2_hss_pll_hdr;
224 	uint32_t		serdes2_xfi_hss_pll[32];
225 
226 	qls_mpid_seg_hdr_t	nic1_regs_seg_hdr;
227 	uint32_t		nic1_regs[64];
228 
229 	qls_mpid_seg_hdr_t	nic2_regs_seg_hdr;
230 	uint32_t		nic2_regs[64];
231 
232 	qls_mpid_seg_hdr_t	intr_states_seg_hdr;
233 	uint32_t		intr_states[MAX_RX_RINGS];
234 
235 	qls_mpid_seg_hdr_t	xgmac1_seg_hdr;
236 	uint32_t		xgmac1[Q81_XGMAC_REGISTER_END];
237 
238 	qls_mpid_seg_hdr_t	xgmac2_seg_hdr;
239 	uint32_t		xgmac2[Q81_XGMAC_REGISTER_END];
240 
241 	qls_mpid_seg_hdr_t	probe_dump_seg_hdr;
242 	uint32_t		probe_dump[Q81_PROBE_SIZE];
243 
244 	qls_mpid_seg_hdr_t	routing_reg_seg_hdr;
245 	uint32_t		routing_regs[Q81_ROUT_REG_SIZE];
246 
247 	qls_mpid_seg_hdr_t	mac_prot_reg_seg_hdr;
248 	uint32_t		mac_prot_regs[Q81_MAC_REG_SIZE];
249 
250 	qls_mpid_seg_hdr_t	sem_regs_seg_hdr;
251 	uint32_t		sem_regs[Q81_MAX_SEMAPHORE_FUNCTIONS];
252 
253 	qls_mpid_seg_hdr_t	ets_seg_hdr;
254 	uint32_t		ets[8+2];
255 
256 	qls_mpid_seg_hdr_t	wqc1_seg_hdr;
257 	uint32_t		wqc1[Q81_WQ_SIZE];
258 
259 	qls_mpid_seg_hdr_t	cqc1_seg_hdr;
260 	uint32_t		cqc1[Q81_CQ_SIZE];
261 
262 	qls_mpid_seg_hdr_t	wqc2_seg_hdr;
263 	uint32_t		wqc2[Q81_WQ_SIZE];
264 
265 	qls_mpid_seg_hdr_t	cqc2_seg_hdr;
266 	uint32_t		cqc2[Q81_CQ_SIZE];
267 
268 	qls_mpid_seg_hdr_t	code_ram_seg_hdr;
269 	uint32_t		code_ram[Q81_CODE_RAM_CNT];
270 
271 	qls_mpid_seg_hdr_t	memc_ram_seg_hdr;
272 	uint32_t		memc_ram[Q81_MEMC_RAM_CNT];
273 };
274 typedef struct qls_mpi_coredump qls_mpi_coredump_t;
275 
276 #define Q81_BAD_DATA	0xDEADBEEF
277 
278 #endif /* #ifndef  _QLS_DUMP_H_ */
279