2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
4 * Copyright (c) 2013-2014 Qlogic Corporation
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
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.
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.
33 #include <sys/cdefs.h>
34 __FBSDID("$FreeBSD$");
43 qls_mpi_coredump_t ql_mpi_coredump;
45 #define Q81_CORE_SEG_NUM 1
46 #define Q81_TEST_LOGIC_SEG_NUM 2
47 #define Q81_RMII_SEG_NUM 3
48 #define Q81_FCMAC1_SEG_NUM 4
49 #define Q81_FCMAC2_SEG_NUM 5
50 #define Q81_FC1_MBOX_SEG_NUM 6
51 #define Q81_IDE_SEG_NUM 7
52 #define Q81_NIC1_MBOX_SEG_NUM 8
53 #define Q81_SMBUS_SEG_NUM 9
54 #define Q81_FC2_MBOX_SEG_NUM 10
55 #define Q81_NIC2_MBOX_SEG_NUM 11
56 #define Q81_I2C_SEG_NUM 12
57 #define Q81_MEMC_SEG_NUM 13
58 #define Q81_PBUS_SEG_NUM 14
59 #define Q81_MDE_SEG_NUM 15
60 #define Q81_NIC1_CONTROL_SEG_NUM 16
61 #define Q81_NIC2_CONTROL_SEG_NUM 17
62 #define Q81_NIC1_XGMAC_SEG_NUM 18
63 #define Q81_NIC2_XGMAC_SEG_NUM 19
64 #define Q81_WCS_RAM_SEG_NUM 20
65 #define Q81_MEMC_RAM_SEG_NUM 21
66 #define Q81_XAUI1_AN_SEG_NUM 22
67 #define Q81_XAUI1_HSS_PCS_SEG_NUM 23
68 #define Q81_XFI1_AN_SEG_NUM 24
69 #define Q81_XFI1_TRAIN_SEG_NUM 25
70 #define Q81_XFI1_HSS_PCS_SEG_NUM 26
71 #define Q81_XFI1_HSS_TX_SEG_NUM 27
72 #define Q81_XFI1_HSS_RX_SEG_NUM 28
73 #define Q81_XFI1_HSS_PLL_SEG_NUM 29
74 #define Q81_INTR_STATES_SEG_NUM 31
75 #define Q81_ETS_SEG_NUM 34
76 #define Q81_PROBE_DUMP_SEG_NUM 35
77 #define Q81_ROUTING_INDEX_SEG_NUM 36
78 #define Q81_MAC_PROTOCOL_SEG_NUM 37
79 #define Q81_XAUI2_AN_SEG_NUM 38
80 #define Q81_XAUI2_HSS_PCS_SEG_NUM 39
81 #define Q81_XFI2_AN_SEG_NUM 40
82 #define Q81_XFI2_TRAIN_SEG_NUM 41
83 #define Q81_XFI2_HSS_PCS_SEG_NUM 42
84 #define Q81_XFI2_HSS_TX_SEG_NUM 43
85 #define Q81_XFI2_HSS_RX_SEG_NUM 44
86 #define Q81_XFI2_HSS_PLL_SEG_NUM 45
87 #define Q81_WQC1_SEG_NUM 46
88 #define Q81_CQC1_SEG_NUM 47
89 #define Q81_WQC2_SEG_NUM 48
90 #define Q81_CQC2_SEG_NUM 49
91 #define Q81_SEM_REGS_SEG_NUM 50
95 Q81_PAUSE_SRC_LO = 0x00000100,
96 Q81_PAUSE_SRC_HI = 0x00000104,
97 Q81_GLOBAL_CFG = 0x00000108,
98 Q81_GLOBAL_CFG_RESET = (1 << 0), /*Control*/
99 Q81_GLOBAL_CFG_JUMBO = (1 << 6), /*Control*/
100 Q81_GLOBAL_CFG_TX_STAT_EN = (1 << 10), /*Control*/
101 Q81_GLOBAL_CFG_RX_STAT_EN = (1 << 11), /*Control*/
102 Q81_TX_CFG = 0x0000010c,
103 Q81_TX_CFG_RESET = (1 << 0), /*Control*/
104 Q81_TX_CFG_EN = (1 << 1), /*Control*/
105 Q81_TX_CFG_PREAM = (1 << 2), /*Control*/
106 Q81_RX_CFG = 0x00000110,
107 Q81_RX_CFG_RESET = (1 << 0), /*Control*/
108 Q81_RX_CFG_EN = (1 << 1), /*Control*/
109 Q81_RX_CFG_PREAM = (1 << 2), /*Control*/
110 Q81_FLOW_CTL = 0x0000011c,
111 Q81_PAUSE_OPCODE = 0x00000120,
112 Q81_PAUSE_TIMER = 0x00000124,
113 Q81_PAUSE_FRM_DEST_LO = 0x00000128,
114 Q81_PAUSE_FRM_DEST_HI = 0x0000012c,
115 Q81_MAC_TX_PARAMS = 0x00000134,
116 Q81_MAC_TX_PARAMS_JUMBO = (1U << 31), /*Control*/
117 Q81_MAC_TX_PARAMS_SIZE_SHIFT = 16, /*Control*/
118 Q81_MAC_RX_PARAMS = 0x00000138,
119 Q81_MAC_SYS_INT = 0x00000144,
120 Q81_MAC_SYS_INT_MASK = 0x00000148,
121 Q81_MAC_MGMT_INT = 0x0000014c,
122 Q81_MAC_MGMT_IN_MASK = 0x00000150,
123 Q81_EXT_ARB_MODE = 0x000001fc,
124 Q81_TX_PKTS = 0x00000200,
125 Q81_TX_PKTS_LO = 0x00000204,
126 Q81_TX_BYTES = 0x00000208,
127 Q81_TX_BYTES_LO = 0x0000020C,
128 Q81_TX_MCAST_PKTS = 0x00000210,
129 Q81_TX_MCAST_PKTS_LO = 0x00000214,
130 Q81_TX_BCAST_PKTS = 0x00000218,
131 Q81_TX_BCAST_PKTS_LO = 0x0000021C,
132 Q81_TX_UCAST_PKTS = 0x00000220,
133 Q81_TX_UCAST_PKTS_LO = 0x00000224,
134 Q81_TX_CTL_PKTS = 0x00000228,
135 Q81_TX_CTL_PKTS_LO = 0x0000022c,
136 Q81_TX_PAUSE_PKTS = 0x00000230,
137 Q81_TX_PAUSE_PKTS_LO = 0x00000234,
138 Q81_TX_64_PKT = 0x00000238,
139 Q81_TX_64_PKT_LO = 0x0000023c,
140 Q81_TX_65_TO_127_PKT = 0x00000240,
141 Q81_TX_65_TO_127_PKT_LO = 0x00000244,
142 Q81_TX_128_TO_255_PKT = 0x00000248,
143 Q81_TX_128_TO_255_PKT_LO = 0x0000024c,
144 Q81_TX_256_511_PKT = 0x00000250,
145 Q81_TX_256_511_PKT_LO = 0x00000254,
146 Q81_TX_512_TO_1023_PKT = 0x00000258,
147 Q81_TX_512_TO_1023_PKT_LO = 0x0000025c,
148 Q81_TX_1024_TO_1518_PKT = 0x00000260,
149 Q81_TX_1024_TO_1518_PKT_LO = 0x00000264,
150 Q81_TX_1519_TO_MAX_PKT = 0x00000268,
151 Q81_TX_1519_TO_MAX_PKT_LO = 0x0000026c,
152 Q81_TX_UNDERSIZE_PKT = 0x00000270,
153 Q81_TX_UNDERSIZE_PKT_LO = 0x00000274,
154 Q81_TX_OVERSIZE_PKT = 0x00000278,
155 Q81_TX_OVERSIZE_PKT_LO = 0x0000027c,
156 Q81_RX_HALF_FULL_DET = 0x000002a0,
157 Q81_TX_HALF_FULL_DET_LO = 0x000002a4,
158 Q81_RX_OVERFLOW_DET = 0x000002a8,
159 Q81_TX_OVERFLOW_DET_LO = 0x000002ac,
160 Q81_RX_HALF_FULL_MASK = 0x000002b0,
161 Q81_TX_HALF_FULL_MASK_LO = 0x000002b4,
162 Q81_RX_OVERFLOW_MASK = 0x000002b8,
163 Q81_TX_OVERFLOW_MASK_LO = 0x000002bc,
164 Q81_STAT_CNT_CTL = 0x000002c0,
165 Q81_STAT_CNT_CTL_CLEAR_TX = (1 << 0), /*Control*/
166 Q81_STAT_CNT_CTL_CLEAR_RX = (1 << 1), /*Control*/
167 Q81_AUX_RX_HALF_FULL_DET = 0x000002d0,
168 Q81_AUX_TX_HALF_FULL_DET = 0x000002d4,
169 Q81_AUX_RX_OVERFLOW_DET = 0x000002d8,
170 Q81_AUX_TX_OVERFLOW_DET = 0x000002dc,
171 Q81_AUX_RX_HALF_FULL_MASK = 0x000002f0,
172 Q81_AUX_TX_HALF_FULL_MASK = 0x000002f4,
173 Q81_AUX_RX_OVERFLOW_MASK = 0x000002f8,
174 Q81_AUX_TX_OVERFLOW_MASK = 0x000002fc,
175 Q81_RX_BYTES = 0x00000300,
176 Q81_RX_BYTES_LO = 0x00000304,
177 Q81_RX_BYTES_OK = 0x00000308,
178 Q81_RX_BYTES_OK_LO = 0x0000030c,
179 Q81_RX_PKTS = 0x00000310,
180 Q81_RX_PKTS_LO = 0x00000314,
181 Q81_RX_PKTS_OK = 0x00000318,
182 Q81_RX_PKTS_OK_LO = 0x0000031c,
183 Q81_RX_BCAST_PKTS = 0x00000320,
184 Q81_RX_BCAST_PKTS_LO = 0x00000324,
185 Q81_RX_MCAST_PKTS = 0x00000328,
186 Q81_RX_MCAST_PKTS_LO = 0x0000032c,
187 Q81_RX_UCAST_PKTS = 0x00000330,
188 Q81_RX_UCAST_PKTS_LO = 0x00000334,
189 Q81_RX_UNDERSIZE_PKTS = 0x00000338,
190 Q81_RX_UNDERSIZE_PKTS_LO = 0x0000033c,
191 Q81_RX_OVERSIZE_PKTS = 0x00000340,
192 Q81_RX_OVERSIZE_PKTS_LO = 0x00000344,
193 Q81_RX_JABBER_PKTS = 0x00000348,
194 Q81_RX_JABBER_PKTS_LO = 0x0000034c,
195 Q81_RX_UNDERSIZE_FCERR_PKTS = 0x00000350,
196 Q81_RX_UNDERSIZE_FCERR_PKTS_LO = 0x00000354,
197 Q81_RX_DROP_EVENTS = 0x00000358,
198 Q81_RX_DROP_EVENTS_LO = 0x0000035c,
199 Q81_RX_FCERR_PKTS = 0x00000360,
200 Q81_RX_FCERR_PKTS_LO = 0x00000364,
201 Q81_RX_ALIGN_ERR = 0x00000368,
202 Q81_RX_ALIGN_ERR_LO = 0x0000036c,
203 Q81_RX_SYMBOL_ERR = 0x00000370,
204 Q81_RX_SYMBOL_ERR_LO = 0x00000374,
205 Q81_RX_MAC_ERR = 0x00000378,
206 Q81_RX_MAC_ERR_LO = 0x0000037c,
207 Q81_RX_CTL_PKTS = 0x00000380,
208 Q81_RX_CTL_PKTS_LO = 0x00000384,
209 Q81_RX_PAUSE_PKTS = 0x00000388,
210 Q81_RX_PAUSE_PKTS_LO = 0x0000038c,
211 Q81_RX_64_PKTS = 0x00000390,
212 Q81_RX_64_PKTS_LO = 0x00000394,
213 Q81_RX_65_TO_127_PKTS = 0x00000398,
214 Q81_RX_65_TO_127_PKTS_LO = 0x0000039c,
215 Q81_RX_128_255_PKTS = 0x000003a0,
216 Q81_RX_128_255_PKTS_LO = 0x000003a4,
217 Q81_RX_256_511_PKTS = 0x000003a8,
218 Q81_RX_256_511_PKTS_LO = 0x000003ac,
219 Q81_RX_512_TO_1023_PKTS = 0x000003b0,
220 Q81_RX_512_TO_1023_PKTS_LO = 0x000003b4,
221 Q81_RX_1024_TO_1518_PKTS = 0x000003b8,
222 Q81_RX_1024_TO_1518_PKTS_LO = 0x000003bc,
223 Q81_RX_1519_TO_MAX_PKTS = 0x000003c0,
224 Q81_RX_1519_TO_MAX_PKTS_LO = 0x000003c4,
225 Q81_RX_LEN_ERR_PKTS = 0x000003c8,
226 Q81_RX_LEN_ERR_PKTS_LO = 0x000003cc,
227 Q81_MDIO_TX_DATA = 0x00000400,
228 Q81_MDIO_RX_DATA = 0x00000410,
229 Q81_MDIO_CMD = 0x00000420,
230 Q81_MDIO_PHY_ADDR = 0x00000430,
231 Q81_MDIO_PORT = 0x00000440,
232 Q81_MDIO_STATUS = 0x00000450,
233 Q81_TX_CBFC_PAUSE_FRAMES0 = 0x00000500,
234 Q81_TX_CBFC_PAUSE_FRAMES0_LO = 0x00000504,
235 Q81_TX_CBFC_PAUSE_FRAMES1 = 0x00000508,
236 Q81_TX_CBFC_PAUSE_FRAMES1_LO = 0x0000050C,
237 Q81_TX_CBFC_PAUSE_FRAMES2 = 0x00000510,
238 Q81_TX_CBFC_PAUSE_FRAMES2_LO = 0x00000514,
239 Q81_TX_CBFC_PAUSE_FRAMES3 = 0x00000518,
240 Q81_TX_CBFC_PAUSE_FRAMES3_LO = 0x0000051C,
241 Q81_TX_CBFC_PAUSE_FRAMES4 = 0x00000520,
242 Q81_TX_CBFC_PAUSE_FRAMES4_LO = 0x00000524,
243 Q81_TX_CBFC_PAUSE_FRAMES5 = 0x00000528,
244 Q81_TX_CBFC_PAUSE_FRAMES5_LO = 0x0000052C,
245 Q81_TX_CBFC_PAUSE_FRAMES6 = 0x00000530,
246 Q81_TX_CBFC_PAUSE_FRAMES6_LO = 0x00000534,
247 Q81_TX_CBFC_PAUSE_FRAMES7 = 0x00000538,
248 Q81_TX_CBFC_PAUSE_FRAMES7_LO = 0x0000053C,
249 Q81_TX_FCOE_PKTS = 0x00000540,
250 Q81_TX_FCOE_PKTS_LO = 0x00000544,
251 Q81_TX_MGMT_PKTS = 0x00000548,
252 Q81_TX_MGMT_PKTS_LO = 0x0000054C,
253 Q81_RX_CBFC_PAUSE_FRAMES0 = 0x00000568,
254 Q81_RX_CBFC_PAUSE_FRAMES0_LO = 0x0000056C,
255 Q81_RX_CBFC_PAUSE_FRAMES1 = 0x00000570,
256 Q81_RX_CBFC_PAUSE_FRAMES1_LO = 0x00000574,
257 Q81_RX_CBFC_PAUSE_FRAMES2 = 0x00000578,
258 Q81_RX_CBFC_PAUSE_FRAMES2_LO = 0x0000057C,
259 Q81_RX_CBFC_PAUSE_FRAMES3 = 0x00000580,
260 Q81_RX_CBFC_PAUSE_FRAMES3_LO = 0x00000584,
261 Q81_RX_CBFC_PAUSE_FRAMES4 = 0x00000588,
262 Q81_RX_CBFC_PAUSE_FRAMES4_LO = 0x0000058C,
263 Q81_RX_CBFC_PAUSE_FRAMES5 = 0x00000590,
264 Q81_RX_CBFC_PAUSE_FRAMES5_LO = 0x00000594,
265 Q81_RX_CBFC_PAUSE_FRAMES6 = 0x00000598,
266 Q81_RX_CBFC_PAUSE_FRAMES6_LO = 0x0000059C,
267 Q81_RX_CBFC_PAUSE_FRAMES7 = 0x000005A0,
268 Q81_RX_CBFC_PAUSE_FRAMES7_LO = 0x000005A4,
269 Q81_RX_FCOE_PKTS = 0x000005A8,
270 Q81_RX_FCOE_PKTS_LO = 0x000005AC,
271 Q81_RX_MGMT_PKTS = 0x000005B0,
272 Q81_RX_MGMT_PKTS_LO = 0x000005B4,
273 Q81_RX_NIC_FIFO_DROP = 0x000005B8,
274 Q81_RX_NIC_FIFO_DROP_LO = 0x000005BC,
275 Q81_RX_FCOE_FIFO_DROP = 0x000005C0,
276 Q81_RX_FCOE_FIFO_DROP_LO = 0x000005C4,
277 Q81_RX_MGMT_FIFO_DROP = 0x000005C8,
278 Q81_RX_MGMT_FIFO_DROP_LO = 0x000005CC,
279 Q81_RX_PKTS_PRIORITY0 = 0x00000600,
280 Q81_RX_PKTS_PRIORITY0_LO = 0x00000604,
281 Q81_RX_PKTS_PRIORITY1 = 0x00000608,
282 Q81_RX_PKTS_PRIORITY1_LO = 0x0000060C,
283 Q81_RX_PKTS_PRIORITY2 = 0x00000610,
284 Q81_RX_PKTS_PRIORITY2_LO = 0x00000614,
285 Q81_RX_PKTS_PRIORITY3 = 0x00000618,
286 Q81_RX_PKTS_PRIORITY3_LO = 0x0000061C,
287 Q81_RX_PKTS_PRIORITY4 = 0x00000620,
288 Q81_RX_PKTS_PRIORITY4_LO = 0x00000624,
289 Q81_RX_PKTS_PRIORITY5 = 0x00000628,
290 Q81_RX_PKTS_PRIORITY5_LO = 0x0000062C,
291 Q81_RX_PKTS_PRIORITY6 = 0x00000630,
292 Q81_RX_PKTS_PRIORITY6_LO = 0x00000634,
293 Q81_RX_PKTS_PRIORITY7 = 0x00000638,
294 Q81_RX_PKTS_PRIORITY7_LO = 0x0000063C,
295 Q81_RX_OCTETS_PRIORITY0 = 0x00000640,
296 Q81_RX_OCTETS_PRIORITY0_LO = 0x00000644,
297 Q81_RX_OCTETS_PRIORITY1 = 0x00000648,
298 Q81_RX_OCTETS_PRIORITY1_LO = 0x0000064C,
299 Q81_RX_OCTETS_PRIORITY2 = 0x00000650,
300 Q81_RX_OCTETS_PRIORITY2_LO = 0x00000654,
301 Q81_RX_OCTETS_PRIORITY3 = 0x00000658,
302 Q81_RX_OCTETS_PRIORITY3_LO = 0x0000065C,
303 Q81_RX_OCTETS_PRIORITY4 = 0x00000660,
304 Q81_RX_OCTETS_PRIORITY4_LO = 0x00000664,
305 Q81_RX_OCTETS_PRIORITY5 = 0x00000668,
306 Q81_RX_OCTETS_PRIORITY5_LO = 0x0000066C,
307 Q81_RX_OCTETS_PRIORITY6 = 0x00000670,
308 Q81_RX_OCTETS_PRIORITY6_LO = 0x00000674,
309 Q81_RX_OCTETS_PRIORITY7 = 0x00000678,
310 Q81_RX_OCTETS_PRIORITY7_LO = 0x0000067C,
311 Q81_TX_PKTS_PRIORITY0 = 0x00000680,
312 Q81_TX_PKTS_PRIORITY0_LO = 0x00000684,
313 Q81_TX_PKTS_PRIORITY1 = 0x00000688,
314 Q81_TX_PKTS_PRIORITY1_LO = 0x0000068C,
315 Q81_TX_PKTS_PRIORITY2 = 0x00000690,
316 Q81_TX_PKTS_PRIORITY2_LO = 0x00000694,
317 Q81_TX_PKTS_PRIORITY3 = 0x00000698,
318 Q81_TX_PKTS_PRIORITY3_LO = 0x0000069C,
319 Q81_TX_PKTS_PRIORITY4 = 0x000006A0,
320 Q81_TX_PKTS_PRIORITY4_LO = 0x000006A4,
321 Q81_TX_PKTS_PRIORITY5 = 0x000006A8,
322 Q81_TX_PKTS_PRIORITY5_LO = 0x000006AC,
323 Q81_TX_PKTS_PRIORITY6 = 0x000006B0,
324 Q81_TX_PKTS_PRIORITY6_LO = 0x000006B4,
325 Q81_TX_PKTS_PRIORITY7 = 0x000006B8,
326 Q81_TX_PKTS_PRIORITY7_LO = 0x000006BC,
327 Q81_TX_OCTETS_PRIORITY0 = 0x000006C0,
328 Q81_TX_OCTETS_PRIORITY0_LO = 0x000006C4,
329 Q81_TX_OCTETS_PRIORITY1 = 0x000006C8,
330 Q81_TX_OCTETS_PRIORITY1_LO = 0x000006CC,
331 Q81_TX_OCTETS_PRIORITY2 = 0x000006D0,
332 Q81_TX_OCTETS_PRIORITY2_LO = 0x000006D4,
333 Q81_TX_OCTETS_PRIORITY3 = 0x000006D8,
334 Q81_TX_OCTETS_PRIORITY3_LO = 0x000006DC,
335 Q81_TX_OCTETS_PRIORITY4 = 0x000006E0,
336 Q81_TX_OCTETS_PRIORITY4_LO = 0x000006E4,
337 Q81_TX_OCTETS_PRIORITY5 = 0x000006E8,
338 Q81_TX_OCTETS_PRIORITY5_LO = 0x000006EC,
339 Q81_TX_OCTETS_PRIORITY6 = 0x000006F0,
340 Q81_TX_OCTETS_PRIORITY6_LO = 0x000006F4,
341 Q81_TX_OCTETS_PRIORITY7 = 0x000006F8,
342 Q81_TX_OCTETS_PRIORITY7_LO = 0x000006FC,
343 Q81_RX_DISCARD_PRIORITY0 = 0x00000700,
344 Q81_RX_DISCARD_PRIORITY0_LO = 0x00000704,
345 Q81_RX_DISCARD_PRIORITY1 = 0x00000708,
346 Q81_RX_DISCARD_PRIORITY1_LO = 0x0000070C,
347 Q81_RX_DISCARD_PRIORITY2 = 0x00000710,
348 Q81_RX_DISCARD_PRIORITY2_LO = 0x00000714,
349 Q81_RX_DISCARD_PRIORITY3 = 0x00000718,
350 Q81_RX_DISCARD_PRIORITY3_LO = 0x0000071C,
351 Q81_RX_DISCARD_PRIORITY4 = 0x00000720,
352 Q81_RX_DISCARD_PRIORITY4_LO = 0x00000724,
353 Q81_RX_DISCARD_PRIORITY5 = 0x00000728,
354 Q81_RX_DISCARD_PRIORITY5_LO = 0x0000072C,
355 Q81_RX_DISCARD_PRIORITY6 = 0x00000730,
356 Q81_RX_DISCARD_PRIORITY6_LO = 0x00000734,
357 Q81_RX_DISCARD_PRIORITY7 = 0x00000738,
358 Q81_RX_DISCARD_PRIORITY7_LO = 0x0000073C
362 qls_mpid_seg_hdr(qls_mpid_seg_hdr_t *seg_hdr, uint32_t seg_num,
363 uint32_t seg_size, unsigned char *desc)
365 memset(seg_hdr, 0, sizeof(qls_mpid_seg_hdr_t));
367 seg_hdr->cookie = Q81_MPID_COOKIE;
368 seg_hdr->seg_num = seg_num;
369 seg_hdr->seg_size = seg_size;
371 memcpy(seg_hdr->desc, desc, (sizeof(seg_hdr->desc))-1);
377 qls_wait_reg_rdy(qla_host_t *ha , uint32_t reg, uint32_t bit, uint32_t err_bit)
384 data = READ_REG32(ha, reg);
391 qls_mdelay(__func__, 10);
398 qls_rd_mpi_reg(qla_host_t *ha, uint32_t reg, uint32_t *data)
402 ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY,
403 Q81_CTL_PROC_ADDR_ERR);
406 goto exit_qls_rd_mpi_reg;
408 WRITE_REG32(ha, Q81_CTL_PROC_ADDR, reg | Q81_CTL_PROC_ADDR_READ);
410 ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY,
411 Q81_CTL_PROC_ADDR_ERR);
414 goto exit_qls_rd_mpi_reg;
416 *data = READ_REG32(ha, Q81_CTL_PROC_DATA);
423 qls_wr_mpi_reg(qla_host_t *ha, uint32_t reg, uint32_t data)
427 ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY,
428 Q81_CTL_PROC_ADDR_ERR);
430 goto exit_qls_wr_mpi_reg;
432 WRITE_REG32(ha, Q81_CTL_PROC_DATA, data);
434 WRITE_REG32(ha, Q81_CTL_PROC_ADDR, reg);
436 ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY,
437 Q81_CTL_PROC_ADDR_ERR);
443 #define Q81_TEST_LOGIC_FUNC_PORT_CONFIG 0x1002
444 #define Q81_INVALID_NUM 0xFFFFFFFF
446 #define Q81_NIC1_FUNC_ENABLE 0x00000001
447 #define Q81_NIC1_FUNC_MASK 0x0000000e
448 #define Q81_NIC1_FUNC_SHIFT 1
449 #define Q81_NIC2_FUNC_ENABLE 0x00000010
450 #define Q81_NIC2_FUNC_MASK 0x000000e0
451 #define Q81_NIC2_FUNC_SHIFT 5
452 #define Q81_FUNCTION_SHIFT 6
455 qls_get_other_fnum(qla_host_t *ha)
460 uint32_t nic1_fnum = Q81_INVALID_NUM;
461 uint32_t nic2_fnum = Q81_INVALID_NUM;
463 ret = qls_rd_mpi_reg(ha, Q81_TEST_LOGIC_FUNC_PORT_CONFIG, &test_logic);
465 return(Q81_INVALID_NUM);
467 if (test_logic & Q81_NIC1_FUNC_ENABLE)
468 nic1_fnum = (test_logic & Q81_NIC1_FUNC_MASK) >>
471 if (test_logic & Q81_NIC2_FUNC_ENABLE)
472 nic2_fnum = (test_logic & Q81_NIC2_FUNC_MASK) >>
475 if (ha->pci_func == 0)
484 qls_rd_ofunc_reg(qla_host_t *ha, uint32_t reg)
490 ofunc = qls_get_other_fnum(ha);
492 if (ofunc == Q81_INVALID_NUM)
493 return(Q81_INVALID_NUM);
495 reg = Q81_CTL_PROC_ADDR_REG_BLOCK | (ofunc << Q81_FUNCTION_SHIFT) | reg;
497 ret = qls_rd_mpi_reg(ha, reg, &data);
500 return(Q81_INVALID_NUM);
506 qls_wr_ofunc_reg(qla_host_t *ha, uint32_t reg, uint32_t value)
511 ofunc = qls_get_other_fnum(ha);
513 if (ofunc == Q81_INVALID_NUM)
516 reg = Q81_CTL_PROC_ADDR_REG_BLOCK | (ofunc << Q81_FUNCTION_SHIFT) | reg;
518 ret = qls_wr_mpi_reg(ha, reg, value);
524 qls_wait_ofunc_reg_rdy(qla_host_t *ha , uint32_t reg, uint32_t bit,
532 data = qls_rd_ofunc_reg(ha, reg);
539 qls_mdelay(__func__, 10);
545 #define Q81_XG_SERDES_ADDR_RDY BIT_31
546 #define Q81_XG_SERDES_ADDR_READ BIT_30
549 qls_rd_ofunc_serdes_reg(qla_host_t *ha, uint32_t reg, uint32_t *data)
553 /* wait for reg to come ready */
554 ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XG_SERDES_ADDR >> 2),
555 Q81_XG_SERDES_ADDR_RDY, 0);
557 goto exit_qls_rd_ofunc_serdes_reg;
559 /* set up for reg read */
560 qls_wr_ofunc_reg(ha, (Q81_CTL_XG_SERDES_ADDR >> 2),
561 (reg | Q81_XG_SERDES_ADDR_READ));
563 /* wait for reg to come ready */
564 ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XG_SERDES_ADDR >> 2),
565 Q81_XG_SERDES_ADDR_RDY, 0);
567 goto exit_qls_rd_ofunc_serdes_reg;
570 *data = qls_rd_ofunc_reg(ha, (Q81_CTL_XG_SERDES_DATA >> 2));
572 exit_qls_rd_ofunc_serdes_reg:
576 #define Q81_XGMAC_ADDR_RDY BIT_31
577 #define Q81_XGMAC_ADDR_R BIT_30
578 #define Q81_XGMAC_ADDR_XME BIT_29
581 qls_rd_ofunc_xgmac_reg(qla_host_t *ha, uint32_t reg, uint32_t *data)
585 ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XGMAC_ADDR >> 2),
586 Q81_XGMAC_ADDR_RDY, Q81_XGMAC_ADDR_XME);
589 goto exit_qls_rd_ofunc_xgmac_reg;
591 qls_wr_ofunc_reg(ha, (Q81_XGMAC_ADDR_RDY >> 2),
592 (reg | Q81_XGMAC_ADDR_R));
594 ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XGMAC_ADDR >> 2),
595 Q81_XGMAC_ADDR_RDY, Q81_XGMAC_ADDR_XME);
597 goto exit_qls_rd_ofunc_xgmac_reg;
599 *data = qls_rd_ofunc_reg(ha, Q81_CTL_XGMAC_DATA);
601 exit_qls_rd_ofunc_xgmac_reg:
606 qls_rd_serdes_reg(qla_host_t *ha, uint32_t reg, uint32_t *data)
610 ret = qls_wait_reg_rdy(ha, Q81_CTL_XG_SERDES_ADDR,
611 Q81_XG_SERDES_ADDR_RDY, 0);
614 goto exit_qls_rd_serdes_reg;
616 WRITE_REG32(ha, Q81_CTL_XG_SERDES_ADDR, \
617 (reg | Q81_XG_SERDES_ADDR_READ));
619 ret = qls_wait_reg_rdy(ha, Q81_CTL_XG_SERDES_ADDR,
620 Q81_XG_SERDES_ADDR_RDY, 0);
623 goto exit_qls_rd_serdes_reg;
625 *data = READ_REG32(ha, Q81_CTL_XG_SERDES_DATA);
627 exit_qls_rd_serdes_reg:
633 qls_get_both_serdes(qla_host_t *ha, uint32_t addr, uint32_t *dptr,
634 uint32_t *ind_ptr, uint32_t dvalid, uint32_t ind_valid)
639 ret = qls_rd_serdes_reg(ha, addr, dptr);
642 *dptr = Q81_BAD_DATA;
647 ret = qls_rd_ofunc_serdes_reg(ha, addr, ind_ptr);
650 *ind_ptr = Q81_BAD_DATA;
653 #define Q81_XFI1_POWERED_UP 0x00000005
654 #define Q81_XFI2_POWERED_UP 0x0000000A
655 #define Q81_XAUI_POWERED_UP 0x00000001
658 qls_rd_serdes_regs(qla_host_t *ha, qls_mpi_coredump_t *mpi_dump)
661 uint32_t xfi_d_valid, xfi_ind_valid, xaui_d_valid, xaui_ind_valid;
662 uint32_t temp, xaui_reg, i;
663 uint32_t *dptr, *indptr;
665 xfi_d_valid = xfi_ind_valid = xaui_d_valid = xaui_ind_valid = 0;
669 ret = qls_rd_ofunc_serdes_reg(ha, xaui_reg, &temp);
673 if ((temp & Q81_XAUI_POWERED_UP) == Q81_XAUI_POWERED_UP)
676 ret = qls_rd_serdes_reg(ha, xaui_reg, &temp);
680 if ((temp & Q81_XAUI_POWERED_UP) == Q81_XAUI_POWERED_UP)
683 ret = qls_rd_serdes_reg(ha, 0x1E06, &temp);
687 if ((temp & Q81_XFI1_POWERED_UP) == Q81_XFI1_POWERED_UP) {
689 if (ha->pci_func & 1)
690 xfi_ind_valid = 1; /* NIC 2, so the indirect
696 if((temp & Q81_XFI2_POWERED_UP) == Q81_XFI2_POWERED_UP) {
699 xfi_d_valid = 1; /* NIC 2, so the indirect (NIC1)
705 if (ha->pci_func & 1) {
706 dptr = (uint32_t *)(&mpi_dump->serdes2_xaui_an);
707 indptr = (uint32_t *)(&mpi_dump->serdes1_xaui_an);
709 dptr = (uint32_t *)(&mpi_dump->serdes1_xaui_an);
710 indptr = (uint32_t *)(&mpi_dump->serdes2_xaui_an);
713 for (i = 0; i <= 0x000000034; i += 4, dptr ++, indptr ++) {
714 qls_get_both_serdes(ha, i, dptr, indptr,
715 xaui_d_valid, xaui_ind_valid);
718 if (ha->pci_func & 1) {
719 dptr = (uint32_t *)(&mpi_dump->serdes2_xaui_hss_pcs);
720 indptr = (uint32_t *)(&mpi_dump->serdes1_xaui_hss_pcs);
722 dptr = (uint32_t *)(&mpi_dump->serdes1_xaui_hss_pcs);
723 indptr = (uint32_t *)(&mpi_dump->serdes2_xaui_hss_pcs);
726 for (i = 0x800; i <= 0x880; i += 4, dptr ++, indptr ++) {
727 qls_get_both_serdes(ha, i, dptr, indptr,
728 xaui_d_valid, xaui_ind_valid);
731 if (ha->pci_func & 1) {
732 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_an);
733 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_an);
735 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_an);
736 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_an);
739 for (i = 0x1000; i <= 0x1034; i += 4, dptr ++, indptr ++) {
740 qls_get_both_serdes(ha, i, dptr, indptr,
741 xfi_d_valid, xfi_ind_valid);
744 if (ha->pci_func & 1) {
745 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_train);
746 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_train);
748 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_train);
749 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_train);
752 for (i = 0x1050; i <= 0x107c; i += 4, dptr ++, indptr ++) {
753 qls_get_both_serdes(ha, i, dptr, indptr,
754 xfi_d_valid, xfi_ind_valid);
757 if (ha->pci_func & 1) {
758 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pcs);
759 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pcs);
761 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pcs);
762 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pcs);
765 for (i = 0x1800; i <= 0x1838; i += 4, dptr++, indptr ++) {
766 qls_get_both_serdes(ha, i, dptr, indptr,
767 xfi_d_valid, xfi_ind_valid);
770 if (ha->pci_func & 1) {
771 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_tx);
772 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_tx);
774 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_tx);
775 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_tx);
778 for (i = 0x1c00; i <= 0x1c1f; i++, dptr ++, indptr ++) {
779 qls_get_both_serdes(ha, i, dptr, indptr,
780 xfi_d_valid, xfi_ind_valid);
783 if (ha->pci_func & 1) {
784 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_rx);
785 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_rx);
787 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_rx);
788 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_rx);
791 for (i = 0x1c40; i <= 0x1c5f; i++, dptr ++, indptr ++) {
792 qls_get_both_serdes(ha, i, dptr, indptr,
793 xfi_d_valid, xfi_ind_valid);
796 if (ha->pci_func & 1) {
797 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pll);
798 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pll);
800 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pll);
801 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pll);
804 for (i = 0x1e00; i <= 0x1e1f; i++, dptr ++, indptr ++) {
805 qls_get_both_serdes(ha, i, dptr, indptr,
806 xfi_d_valid, xfi_ind_valid);
813 qls_unpause_mpi_risc(qla_host_t *ha)
817 data = READ_REG32(ha, Q81_CTL_HOST_CMD_STATUS);
819 if (!(data & Q81_CTL_HCS_RISC_PAUSED))
822 WRITE_REG32(ha, Q81_CTL_HOST_CMD_STATUS, \
823 Q81_CTL_HCS_CMD_CLR_RISC_PAUSE);
829 qls_pause_mpi_risc(qla_host_t *ha)
834 WRITE_REG32(ha, Q81_CTL_HOST_CMD_STATUS, \
835 Q81_CTL_HCS_CMD_SET_RISC_PAUSE);
838 data = READ_REG32(ha, Q81_CTL_HOST_CMD_STATUS);
840 if (data & Q81_CTL_HCS_RISC_PAUSED)
843 qls_mdelay(__func__, 10);
849 return ((count == 0) ? -1 : 0);
853 qls_get_intr_states(qla_host_t *ha, uint32_t *buf)
857 for (i = 0; i < MAX_RX_RINGS; i++, buf++) {
859 WRITE_REG32(ha, Q81_CTL_INTR_ENABLE, (0x037f0300 + i));
861 *buf = READ_REG32(ha, Q81_CTL_INTR_ENABLE);
866 qls_rd_xgmac_reg(qla_host_t *ha, uint32_t reg, uint32_t*data)
870 ret = qls_wait_reg_rdy(ha, Q81_CTL_XGMAC_ADDR, Q81_XGMAC_ADDR_RDY,
873 goto exit_qls_rd_xgmac_reg;
875 WRITE_REG32(ha, Q81_CTL_XGMAC_ADDR, (reg | Q81_XGMAC_ADDR_R));
877 ret = qls_wait_reg_rdy(ha, Q81_CTL_XGMAC_ADDR, Q81_XGMAC_ADDR_RDY,
880 goto exit_qls_rd_xgmac_reg;
882 *data = READ_REG32(ha, Q81_CTL_XGMAC_DATA);
884 exit_qls_rd_xgmac_reg:
889 qls_rd_xgmac_regs(qla_host_t *ha, uint32_t *buf, uint32_t o_func)
894 for (i = 0; i < Q81_XGMAC_REGISTER_END; i += 4, buf ++) {
897 case Q81_PAUSE_SRC_LO :
898 case Q81_PAUSE_SRC_HI :
899 case Q81_GLOBAL_CFG :
903 case Q81_PAUSE_OPCODE :
904 case Q81_PAUSE_TIMER :
905 case Q81_PAUSE_FRM_DEST_LO :
906 case Q81_PAUSE_FRM_DEST_HI :
907 case Q81_MAC_TX_PARAMS :
908 case Q81_MAC_RX_PARAMS :
909 case Q81_MAC_SYS_INT :
910 case Q81_MAC_SYS_INT_MASK :
911 case Q81_MAC_MGMT_INT :
912 case Q81_MAC_MGMT_IN_MASK :
913 case Q81_EXT_ARB_MODE :
915 case Q81_TX_PKTS_LO :
917 case Q81_TX_BYTES_LO :
918 case Q81_TX_MCAST_PKTS :
919 case Q81_TX_MCAST_PKTS_LO :
920 case Q81_TX_BCAST_PKTS :
921 case Q81_TX_BCAST_PKTS_LO :
922 case Q81_TX_UCAST_PKTS :
923 case Q81_TX_UCAST_PKTS_LO :
924 case Q81_TX_CTL_PKTS :
925 case Q81_TX_CTL_PKTS_LO :
926 case Q81_TX_PAUSE_PKTS :
927 case Q81_TX_PAUSE_PKTS_LO :
929 case Q81_TX_64_PKT_LO :
930 case Q81_TX_65_TO_127_PKT :
931 case Q81_TX_65_TO_127_PKT_LO :
932 case Q81_TX_128_TO_255_PKT :
933 case Q81_TX_128_TO_255_PKT_LO :
934 case Q81_TX_256_511_PKT :
935 case Q81_TX_256_511_PKT_LO :
936 case Q81_TX_512_TO_1023_PKT :
937 case Q81_TX_512_TO_1023_PKT_LO :
938 case Q81_TX_1024_TO_1518_PKT :
939 case Q81_TX_1024_TO_1518_PKT_LO :
940 case Q81_TX_1519_TO_MAX_PKT :
941 case Q81_TX_1519_TO_MAX_PKT_LO :
942 case Q81_TX_UNDERSIZE_PKT :
943 case Q81_TX_UNDERSIZE_PKT_LO :
944 case Q81_TX_OVERSIZE_PKT :
945 case Q81_TX_OVERSIZE_PKT_LO :
946 case Q81_RX_HALF_FULL_DET :
947 case Q81_TX_HALF_FULL_DET_LO :
948 case Q81_RX_OVERFLOW_DET :
949 case Q81_TX_OVERFLOW_DET_LO :
950 case Q81_RX_HALF_FULL_MASK :
951 case Q81_TX_HALF_FULL_MASK_LO :
952 case Q81_RX_OVERFLOW_MASK :
953 case Q81_TX_OVERFLOW_MASK_LO :
954 case Q81_STAT_CNT_CTL :
955 case Q81_AUX_RX_HALF_FULL_DET :
956 case Q81_AUX_TX_HALF_FULL_DET :
957 case Q81_AUX_RX_OVERFLOW_DET :
958 case Q81_AUX_TX_OVERFLOW_DET :
959 case Q81_AUX_RX_HALF_FULL_MASK :
960 case Q81_AUX_TX_HALF_FULL_MASK :
961 case Q81_AUX_RX_OVERFLOW_MASK :
962 case Q81_AUX_TX_OVERFLOW_MASK :
964 case Q81_RX_BYTES_LO :
965 case Q81_RX_BYTES_OK :
966 case Q81_RX_BYTES_OK_LO :
968 case Q81_RX_PKTS_LO :
969 case Q81_RX_PKTS_OK :
970 case Q81_RX_PKTS_OK_LO :
971 case Q81_RX_BCAST_PKTS :
972 case Q81_RX_BCAST_PKTS_LO :
973 case Q81_RX_MCAST_PKTS :
974 case Q81_RX_MCAST_PKTS_LO :
975 case Q81_RX_UCAST_PKTS :
976 case Q81_RX_UCAST_PKTS_LO :
977 case Q81_RX_UNDERSIZE_PKTS :
978 case Q81_RX_UNDERSIZE_PKTS_LO :
979 case Q81_RX_OVERSIZE_PKTS :
980 case Q81_RX_OVERSIZE_PKTS_LO :
981 case Q81_RX_JABBER_PKTS :
982 case Q81_RX_JABBER_PKTS_LO :
983 case Q81_RX_UNDERSIZE_FCERR_PKTS :
984 case Q81_RX_UNDERSIZE_FCERR_PKTS_LO :
985 case Q81_RX_DROP_EVENTS :
986 case Q81_RX_DROP_EVENTS_LO :
987 case Q81_RX_FCERR_PKTS :
988 case Q81_RX_FCERR_PKTS_LO :
989 case Q81_RX_ALIGN_ERR :
990 case Q81_RX_ALIGN_ERR_LO :
991 case Q81_RX_SYMBOL_ERR :
992 case Q81_RX_SYMBOL_ERR_LO :
993 case Q81_RX_MAC_ERR :
994 case Q81_RX_MAC_ERR_LO :
995 case Q81_RX_CTL_PKTS :
996 case Q81_RX_CTL_PKTS_LO :
997 case Q81_RX_PAUSE_PKTS :
998 case Q81_RX_PAUSE_PKTS_LO :
999 case Q81_RX_64_PKTS :
1000 case Q81_RX_64_PKTS_LO :
1001 case Q81_RX_65_TO_127_PKTS :
1002 case Q81_RX_65_TO_127_PKTS_LO :
1003 case Q81_RX_128_255_PKTS :
1004 case Q81_RX_128_255_PKTS_LO :
1005 case Q81_RX_256_511_PKTS :
1006 case Q81_RX_256_511_PKTS_LO :
1007 case Q81_RX_512_TO_1023_PKTS :
1008 case Q81_RX_512_TO_1023_PKTS_LO :
1009 case Q81_RX_1024_TO_1518_PKTS :
1010 case Q81_RX_1024_TO_1518_PKTS_LO :
1011 case Q81_RX_1519_TO_MAX_PKTS :
1012 case Q81_RX_1519_TO_MAX_PKTS_LO :
1013 case Q81_RX_LEN_ERR_PKTS :
1014 case Q81_RX_LEN_ERR_PKTS_LO :
1015 case Q81_MDIO_TX_DATA :
1016 case Q81_MDIO_RX_DATA :
1018 case Q81_MDIO_PHY_ADDR :
1019 case Q81_MDIO_PORT :
1020 case Q81_MDIO_STATUS :
1021 case Q81_TX_CBFC_PAUSE_FRAMES0 :
1022 case Q81_TX_CBFC_PAUSE_FRAMES0_LO :
1023 case Q81_TX_CBFC_PAUSE_FRAMES1 :
1024 case Q81_TX_CBFC_PAUSE_FRAMES1_LO :
1025 case Q81_TX_CBFC_PAUSE_FRAMES2 :
1026 case Q81_TX_CBFC_PAUSE_FRAMES2_LO :
1027 case Q81_TX_CBFC_PAUSE_FRAMES3 :
1028 case Q81_TX_CBFC_PAUSE_FRAMES3_LO :
1029 case Q81_TX_CBFC_PAUSE_FRAMES4 :
1030 case Q81_TX_CBFC_PAUSE_FRAMES4_LO :
1031 case Q81_TX_CBFC_PAUSE_FRAMES5 :
1032 case Q81_TX_CBFC_PAUSE_FRAMES5_LO :
1033 case Q81_TX_CBFC_PAUSE_FRAMES6 :
1034 case Q81_TX_CBFC_PAUSE_FRAMES6_LO :
1035 case Q81_TX_CBFC_PAUSE_FRAMES7 :
1036 case Q81_TX_CBFC_PAUSE_FRAMES7_LO :
1037 case Q81_TX_FCOE_PKTS :
1038 case Q81_TX_FCOE_PKTS_LO :
1039 case Q81_TX_MGMT_PKTS :
1040 case Q81_TX_MGMT_PKTS_LO :
1041 case Q81_RX_CBFC_PAUSE_FRAMES0 :
1042 case Q81_RX_CBFC_PAUSE_FRAMES0_LO :
1043 case Q81_RX_CBFC_PAUSE_FRAMES1 :
1044 case Q81_RX_CBFC_PAUSE_FRAMES1_LO :
1045 case Q81_RX_CBFC_PAUSE_FRAMES2 :
1046 case Q81_RX_CBFC_PAUSE_FRAMES2_LO :
1047 case Q81_RX_CBFC_PAUSE_FRAMES3 :
1048 case Q81_RX_CBFC_PAUSE_FRAMES3_LO :
1049 case Q81_RX_CBFC_PAUSE_FRAMES4 :
1050 case Q81_RX_CBFC_PAUSE_FRAMES4_LO :
1051 case Q81_RX_CBFC_PAUSE_FRAMES5 :
1052 case Q81_RX_CBFC_PAUSE_FRAMES5_LO :
1053 case Q81_RX_CBFC_PAUSE_FRAMES6 :
1054 case Q81_RX_CBFC_PAUSE_FRAMES6_LO :
1055 case Q81_RX_CBFC_PAUSE_FRAMES7 :
1056 case Q81_RX_CBFC_PAUSE_FRAMES7_LO :
1057 case Q81_RX_FCOE_PKTS :
1058 case Q81_RX_FCOE_PKTS_LO :
1059 case Q81_RX_MGMT_PKTS :
1060 case Q81_RX_MGMT_PKTS_LO :
1061 case Q81_RX_NIC_FIFO_DROP :
1062 case Q81_RX_NIC_FIFO_DROP_LO :
1063 case Q81_RX_FCOE_FIFO_DROP :
1064 case Q81_RX_FCOE_FIFO_DROP_LO :
1065 case Q81_RX_MGMT_FIFO_DROP :
1066 case Q81_RX_MGMT_FIFO_DROP_LO :
1067 case Q81_RX_PKTS_PRIORITY0 :
1068 case Q81_RX_PKTS_PRIORITY0_LO :
1069 case Q81_RX_PKTS_PRIORITY1 :
1070 case Q81_RX_PKTS_PRIORITY1_LO :
1071 case Q81_RX_PKTS_PRIORITY2 :
1072 case Q81_RX_PKTS_PRIORITY2_LO :
1073 case Q81_RX_PKTS_PRIORITY3 :
1074 case Q81_RX_PKTS_PRIORITY3_LO :
1075 case Q81_RX_PKTS_PRIORITY4 :
1076 case Q81_RX_PKTS_PRIORITY4_LO :
1077 case Q81_RX_PKTS_PRIORITY5 :
1078 case Q81_RX_PKTS_PRIORITY5_LO :
1079 case Q81_RX_PKTS_PRIORITY6 :
1080 case Q81_RX_PKTS_PRIORITY6_LO :
1081 case Q81_RX_PKTS_PRIORITY7 :
1082 case Q81_RX_PKTS_PRIORITY7_LO :
1083 case Q81_RX_OCTETS_PRIORITY0 :
1084 case Q81_RX_OCTETS_PRIORITY0_LO :
1085 case Q81_RX_OCTETS_PRIORITY1 :
1086 case Q81_RX_OCTETS_PRIORITY1_LO :
1087 case Q81_RX_OCTETS_PRIORITY2 :
1088 case Q81_RX_OCTETS_PRIORITY2_LO :
1089 case Q81_RX_OCTETS_PRIORITY3 :
1090 case Q81_RX_OCTETS_PRIORITY3_LO :
1091 case Q81_RX_OCTETS_PRIORITY4 :
1092 case Q81_RX_OCTETS_PRIORITY4_LO :
1093 case Q81_RX_OCTETS_PRIORITY5 :
1094 case Q81_RX_OCTETS_PRIORITY5_LO :
1095 case Q81_RX_OCTETS_PRIORITY6 :
1096 case Q81_RX_OCTETS_PRIORITY6_LO :
1097 case Q81_RX_OCTETS_PRIORITY7 :
1098 case Q81_RX_OCTETS_PRIORITY7_LO :
1099 case Q81_TX_PKTS_PRIORITY0 :
1100 case Q81_TX_PKTS_PRIORITY0_LO :
1101 case Q81_TX_PKTS_PRIORITY1 :
1102 case Q81_TX_PKTS_PRIORITY1_LO :
1103 case Q81_TX_PKTS_PRIORITY2 :
1104 case Q81_TX_PKTS_PRIORITY2_LO :
1105 case Q81_TX_PKTS_PRIORITY3 :
1106 case Q81_TX_PKTS_PRIORITY3_LO :
1107 case Q81_TX_PKTS_PRIORITY4 :
1108 case Q81_TX_PKTS_PRIORITY4_LO :
1109 case Q81_TX_PKTS_PRIORITY5 :
1110 case Q81_TX_PKTS_PRIORITY5_LO :
1111 case Q81_TX_PKTS_PRIORITY6 :
1112 case Q81_TX_PKTS_PRIORITY6_LO :
1113 case Q81_TX_PKTS_PRIORITY7 :
1114 case Q81_TX_PKTS_PRIORITY7_LO :
1115 case Q81_TX_OCTETS_PRIORITY0 :
1116 case Q81_TX_OCTETS_PRIORITY0_LO :
1117 case Q81_TX_OCTETS_PRIORITY1 :
1118 case Q81_TX_OCTETS_PRIORITY1_LO :
1119 case Q81_TX_OCTETS_PRIORITY2 :
1120 case Q81_TX_OCTETS_PRIORITY2_LO :
1121 case Q81_TX_OCTETS_PRIORITY3 :
1122 case Q81_TX_OCTETS_PRIORITY3_LO :
1123 case Q81_TX_OCTETS_PRIORITY4 :
1124 case Q81_TX_OCTETS_PRIORITY4_LO :
1125 case Q81_TX_OCTETS_PRIORITY5 :
1126 case Q81_TX_OCTETS_PRIORITY5_LO :
1127 case Q81_TX_OCTETS_PRIORITY6 :
1128 case Q81_TX_OCTETS_PRIORITY6_LO :
1129 case Q81_TX_OCTETS_PRIORITY7 :
1130 case Q81_TX_OCTETS_PRIORITY7_LO :
1131 case Q81_RX_DISCARD_PRIORITY0 :
1132 case Q81_RX_DISCARD_PRIORITY0_LO :
1133 case Q81_RX_DISCARD_PRIORITY1 :
1134 case Q81_RX_DISCARD_PRIORITY1_LO :
1135 case Q81_RX_DISCARD_PRIORITY2 :
1136 case Q81_RX_DISCARD_PRIORITY2_LO :
1137 case Q81_RX_DISCARD_PRIORITY3 :
1138 case Q81_RX_DISCARD_PRIORITY3_LO :
1139 case Q81_RX_DISCARD_PRIORITY4 :
1140 case Q81_RX_DISCARD_PRIORITY4_LO :
1141 case Q81_RX_DISCARD_PRIORITY5 :
1142 case Q81_RX_DISCARD_PRIORITY5_LO :
1143 case Q81_RX_DISCARD_PRIORITY6 :
1144 case Q81_RX_DISCARD_PRIORITY6_LO :
1145 case Q81_RX_DISCARD_PRIORITY7 :
1146 case Q81_RX_DISCARD_PRIORITY7_LO :
1149 ret = qls_rd_ofunc_xgmac_reg(ha,
1152 ret = qls_rd_xgmac_reg(ha, i, buf);
1155 *buf = Q81_BAD_DATA;
1168 qls_get_mpi_regs(qla_host_t *ha, uint32_t *buf, uint32_t offset, uint32_t count)
1172 for (i = 0; i < count; i++, buf++) {
1174 ret = qls_rd_mpi_reg(ha, (offset + i), buf);
1184 qls_get_mpi_shadow_regs(qla_host_t *ha, uint32_t *buf)
1189 #define Q81_RISC_124 0x0000007c
1190 #define Q81_RISC_127 0x0000007f
1191 #define Q81_SHADOW_OFFSET 0xb0000000
1193 for (i = 0; i < Q81_MPI_CORE_SH_REGS_CNT; i++, buf++) {
1195 ret = qls_wr_mpi_reg(ha,
1196 (Q81_CTL_PROC_ADDR_RISC_INT_REG | Q81_RISC_124),
1197 (Q81_SHADOW_OFFSET | i << 20));
1199 goto exit_qls_get_mpi_shadow_regs;
1201 ret = qls_mpi_risc_rd_reg(ha,
1202 (Q81_CTL_PROC_ADDR_RISC_INT_REG | Q81_RISC_127),
1205 goto exit_qls_get_mpi_shadow_regs;
1208 exit_qls_get_mpi_shadow_regs:
1212 #define SYS_CLOCK (0x00)
1213 #define PCI_CLOCK (0x80)
1214 #define FC_CLOCK (0x140)
1215 #define XGM_CLOCK (0x180)
1217 #define Q81_ADDRESS_REGISTER_ENABLE 0x00010000
1218 #define Q81_UP 0x00008000
1219 #define Q81_MAX_MUX 0x40
1220 #define Q81_MAX_MODULES 0x1F
1223 qls_get_probe(qla_host_t *ha, uint32_t clock, uint8_t *valid, uint32_t *buf)
1225 uint32_t module, mux_sel, probe, lo_val, hi_val;
1227 for (module = 0; module < Q81_MAX_MODULES; module ++) {
1229 if (valid[module]) {
1231 for (mux_sel = 0; mux_sel < Q81_MAX_MUX; mux_sel++) {
1233 probe = clock | Q81_ADDRESS_REGISTER_ENABLE |
1234 mux_sel | (module << 9);
1235 WRITE_REG32(ha, Q81_CTL_XG_PROBE_MUX_ADDR,\
1238 lo_val = READ_REG32(ha,\
1239 Q81_CTL_XG_PROBE_MUX_DATA);
1248 WRITE_REG32(ha, Q81_CTL_XG_PROBE_MUX_ADDR,\
1250 hi_val = READ_REG32(ha,\
1251 Q81_CTL_XG_PROBE_MUX_DATA);
1265 qls_get_probe_dump(qla_host_t *ha, uint32_t *buf)
1268 uint8_t sys_clock_valid_modules[0x20] = {
1304 uint8_t pci_clock_valid_modules[0x20] = {
1340 uint8_t xgm_clock_valid_modules[0x20] = {
1375 uint8_t fc_clock_valid_modules[0x20] = {
1410 qls_wr_mpi_reg(ha, 0x100e, 0x18a20000);
1412 buf = qls_get_probe(ha, SYS_CLOCK, sys_clock_valid_modules, buf);
1414 buf = qls_get_probe(ha, PCI_CLOCK, pci_clock_valid_modules, buf);
1416 buf = qls_get_probe(ha, XGM_CLOCK, xgm_clock_valid_modules, buf);
1418 buf = qls_get_probe(ha, FC_CLOCK, fc_clock_valid_modules, buf);
1424 qls_get_ridx_registers(qla_host_t *ha, uint32_t *buf)
1426 uint32_t type, idx, idx_max;
1431 for (type = 0; type < 4; type ++) {
1437 for (idx = 0; idx < idx_max; idx ++) {
1439 val = 0x04000000 | (type << 16) | (idx << 8);
1440 WRITE_REG32(ha, Q81_CTL_ROUTING_INDEX, val);
1443 while ((r_idx & 0x40000000) == 0)
1444 r_idx = READ_REG32(ha, Q81_CTL_ROUTING_INDEX);
1446 r_data = READ_REG32(ha, Q81_CTL_ROUTING_DATA);
1461 qls_get_mac_proto_regs(qla_host_t *ha, uint32_t* buf)
1464 #define Q81_RS_AND_ADR 0x06000000
1465 #define Q81_RS_ONLY 0x04000000
1466 #define Q81_NUM_TYPES 10
1468 uint32_t result_index, result_data;
1473 uint32_t initial_val;
1475 uint32_t max_offset;
1477 for (type = 0; type < Q81_NUM_TYPES; type ++) {
1481 initial_val = Q81_RS_AND_ADR;
1486 case 1: // Multicast MAC Address
1487 initial_val = Q81_RS_ONLY;
1492 case 2: // VLAN filter mask
1493 case 3: // MC filter mask
1494 initial_val = Q81_RS_ONLY;
1499 case 4: // FC MAC addresses
1500 initial_val = Q81_RS_ONLY;
1505 case 5: // Mgmt MAC addresses
1506 initial_val = Q81_RS_ONLY;
1511 case 6: // Mgmt VLAN addresses
1512 initial_val = Q81_RS_ONLY;
1517 case 7: // Mgmt IPv4 address
1518 initial_val = Q81_RS_ONLY;
1523 case 8: // Mgmt IPv6 address
1524 initial_val = Q81_RS_ONLY;
1529 case 9: // Mgmt TCP/UDP Dest port
1530 initial_val = Q81_RS_ONLY;
1536 printf("Bad type!!! 0x%08x\n", type);
1542 for (index = 0; index < max_index; index ++) {
1544 for (offset = 0; offset < max_offset; offset ++) {
1546 val = initial_val | (type << 16) |
1547 (index << 4) | (offset);
1549 WRITE_REG32(ha, Q81_CTL_MAC_PROTO_ADDR_INDEX,\
1554 while ((result_index & 0x40000000) == 0)
1557 Q81_CTL_MAC_PROTO_ADDR_INDEX);
1559 result_data = READ_REG32(ha,\
1560 Q81_CTL_MAC_PROTO_ADDR_DATA);
1562 *buf = result_index;
1573 qls_get_ets_regs(qla_host_t *ha, uint32_t *buf)
1578 for(i = 0; i < 8; i ++, buf ++) {
1579 WRITE_REG32(ha, Q81_CTL_NIC_ENH_TX_SCHD, \
1580 ((i << 29) | 0x08000000));
1581 *buf = READ_REG32(ha, Q81_CTL_NIC_ENH_TX_SCHD);
1584 for(i = 0; i < 2; i ++, buf ++) {
1585 WRITE_REG32(ha, Q81_CTL_CNA_ENH_TX_SCHD, \
1586 ((i << 29) | 0x08000000));
1587 *buf = READ_REG32(ha, Q81_CTL_CNA_ENH_TX_SCHD);
1594 qls_mpi_core_dump(qla_host_t *ha)
1598 uint32_t reg, reg_val;
1600 qls_mpi_coredump_t *mpi_dump = &ql_mpi_coredump;
1602 ret = qls_pause_mpi_risc(ha);
1604 printf("Failed RISC pause. Status = 0x%.08x\n",ret);
1608 memset(&(mpi_dump->mpi_global_header), 0,
1609 sizeof(qls_mpid_glbl_hdr_t));
1611 mpi_dump->mpi_global_header.cookie = Q81_MPID_COOKIE;
1612 mpi_dump->mpi_global_header.hdr_size =
1613 sizeof(qls_mpid_glbl_hdr_t);
1614 mpi_dump->mpi_global_header.img_size =
1615 sizeof(qls_mpi_coredump_t);
1617 memcpy(mpi_dump->mpi_global_header.id, "MPI Coredump",
1618 sizeof(mpi_dump->mpi_global_header.id));
1620 qls_mpid_seg_hdr(&mpi_dump->nic1_regs_seg_hdr,
1621 Q81_NIC1_CONTROL_SEG_NUM,
1622 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic1_regs)),
1625 qls_mpid_seg_hdr(&mpi_dump->nic2_regs_seg_hdr,
1626 Q81_NIC2_CONTROL_SEG_NUM,
1627 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic2_regs)),
1630 qls_mpid_seg_hdr(&mpi_dump->xgmac1_seg_hdr,
1631 Q81_NIC1_XGMAC_SEG_NUM,
1632 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->xgmac1)),
1633 "NIC1 XGMac Registers");
1635 qls_mpid_seg_hdr(&mpi_dump->xgmac2_seg_hdr,
1636 Q81_NIC2_XGMAC_SEG_NUM,
1637 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->xgmac2)),
1638 "NIC2 XGMac Registers");
1640 if (ha->pci_func & 1) {
1641 for (i = 0; i < 64; i++)
1642 mpi_dump->nic2_regs[i] =
1643 READ_REG32(ha, i * sizeof(uint32_t));
1645 for (i = 0; i < 64; i++)
1646 mpi_dump->nic1_regs[i] =
1647 qls_rd_ofunc_reg(ha,
1648 (i * sizeof(uint32_t)) / 4);
1650 qls_rd_xgmac_regs(ha, &mpi_dump->xgmac2[0], 0);
1651 qls_rd_xgmac_regs(ha, &mpi_dump->xgmac1[0], 1);
1653 for (i = 0; i < 64; i++)
1654 mpi_dump->nic1_regs[i] =
1655 READ_REG32(ha, i * sizeof(uint32_t));
1657 for (i = 0; i < 64; i++)
1658 mpi_dump->nic2_regs[i] =
1659 qls_rd_ofunc_reg(ha,
1660 (i * sizeof(uint32_t)) / 4);
1662 qls_rd_xgmac_regs(ha, &mpi_dump->xgmac1[0], 0);
1663 qls_rd_xgmac_regs(ha, &mpi_dump->xgmac2[0], 1);
1667 qls_mpid_seg_hdr(&mpi_dump->xaui1_an_hdr,
1668 Q81_XAUI1_AN_SEG_NUM,
1669 (sizeof(qls_mpid_seg_hdr_t) +
1670 sizeof(mpi_dump->serdes1_xaui_an)),
1671 "XAUI1 AN Registers");
1673 qls_mpid_seg_hdr(&mpi_dump->xaui1_hss_pcs_hdr,
1674 Q81_XAUI1_HSS_PCS_SEG_NUM,
1675 (sizeof(qls_mpid_seg_hdr_t) +
1676 sizeof(mpi_dump->serdes1_xaui_hss_pcs)),
1677 "XAUI1 HSS PCS Registers");
1679 qls_mpid_seg_hdr(&mpi_dump->xfi1_an_hdr,
1680 Q81_XFI1_AN_SEG_NUM,
1681 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->serdes1_xfi_an)),
1682 "XFI1 AN Registers");
1684 qls_mpid_seg_hdr(&mpi_dump->xfi1_train_hdr,
1685 Q81_XFI1_TRAIN_SEG_NUM,
1686 (sizeof(qls_mpid_seg_hdr_t) +
1687 sizeof(mpi_dump->serdes1_xfi_train)),
1688 "XFI1 TRAIN Registers");
1690 qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_pcs_hdr,
1691 Q81_XFI1_HSS_PCS_SEG_NUM,
1692 (sizeof(qls_mpid_seg_hdr_t) +
1693 sizeof(mpi_dump->serdes1_xfi_hss_pcs)),
1694 "XFI1 HSS PCS Registers");
1696 qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_tx_hdr,
1697 Q81_XFI1_HSS_TX_SEG_NUM,
1698 (sizeof(qls_mpid_seg_hdr_t) +
1699 sizeof(mpi_dump->serdes1_xfi_hss_tx)),
1700 "XFI1 HSS TX Registers");
1702 qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_rx_hdr,
1703 Q81_XFI1_HSS_RX_SEG_NUM,
1704 (sizeof(qls_mpid_seg_hdr_t) +
1705 sizeof(mpi_dump->serdes1_xfi_hss_rx)),
1706 "XFI1 HSS RX Registers");
1708 qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_pll_hdr,
1709 Q81_XFI1_HSS_PLL_SEG_NUM,
1710 (sizeof(qls_mpid_seg_hdr_t) +
1711 sizeof(mpi_dump->serdes1_xfi_hss_pll)),
1712 "XFI1 HSS PLL Registers");
1714 qls_mpid_seg_hdr(&mpi_dump->xaui2_an_hdr,
1715 Q81_XAUI2_AN_SEG_NUM,
1716 (sizeof(qls_mpid_seg_hdr_t) +
1717 sizeof(mpi_dump->serdes2_xaui_an)),
1718 "XAUI2 AN Registers");
1720 qls_mpid_seg_hdr(&mpi_dump->xaui2_hss_pcs_hdr,
1721 Q81_XAUI2_HSS_PCS_SEG_NUM,
1722 (sizeof(qls_mpid_seg_hdr_t) +
1723 sizeof(mpi_dump->serdes2_xaui_hss_pcs)),
1724 "XAUI2 HSS PCS Registers");
1726 qls_mpid_seg_hdr(&mpi_dump->xfi2_an_hdr,
1727 Q81_XFI2_AN_SEG_NUM,
1728 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->serdes2_xfi_an)),
1729 "XFI2 AN Registers");
1731 qls_mpid_seg_hdr(&mpi_dump->xfi2_train_hdr,
1732 Q81_XFI2_TRAIN_SEG_NUM,
1733 (sizeof(qls_mpid_seg_hdr_t) +
1734 sizeof(mpi_dump->serdes2_xfi_train)),
1735 "XFI2 TRAIN Registers");
1737 qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_pcs_hdr,
1738 Q81_XFI2_HSS_PCS_SEG_NUM,
1739 (sizeof(qls_mpid_seg_hdr_t) +
1740 sizeof(mpi_dump->serdes2_xfi_hss_pcs)),
1741 "XFI2 HSS PCS Registers");
1743 qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_tx_hdr,
1744 Q81_XFI2_HSS_TX_SEG_NUM,
1745 (sizeof(qls_mpid_seg_hdr_t) +
1746 sizeof(mpi_dump->serdes2_xfi_hss_tx)),
1747 "XFI2 HSS TX Registers");
1749 qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_rx_hdr,
1750 Q81_XFI2_HSS_RX_SEG_NUM,
1751 (sizeof(qls_mpid_seg_hdr_t) +
1752 sizeof(mpi_dump->serdes2_xfi_hss_rx)),
1753 "XFI2 HSS RX Registers");
1755 qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_pll_hdr,
1756 Q81_XFI2_HSS_PLL_SEG_NUM,
1757 (sizeof(qls_mpid_seg_hdr_t) +
1758 sizeof(mpi_dump->serdes2_xfi_hss_pll)),
1759 "XFI2 HSS PLL Registers");
1761 qls_rd_serdes_regs(ha, mpi_dump);
1763 qls_mpid_seg_hdr(&mpi_dump->core_regs_seg_hdr,
1765 (sizeof(mpi_dump->core_regs_seg_hdr) +
1766 sizeof(mpi_dump->mpi_core_regs) +
1767 sizeof(mpi_dump->mpi_core_sh_regs)),
1770 ret = qls_get_mpi_regs(ha, &mpi_dump->mpi_core_regs[0],
1771 Q81_MPI_CORE_REGS_ADDR, Q81_MPI_CORE_REGS_CNT);
1773 ret = qls_get_mpi_shadow_regs(ha,
1774 &mpi_dump->mpi_core_sh_regs[0]);
1776 qls_mpid_seg_hdr(&mpi_dump->test_logic_regs_seg_hdr,
1777 Q81_TEST_LOGIC_SEG_NUM,
1778 (sizeof(qls_mpid_seg_hdr_t) +
1779 sizeof(mpi_dump->test_logic_regs)),
1782 ret = qls_get_mpi_regs(ha, &mpi_dump->test_logic_regs[0],
1783 Q81_TEST_REGS_ADDR, Q81_TEST_REGS_CNT);
1785 qls_mpid_seg_hdr(&mpi_dump->rmii_regs_seg_hdr,
1787 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->rmii_regs)),
1790 ret = qls_get_mpi_regs(ha, &mpi_dump->rmii_regs[0],
1791 Q81_RMII_REGS_ADDR, Q81_RMII_REGS_CNT);
1793 qls_mpid_seg_hdr(&mpi_dump->fcmac1_regs_seg_hdr,
1795 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fcmac1_regs)),
1796 "FCMAC1 Registers");
1798 ret = qls_get_mpi_regs(ha, &mpi_dump->fcmac1_regs[0],
1799 Q81_FCMAC1_REGS_ADDR, Q81_FCMAC_REGS_CNT);
1801 qls_mpid_seg_hdr(&mpi_dump->fcmac2_regs_seg_hdr,
1803 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fcmac2_regs)),
1804 "FCMAC2 Registers");
1806 ret = qls_get_mpi_regs(ha, &mpi_dump->fcmac2_regs[0],
1807 Q81_FCMAC2_REGS_ADDR, Q81_FCMAC_REGS_CNT);
1809 qls_mpid_seg_hdr(&mpi_dump->fc1_mbx_regs_seg_hdr,
1810 Q81_FC1_MBOX_SEG_NUM,
1811 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fc1_mbx_regs)),
1814 ret = qls_get_mpi_regs(ha, &mpi_dump->fc1_mbx_regs[0],
1815 Q81_FC1_MBX_REGS_ADDR, Q81_FC_MBX_REGS_CNT);
1817 qls_mpid_seg_hdr(&mpi_dump->ide_regs_seg_hdr,
1819 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->ide_regs)),
1822 ret = qls_get_mpi_regs(ha, &mpi_dump->ide_regs[0],
1823 Q81_IDE_REGS_ADDR, Q81_IDE_REGS_CNT);
1825 qls_mpid_seg_hdr(&mpi_dump->nic1_mbx_regs_seg_hdr,
1826 Q81_NIC1_MBOX_SEG_NUM,
1827 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic1_mbx_regs)),
1830 ret = qls_get_mpi_regs(ha, &mpi_dump->nic1_mbx_regs[0],
1831 Q81_NIC1_MBX_REGS_ADDR, Q81_NIC_MBX_REGS_CNT);
1833 qls_mpid_seg_hdr(&mpi_dump->smbus_regs_seg_hdr,
1835 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->smbus_regs)),
1838 ret = qls_get_mpi_regs(ha, &mpi_dump->smbus_regs[0],
1839 Q81_SMBUS_REGS_ADDR, Q81_SMBUS_REGS_CNT);
1841 qls_mpid_seg_hdr(&mpi_dump->fc2_mbx_regs_seg_hdr,
1842 Q81_FC2_MBOX_SEG_NUM,
1843 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fc2_mbx_regs)),
1846 ret = qls_get_mpi_regs(ha, &mpi_dump->fc2_mbx_regs[0],
1847 Q81_FC2_MBX_REGS_ADDR, Q81_FC_MBX_REGS_CNT);
1849 qls_mpid_seg_hdr(&mpi_dump->nic2_mbx_regs_seg_hdr,
1850 Q81_NIC2_MBOX_SEG_NUM,
1851 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic2_mbx_regs)),
1854 ret = qls_get_mpi_regs(ha, &mpi_dump->nic2_mbx_regs[0],
1855 Q81_NIC2_MBX_REGS_ADDR, Q81_NIC_MBX_REGS_CNT);
1857 qls_mpid_seg_hdr(&mpi_dump->i2c_regs_seg_hdr,
1859 (sizeof(qls_mpid_seg_hdr_t) +
1860 sizeof(mpi_dump->i2c_regs)),
1863 ret = qls_get_mpi_regs(ha, &mpi_dump->i2c_regs[0],
1864 Q81_I2C_REGS_ADDR, Q81_I2C_REGS_CNT);
1866 qls_mpid_seg_hdr(&mpi_dump->memc_regs_seg_hdr,
1868 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->memc_regs)),
1871 ret = qls_get_mpi_regs(ha, &mpi_dump->memc_regs[0],
1872 Q81_MEMC_REGS_ADDR, Q81_MEMC_REGS_CNT);
1874 qls_mpid_seg_hdr(&mpi_dump->pbus_regs_seg_hdr,
1876 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->pbus_regs)),
1879 ret = qls_get_mpi_regs(ha, &mpi_dump->pbus_regs[0],
1880 Q81_PBUS_REGS_ADDR, Q81_PBUS_REGS_CNT);
1882 qls_mpid_seg_hdr(&mpi_dump->mde_regs_seg_hdr,
1884 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->mde_regs)),
1887 ret = qls_get_mpi_regs(ha, &mpi_dump->mde_regs[0],
1888 Q81_MDE_REGS_ADDR, Q81_MDE_REGS_CNT);
1890 qls_mpid_seg_hdr(&mpi_dump->intr_states_seg_hdr,
1891 Q81_INTR_STATES_SEG_NUM,
1892 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->intr_states)),
1895 qls_get_intr_states(ha, &mpi_dump->intr_states[0]);
1897 qls_mpid_seg_hdr(&mpi_dump->probe_dump_seg_hdr,
1898 Q81_PROBE_DUMP_SEG_NUM,
1899 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->probe_dump)),
1902 qls_get_probe_dump(ha, &mpi_dump->probe_dump[0]);
1904 qls_mpid_seg_hdr(&mpi_dump->routing_reg_seg_hdr,
1905 Q81_ROUTING_INDEX_SEG_NUM,
1906 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->routing_regs)),
1909 qls_get_ridx_registers(ha, &mpi_dump->routing_regs[0]);
1911 qls_mpid_seg_hdr(&mpi_dump->mac_prot_reg_seg_hdr,
1912 Q81_MAC_PROTOCOL_SEG_NUM,
1913 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->mac_prot_regs)),
1916 qls_get_mac_proto_regs(ha, &mpi_dump->mac_prot_regs[0]);
1918 qls_mpid_seg_hdr(&mpi_dump->ets_seg_hdr,
1920 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->ets)),
1923 ret = qls_get_ets_regs(ha, &mpi_dump->ets[0]);
1925 qls_mpid_seg_hdr(&mpi_dump->sem_regs_seg_hdr,
1926 Q81_SEM_REGS_SEG_NUM,
1927 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->sem_regs)),
1930 for(i = 0; i < Q81_MAX_SEMAPHORE_FUNCTIONS ; i ++) {
1932 reg = Q81_CTL_PROC_ADDR_REG_BLOCK | (i << Q81_FUNCTION_SHIFT) |
1933 (Q81_CTL_SEMAPHORE >> 2);
1935 ret = qls_mpi_risc_rd_reg(ha, reg, ®_val);
1936 mpi_dump->sem_regs[i] = reg_val;
1939 mpi_dump->sem_regs[i] = Q81_BAD_DATA;
1942 ret = qls_unpause_mpi_risc(ha);
1944 printf("Failed RISC unpause. Status = 0x%.08x\n",ret);
1946 ret = qls_mpi_reset(ha);
1948 printf("Failed RISC reset. Status = 0x%.08x\n",ret);
1950 WRITE_REG32(ha, Q81_CTL_FUNC_SPECIFIC, 0x80008000);
1952 qls_mpid_seg_hdr(&mpi_dump->memc_ram_seg_hdr,
1953 Q81_MEMC_RAM_SEG_NUM,
1954 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->memc_ram)),
1957 ret = qls_mbx_dump_risc_ram(ha, &mpi_dump->memc_ram[0],
1958 Q81_MEMC_RAM_ADDR, Q81_MEMC_RAM_CNT);
1960 printf("Failed Dump of MEMC RAM. Status = 0x%.08x\n",ret);
1962 qls_mpid_seg_hdr(&mpi_dump->code_ram_seg_hdr,
1963 Q81_WCS_RAM_SEG_NUM,
1964 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->code_ram)),
1967 ret = qls_mbx_dump_risc_ram(ha, &mpi_dump->memc_ram[0],
1968 Q81_CODE_RAM_ADDR, Q81_CODE_RAM_CNT);
1970 printf("Failed Dump of CODE RAM. Status = 0x%.08x\n",ret);
1972 qls_mpid_seg_hdr(&mpi_dump->wqc1_seg_hdr,
1974 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->wqc1)),
1977 qls_mpid_seg_hdr(&mpi_dump->wqc2_seg_hdr,
1979 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->wqc2)),
1982 qls_mpid_seg_hdr(&mpi_dump->cqc1_seg_hdr,
1984 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->cqc1)),
1987 qls_mpid_seg_hdr(&mpi_dump->cqc2_seg_hdr,
1989 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->cqc2)),