blob: 913ca1e10e3e510566c6d40b36dee2501cfd2d63 [file] [log] [blame]
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001#include "qlge.h"
2
Ron Mercera61f8022009-10-21 11:07:41 +00003
4static int ql_get_ets_regs(struct ql_adapter *qdev, u32 * buf)
5{
6 int status = 0;
7 int i;
8
9 for (i = 0; i < 8; i++, buf++) {
10 ql_write32(qdev, NIC_ETS, i << 29 | 0x08000000);
11 *buf = ql_read32(qdev, NIC_ETS);
12 }
13
14 for (i = 0; i < 2; i++, buf++) {
15 ql_write32(qdev, CNA_ETS, i << 29 | 0x08000000);
16 *buf = ql_read32(qdev, CNA_ETS);
17 }
18
19 return status;
20}
21
22static void ql_get_intr_states(struct ql_adapter *qdev, u32 * buf)
23{
24 int i;
25
26 for (i = 0; i < qdev->rx_ring_count; i++, buf++) {
27 ql_write32(qdev, INTR_EN,
28 qdev->intr_context[i].intr_read_mask);
29 *buf = ql_read32(qdev, INTR_EN);
30 }
31}
32
33static int ql_get_cam_entries(struct ql_adapter *qdev, u32 * buf)
34{
35 int i, status;
36 u32 value[3];
37
38 status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
39 if (status)
40 return status;
41
42 for (i = 0; i < 16; i++) {
43 status = ql_get_mac_addr_reg(qdev,
44 MAC_ADDR_TYPE_CAM_MAC, i, value);
45 if (status) {
46 QPRINTK(qdev, DRV, ERR,
47 "Failed read of mac index register.\n");
48 goto err;
49 }
50 *buf++ = value[0]; /* lower MAC address */
51 *buf++ = value[1]; /* upper MAC address */
52 *buf++ = value[2]; /* output */
53 }
54 for (i = 0; i < 32; i++) {
55 status = ql_get_mac_addr_reg(qdev,
56 MAC_ADDR_TYPE_MULTI_MAC, i, value);
57 if (status) {
58 QPRINTK(qdev, DRV, ERR,
59 "Failed read of mac index register.\n");
60 goto err;
61 }
62 *buf++ = value[0]; /* lower Mcast address */
63 *buf++ = value[1]; /* upper Mcast address */
64 }
65err:
66 ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
67 return status;
68}
69
70static int ql_get_routing_entries(struct ql_adapter *qdev, u32 * buf)
71{
72 int status;
73 u32 value, i;
74
75 status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
76 if (status)
77 return status;
78
79 for (i = 0; i < 16; i++) {
80 status = ql_get_routing_reg(qdev, i, &value);
81 if (status) {
82 QPRINTK(qdev, DRV, ERR,
83 "Failed read of routing index register.\n");
84 goto err;
85 } else {
86 *buf++ = value;
87 }
88 }
89err:
90 ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
91 return status;
92}
93
Ron Mercer8aae2602010-01-15 13:31:28 +000094/* Read the MPI Processor shadow registers */
95static int ql_get_mpi_shadow_regs(struct ql_adapter *qdev, u32 * buf)
96{
97 u32 i;
98 int status;
99
100 for (i = 0; i < MPI_CORE_SH_REGS_CNT; i++, buf++) {
101 status = ql_write_mpi_reg(qdev, RISC_124,
102 (SHADOW_OFFSET | i << SHADOW_REG_SHIFT));
103 if (status)
104 goto end;
105 status = ql_read_mpi_reg(qdev, RISC_127, buf);
106 if (status)
107 goto end;
108 }
109end:
110 return status;
111}
112
113/* Read the MPI Processor core registers */
114static int ql_get_mpi_regs(struct ql_adapter *qdev, u32 * buf,
115 u32 offset, u32 count)
116{
117 int i, status = 0;
118 for (i = 0; i < count; i++, buf++) {
119 status = ql_read_mpi_reg(qdev, offset + i, buf);
120 if (status)
121 return status;
122 }
123 return status;
124}
125
Ron Mercerc89ec8b2010-01-15 13:31:29 +0000126/* Read the ASIC probe dump */
127static unsigned int *ql_get_probe(struct ql_adapter *qdev, u32 clock,
128 u32 valid, u32 *buf)
129{
130 u32 module, mux_sel, probe, lo_val, hi_val;
131
132 for (module = 0; module < PRB_MX_ADDR_MAX_MODS; module++) {
133 if (!((valid >> module) & 1))
134 continue;
135 for (mux_sel = 0; mux_sel < PRB_MX_ADDR_MAX_MUX; mux_sel++) {
136 probe = clock
137 | PRB_MX_ADDR_ARE
138 | mux_sel
139 | (module << PRB_MX_ADDR_MOD_SEL_SHIFT);
140 ql_write32(qdev, PRB_MX_ADDR, probe);
141 lo_val = ql_read32(qdev, PRB_MX_DATA);
142 if (mux_sel == 0) {
143 *buf = probe;
144 buf++;
145 }
146 probe |= PRB_MX_ADDR_UP;
147 ql_write32(qdev, PRB_MX_ADDR, probe);
148 hi_val = ql_read32(qdev, PRB_MX_DATA);
149 *buf = lo_val;
150 buf++;
151 *buf = hi_val;
152 buf++;
153 }
154 }
155 return buf;
156}
157
158static int ql_get_probe_dump(struct ql_adapter *qdev, unsigned int *buf)
159{
160 /* First we have to enable the probe mux */
161 ql_write_mpi_reg(qdev, MPI_TEST_FUNC_PRB_CTL, MPI_TEST_FUNC_PRB_EN);
162 buf = ql_get_probe(qdev, PRB_MX_ADDR_SYS_CLOCK,
163 PRB_MX_ADDR_VALID_SYS_MOD, buf);
164 buf = ql_get_probe(qdev, PRB_MX_ADDR_PCI_CLOCK,
165 PRB_MX_ADDR_VALID_PCI_MOD, buf);
166 buf = ql_get_probe(qdev, PRB_MX_ADDR_XGM_CLOCK,
167 PRB_MX_ADDR_VALID_XGM_MOD, buf);
168 buf = ql_get_probe(qdev, PRB_MX_ADDR_FC_CLOCK,
169 PRB_MX_ADDR_VALID_FC_MOD, buf);
170 return 0;
171
172}
Ron Mercer8aae2602010-01-15 13:31:28 +0000173
174/* Read out the routing index registers */
175static int ql_get_routing_index_registers(struct ql_adapter *qdev, u32 *buf)
176{
177 int status;
178 u32 type, index, index_max;
179 u32 result_index;
180 u32 result_data;
181 u32 val;
182
183 status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
184 if (status)
185 return status;
186
187 for (type = 0; type < 4; type++) {
188 if (type < 2)
189 index_max = 8;
190 else
191 index_max = 16;
192 for (index = 0; index < index_max; index++) {
193 val = RT_IDX_RS
194 | (type << RT_IDX_TYPE_SHIFT)
195 | (index << RT_IDX_IDX_SHIFT);
196 ql_write32(qdev, RT_IDX, val);
197 result_index = 0;
198 while ((result_index & RT_IDX_MR) == 0)
199 result_index = ql_read32(qdev, RT_IDX);
200 result_data = ql_read32(qdev, RT_DATA);
201 *buf = type;
202 buf++;
203 *buf = index;
204 buf++;
205 *buf = result_index;
206 buf++;
207 *buf = result_data;
208 buf++;
209 }
210 }
211 ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
212 return status;
213}
214
215/* Read out the MAC protocol registers */
216static void ql_get_mac_protocol_registers(struct ql_adapter *qdev, u32 *buf)
217{
218 u32 result_index, result_data;
219 u32 type;
220 u32 index;
221 u32 offset;
222 u32 val;
223 u32 initial_val = MAC_ADDR_RS;
224 u32 max_index;
225 u32 max_offset;
226
227 for (type = 0; type < MAC_ADDR_TYPE_COUNT; type++) {
228 switch (type) {
229
230 case 0: /* CAM */
231 initial_val |= MAC_ADDR_ADR;
232 max_index = MAC_ADDR_MAX_CAM_ENTRIES;
233 max_offset = MAC_ADDR_MAX_CAM_WCOUNT;
234 break;
235 case 1: /* Multicast MAC Address */
236 max_index = MAC_ADDR_MAX_CAM_WCOUNT;
237 max_offset = MAC_ADDR_MAX_CAM_WCOUNT;
238 break;
239 case 2: /* VLAN filter mask */
240 case 3: /* MC filter mask */
241 max_index = MAC_ADDR_MAX_CAM_WCOUNT;
242 max_offset = MAC_ADDR_MAX_CAM_WCOUNT;
243 break;
244 case 4: /* FC MAC addresses */
245 max_index = MAC_ADDR_MAX_FC_MAC_ENTRIES;
246 max_offset = MAC_ADDR_MAX_FC_MAC_WCOUNT;
247 break;
248 case 5: /* Mgmt MAC addresses */
249 max_index = MAC_ADDR_MAX_MGMT_MAC_ENTRIES;
250 max_offset = MAC_ADDR_MAX_MGMT_MAC_WCOUNT;
251 break;
252 case 6: /* Mgmt VLAN addresses */
253 max_index = MAC_ADDR_MAX_MGMT_VLAN_ENTRIES;
254 max_offset = MAC_ADDR_MAX_MGMT_VLAN_WCOUNT;
255 break;
256 case 7: /* Mgmt IPv4 address */
257 max_index = MAC_ADDR_MAX_MGMT_V4_ENTRIES;
258 max_offset = MAC_ADDR_MAX_MGMT_V4_WCOUNT;
259 break;
260 case 8: /* Mgmt IPv6 address */
261 max_index = MAC_ADDR_MAX_MGMT_V6_ENTRIES;
262 max_offset = MAC_ADDR_MAX_MGMT_V6_WCOUNT;
263 break;
264 case 9: /* Mgmt TCP/UDP Dest port */
265 max_index = MAC_ADDR_MAX_MGMT_TU_DP_ENTRIES;
266 max_offset = MAC_ADDR_MAX_MGMT_TU_DP_WCOUNT;
267 break;
268 default:
269 printk(KERN_ERR"Bad type!!! 0x%08x\n", type);
270 max_index = 0;
271 max_offset = 0;
272 break;
273 }
274 for (index = 0; index < max_index; index++) {
275 for (offset = 0; offset < max_offset; offset++) {
276 val = initial_val
277 | (type << MAC_ADDR_TYPE_SHIFT)
278 | (index << MAC_ADDR_IDX_SHIFT)
279 | (offset);
280 ql_write32(qdev, MAC_ADDR_IDX, val);
281 result_index = 0;
282 while ((result_index & MAC_ADDR_MR) == 0) {
283 result_index = ql_read32(qdev,
284 MAC_ADDR_IDX);
285 }
286 result_data = ql_read32(qdev, MAC_ADDR_DATA);
287 *buf = result_index;
288 buf++;
289 *buf = result_data;
290 buf++;
291 }
292 }
293 }
294}
295
296static void ql_get_sem_registers(struct ql_adapter *qdev, u32 *buf)
297{
298 u32 func_num, reg, reg_val;
299 int status;
300
301 for (func_num = 0; func_num < MAX_SEMAPHORE_FUNCTIONS ; func_num++) {
302 reg = MPI_NIC_REG_BLOCK
303 | (func_num << MPI_NIC_FUNCTION_SHIFT)
304 | (SEM / 4);
305 status = ql_read_mpi_reg(qdev, reg, &reg_val);
306 *buf = reg_val;
307 /* if the read failed then dead fill the element. */
308 if (!status)
309 *buf = 0xdeadbeef;
310 buf++;
311 }
312}
313
Ron Mercera61f8022009-10-21 11:07:41 +0000314/* Create a coredump segment header */
315static void ql_build_coredump_seg_header(
316 struct mpi_coredump_segment_header *seg_hdr,
317 u32 seg_number, u32 seg_size, u8 *desc)
318{
319 memset(seg_hdr, 0, sizeof(struct mpi_coredump_segment_header));
320 seg_hdr->cookie = MPI_COREDUMP_COOKIE;
321 seg_hdr->segNum = seg_number;
322 seg_hdr->segSize = seg_size;
323 memcpy(seg_hdr->description, desc, (sizeof(seg_hdr->description)) - 1);
324}
325
Ron Mercer8aae2602010-01-15 13:31:28 +0000326/*
327 * This function should be called when a coredump / probedump
328 * is to be extracted from the HBA. It is assumed there is a
329 * qdev structure that contains the base address of the register
330 * space for this function as well as a coredump structure that
331 * will contain the dump.
332 */
333int ql_core_dump(struct ql_adapter *qdev, struct ql_mpi_coredump *mpi_coredump)
334{
335 int status;
336 int i;
337
338 if (!mpi_coredump) {
339 QPRINTK(qdev, DRV, ERR,
340 "No memory available.\n");
341 return -ENOMEM;
342 }
343
344 /* Try to get the spinlock, but dont worry if
345 * it isn't available. If the firmware died it
346 * might be holding the sem.
347 */
348 ql_sem_spinlock(qdev, SEM_PROC_REG_MASK);
349
350 status = ql_pause_mpi_risc(qdev);
351 if (status) {
352 QPRINTK(qdev, DRV, ERR,
353 "Failed RISC pause. Status = 0x%.08x\n", status);
354 goto err;
355 }
356
357 /* Insert the global header */
358 memset(&(mpi_coredump->mpi_global_header), 0,
359 sizeof(struct mpi_coredump_global_header));
360 mpi_coredump->mpi_global_header.cookie = MPI_COREDUMP_COOKIE;
361 mpi_coredump->mpi_global_header.headerSize =
362 sizeof(struct mpi_coredump_global_header);
363 mpi_coredump->mpi_global_header.imageSize =
364 sizeof(struct ql_mpi_coredump);
365 memcpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump",
366 sizeof(mpi_coredump->mpi_global_header.idString));
367
368 /* Get generic NIC reg dump */
369 ql_build_coredump_seg_header(&mpi_coredump->nic_regs_seg_hdr,
370 NIC1_CONTROL_SEG_NUM,
371 sizeof(struct mpi_coredump_segment_header) +
372 sizeof(mpi_coredump->nic_regs), "NIC1 Registers");
373
374 if (qdev->func & 1) {
375 /* Odd means our function is NIC 2 */
376 for (i = 0; i < NIC_REGS_DUMP_WORD_COUNT; i++)
377 mpi_coredump->nic2_regs[i] =
378 ql_read32(qdev, i * sizeof(u32));
379 } else {
380 /* Even means our function is NIC 1 */
381 for (i = 0; i < NIC_REGS_DUMP_WORD_COUNT; i++)
382 mpi_coredump->nic_regs[i] =
383 ql_read32(qdev, i * sizeof(u32));
384 }
385
386 ql_build_coredump_seg_header(&mpi_coredump->core_regs_seg_hdr,
387 CORE_SEG_NUM,
388 sizeof(mpi_coredump->core_regs_seg_hdr) +
389 sizeof(mpi_coredump->mpi_core_regs) +
390 sizeof(mpi_coredump->mpi_core_sh_regs),
391 "Core Registers");
392
393 /* Get the MPI Core Registers */
394 status = ql_get_mpi_regs(qdev, &mpi_coredump->mpi_core_regs[0],
395 MPI_CORE_REGS_ADDR, MPI_CORE_REGS_CNT);
396 if (status)
397 goto err;
398 /* Get the 16 MPI shadow registers */
399 status = ql_get_mpi_shadow_regs(qdev,
400 &mpi_coredump->mpi_core_sh_regs[0]);
401 if (status)
402 goto err;
403
404 /* Get the Test Logic Registers */
405 ql_build_coredump_seg_header(&mpi_coredump->test_logic_regs_seg_hdr,
406 TEST_LOGIC_SEG_NUM,
407 sizeof(struct mpi_coredump_segment_header)
408 + sizeof(mpi_coredump->test_logic_regs),
409 "Test Logic Regs");
410 status = ql_get_mpi_regs(qdev, &mpi_coredump->test_logic_regs[0],
411 TEST_REGS_ADDR, TEST_REGS_CNT);
412 if (status)
413 goto err;
414
415 /* Get the RMII Registers */
416 ql_build_coredump_seg_header(&mpi_coredump->rmii_regs_seg_hdr,
417 RMII_SEG_NUM,
418 sizeof(struct mpi_coredump_segment_header)
419 + sizeof(mpi_coredump->rmii_regs),
420 "RMII Registers");
421 status = ql_get_mpi_regs(qdev, &mpi_coredump->rmii_regs[0],
422 RMII_REGS_ADDR, RMII_REGS_CNT);
423 if (status)
424 goto err;
425
426 /* Get the FCMAC1 Registers */
427 ql_build_coredump_seg_header(&mpi_coredump->fcmac1_regs_seg_hdr,
428 FCMAC1_SEG_NUM,
429 sizeof(struct mpi_coredump_segment_header)
430 + sizeof(mpi_coredump->fcmac1_regs),
431 "FCMAC1 Registers");
432 status = ql_get_mpi_regs(qdev, &mpi_coredump->fcmac1_regs[0],
433 FCMAC1_REGS_ADDR, FCMAC_REGS_CNT);
434 if (status)
435 goto err;
436
437 /* Get the FCMAC2 Registers */
438
439 ql_build_coredump_seg_header(&mpi_coredump->fcmac2_regs_seg_hdr,
440 FCMAC2_SEG_NUM,
441 sizeof(struct mpi_coredump_segment_header)
442 + sizeof(mpi_coredump->fcmac2_regs),
443 "FCMAC2 Registers");
444
445 status = ql_get_mpi_regs(qdev, &mpi_coredump->fcmac2_regs[0],
446 FCMAC2_REGS_ADDR, FCMAC_REGS_CNT);
447 if (status)
448 goto err;
449
450 /* Get the FC1 MBX Registers */
451 ql_build_coredump_seg_header(&mpi_coredump->fc1_mbx_regs_seg_hdr,
452 FC1_MBOX_SEG_NUM,
453 sizeof(struct mpi_coredump_segment_header)
454 + sizeof(mpi_coredump->fc1_mbx_regs),
455 "FC1 MBox Regs");
456 status = ql_get_mpi_regs(qdev, &mpi_coredump->fc1_mbx_regs[0],
457 FC1_MBX_REGS_ADDR, FC_MBX_REGS_CNT);
458 if (status)
459 goto err;
460
461 /* Get the IDE Registers */
462 ql_build_coredump_seg_header(&mpi_coredump->ide_regs_seg_hdr,
463 IDE_SEG_NUM,
464 sizeof(struct mpi_coredump_segment_header)
465 + sizeof(mpi_coredump->ide_regs),
466 "IDE Registers");
467 status = ql_get_mpi_regs(qdev, &mpi_coredump->ide_regs[0],
468 IDE_REGS_ADDR, IDE_REGS_CNT);
469 if (status)
470 goto err;
471
472 /* Get the NIC1 MBX Registers */
473 ql_build_coredump_seg_header(&mpi_coredump->nic1_mbx_regs_seg_hdr,
474 NIC1_MBOX_SEG_NUM,
475 sizeof(struct mpi_coredump_segment_header)
476 + sizeof(mpi_coredump->nic1_mbx_regs),
477 "NIC1 MBox Regs");
478 status = ql_get_mpi_regs(qdev, &mpi_coredump->nic1_mbx_regs[0],
479 NIC1_MBX_REGS_ADDR, NIC_MBX_REGS_CNT);
480 if (status)
481 goto err;
482
483 /* Get the SMBus Registers */
484 ql_build_coredump_seg_header(&mpi_coredump->smbus_regs_seg_hdr,
485 SMBUS_SEG_NUM,
486 sizeof(struct mpi_coredump_segment_header)
487 + sizeof(mpi_coredump->smbus_regs),
488 "SMBus Registers");
489 status = ql_get_mpi_regs(qdev, &mpi_coredump->smbus_regs[0],
490 SMBUS_REGS_ADDR, SMBUS_REGS_CNT);
491 if (status)
492 goto err;
493
494 /* Get the FC2 MBX Registers */
495 ql_build_coredump_seg_header(&mpi_coredump->fc2_mbx_regs_seg_hdr,
496 FC2_MBOX_SEG_NUM,
497 sizeof(struct mpi_coredump_segment_header)
498 + sizeof(mpi_coredump->fc2_mbx_regs),
499 "FC2 MBox Regs");
500 status = ql_get_mpi_regs(qdev, &mpi_coredump->fc2_mbx_regs[0],
501 FC2_MBX_REGS_ADDR, FC_MBX_REGS_CNT);
502 if (status)
503 goto err;
504
505 /* Get the NIC2 MBX Registers */
506 ql_build_coredump_seg_header(&mpi_coredump->nic2_mbx_regs_seg_hdr,
507 NIC2_MBOX_SEG_NUM,
508 sizeof(struct mpi_coredump_segment_header)
509 + sizeof(mpi_coredump->nic2_mbx_regs),
510 "NIC2 MBox Regs");
511 status = ql_get_mpi_regs(qdev, &mpi_coredump->nic2_mbx_regs[0],
512 NIC2_MBX_REGS_ADDR, NIC_MBX_REGS_CNT);
513 if (status)
514 goto err;
515
516 /* Get the I2C Registers */
517 ql_build_coredump_seg_header(&mpi_coredump->i2c_regs_seg_hdr,
518 I2C_SEG_NUM,
519 sizeof(struct mpi_coredump_segment_header)
520 + sizeof(mpi_coredump->i2c_regs),
521 "I2C Registers");
522 status = ql_get_mpi_regs(qdev, &mpi_coredump->i2c_regs[0],
523 I2C_REGS_ADDR, I2C_REGS_CNT);
524 if (status)
525 goto err;
526
527 /* Get the MEMC Registers */
528 ql_build_coredump_seg_header(&mpi_coredump->memc_regs_seg_hdr,
529 MEMC_SEG_NUM,
530 sizeof(struct mpi_coredump_segment_header)
531 + sizeof(mpi_coredump->memc_regs),
532 "MEMC Registers");
533 status = ql_get_mpi_regs(qdev, &mpi_coredump->memc_regs[0],
534 MEMC_REGS_ADDR, MEMC_REGS_CNT);
535 if (status)
536 goto err;
537
538 /* Get the PBus Registers */
539 ql_build_coredump_seg_header(&mpi_coredump->pbus_regs_seg_hdr,
540 PBUS_SEG_NUM,
541 sizeof(struct mpi_coredump_segment_header)
542 + sizeof(mpi_coredump->pbus_regs),
543 "PBUS Registers");
544 status = ql_get_mpi_regs(qdev, &mpi_coredump->pbus_regs[0],
545 PBUS_REGS_ADDR, PBUS_REGS_CNT);
546 if (status)
547 goto err;
548
549 /* Get the MDE Registers */
550 ql_build_coredump_seg_header(&mpi_coredump->mde_regs_seg_hdr,
551 MDE_SEG_NUM,
552 sizeof(struct mpi_coredump_segment_header)
553 + sizeof(mpi_coredump->mde_regs),
554 "MDE Registers");
555 status = ql_get_mpi_regs(qdev, &mpi_coredump->mde_regs[0],
556 MDE_REGS_ADDR, MDE_REGS_CNT);
557 if (status)
558 goto err;
559
560 ql_build_coredump_seg_header(&mpi_coredump->misc_nic_seg_hdr,
561 MISC_NIC_INFO_SEG_NUM,
562 sizeof(struct mpi_coredump_segment_header)
563 + sizeof(mpi_coredump->misc_nic_info),
564 "MISC NIC INFO");
565 mpi_coredump->misc_nic_info.rx_ring_count = qdev->rx_ring_count;
566 mpi_coredump->misc_nic_info.tx_ring_count = qdev->tx_ring_count;
567 mpi_coredump->misc_nic_info.intr_count = qdev->intr_count;
568 mpi_coredump->misc_nic_info.function = qdev->func;
569
570 /* Segment 31 */
571 /* Get indexed register values. */
572 ql_build_coredump_seg_header(&mpi_coredump->intr_states_seg_hdr,
573 INTR_STATES_SEG_NUM,
574 sizeof(struct mpi_coredump_segment_header)
575 + sizeof(mpi_coredump->intr_states),
576 "INTR States");
577 ql_get_intr_states(qdev, &mpi_coredump->intr_states[0]);
578
579 ql_build_coredump_seg_header(&mpi_coredump->cam_entries_seg_hdr,
580 CAM_ENTRIES_SEG_NUM,
581 sizeof(struct mpi_coredump_segment_header)
582 + sizeof(mpi_coredump->cam_entries),
583 "CAM Entries");
584 status = ql_get_cam_entries(qdev, &mpi_coredump->cam_entries[0]);
585 if (status)
586 goto err;
587
588 ql_build_coredump_seg_header(&mpi_coredump->nic_routing_words_seg_hdr,
589 ROUTING_WORDS_SEG_NUM,
590 sizeof(struct mpi_coredump_segment_header)
591 + sizeof(mpi_coredump->nic_routing_words),
592 "Routing Words");
593 status = ql_get_routing_entries(qdev,
594 &mpi_coredump->nic_routing_words[0]);
595 if (status)
596 goto err;
597
598 /* Segment 34 (Rev C. step 23) */
599 ql_build_coredump_seg_header(&mpi_coredump->ets_seg_hdr,
600 ETS_SEG_NUM,
601 sizeof(struct mpi_coredump_segment_header)
602 + sizeof(mpi_coredump->ets),
603 "ETS Registers");
604 status = ql_get_ets_regs(qdev, &mpi_coredump->ets[0]);
605 if (status)
606 goto err;
607
Ron Mercerc89ec8b2010-01-15 13:31:29 +0000608 ql_build_coredump_seg_header(&mpi_coredump->probe_dump_seg_hdr,
609 PROBE_DUMP_SEG_NUM,
610 sizeof(struct mpi_coredump_segment_header)
611 + sizeof(mpi_coredump->probe_dump),
612 "Probe Dump");
613 ql_get_probe_dump(qdev, &mpi_coredump->probe_dump[0]);
614
Ron Mercer8aae2602010-01-15 13:31:28 +0000615 ql_build_coredump_seg_header(&mpi_coredump->routing_reg_seg_hdr,
616 ROUTING_INDEX_SEG_NUM,
617 sizeof(struct mpi_coredump_segment_header)
618 + sizeof(mpi_coredump->routing_regs),
619 "Routing Regs");
620 status = ql_get_routing_index_registers(qdev,
621 &mpi_coredump->routing_regs[0]);
622 if (status)
623 goto err;
624
625 ql_build_coredump_seg_header(&mpi_coredump->mac_prot_reg_seg_hdr,
626 MAC_PROTOCOL_SEG_NUM,
627 sizeof(struct mpi_coredump_segment_header)
628 + sizeof(mpi_coredump->mac_prot_regs),
629 "MAC Prot Regs");
630 ql_get_mac_protocol_registers(qdev, &mpi_coredump->mac_prot_regs[0]);
631
632 /* Get the semaphore registers for all 5 functions */
633 ql_build_coredump_seg_header(&mpi_coredump->sem_regs_seg_hdr,
634 SEM_REGS_SEG_NUM,
635 sizeof(struct mpi_coredump_segment_header) +
636 sizeof(mpi_coredump->sem_regs), "Sem Registers");
637
638 ql_get_sem_registers(qdev, &mpi_coredump->sem_regs[0]);
639
640 /* Prevent the mpi restarting while we dump the memory.*/
641 ql_write_mpi_reg(qdev, MPI_TEST_FUNC_RST_STS, MPI_TEST_FUNC_RST_FRC);
642
643 /* clear the pause */
644 status = ql_unpause_mpi_risc(qdev);
645 if (status) {
646 QPRINTK(qdev, DRV, ERR,
647 "Failed RISC unpause. Status = 0x%.08x\n", status);
648 goto err;
649 }
650err:
651 ql_sem_unlock(qdev, SEM_PROC_REG_MASK); /* does flush too */
652 return status;
653
654}
655
Ron Mercera61f8022009-10-21 11:07:41 +0000656void ql_gen_reg_dump(struct ql_adapter *qdev,
657 struct ql_reg_dump *mpi_coredump)
658{
659 int i, status;
660
661
662 memset(&(mpi_coredump->mpi_global_header), 0,
663 sizeof(struct mpi_coredump_global_header));
664 mpi_coredump->mpi_global_header.cookie = MPI_COREDUMP_COOKIE;
665 mpi_coredump->mpi_global_header.headerSize =
666 sizeof(struct mpi_coredump_global_header);
667 mpi_coredump->mpi_global_header.imageSize =
668 sizeof(struct ql_reg_dump);
669 memcpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump",
670 sizeof(mpi_coredump->mpi_global_header.idString));
671
672
673 /* segment 16 */
674 ql_build_coredump_seg_header(&mpi_coredump->misc_nic_seg_hdr,
675 MISC_NIC_INFO_SEG_NUM,
676 sizeof(struct mpi_coredump_segment_header)
677 + sizeof(mpi_coredump->misc_nic_info),
678 "MISC NIC INFO");
679 mpi_coredump->misc_nic_info.rx_ring_count = qdev->rx_ring_count;
680 mpi_coredump->misc_nic_info.tx_ring_count = qdev->tx_ring_count;
681 mpi_coredump->misc_nic_info.intr_count = qdev->intr_count;
682 mpi_coredump->misc_nic_info.function = qdev->func;
683
684 /* Segment 16, Rev C. Step 18 */
685 ql_build_coredump_seg_header(&mpi_coredump->nic_regs_seg_hdr,
686 NIC1_CONTROL_SEG_NUM,
687 sizeof(struct mpi_coredump_segment_header)
688 + sizeof(mpi_coredump->nic_regs),
689 "NIC Registers");
690 /* Get generic reg dump */
691 for (i = 0; i < 64; i++)
692 mpi_coredump->nic_regs[i] = ql_read32(qdev, i * sizeof(u32));
693
694 /* Segment 31 */
695 /* Get indexed register values. */
696 ql_build_coredump_seg_header(&mpi_coredump->intr_states_seg_hdr,
697 INTR_STATES_SEG_NUM,
698 sizeof(struct mpi_coredump_segment_header)
699 + sizeof(mpi_coredump->intr_states),
700 "INTR States");
701 ql_get_intr_states(qdev, &mpi_coredump->intr_states[0]);
702
703 ql_build_coredump_seg_header(&mpi_coredump->cam_entries_seg_hdr,
704 CAM_ENTRIES_SEG_NUM,
705 sizeof(struct mpi_coredump_segment_header)
706 + sizeof(mpi_coredump->cam_entries),
707 "CAM Entries");
708 status = ql_get_cam_entries(qdev, &mpi_coredump->cam_entries[0]);
709 if (status)
710 return;
711
712 ql_build_coredump_seg_header(&mpi_coredump->nic_routing_words_seg_hdr,
713 ROUTING_WORDS_SEG_NUM,
714 sizeof(struct mpi_coredump_segment_header)
715 + sizeof(mpi_coredump->nic_routing_words),
716 "Routing Words");
717 status = ql_get_routing_entries(qdev,
718 &mpi_coredump->nic_routing_words[0]);
719 if (status)
720 return;
721
722 /* Segment 34 (Rev C. step 23) */
723 ql_build_coredump_seg_header(&mpi_coredump->ets_seg_hdr,
724 ETS_SEG_NUM,
725 sizeof(struct mpi_coredump_segment_header)
726 + sizeof(mpi_coredump->ets),
727 "ETS Registers");
728 status = ql_get_ets_regs(qdev, &mpi_coredump->ets[0]);
729 if (status)
730 return;
731}
732
Ron Mercer8aae2602010-01-15 13:31:28 +0000733/* Coredump to messages log file using separate worker thread */
734void ql_mpi_core_to_log(struct work_struct *work)
735{
736 struct ql_adapter *qdev =
737 container_of(work, struct ql_adapter, mpi_core_to_log.work);
738 u32 *tmp, count;
739 int i;
740
741 count = sizeof(struct ql_mpi_coredump) / sizeof(u32);
742 tmp = (u32 *)qdev->mpi_coredump;
743 QPRINTK(qdev, DRV, DEBUG, "Core is dumping to log file!\n");
744
745 for (i = 0; i < count; i += 8) {
746 printk(KERN_ERR "%.08x: %.08x %.08x %.08x %.08x %.08x "
747 "%.08x %.08x %.08x \n", i,
748 tmp[i + 0],
749 tmp[i + 1],
750 tmp[i + 2],
751 tmp[i + 3],
752 tmp[i + 4],
753 tmp[i + 5],
754 tmp[i + 6],
755 tmp[i + 7]);
756 msleep(5);
757 }
758}
759
Ron Mercerc4e84bd2008-09-18 11:56:28 -0400760#ifdef QL_REG_DUMP
761static void ql_dump_intr_states(struct ql_adapter *qdev)
762{
763 int i;
764 u32 value;
765 for (i = 0; i < qdev->intr_count; i++) {
766 ql_write32(qdev, INTR_EN, qdev->intr_context[i].intr_read_mask);
767 value = ql_read32(qdev, INTR_EN);
768 printk(KERN_ERR PFX
769 "%s: Interrupt %d is %s.\n",
770 qdev->ndev->name, i,
771 (value & INTR_EN_EN ? "enabled" : "disabled"));
772 }
773}
774
775void ql_dump_xgmac_control_regs(struct ql_adapter *qdev)
776{
777 u32 data;
778 if (ql_sem_spinlock(qdev, qdev->xg_sem_mask)) {
779 printk(KERN_ERR "%s: Couldn't get xgmac sem.\n", __func__);
780 return;
781 }
782 ql_read_xgmac_reg(qdev, PAUSE_SRC_LO, &data);
783 printk(KERN_ERR PFX "%s: PAUSE_SRC_LO = 0x%.08x.\n", qdev->ndev->name,
784 data);
785 ql_read_xgmac_reg(qdev, PAUSE_SRC_HI, &data);
786 printk(KERN_ERR PFX "%s: PAUSE_SRC_HI = 0x%.08x.\n", qdev->ndev->name,
787 data);
788 ql_read_xgmac_reg(qdev, GLOBAL_CFG, &data);
789 printk(KERN_ERR PFX "%s: GLOBAL_CFG = 0x%.08x.\n", qdev->ndev->name,
790 data);
791 ql_read_xgmac_reg(qdev, TX_CFG, &data);
792 printk(KERN_ERR PFX "%s: TX_CFG = 0x%.08x.\n", qdev->ndev->name, data);
793 ql_read_xgmac_reg(qdev, RX_CFG, &data);
794 printk(KERN_ERR PFX "%s: RX_CFG = 0x%.08x.\n", qdev->ndev->name, data);
795 ql_read_xgmac_reg(qdev, FLOW_CTL, &data);
796 printk(KERN_ERR PFX "%s: FLOW_CTL = 0x%.08x.\n", qdev->ndev->name,
797 data);
798 ql_read_xgmac_reg(qdev, PAUSE_OPCODE, &data);
799 printk(KERN_ERR PFX "%s: PAUSE_OPCODE = 0x%.08x.\n", qdev->ndev->name,
800 data);
801 ql_read_xgmac_reg(qdev, PAUSE_TIMER, &data);
802 printk(KERN_ERR PFX "%s: PAUSE_TIMER = 0x%.08x.\n", qdev->ndev->name,
803 data);
804 ql_read_xgmac_reg(qdev, PAUSE_FRM_DEST_LO, &data);
805 printk(KERN_ERR PFX "%s: PAUSE_FRM_DEST_LO = 0x%.08x.\n",
806 qdev->ndev->name, data);
807 ql_read_xgmac_reg(qdev, PAUSE_FRM_DEST_HI, &data);
808 printk(KERN_ERR PFX "%s: PAUSE_FRM_DEST_HI = 0x%.08x.\n",
809 qdev->ndev->name, data);
810 ql_read_xgmac_reg(qdev, MAC_TX_PARAMS, &data);
811 printk(KERN_ERR PFX "%s: MAC_TX_PARAMS = 0x%.08x.\n", qdev->ndev->name,
812 data);
813 ql_read_xgmac_reg(qdev, MAC_RX_PARAMS, &data);
814 printk(KERN_ERR PFX "%s: MAC_RX_PARAMS = 0x%.08x.\n", qdev->ndev->name,
815 data);
816 ql_read_xgmac_reg(qdev, MAC_SYS_INT, &data);
817 printk(KERN_ERR PFX "%s: MAC_SYS_INT = 0x%.08x.\n", qdev->ndev->name,
818 data);
819 ql_read_xgmac_reg(qdev, MAC_SYS_INT_MASK, &data);
820 printk(KERN_ERR PFX "%s: MAC_SYS_INT_MASK = 0x%.08x.\n",
821 qdev->ndev->name, data);
822 ql_read_xgmac_reg(qdev, MAC_MGMT_INT, &data);
823 printk(KERN_ERR PFX "%s: MAC_MGMT_INT = 0x%.08x.\n", qdev->ndev->name,
824 data);
825 ql_read_xgmac_reg(qdev, MAC_MGMT_IN_MASK, &data);
826 printk(KERN_ERR PFX "%s: MAC_MGMT_IN_MASK = 0x%.08x.\n",
827 qdev->ndev->name, data);
828 ql_read_xgmac_reg(qdev, EXT_ARB_MODE, &data);
829 printk(KERN_ERR PFX "%s: EXT_ARB_MODE = 0x%.08x.\n", qdev->ndev->name,
830 data);
831 ql_sem_unlock(qdev, qdev->xg_sem_mask);
832
833}
834
835static void ql_dump_ets_regs(struct ql_adapter *qdev)
836{
837}
838
839static void ql_dump_cam_entries(struct ql_adapter *qdev)
840{
841 int i;
842 u32 value[3];
Ron Mercercc288f52009-02-23 10:42:14 +0000843
844 i = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
845 if (i)
846 return;
Ron Mercerc4e84bd2008-09-18 11:56:28 -0400847 for (i = 0; i < 4; i++) {
848 if (ql_get_mac_addr_reg(qdev, MAC_ADDR_TYPE_CAM_MAC, i, value)) {
849 printk(KERN_ERR PFX
850 "%s: Failed read of mac index register.\n",
851 __func__);
852 return;
853 } else {
854 if (value[0])
855 printk(KERN_ERR PFX
856 "%s: CAM index %d CAM Lookup Lower = 0x%.08x:%.08x, Output = 0x%.08x.\n",
857 qdev->ndev->name, i, value[1], value[0],
858 value[2]);
859 }
860 }
861 for (i = 0; i < 32; i++) {
862 if (ql_get_mac_addr_reg
863 (qdev, MAC_ADDR_TYPE_MULTI_MAC, i, value)) {
864 printk(KERN_ERR PFX
865 "%s: Failed read of mac index register.\n",
866 __func__);
867 return;
868 } else {
869 if (value[0])
870 printk(KERN_ERR PFX
871 "%s: MCAST index %d CAM Lookup Lower = 0x%.08x:%.08x.\n",
872 qdev->ndev->name, i, value[1], value[0]);
873 }
874 }
Ron Mercercc288f52009-02-23 10:42:14 +0000875 ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
Ron Mercerc4e84bd2008-09-18 11:56:28 -0400876}
877
878void ql_dump_routing_entries(struct ql_adapter *qdev)
879{
880 int i;
881 u32 value;
Ron Mercercc288f52009-02-23 10:42:14 +0000882 i = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
883 if (i)
884 return;
Ron Mercerc4e84bd2008-09-18 11:56:28 -0400885 for (i = 0; i < 16; i++) {
886 value = 0;
887 if (ql_get_routing_reg(qdev, i, &value)) {
888 printk(KERN_ERR PFX
889 "%s: Failed read of routing index register.\n",
890 __func__);
891 return;
892 } else {
893 if (value)
894 printk(KERN_ERR PFX
895 "%s: Routing Mask %d = 0x%.08x.\n",
896 qdev->ndev->name, i, value);
897 }
898 }
Ron Mercercc288f52009-02-23 10:42:14 +0000899 ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
Ron Mercerc4e84bd2008-09-18 11:56:28 -0400900}
901
902void ql_dump_regs(struct ql_adapter *qdev)
903{
904 printk(KERN_ERR PFX "reg dump for function #%d.\n", qdev->func);
905 printk(KERN_ERR PFX "SYS = 0x%x.\n",
906 ql_read32(qdev, SYS));
907 printk(KERN_ERR PFX "RST_FO = 0x%x.\n",
908 ql_read32(qdev, RST_FO));
909 printk(KERN_ERR PFX "FSC = 0x%x.\n",
910 ql_read32(qdev, FSC));
911 printk(KERN_ERR PFX "CSR = 0x%x.\n",
912 ql_read32(qdev, CSR));
913 printk(KERN_ERR PFX "ICB_RID = 0x%x.\n",
914 ql_read32(qdev, ICB_RID));
915 printk(KERN_ERR PFX "ICB_L = 0x%x.\n",
916 ql_read32(qdev, ICB_L));
917 printk(KERN_ERR PFX "ICB_H = 0x%x.\n",
918 ql_read32(qdev, ICB_H));
919 printk(KERN_ERR PFX "CFG = 0x%x.\n",
920 ql_read32(qdev, CFG));
921 printk(KERN_ERR PFX "BIOS_ADDR = 0x%x.\n",
922 ql_read32(qdev, BIOS_ADDR));
923 printk(KERN_ERR PFX "STS = 0x%x.\n",
924 ql_read32(qdev, STS));
925 printk(KERN_ERR PFX "INTR_EN = 0x%x.\n",
926 ql_read32(qdev, INTR_EN));
927 printk(KERN_ERR PFX "INTR_MASK = 0x%x.\n",
928 ql_read32(qdev, INTR_MASK));
929 printk(KERN_ERR PFX "ISR1 = 0x%x.\n",
930 ql_read32(qdev, ISR1));
931 printk(KERN_ERR PFX "ISR2 = 0x%x.\n",
932 ql_read32(qdev, ISR2));
933 printk(KERN_ERR PFX "ISR3 = 0x%x.\n",
934 ql_read32(qdev, ISR3));
935 printk(KERN_ERR PFX "ISR4 = 0x%x.\n",
936 ql_read32(qdev, ISR4));
937 printk(KERN_ERR PFX "REV_ID = 0x%x.\n",
938 ql_read32(qdev, REV_ID));
939 printk(KERN_ERR PFX "FRC_ECC_ERR = 0x%x.\n",
940 ql_read32(qdev, FRC_ECC_ERR));
941 printk(KERN_ERR PFX "ERR_STS = 0x%x.\n",
942 ql_read32(qdev, ERR_STS));
943 printk(KERN_ERR PFX "RAM_DBG_ADDR = 0x%x.\n",
944 ql_read32(qdev, RAM_DBG_ADDR));
945 printk(KERN_ERR PFX "RAM_DBG_DATA = 0x%x.\n",
946 ql_read32(qdev, RAM_DBG_DATA));
947 printk(KERN_ERR PFX "ECC_ERR_CNT = 0x%x.\n",
948 ql_read32(qdev, ECC_ERR_CNT));
949 printk(KERN_ERR PFX "SEM = 0x%x.\n",
950 ql_read32(qdev, SEM));
951 printk(KERN_ERR PFX "GPIO_1 = 0x%x.\n",
952 ql_read32(qdev, GPIO_1));
953 printk(KERN_ERR PFX "GPIO_2 = 0x%x.\n",
954 ql_read32(qdev, GPIO_2));
955 printk(KERN_ERR PFX "GPIO_3 = 0x%x.\n",
956 ql_read32(qdev, GPIO_3));
957 printk(KERN_ERR PFX "XGMAC_ADDR = 0x%x.\n",
958 ql_read32(qdev, XGMAC_ADDR));
959 printk(KERN_ERR PFX "XGMAC_DATA = 0x%x.\n",
960 ql_read32(qdev, XGMAC_DATA));
961 printk(KERN_ERR PFX "NIC_ETS = 0x%x.\n",
962 ql_read32(qdev, NIC_ETS));
963 printk(KERN_ERR PFX "CNA_ETS = 0x%x.\n",
964 ql_read32(qdev, CNA_ETS));
965 printk(KERN_ERR PFX "FLASH_ADDR = 0x%x.\n",
966 ql_read32(qdev, FLASH_ADDR));
967 printk(KERN_ERR PFX "FLASH_DATA = 0x%x.\n",
968 ql_read32(qdev, FLASH_DATA));
969 printk(KERN_ERR PFX "CQ_STOP = 0x%x.\n",
970 ql_read32(qdev, CQ_STOP));
971 printk(KERN_ERR PFX "PAGE_TBL_RID = 0x%x.\n",
972 ql_read32(qdev, PAGE_TBL_RID));
973 printk(KERN_ERR PFX "WQ_PAGE_TBL_LO = 0x%x.\n",
974 ql_read32(qdev, WQ_PAGE_TBL_LO));
975 printk(KERN_ERR PFX "WQ_PAGE_TBL_HI = 0x%x.\n",
976 ql_read32(qdev, WQ_PAGE_TBL_HI));
977 printk(KERN_ERR PFX "CQ_PAGE_TBL_LO = 0x%x.\n",
978 ql_read32(qdev, CQ_PAGE_TBL_LO));
979 printk(KERN_ERR PFX "CQ_PAGE_TBL_HI = 0x%x.\n",
980 ql_read32(qdev, CQ_PAGE_TBL_HI));
981 printk(KERN_ERR PFX "COS_DFLT_CQ1 = 0x%x.\n",
982 ql_read32(qdev, COS_DFLT_CQ1));
983 printk(KERN_ERR PFX "COS_DFLT_CQ2 = 0x%x.\n",
984 ql_read32(qdev, COS_DFLT_CQ2));
985 printk(KERN_ERR PFX "SPLT_HDR = 0x%x.\n",
986 ql_read32(qdev, SPLT_HDR));
987 printk(KERN_ERR PFX "FC_PAUSE_THRES = 0x%x.\n",
988 ql_read32(qdev, FC_PAUSE_THRES));
989 printk(KERN_ERR PFX "NIC_PAUSE_THRES = 0x%x.\n",
990 ql_read32(qdev, NIC_PAUSE_THRES));
991 printk(KERN_ERR PFX "FC_ETHERTYPE = 0x%x.\n",
992 ql_read32(qdev, FC_ETHERTYPE));
993 printk(KERN_ERR PFX "FC_RCV_CFG = 0x%x.\n",
994 ql_read32(qdev, FC_RCV_CFG));
995 printk(KERN_ERR PFX "NIC_RCV_CFG = 0x%x.\n",
996 ql_read32(qdev, NIC_RCV_CFG));
997 printk(KERN_ERR PFX "FC_COS_TAGS = 0x%x.\n",
998 ql_read32(qdev, FC_COS_TAGS));
999 printk(KERN_ERR PFX "NIC_COS_TAGS = 0x%x.\n",
1000 ql_read32(qdev, NIC_COS_TAGS));
1001 printk(KERN_ERR PFX "MGMT_RCV_CFG = 0x%x.\n",
1002 ql_read32(qdev, MGMT_RCV_CFG));
1003 printk(KERN_ERR PFX "XG_SERDES_ADDR = 0x%x.\n",
1004 ql_read32(qdev, XG_SERDES_ADDR));
1005 printk(KERN_ERR PFX "XG_SERDES_DATA = 0x%x.\n",
1006 ql_read32(qdev, XG_SERDES_DATA));
1007 printk(KERN_ERR PFX "PRB_MX_ADDR = 0x%x.\n",
1008 ql_read32(qdev, PRB_MX_ADDR));
1009 printk(KERN_ERR PFX "PRB_MX_DATA = 0x%x.\n",
1010 ql_read32(qdev, PRB_MX_DATA));
1011 ql_dump_intr_states(qdev);
1012 ql_dump_xgmac_control_regs(qdev);
1013 ql_dump_ets_regs(qdev);
1014 ql_dump_cam_entries(qdev);
1015 ql_dump_routing_entries(qdev);
1016}
1017#endif
1018
1019#ifdef QL_STAT_DUMP
1020void ql_dump_stat(struct ql_adapter *qdev)
1021{
1022 printk(KERN_ERR "%s: Enter.\n", __func__);
1023 printk(KERN_ERR "tx_pkts = %ld\n",
1024 (unsigned long)qdev->nic_stats.tx_pkts);
1025 printk(KERN_ERR "tx_bytes = %ld\n",
1026 (unsigned long)qdev->nic_stats.tx_bytes);
1027 printk(KERN_ERR "tx_mcast_pkts = %ld.\n",
1028 (unsigned long)qdev->nic_stats.tx_mcast_pkts);
1029 printk(KERN_ERR "tx_bcast_pkts = %ld.\n",
1030 (unsigned long)qdev->nic_stats.tx_bcast_pkts);
1031 printk(KERN_ERR "tx_ucast_pkts = %ld.\n",
1032 (unsigned long)qdev->nic_stats.tx_ucast_pkts);
1033 printk(KERN_ERR "tx_ctl_pkts = %ld.\n",
1034 (unsigned long)qdev->nic_stats.tx_ctl_pkts);
1035 printk(KERN_ERR "tx_pause_pkts = %ld.\n",
1036 (unsigned long)qdev->nic_stats.tx_pause_pkts);
1037 printk(KERN_ERR "tx_64_pkt = %ld.\n",
1038 (unsigned long)qdev->nic_stats.tx_64_pkt);
1039 printk(KERN_ERR "tx_65_to_127_pkt = %ld.\n",
1040 (unsigned long)qdev->nic_stats.tx_65_to_127_pkt);
1041 printk(KERN_ERR "tx_128_to_255_pkt = %ld.\n",
1042 (unsigned long)qdev->nic_stats.tx_128_to_255_pkt);
1043 printk(KERN_ERR "tx_256_511_pkt = %ld.\n",
1044 (unsigned long)qdev->nic_stats.tx_256_511_pkt);
1045 printk(KERN_ERR "tx_512_to_1023_pkt = %ld.\n",
1046 (unsigned long)qdev->nic_stats.tx_512_to_1023_pkt);
1047 printk(KERN_ERR "tx_1024_to_1518_pkt = %ld.\n",
1048 (unsigned long)qdev->nic_stats.tx_1024_to_1518_pkt);
1049 printk(KERN_ERR "tx_1519_to_max_pkt = %ld.\n",
1050 (unsigned long)qdev->nic_stats.tx_1519_to_max_pkt);
1051 printk(KERN_ERR "tx_undersize_pkt = %ld.\n",
1052 (unsigned long)qdev->nic_stats.tx_undersize_pkt);
1053 printk(KERN_ERR "tx_oversize_pkt = %ld.\n",
1054 (unsigned long)qdev->nic_stats.tx_oversize_pkt);
1055 printk(KERN_ERR "rx_bytes = %ld.\n",
1056 (unsigned long)qdev->nic_stats.rx_bytes);
1057 printk(KERN_ERR "rx_bytes_ok = %ld.\n",
1058 (unsigned long)qdev->nic_stats.rx_bytes_ok);
1059 printk(KERN_ERR "rx_pkts = %ld.\n",
1060 (unsigned long)qdev->nic_stats.rx_pkts);
1061 printk(KERN_ERR "rx_pkts_ok = %ld.\n",
1062 (unsigned long)qdev->nic_stats.rx_pkts_ok);
1063 printk(KERN_ERR "rx_bcast_pkts = %ld.\n",
1064 (unsigned long)qdev->nic_stats.rx_bcast_pkts);
1065 printk(KERN_ERR "rx_mcast_pkts = %ld.\n",
1066 (unsigned long)qdev->nic_stats.rx_mcast_pkts);
1067 printk(KERN_ERR "rx_ucast_pkts = %ld.\n",
1068 (unsigned long)qdev->nic_stats.rx_ucast_pkts);
1069 printk(KERN_ERR "rx_undersize_pkts = %ld.\n",
1070 (unsigned long)qdev->nic_stats.rx_undersize_pkts);
1071 printk(KERN_ERR "rx_oversize_pkts = %ld.\n",
1072 (unsigned long)qdev->nic_stats.rx_oversize_pkts);
1073 printk(KERN_ERR "rx_jabber_pkts = %ld.\n",
1074 (unsigned long)qdev->nic_stats.rx_jabber_pkts);
1075 printk(KERN_ERR "rx_undersize_fcerr_pkts = %ld.\n",
1076 (unsigned long)qdev->nic_stats.rx_undersize_fcerr_pkts);
1077 printk(KERN_ERR "rx_drop_events = %ld.\n",
1078 (unsigned long)qdev->nic_stats.rx_drop_events);
1079 printk(KERN_ERR "rx_fcerr_pkts = %ld.\n",
1080 (unsigned long)qdev->nic_stats.rx_fcerr_pkts);
1081 printk(KERN_ERR "rx_align_err = %ld.\n",
1082 (unsigned long)qdev->nic_stats.rx_align_err);
1083 printk(KERN_ERR "rx_symbol_err = %ld.\n",
1084 (unsigned long)qdev->nic_stats.rx_symbol_err);
1085 printk(KERN_ERR "rx_mac_err = %ld.\n",
1086 (unsigned long)qdev->nic_stats.rx_mac_err);
1087 printk(KERN_ERR "rx_ctl_pkts = %ld.\n",
1088 (unsigned long)qdev->nic_stats.rx_ctl_pkts);
1089 printk(KERN_ERR "rx_pause_pkts = %ld.\n",
1090 (unsigned long)qdev->nic_stats.rx_pause_pkts);
1091 printk(KERN_ERR "rx_64_pkts = %ld.\n",
1092 (unsigned long)qdev->nic_stats.rx_64_pkts);
1093 printk(KERN_ERR "rx_65_to_127_pkts = %ld.\n",
1094 (unsigned long)qdev->nic_stats.rx_65_to_127_pkts);
1095 printk(KERN_ERR "rx_128_255_pkts = %ld.\n",
1096 (unsigned long)qdev->nic_stats.rx_128_255_pkts);
1097 printk(KERN_ERR "rx_256_511_pkts = %ld.\n",
1098 (unsigned long)qdev->nic_stats.rx_256_511_pkts);
1099 printk(KERN_ERR "rx_512_to_1023_pkts = %ld.\n",
1100 (unsigned long)qdev->nic_stats.rx_512_to_1023_pkts);
1101 printk(KERN_ERR "rx_1024_to_1518_pkts = %ld.\n",
1102 (unsigned long)qdev->nic_stats.rx_1024_to_1518_pkts);
1103 printk(KERN_ERR "rx_1519_to_max_pkts = %ld.\n",
1104 (unsigned long)qdev->nic_stats.rx_1519_to_max_pkts);
1105 printk(KERN_ERR "rx_len_err_pkts = %ld.\n",
1106 (unsigned long)qdev->nic_stats.rx_len_err_pkts);
1107};
1108#endif
1109
1110#ifdef QL_DEV_DUMP
1111void ql_dump_qdev(struct ql_adapter *qdev)
1112{
1113 int i;
1114 printk(KERN_ERR PFX "qdev->flags = %lx.\n",
1115 qdev->flags);
1116 printk(KERN_ERR PFX "qdev->vlgrp = %p.\n",
1117 qdev->vlgrp);
1118 printk(KERN_ERR PFX "qdev->pdev = %p.\n",
1119 qdev->pdev);
1120 printk(KERN_ERR PFX "qdev->ndev = %p.\n",
1121 qdev->ndev);
1122 printk(KERN_ERR PFX "qdev->chip_rev_id = %d.\n",
1123 qdev->chip_rev_id);
1124 printk(KERN_ERR PFX "qdev->reg_base = %p.\n",
1125 qdev->reg_base);
1126 printk(KERN_ERR PFX "qdev->doorbell_area = %p.\n",
1127 qdev->doorbell_area);
1128 printk(KERN_ERR PFX "qdev->doorbell_area_size = %d.\n",
1129 qdev->doorbell_area_size);
1130 printk(KERN_ERR PFX "msg_enable = %x.\n",
1131 qdev->msg_enable);
1132 printk(KERN_ERR PFX "qdev->rx_ring_shadow_reg_area = %p.\n",
1133 qdev->rx_ring_shadow_reg_area);
David S. Miller53159d02008-09-19 16:13:05 -07001134 printk(KERN_ERR PFX "qdev->rx_ring_shadow_reg_dma = %llx.\n",
1135 (unsigned long long) qdev->rx_ring_shadow_reg_dma);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001136 printk(KERN_ERR PFX "qdev->tx_ring_shadow_reg_area = %p.\n",
1137 qdev->tx_ring_shadow_reg_area);
David S. Miller53159d02008-09-19 16:13:05 -07001138 printk(KERN_ERR PFX "qdev->tx_ring_shadow_reg_dma = %llx.\n",
1139 (unsigned long long) qdev->tx_ring_shadow_reg_dma);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001140 printk(KERN_ERR PFX "qdev->intr_count = %d.\n",
1141 qdev->intr_count);
1142 if (qdev->msi_x_entry)
1143 for (i = 0; i < qdev->intr_count; i++) {
1144 printk(KERN_ERR PFX
1145 "msi_x_entry.[%d]vector = %d.\n", i,
1146 qdev->msi_x_entry[i].vector);
1147 printk(KERN_ERR PFX
1148 "msi_x_entry.[%d]entry = %d.\n", i,
1149 qdev->msi_x_entry[i].entry);
1150 }
1151 for (i = 0; i < qdev->intr_count; i++) {
1152 printk(KERN_ERR PFX
1153 "intr_context[%d].qdev = %p.\n", i,
1154 qdev->intr_context[i].qdev);
1155 printk(KERN_ERR PFX
1156 "intr_context[%d].intr = %d.\n", i,
1157 qdev->intr_context[i].intr);
1158 printk(KERN_ERR PFX
1159 "intr_context[%d].hooked = %d.\n", i,
1160 qdev->intr_context[i].hooked);
1161 printk(KERN_ERR PFX
1162 "intr_context[%d].intr_en_mask = 0x%08x.\n", i,
1163 qdev->intr_context[i].intr_en_mask);
1164 printk(KERN_ERR PFX
1165 "intr_context[%d].intr_dis_mask = 0x%08x.\n", i,
1166 qdev->intr_context[i].intr_dis_mask);
1167 printk(KERN_ERR PFX
1168 "intr_context[%d].intr_read_mask = 0x%08x.\n", i,
1169 qdev->intr_context[i].intr_read_mask);
1170 }
1171 printk(KERN_ERR PFX "qdev->tx_ring_count = %d.\n", qdev->tx_ring_count);
1172 printk(KERN_ERR PFX "qdev->rx_ring_count = %d.\n", qdev->rx_ring_count);
1173 printk(KERN_ERR PFX "qdev->ring_mem_size = %d.\n", qdev->ring_mem_size);
1174 printk(KERN_ERR PFX "qdev->ring_mem = %p.\n", qdev->ring_mem);
1175 printk(KERN_ERR PFX "qdev->intr_count = %d.\n", qdev->intr_count);
1176 printk(KERN_ERR PFX "qdev->tx_ring = %p.\n",
1177 qdev->tx_ring);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001178 printk(KERN_ERR PFX "qdev->rss_ring_count = %d.\n",
1179 qdev->rss_ring_count);
1180 printk(KERN_ERR PFX "qdev->rx_ring = %p.\n", qdev->rx_ring);
1181 printk(KERN_ERR PFX "qdev->default_rx_queue = %d.\n",
1182 qdev->default_rx_queue);
1183 printk(KERN_ERR PFX "qdev->xg_sem_mask = 0x%08x.\n",
1184 qdev->xg_sem_mask);
1185 printk(KERN_ERR PFX "qdev->port_link_up = 0x%08x.\n",
1186 qdev->port_link_up);
1187 printk(KERN_ERR PFX "qdev->port_init = 0x%08x.\n",
1188 qdev->port_init);
1189
1190}
1191#endif
1192
1193#ifdef QL_CB_DUMP
1194void ql_dump_wqicb(struct wqicb *wqicb)
1195{
1196 printk(KERN_ERR PFX "Dumping wqicb stuff...\n");
1197 printk(KERN_ERR PFX "wqicb->len = 0x%x.\n", le16_to_cpu(wqicb->len));
1198 printk(KERN_ERR PFX "wqicb->flags = %x.\n", le16_to_cpu(wqicb->flags));
1199 printk(KERN_ERR PFX "wqicb->cq_id_rss = %d.\n",
1200 le16_to_cpu(wqicb->cq_id_rss));
1201 printk(KERN_ERR PFX "wqicb->rid = 0x%x.\n", le16_to_cpu(wqicb->rid));
Ron Mercer97345522009-01-09 11:31:50 +00001202 printk(KERN_ERR PFX "wqicb->wq_addr = 0x%llx.\n",
1203 (unsigned long long) le64_to_cpu(wqicb->addr));
1204 printk(KERN_ERR PFX "wqicb->wq_cnsmr_idx_addr = 0x%llx.\n",
1205 (unsigned long long) le64_to_cpu(wqicb->cnsmr_idx_addr));
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001206}
1207
1208void ql_dump_tx_ring(struct tx_ring *tx_ring)
1209{
1210 if (tx_ring == NULL)
1211 return;
1212 printk(KERN_ERR PFX
1213 "===================== Dumping tx_ring %d ===============.\n",
1214 tx_ring->wq_id);
1215 printk(KERN_ERR PFX "tx_ring->base = %p.\n", tx_ring->wq_base);
1216 printk(KERN_ERR PFX "tx_ring->base_dma = 0x%llx.\n",
David S. Miller53159d02008-09-19 16:13:05 -07001217 (unsigned long long) tx_ring->wq_base_dma);
Ron Mercerba7cd3b2009-01-09 11:31:49 +00001218 printk(KERN_ERR PFX
1219 "tx_ring->cnsmr_idx_sh_reg, addr = 0x%p, value = %d.\n",
1220 tx_ring->cnsmr_idx_sh_reg,
1221 tx_ring->cnsmr_idx_sh_reg
1222 ? ql_read_sh_reg(tx_ring->cnsmr_idx_sh_reg) : 0);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001223 printk(KERN_ERR PFX "tx_ring->size = %d.\n", tx_ring->wq_size);
1224 printk(KERN_ERR PFX "tx_ring->len = %d.\n", tx_ring->wq_len);
1225 printk(KERN_ERR PFX "tx_ring->prod_idx_db_reg = %p.\n",
1226 tx_ring->prod_idx_db_reg);
1227 printk(KERN_ERR PFX "tx_ring->valid_db_reg = %p.\n",
1228 tx_ring->valid_db_reg);
1229 printk(KERN_ERR PFX "tx_ring->prod_idx = %d.\n", tx_ring->prod_idx);
1230 printk(KERN_ERR PFX "tx_ring->cq_id = %d.\n", tx_ring->cq_id);
1231 printk(KERN_ERR PFX "tx_ring->wq_id = %d.\n", tx_ring->wq_id);
1232 printk(KERN_ERR PFX "tx_ring->q = %p.\n", tx_ring->q);
1233 printk(KERN_ERR PFX "tx_ring->tx_count = %d.\n",
1234 atomic_read(&tx_ring->tx_count));
1235}
1236
1237void ql_dump_ricb(struct ricb *ricb)
1238{
1239 int i;
1240 printk(KERN_ERR PFX
1241 "===================== Dumping ricb ===============.\n");
1242 printk(KERN_ERR PFX "Dumping ricb stuff...\n");
1243
1244 printk(KERN_ERR PFX "ricb->base_cq = %d.\n", ricb->base_cq & 0x1f);
1245 printk(KERN_ERR PFX "ricb->flags = %s%s%s%s%s%s%s%s%s.\n",
1246 ricb->base_cq & RSS_L4K ? "RSS_L4K " : "",
1247 ricb->flags & RSS_L6K ? "RSS_L6K " : "",
1248 ricb->flags & RSS_LI ? "RSS_LI " : "",
1249 ricb->flags & RSS_LB ? "RSS_LB " : "",
1250 ricb->flags & RSS_LM ? "RSS_LM " : "",
1251 ricb->flags & RSS_RI4 ? "RSS_RI4 " : "",
1252 ricb->flags & RSS_RT4 ? "RSS_RT4 " : "",
1253 ricb->flags & RSS_RI6 ? "RSS_RI6 " : "",
1254 ricb->flags & RSS_RT6 ? "RSS_RT6 " : "");
1255 printk(KERN_ERR PFX "ricb->mask = 0x%.04x.\n", le16_to_cpu(ricb->mask));
1256 for (i = 0; i < 16; i++)
1257 printk(KERN_ERR PFX "ricb->hash_cq_id[%d] = 0x%.08x.\n", i,
1258 le32_to_cpu(ricb->hash_cq_id[i]));
1259 for (i = 0; i < 10; i++)
1260 printk(KERN_ERR PFX "ricb->ipv6_hash_key[%d] = 0x%.08x.\n", i,
1261 le32_to_cpu(ricb->ipv6_hash_key[i]));
1262 for (i = 0; i < 4; i++)
1263 printk(KERN_ERR PFX "ricb->ipv4_hash_key[%d] = 0x%.08x.\n", i,
1264 le32_to_cpu(ricb->ipv4_hash_key[i]));
1265}
1266
1267void ql_dump_cqicb(struct cqicb *cqicb)
1268{
1269 printk(KERN_ERR PFX "Dumping cqicb stuff...\n");
1270
1271 printk(KERN_ERR PFX "cqicb->msix_vect = %d.\n", cqicb->msix_vect);
1272 printk(KERN_ERR PFX "cqicb->flags = %x.\n", cqicb->flags);
1273 printk(KERN_ERR PFX "cqicb->len = %d.\n", le16_to_cpu(cqicb->len));
Ron Mercer97345522009-01-09 11:31:50 +00001274 printk(KERN_ERR PFX "cqicb->addr = 0x%llx.\n",
1275 (unsigned long long) le64_to_cpu(cqicb->addr));
1276 printk(KERN_ERR PFX "cqicb->prod_idx_addr = 0x%llx.\n",
1277 (unsigned long long) le64_to_cpu(cqicb->prod_idx_addr));
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001278 printk(KERN_ERR PFX "cqicb->pkt_delay = 0x%.04x.\n",
1279 le16_to_cpu(cqicb->pkt_delay));
1280 printk(KERN_ERR PFX "cqicb->irq_delay = 0x%.04x.\n",
1281 le16_to_cpu(cqicb->irq_delay));
Ron Mercer97345522009-01-09 11:31:50 +00001282 printk(KERN_ERR PFX "cqicb->lbq_addr = 0x%llx.\n",
1283 (unsigned long long) le64_to_cpu(cqicb->lbq_addr));
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001284 printk(KERN_ERR PFX "cqicb->lbq_buf_size = 0x%.04x.\n",
1285 le16_to_cpu(cqicb->lbq_buf_size));
1286 printk(KERN_ERR PFX "cqicb->lbq_len = 0x%.04x.\n",
1287 le16_to_cpu(cqicb->lbq_len));
Ron Mercer97345522009-01-09 11:31:50 +00001288 printk(KERN_ERR PFX "cqicb->sbq_addr = 0x%llx.\n",
1289 (unsigned long long) le64_to_cpu(cqicb->sbq_addr));
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001290 printk(KERN_ERR PFX "cqicb->sbq_buf_size = 0x%.04x.\n",
1291 le16_to_cpu(cqicb->sbq_buf_size));
1292 printk(KERN_ERR PFX "cqicb->sbq_len = 0x%.04x.\n",
1293 le16_to_cpu(cqicb->sbq_len));
1294}
1295
1296void ql_dump_rx_ring(struct rx_ring *rx_ring)
1297{
1298 if (rx_ring == NULL)
1299 return;
1300 printk(KERN_ERR PFX
1301 "===================== Dumping rx_ring %d ===============.\n",
1302 rx_ring->cq_id);
1303 printk(KERN_ERR PFX "Dumping rx_ring %d, type = %s%s%s.\n",
1304 rx_ring->cq_id, rx_ring->type == DEFAULT_Q ? "DEFAULT" : "",
1305 rx_ring->type == TX_Q ? "OUTBOUND COMPLETIONS" : "",
1306 rx_ring->type == RX_Q ? "INBOUND_COMPLETIONS" : "");
1307 printk(KERN_ERR PFX "rx_ring->cqicb = %p.\n", &rx_ring->cqicb);
1308 printk(KERN_ERR PFX "rx_ring->cq_base = %p.\n", rx_ring->cq_base);
1309 printk(KERN_ERR PFX "rx_ring->cq_base_dma = %llx.\n",
David S. Miller53159d02008-09-19 16:13:05 -07001310 (unsigned long long) rx_ring->cq_base_dma);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001311 printk(KERN_ERR PFX "rx_ring->cq_size = %d.\n", rx_ring->cq_size);
1312 printk(KERN_ERR PFX "rx_ring->cq_len = %d.\n", rx_ring->cq_len);
1313 printk(KERN_ERR PFX
Ron Mercerba7cd3b2009-01-09 11:31:49 +00001314 "rx_ring->prod_idx_sh_reg, addr = 0x%p, value = %d.\n",
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001315 rx_ring->prod_idx_sh_reg,
Ron Mercerba7cd3b2009-01-09 11:31:49 +00001316 rx_ring->prod_idx_sh_reg
1317 ? ql_read_sh_reg(rx_ring->prod_idx_sh_reg) : 0);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001318 printk(KERN_ERR PFX "rx_ring->prod_idx_sh_reg_dma = %llx.\n",
David S. Miller53159d02008-09-19 16:13:05 -07001319 (unsigned long long) rx_ring->prod_idx_sh_reg_dma);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001320 printk(KERN_ERR PFX "rx_ring->cnsmr_idx_db_reg = %p.\n",
1321 rx_ring->cnsmr_idx_db_reg);
1322 printk(KERN_ERR PFX "rx_ring->cnsmr_idx = %d.\n", rx_ring->cnsmr_idx);
1323 printk(KERN_ERR PFX "rx_ring->curr_entry = %p.\n", rx_ring->curr_entry);
1324 printk(KERN_ERR PFX "rx_ring->valid_db_reg = %p.\n",
1325 rx_ring->valid_db_reg);
1326
1327 printk(KERN_ERR PFX "rx_ring->lbq_base = %p.\n", rx_ring->lbq_base);
1328 printk(KERN_ERR PFX "rx_ring->lbq_base_dma = %llx.\n",
David S. Miller53159d02008-09-19 16:13:05 -07001329 (unsigned long long) rx_ring->lbq_base_dma);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001330 printk(KERN_ERR PFX "rx_ring->lbq_base_indirect = %p.\n",
1331 rx_ring->lbq_base_indirect);
1332 printk(KERN_ERR PFX "rx_ring->lbq_base_indirect_dma = %llx.\n",
David S. Miller53159d02008-09-19 16:13:05 -07001333 (unsigned long long) rx_ring->lbq_base_indirect_dma);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001334 printk(KERN_ERR PFX "rx_ring->lbq = %p.\n", rx_ring->lbq);
1335 printk(KERN_ERR PFX "rx_ring->lbq_len = %d.\n", rx_ring->lbq_len);
1336 printk(KERN_ERR PFX "rx_ring->lbq_size = %d.\n", rx_ring->lbq_size);
1337 printk(KERN_ERR PFX "rx_ring->lbq_prod_idx_db_reg = %p.\n",
1338 rx_ring->lbq_prod_idx_db_reg);
1339 printk(KERN_ERR PFX "rx_ring->lbq_prod_idx = %d.\n",
1340 rx_ring->lbq_prod_idx);
1341 printk(KERN_ERR PFX "rx_ring->lbq_curr_idx = %d.\n",
1342 rx_ring->lbq_curr_idx);
1343 printk(KERN_ERR PFX "rx_ring->lbq_clean_idx = %d.\n",
1344 rx_ring->lbq_clean_idx);
1345 printk(KERN_ERR PFX "rx_ring->lbq_free_cnt = %d.\n",
1346 rx_ring->lbq_free_cnt);
1347 printk(KERN_ERR PFX "rx_ring->lbq_buf_size = %d.\n",
1348 rx_ring->lbq_buf_size);
1349
1350 printk(KERN_ERR PFX "rx_ring->sbq_base = %p.\n", rx_ring->sbq_base);
1351 printk(KERN_ERR PFX "rx_ring->sbq_base_dma = %llx.\n",
David S. Miller53159d02008-09-19 16:13:05 -07001352 (unsigned long long) rx_ring->sbq_base_dma);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001353 printk(KERN_ERR PFX "rx_ring->sbq_base_indirect = %p.\n",
1354 rx_ring->sbq_base_indirect);
1355 printk(KERN_ERR PFX "rx_ring->sbq_base_indirect_dma = %llx.\n",
David S. Miller53159d02008-09-19 16:13:05 -07001356 (unsigned long long) rx_ring->sbq_base_indirect_dma);
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001357 printk(KERN_ERR PFX "rx_ring->sbq = %p.\n", rx_ring->sbq);
1358 printk(KERN_ERR PFX "rx_ring->sbq_len = %d.\n", rx_ring->sbq_len);
1359 printk(KERN_ERR PFX "rx_ring->sbq_size = %d.\n", rx_ring->sbq_size);
1360 printk(KERN_ERR PFX "rx_ring->sbq_prod_idx_db_reg addr = %p.\n",
1361 rx_ring->sbq_prod_idx_db_reg);
1362 printk(KERN_ERR PFX "rx_ring->sbq_prod_idx = %d.\n",
1363 rx_ring->sbq_prod_idx);
1364 printk(KERN_ERR PFX "rx_ring->sbq_curr_idx = %d.\n",
1365 rx_ring->sbq_curr_idx);
1366 printk(KERN_ERR PFX "rx_ring->sbq_clean_idx = %d.\n",
1367 rx_ring->sbq_clean_idx);
1368 printk(KERN_ERR PFX "rx_ring->sbq_free_cnt = %d.\n",
1369 rx_ring->sbq_free_cnt);
1370 printk(KERN_ERR PFX "rx_ring->sbq_buf_size = %d.\n",
1371 rx_ring->sbq_buf_size);
1372 printk(KERN_ERR PFX "rx_ring->cq_id = %d.\n", rx_ring->cq_id);
1373 printk(KERN_ERR PFX "rx_ring->irq = %d.\n", rx_ring->irq);
1374 printk(KERN_ERR PFX "rx_ring->cpu = %d.\n", rx_ring->cpu);
1375 printk(KERN_ERR PFX "rx_ring->qdev = %p.\n", rx_ring->qdev);
1376}
1377
1378void ql_dump_hw_cb(struct ql_adapter *qdev, int size, u32 bit, u16 q_id)
1379{
1380 void *ptr;
1381
1382 printk(KERN_ERR PFX "%s: Enter.\n", __func__);
1383
1384 ptr = kmalloc(size, GFP_ATOMIC);
1385 if (ptr == NULL) {
1386 printk(KERN_ERR PFX "%s: Couldn't allocate a buffer.\n",
1387 __func__);
1388 return;
1389 }
1390
1391 if (ql_write_cfg(qdev, ptr, size, bit, q_id)) {
1392 printk(KERN_ERR "%s: Failed to upload control block!\n",
1393 __func__);
1394 goto fail_it;
1395 }
1396 switch (bit) {
1397 case CFG_DRQ:
1398 ql_dump_wqicb((struct wqicb *)ptr);
1399 break;
1400 case CFG_DCQ:
1401 ql_dump_cqicb((struct cqicb *)ptr);
1402 break;
1403 case CFG_DR:
1404 ql_dump_ricb((struct ricb *)ptr);
1405 break;
1406 default:
1407 printk(KERN_ERR PFX "%s: Invalid bit value = %x.\n",
1408 __func__, bit);
1409 break;
1410 }
1411fail_it:
1412 kfree(ptr);
1413}
1414#endif
1415
1416#ifdef QL_OB_DUMP
1417void ql_dump_tx_desc(struct tx_buf_desc *tbd)
1418{
1419 printk(KERN_ERR PFX "tbd->addr = 0x%llx\n",
1420 le64_to_cpu((u64) tbd->addr));
1421 printk(KERN_ERR PFX "tbd->len = %d\n",
1422 le32_to_cpu(tbd->len & TX_DESC_LEN_MASK));
1423 printk(KERN_ERR PFX "tbd->flags = %s %s\n",
1424 tbd->len & TX_DESC_C ? "C" : ".",
1425 tbd->len & TX_DESC_E ? "E" : ".");
1426 tbd++;
1427 printk(KERN_ERR PFX "tbd->addr = 0x%llx\n",
1428 le64_to_cpu((u64) tbd->addr));
1429 printk(KERN_ERR PFX "tbd->len = %d\n",
1430 le32_to_cpu(tbd->len & TX_DESC_LEN_MASK));
1431 printk(KERN_ERR PFX "tbd->flags = %s %s\n",
1432 tbd->len & TX_DESC_C ? "C" : ".",
1433 tbd->len & TX_DESC_E ? "E" : ".");
1434 tbd++;
1435 printk(KERN_ERR PFX "tbd->addr = 0x%llx\n",
1436 le64_to_cpu((u64) tbd->addr));
1437 printk(KERN_ERR PFX "tbd->len = %d\n",
1438 le32_to_cpu(tbd->len & TX_DESC_LEN_MASK));
1439 printk(KERN_ERR PFX "tbd->flags = %s %s\n",
1440 tbd->len & TX_DESC_C ? "C" : ".",
1441 tbd->len & TX_DESC_E ? "E" : ".");
1442
1443}
1444
1445void ql_dump_ob_mac_iocb(struct ob_mac_iocb_req *ob_mac_iocb)
1446{
1447 struct ob_mac_tso_iocb_req *ob_mac_tso_iocb =
1448 (struct ob_mac_tso_iocb_req *)ob_mac_iocb;
1449 struct tx_buf_desc *tbd;
1450 u16 frame_len;
1451
1452 printk(KERN_ERR PFX "%s\n", __func__);
1453 printk(KERN_ERR PFX "opcode = %s\n",
1454 (ob_mac_iocb->opcode == OPCODE_OB_MAC_IOCB) ? "MAC" : "TSO");
1455 printk(KERN_ERR PFX "flags1 = %s %s %s %s %s\n",
1456 ob_mac_tso_iocb->flags1 & OB_MAC_TSO_IOCB_OI ? "OI" : "",
1457 ob_mac_tso_iocb->flags1 & OB_MAC_TSO_IOCB_I ? "I" : "",
1458 ob_mac_tso_iocb->flags1 & OB_MAC_TSO_IOCB_D ? "D" : "",
1459 ob_mac_tso_iocb->flags1 & OB_MAC_TSO_IOCB_IP4 ? "IP4" : "",
1460 ob_mac_tso_iocb->flags1 & OB_MAC_TSO_IOCB_IP6 ? "IP6" : "");
1461 printk(KERN_ERR PFX "flags2 = %s %s %s\n",
1462 ob_mac_tso_iocb->flags2 & OB_MAC_TSO_IOCB_LSO ? "LSO" : "",
1463 ob_mac_tso_iocb->flags2 & OB_MAC_TSO_IOCB_UC ? "UC" : "",
1464 ob_mac_tso_iocb->flags2 & OB_MAC_TSO_IOCB_TC ? "TC" : "");
1465 printk(KERN_ERR PFX "flags3 = %s %s %s \n",
1466 ob_mac_tso_iocb->flags3 & OB_MAC_TSO_IOCB_IC ? "IC" : "",
1467 ob_mac_tso_iocb->flags3 & OB_MAC_TSO_IOCB_DFP ? "DFP" : "",
1468 ob_mac_tso_iocb->flags3 & OB_MAC_TSO_IOCB_V ? "V" : "");
1469 printk(KERN_ERR PFX "tid = %x\n", ob_mac_iocb->tid);
1470 printk(KERN_ERR PFX "txq_idx = %d\n", ob_mac_iocb->txq_idx);
1471 printk(KERN_ERR PFX "vlan_tci = %x\n", ob_mac_tso_iocb->vlan_tci);
1472 if (ob_mac_iocb->opcode == OPCODE_OB_MAC_TSO_IOCB) {
1473 printk(KERN_ERR PFX "frame_len = %d\n",
1474 le32_to_cpu(ob_mac_tso_iocb->frame_len));
1475 printk(KERN_ERR PFX "mss = %d\n",
1476 le16_to_cpu(ob_mac_tso_iocb->mss));
1477 printk(KERN_ERR PFX "prot_hdr_len = %d\n",
1478 le16_to_cpu(ob_mac_tso_iocb->total_hdrs_len));
1479 printk(KERN_ERR PFX "hdr_offset = 0x%.04x\n",
1480 le16_to_cpu(ob_mac_tso_iocb->net_trans_offset));
1481 frame_len = le32_to_cpu(ob_mac_tso_iocb->frame_len);
1482 } else {
1483 printk(KERN_ERR PFX "frame_len = %d\n",
1484 le16_to_cpu(ob_mac_iocb->frame_len));
1485 frame_len = le16_to_cpu(ob_mac_iocb->frame_len);
1486 }
1487 tbd = &ob_mac_iocb->tbd[0];
1488 ql_dump_tx_desc(tbd);
1489}
1490
1491void ql_dump_ob_mac_rsp(struct ob_mac_iocb_rsp *ob_mac_rsp)
1492{
1493 printk(KERN_ERR PFX "%s\n", __func__);
1494 printk(KERN_ERR PFX "opcode = %d\n", ob_mac_rsp->opcode);
1495 printk(KERN_ERR PFX "flags = %s %s %s %s %s %s %s\n",
1496 ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_OI ? "OI" : ".",
1497 ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_I ? "I" : ".",
1498 ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_E ? "E" : ".",
1499 ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_S ? "S" : ".",
1500 ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_L ? "L" : ".",
1501 ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_P ? "P" : ".",
1502 ob_mac_rsp->flags2 & OB_MAC_IOCB_RSP_B ? "B" : ".");
1503 printk(KERN_ERR PFX "tid = %x\n", ob_mac_rsp->tid);
1504}
1505#endif
1506
1507#ifdef QL_IB_DUMP
1508void ql_dump_ib_mac_rsp(struct ib_mac_iocb_rsp *ib_mac_rsp)
1509{
1510 printk(KERN_ERR PFX "%s\n", __func__);
1511 printk(KERN_ERR PFX "opcode = 0x%x\n", ib_mac_rsp->opcode);
1512 printk(KERN_ERR PFX "flags1 = %s%s%s%s%s%s\n",
1513 ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_OI ? "OI " : "",
1514 ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_I ? "I " : "",
1515 ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_TE ? "TE " : "",
1516 ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_NU ? "NU " : "",
1517 ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_IE ? "IE " : "",
1518 ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_B ? "B " : "");
1519
1520 if (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK)
1521 printk(KERN_ERR PFX "%s%s%s Multicast.\n",
1522 (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1523 IB_MAC_IOCB_RSP_M_HASH ? "Hash" : "",
1524 (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1525 IB_MAC_IOCB_RSP_M_REG ? "Registered" : "",
1526 (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1527 IB_MAC_IOCB_RSP_M_PROM ? "Promiscuous" : "");
1528
1529 printk(KERN_ERR PFX "flags2 = %s%s%s%s%s\n",
1530 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_P) ? "P " : "",
1531 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V) ? "V " : "",
1532 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) ? "U " : "",
1533 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) ? "T " : "",
1534 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_FO) ? "FO " : "");
1535
1536 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK)
1537 printk(KERN_ERR PFX "%s%s%s%s%s error.\n",
1538 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) ==
1539 IB_MAC_IOCB_RSP_ERR_OVERSIZE ? "oversize" : "",
1540 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) ==
1541 IB_MAC_IOCB_RSP_ERR_UNDERSIZE ? "undersize" : "",
1542 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) ==
1543 IB_MAC_IOCB_RSP_ERR_PREAMBLE ? "preamble" : "",
1544 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) ==
1545 IB_MAC_IOCB_RSP_ERR_FRAME_LEN ? "frame length" : "",
1546 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) ==
1547 IB_MAC_IOCB_RSP_ERR_CRC ? "CRC" : "");
1548
1549 printk(KERN_ERR PFX "flags3 = %s%s.\n",
1550 ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DS ? "DS " : "",
1551 ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DL ? "DL " : "");
1552
1553 if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK)
1554 printk(KERN_ERR PFX "RSS flags = %s%s%s%s.\n",
1555 ((ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK) ==
1556 IB_MAC_IOCB_RSP_M_IPV4) ? "IPv4 RSS" : "",
1557 ((ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK) ==
1558 IB_MAC_IOCB_RSP_M_IPV6) ? "IPv6 RSS " : "",
1559 ((ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK) ==
1560 IB_MAC_IOCB_RSP_M_TCP_V4) ? "TCP/IPv4 RSS" : "",
1561 ((ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK) ==
1562 IB_MAC_IOCB_RSP_M_TCP_V6) ? "TCP/IPv6 RSS" : "");
1563
1564 printk(KERN_ERR PFX "data_len = %d\n",
1565 le32_to_cpu(ib_mac_rsp->data_len));
Ron Mercer97345522009-01-09 11:31:50 +00001566 printk(KERN_ERR PFX "data_addr = 0x%llx\n",
1567 (unsigned long long) le64_to_cpu(ib_mac_rsp->data_addr));
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001568 if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK)
1569 printk(KERN_ERR PFX "rss = %x\n",
1570 le32_to_cpu(ib_mac_rsp->rss));
1571 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V)
1572 printk(KERN_ERR PFX "vlan_id = %x\n",
1573 le16_to_cpu(ib_mac_rsp->vlan_id));
1574
1575 printk(KERN_ERR PFX "flags4 = %s%s%s.\n",
Ron Mercera303ce02009-01-05 18:18:22 -08001576 ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV ? "HV " : "",
1577 ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS ? "HS " : "",
1578 ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HL ? "HL " : "");
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001579
Ron Mercera303ce02009-01-05 18:18:22 -08001580 if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV) {
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001581 printk(KERN_ERR PFX "hdr length = %d.\n",
1582 le32_to_cpu(ib_mac_rsp->hdr_len));
Ron Mercer97345522009-01-09 11:31:50 +00001583 printk(KERN_ERR PFX "hdr addr = 0x%llx.\n",
1584 (unsigned long long) le64_to_cpu(ib_mac_rsp->hdr_addr));
Ron Mercerc4e84bd2008-09-18 11:56:28 -04001585 }
1586}
1587#endif
1588
1589#ifdef QL_ALL_DUMP
1590void ql_dump_all(struct ql_adapter *qdev)
1591{
1592 int i;
1593
1594 QL_DUMP_REGS(qdev);
1595 QL_DUMP_QDEV(qdev);
1596 for (i = 0; i < qdev->tx_ring_count; i++) {
1597 QL_DUMP_TX_RING(&qdev->tx_ring[i]);
1598 QL_DUMP_WQICB((struct wqicb *)&qdev->tx_ring[i]);
1599 }
1600 for (i = 0; i < qdev->rx_ring_count; i++) {
1601 QL_DUMP_RX_RING(&qdev->rx_ring[i]);
1602 QL_DUMP_CQICB((struct cqicb *)&qdev->rx_ring[i]);
1603 }
1604}
1605#endif