iPXE
bnxt_dbg.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2018 Broadcom. All Rights Reserved.
3  * The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
4 
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of version 2 of the GNU General Public License as published by the
7  * Free Software Foundation.
8 
9  * This program is distributed in the hope that it will be useful.
10  * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
11  * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
12  * NON-INFRINGEMENT, ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS
13  * ARE HELD TO BE LEGALLY INVALID. See the GNU General Public License for more
14  * details, a copy of which can be found in the file COPYING included with this
15  * package.
16  */
17 
18 //#define DEBUG_DRV
19 //#define DEBUG_KEY
20 //#define DEBUG_PCI
21 //#define DEBUG_MEMORY
22 //#define DEBUG_LINK
23 //#define DEBUG_CHIP
24 //#define DEBUG_FAIL
25 //#define DEBUG_HWRM_CMDS
26 //#define DEBUG_HWRM_DUMP
27 //#define DEBUG_CQ
28 //#define DEBUG_CQ_DUMP
29 //#define DEBUG_TX
30 //#define DEBUG_TX_DUMP
31 //#define DEBUG_RX
32 //#define DEBUG_RX_DUMP
33 
34 #if \
35  defined(DEBUG_DRV) || \
36  defined(DEBUG_PCI) || \
37  defined(DEBUG_CHIP) || \
38  defined(DEBUG_MEMORY) || \
39  defined(DEBUG_LINK) || \
40  defined(DEBUG_FAIL) || \
41  defined(DEBUG_HWRM_CMDS) || \
42  defined(DEBUG_HWRM_DUMP) || \
43  defined(DEBUG_CQ) || \
44  defined(DEBUG_CQ_DUMP) || \
45  defined(DEBUG_TX) || \
46  defined(DEBUG_TX_DUMP) || \
47  defined(DEBUG_RX) || \
48  defined(DEBUG_RX_DUMP)
49 #define DEBUG_DEFAULT
50 #endif
51 #if defined(DEBUG_DEFAULT)
52 #define dbg_prn printf
53 
54 void pause_drv(void)
55 {
56 #if defined(DEBUG_KEY)
57  dbg_prn(" Press a key...");
58  getchar();
59 #endif
60  dbg_prn("\n");
61 }
62 
63 #define MAX_CHAR_SIZE(a) (u32)((1 << (a)) - 1)
64 #define DISP_U8 0x00
65 #define DISP_U16 0x01
66 #define DISP_U32 0x02
67 #define DISP_U64 0x03
68 
69 void dumpmemory1(u8 *buffer, u32 length, u8 flag)
70 {
71  u32 jj = 0;
72  u8 i, c;
73 
74  dbg_prn("\n %p:", buffer);
75  for (jj = 0; jj < 16; jj++) {
76  if (!(jj & MAX_CHAR_SIZE(flag)))
77  dbg_prn(" ");
78  if (jj < length)
79  dbg_prn("%02x", buffer[jj]);
80  else
81  dbg_prn(" ");
82  if ((jj & 0xF) == 0xF) {
83  dbg_prn(" ");
84  for (i = 0; i < 16; i++) {
85  if (i < length) {
86  c = buffer[jj + i - 15];
87  if (c >= 0x20 && c < 0x7F)
88  ;
89  else
90  c = '.';
91  dbg_prn("%c", c);
92  }
93  }
94  }
95  }
96 }
97 
98 void dump_mem(u8 *buffer, u32 length, u8 flag)
99 {
100  u32 length16, remlen, jj;
101 
102  length16 = length & 0xFFFFFFF0;
103  remlen = length & 0xF;
104  for (jj = 0; jj < length16; jj += 16)
105  dumpmemory1((u8 *)&buffer[jj], 16, flag);
106  if (remlen)
107  dumpmemory1((u8 *)&buffer[length16], remlen, flag);
108  if (length16 || remlen)
109  dbg_prn("\n");
110 }
111 #else
112 #define dbg_prn(func)
113 #endif
114 
115 #if defined(DEBUG_PCI)
116 void dbg_pci(struct bnxt *bp, const char *func, u16 cmd_reg)
117 {
118  struct pci_device *pdev = bp->pdev;
119 
120  dbg_prn("- %s()\n", func);
121  dbg_prn(" Bus:Dev:Func : %04X\n", pdev->busdevfn);
122  dbg_prn(" Vendor id : %04X\n", pdev->vendor);
123  dbg_prn(" Device id : %04X (%cF)\n",
124  pdev->device, (bp->vf) ? 'V' : 'P');
125  dbg_prn(" Irq : %d\n", pdev->irq);
126  dbg_prn(" PCI Command Reg : %04X\n", cmd_reg);
127  dbg_prn(" Sub Vendor id : %04X\n", bp->subsystem_vendor);
128  dbg_prn(" Sub Device id : %04X\n", bp->subsystem_device);
129  dbg_prn(" PF Number : %X\n", bp->pf_num);
130  dbg_prn(" BAR (0) : %p %lx\n",
131  bp->bar0, pci_bar_start(pdev, PCI_BASE_ADDRESS_0));
132  dbg_prn(" BAR (1) : %p %lx\n",
133  bp->bar1, pci_bar_start(pdev, PCI_BASE_ADDRESS_2));
134  dbg_prn(" BAR (2) : %p %lx\n",
135  bp->bar2, pci_bar_start(pdev, PCI_BASE_ADDRESS_4));
136  dbg_prn(" ");
137  pause_drv();
138 }
139 #else
140 #define dbg_pci(bp, func, creg)
141 #endif
142 
143 #if defined(DEBUG_MEMORY)
144 void dbg_mem(struct bnxt *bp, const char *func)
145 {
146  dbg_prn("- %s()\n", func);
147  dbg_prn(" bp Addr : %p", bp);
148  dbg_prn(" Len %4d", (u16)sizeof(struct bnxt));
149  dbg_prn(" phy %lx\n", virt_to_bus(bp));
150  dbg_prn(" bp->hwrm_req_addr : %p", bp->hwrm_addr_req);
151  dbg_prn(" Len %4d", (u16)REQ_BUFFER_SIZE);
152  dbg_prn(" phy %lx\n", bp->req_addr_mapping);
153  dbg_prn(" bp->hwrm_resp_addr : %p", bp->hwrm_addr_resp);
154  dbg_prn(" Len %4d", (u16)RESP_BUFFER_SIZE);
155  dbg_prn(" phy %lx\n", bp->resp_addr_mapping);
156  dbg_prn(" bp->dma_addr : %p", bp->hwrm_addr_dma);
157  dbg_prn(" Len %4d", (u16)DMA_BUFFER_SIZE);
158  dbg_prn(" phy %lx\n", bp->dma_addr_mapping);
159  dbg_prn(" bp->tx.bd_virt : %p", bp->tx.bd_virt);
160  dbg_prn(" Len %4d", (u16)TX_RING_BUFFER_SIZE);
161  dbg_prn(" phy %lx\n", virt_to_bus(bp->tx.bd_virt));
162  dbg_prn(" bp->rx.bd_virt : %p", bp->rx.bd_virt);
163  dbg_prn(" Len %4d", (u16)RX_RING_BUFFER_SIZE);
164  dbg_prn(" phy %lx\n", virt_to_bus(bp->rx.bd_virt));
165  dbg_prn(" bp->cq.bd_virt : %p", bp->cq.bd_virt);
166  dbg_prn(" Len %4d", (u16)CQ_RING_BUFFER_SIZE);
167  dbg_prn(" phy %lx\n", virt_to_bus(bp->cq.bd_virt));
168  dbg_prn(" bp->nq.bd_virt : %p", bp->nq.bd_virt);
169  dbg_prn(" Len %4d", (u16)NQ_RING_BUFFER_SIZE);
170  dbg_prn(" phy %lx\n", virt_to_bus(bp->nq.bd_virt));
171  dbg_prn(" ");
172  pause_drv();
173 }
174 #else
175 #define dbg_mem(bp, func) (func = func)
176 #endif
177 
178 #if defined(DEBUG_CHIP)
179 void dbg_fw_ver(struct hwrm_ver_get_output *resp, u32 tmo)
180 {
181  if (resp->hwrm_intf_maj_8b < 1) {
182  dbg_prn(" HWRM interface %d.%d.%d is older than 1.0.0.\n",
183  resp->hwrm_intf_maj_8b, resp->hwrm_intf_min_8b,
184  resp->hwrm_intf_upd_8b);
185  dbg_prn(" Update FW with HWRM interface 1.0.0 or newer.\n");
186  }
187  dbg_prn(" FW Version : %d.%d.%d.%d\n",
188  resp->hwrm_fw_maj_8b, resp->hwrm_fw_min_8b,
189  resp->hwrm_fw_bld_8b, resp->hwrm_fw_rsvd_8b);
190  dbg_prn(" cmd timeout : %d\n", tmo);
191  if (resp->hwrm_intf_maj_8b >= 1)
192  dbg_prn(" hwrm_max_req_len : %d\n", resp->max_req_win_len);
193  dbg_prn(" hwrm_max_ext_req : %d\n", resp->max_ext_req_len);
194  dbg_prn(" chip_num : %x\n", resp->chip_num);
195  dbg_prn(" chip_id : %x\n",
196  (u32)(resp->chip_rev << 24) |
197  (u32)(resp->chip_metal << 16) |
198  (u32)(resp->chip_bond_id << 8) |
199  (u32)resp->chip_platform_type);
202  dbg_prn(" SHORT_CMD_SUPPORTED\n");
203 }
204 
205 void dbg_func_resource_qcaps(struct bnxt *bp)
206 {
207 // Ring Groups
208  dbg_prn(" min_hw_ring_grps : %d\n", bp->min_hw_ring_grps);
209  dbg_prn(" max_hw_ring_grps : %d\n", bp->max_hw_ring_grps);
210 // TX Rings
211  dbg_prn(" min_tx_rings : %d\n", bp->min_tx_rings);
212  dbg_prn(" max_tx_rings : %d\n", bp->max_tx_rings);
213 // RX Rings
214  dbg_prn(" min_rx_rings : %d\n", bp->min_rx_rings);
215  dbg_prn(" max_rx_rings : %d\n", bp->max_rx_rings);
216 // Completion Rings
217  dbg_prn(" min_cq_rings : %d\n", bp->min_cp_rings);
218  dbg_prn(" max_cq_rings : %d\n", bp->max_cp_rings);
219 // Statistic Contexts
220  dbg_prn(" min_stat_ctxs : %d\n", bp->min_stat_ctxs);
221  dbg_prn(" max_stat_ctxs : %d\n", bp->max_stat_ctxs);
222 }
223 
224 void dbg_func_qcaps(struct bnxt *bp)
225 {
226  dbg_prn(" Port Number : %d\n", bp->port_idx);
227  dbg_prn(" fid : 0x%04x\n", bp->fid);
228  dbg_prn(" PF MAC : %02x:%02x:%02x:%02x:%02x:%02x\n",
229  bp->mac_addr[0],
230  bp->mac_addr[1],
231  bp->mac_addr[2],
232  bp->mac_addr[3],
233  bp->mac_addr[4],
234  bp->mac_addr[5]);
235 }
236 
237 void dbg_func_qcfg(struct bnxt *bp)
238 {
239  dbg_prn(" ordinal_value : %d\n", bp->ordinal_value);
240  dbg_prn(" stat_ctx_id : %x\n", bp->stat_ctx_id);
241  if (bp->vf) {
243  dbg_prn(" vlan_id : %d\n", bp->vlan_id);
244  }
245 }
246 
247 void prn_set_speed(u32 speed)
248 {
249  u32 speed1 = ((speed & LINK_SPEED_DRV_MASK) >> LINK_SPEED_DRV_SHIFT);
250 
251  dbg_prn(" Set Link Speed : ");
252  switch (speed & LINK_SPEED_DRV_MASK) {
253  case LINK_SPEED_DRV_1G:
254  dbg_prn("1 GBPS");
255  break;
256  case LINK_SPEED_DRV_10G:
257  dbg_prn("10 GBPS");
258  break;
259  case LINK_SPEED_DRV_25G:
260  dbg_prn("25 GBPS");
261  break;
262  case LINK_SPEED_DRV_40G:
263  dbg_prn("40 GBPS");
264  break;
265  case LINK_SPEED_DRV_50G:
266  dbg_prn("50 GBPS");
267  break;
268  case LINK_SPEED_DRV_100G:
269  dbg_prn("100 GBPS");
270  break;
271  case LINK_SPEED_DRV_200G:
272  dbg_prn("200 GBPS");
273  break;
275  dbg_prn("AUTONEG");
276  break;
277  default:
278  dbg_prn("%x", speed1);
279  break;
280  }
281  dbg_prn("\n");
282 }
283 
284 void dbg_chip_info(struct bnxt *bp)
285 {
286  if (bp->thor)
287  dbg_prn(" NQ Ring Id : %d\n", bp->nq_ring_id);
288  else
289  dbg_prn(" Grp ID : %d\n", bp->ring_grp_id);
290  dbg_prn(" Stat Ctx ID : %d\n", bp->stat_ctx_id);
291  dbg_prn(" CQ Ring Id : %d\n", bp->cq_ring_id);
292  dbg_prn(" Tx Ring Id : %d\n", bp->tx_ring_id);
293  dbg_prn(" Rx ring Id : %d\n", bp->rx_ring_id);
294  dbg_prn(" ");
295  pause_drv();
296 }
297 
298 void dbg_num_rings(struct bnxt *bp)
299 {
300  dbg_prn(" num_cmpl_rings : %d\n", bp->num_cmpl_rings);
301  dbg_prn(" num_tx_rings : %d\n", bp->num_tx_rings);
302  dbg_prn(" num_rx_rings : %d\n", bp->num_rx_rings);
303  dbg_prn(" num_ring_grps : %d\n", bp->num_hw_ring_grps);
304  dbg_prn(" num_stat_ctxs : %d\n", bp->num_stat_ctxs);
305 }
306 
307 void dbg_flags(const char *func, u32 flags)
308 {
309  dbg_prn("- %s()\n", func);
310  dbg_prn(" bp->flags : 0x%04x\n", flags);
311 }
312 
313 void dbg_bnxt_pause(void)
314 {
315  dbg_prn(" ");
316  pause_drv();
317 }
318 #else
319 #define dbg_fw_ver(resp, tmo)
320 #define dbg_func_resource_qcaps(bp)
321 #define dbg_func_qcaps(bp)
322 #define dbg_func_qcfg(bp)
323 #define prn_set_speed(speed)
324 #define dbg_chip_info(bp)
325 #define dbg_num_rings(bp)
326 #define dbg_flags(func, flags)
327 #define dbg_bnxt_pause()
328 #endif
329 
330 #if defined(DEBUG_HWRM_CMDS) || defined(DEBUG_FAIL)
331 void dump_hwrm_req(struct bnxt *bp, const char *func, u32 len, u32 tmo)
332 {
333  dbg_prn("- %s(0x%04x) cmd_len %d cmd_tmo %d",
334  func, (u16)((struct input *)bp->hwrm_addr_req)->req_type,
335  len, tmo);
336 #if defined(DEBUG_HWRM_DUMP)
337  dump_mem((u8 *)bp->hwrm_addr_req, len, DISP_U8);
338 #else
339  dbg_prn("\n");
340 #endif
341 }
342 
343 void debug_resp(struct bnxt *bp, const char *func, u32 resp_len, u16 err)
344 {
345  dbg_prn("- %s(0x%04x) - ",
346  func, (u16)((struct input *)bp->hwrm_addr_req)->req_type);
347  if (err == STATUS_SUCCESS)
348  dbg_prn("Done");
349  else if (err != STATUS_TIMEOUT)
350  dbg_prn("Fail err 0x%04x", err);
351  else
352  dbg_prn("timedout");
353 #if defined(DEBUG_HWRM_DUMP)
354  if (err != STATUS_TIMEOUT) {
355  dump_mem((u8 *)bp->hwrm_addr_resp, resp_len, DISP_U8);
356  sleep(1);
357  } else
358  dbg_prn("\n");
359 #else
360  resp_len = resp_len;
361  dbg_prn("\n");
362 #endif
363 }
364 
365 void dbg_hw_cmd(struct bnxt *bp,
366  const char *func, u16 cmd_len,
367  u16 resp_len, u32 cmd_tmo, u16 err)
368 {
369 #if !defined(DEBUG_HWRM_CMDS)
370  if (err)
371 #endif
372  {
373  dump_hwrm_req(bp, func, cmd_len, cmd_tmo);
374  debug_resp(bp, func, resp_len, err);
375  }
376 }
377 #else
378 #define dbg_hw_cmd(bp, func, cmd_len, resp_len, cmd_tmo, err) (func = func)
379 #endif
380 
381 #if defined(DEBUG_HWRM_CMDS)
382 void dbg_short_cmd(u8 *req, const char *func, u32 len)
383 {
384  struct hwrm_short_input *sreq;
385 
386  sreq = (struct hwrm_short_input *)req;
387  dbg_prn("- %s(0x%04x) short_cmd_len %d",
388  func,
389  sreq->req_type,
390  (int)len);
391 #if defined(DEBUG_HWRM_DUMP)
392  dump_mem((u8 *)sreq, len, DISP_U8);
393 #else
394  dbg_prn("\n");
395 #endif
396 }
397 #else
398 #define dbg_short_cmd(sreq, func, len)
399 #endif
400 
401 #if defined(DEBUG_RX)
402 void dump_rx_bd(struct rx_pkt_cmpl *rx_cmp,
403  struct rx_pkt_cmpl_hi *rx_cmp_hi,
404  u32 desc_idx)
405 {
406  dbg_prn(" RX desc_idx %d PktLen %d\n", desc_idx, rx_cmp->len);
407  dbg_prn("- rx_cmp %lx", virt_to_bus(rx_cmp));
408 #if defined(DEBUG_RX_DUMP)
409  dump_mem((u8 *)rx_cmp, (u32)sizeof(struct rx_pkt_cmpl), DISP_U8);
410 #else
411  dbg_prn("\n");
412 #endif
413  dbg_prn("- rx_cmp_hi %lx", virt_to_bus(rx_cmp_hi));
414 #if defined(DEBUG_RX_DUMP)
415  dump_mem((u8 *)rx_cmp_hi, (u32)sizeof(struct rx_pkt_cmpl_hi), DISP_U8);
416 #else
417  dbg_prn("\n");
418 #endif
419 }
420 
421 void dbg_rx_vlan(struct bnxt *bp, u32 meta, u16 f2, u16 rx_vid)
422 {
423  dbg_prn(" Rx VLAN metadata %x flags2 %x\n", meta, f2);
424  dbg_prn(" Rx VLAN MBA %d TX %d RX %d\n",
425  bp->vlan_id, bp->vlan_tx, rx_vid);
426 }
427 
428 void dbg_alloc_rx_iob(struct io_buffer *iob, u16 id, u16 cid)
429 {
430  dbg_prn(" Rx alloc_iob (%d) %p bd_virt (%d)\n",
431  id, iob->data, cid);
432 }
433 
434 void dbg_rx_cid(u16 idx, u16 cid)
435 {
436  dbg_prn("- RX old cid %d new cid %d\n", idx, cid);
437 }
438 
439 void dbg_alloc_rx_iob_fail(u16 iob_idx, u16 cons_id)
440 {
441  dbg_prn(" Rx alloc_iob (%d) ", iob_idx);
442  dbg_prn("failed for cons_id %d\n", cons_id);
443 }
444 
445 void dbg_rxp(u8 *iob, u16 rx_len, u8 drop)
446 {
447  dbg_prn("- RX iob %lx Len %d ", virt_to_bus(iob), rx_len);
448  if (drop == 1)
449  dbg_prn("drop ErrPkt ");
450  else if (drop == 2)
451  dbg_prn("drop LoopBack ");
452  else if (drop == 3)
453  dbg_prn("drop VLAN");
454 #if defined(DEBUG_RX_DUMP)
455  dump_mem(iob, (u32)rx_len, DISP_U8);
456 #else
457  dbg_prn("\n");
458 #endif
459 }
460 
461 void dbg_rx_stat(struct bnxt *bp)
462 {
463  dbg_prn("- RX Stat Total %d Good %d Drop err %d LB %d VLAN %d\n",
464  bp->rx.cnt, bp->rx.good,
465  bp->rx.drop_err, bp->rx.drop_lb, bp->rx.drop_vlan);
466 }
467 #else
468 #define dump_rx_bd(rx_cmp, rx_cmp_hi, desc_idx)
469 #define dbg_rx_vlan(bp, metadata, flags2, rx_vid)
470 #define dbg_alloc_rx_iob(iob, id, cid)
471 #define dbg_rx_cid(idx, cid)
472 #define dbg_alloc_rx_iob_fail(iob_idx, cons_id)
473 #define dbg_rxp(iob, rx_len, drop)
474 #define dbg_rx_stat(bp)
475 #endif
476 
477 #if defined(DEBUG_CQ)
478 static void dump_cq(struct cmpl_base *cmp, u16 cid, u8 toggle)
479 {
480  dbg_prn("- CQ Type ");
481  switch (cmp->type & CMPL_BASE_TYPE_MASK) {
483  dbg_prn("(ae)");
484  break;
486  dbg_prn("(se)");
487  break;
489  dbg_prn("(tx)");
490  break;
492  dbg_prn("(rx)");
493  break;
494  default:
495  dbg_prn("%04x", (u16)(cmp->type & CMPL_BASE_TYPE_MASK));
496  break;
497  }
498  dbg_prn(" cid %d, tog %d", cid, toggle);
499 #if defined(DEBUG_CQ_DUMP)
500  dump_mem((u8 *)cmp, (u32)sizeof(struct cmpl_base), DISP_U8);
501 #else
502  dbg_prn("\n");
503 #endif
504 }
505 
506 static void dump_nq(struct nq_base *nqp, u16 cid)
507 {
508  dbg_prn("- NQ Type %lx cid %d", (nqp->type & NQ_CN_TYPE_MASK), cid);
509 #if defined(DEBUG_CQ_DUMP)
510  dump_mem((u8 *)nqp, (u32)sizeof(struct nq_base), DISP_U8);
511 #else
512  dbg_prn("\n");
513 #endif
514 }
515 #else
516 #define dump_cq(cq, id, toggle)
517 #define dump_nq(nq, id)
518 #endif
519 
520 #if defined(DEBUG_TX)
521 void dbg_tx_avail(struct bnxt *bp, u32 avail, u16 use)
522 {
523  dbg_prn("- Tx BD %d Avail %d Use %d pid %d cid %d\n",
524  bp->tx.ring_cnt,
525  avail, use,
526  bp->tx.prod_id,
527  bp->tx.cons_id);
528 }
529 
530 void dbg_tx_vlan(struct bnxt *bp, char *src, u16 plen, u16 len)
531 {
532  dbg_prn("- Tx VLAN PKT %d MBA %d", bp->vlan_tx, bp->vlan_id);
533  dbg_prn(" PKT %d",
534  BYTE_SWAP_S(*(u16 *)(&src[MAC_HDR_SIZE + 2])));
535  dbg_prn(" Pro %x",
536  BYTE_SWAP_S(*(u16 *)(&src[MAC_HDR_SIZE])));
537  dbg_prn(" old len %d new len %d\n", plen, len);
538 }
539 
540 void dbg_tx_pad(u16 plen, u16 len)
541 {
542  if (len != plen)
543  dbg_prn("- Tx padded(0) old len %d new len %d\n", plen, len);
544 }
545 
546 void dump_tx_stat(struct bnxt *bp)
547 {
548  dbg_prn(" TX stats cnt %d req_cnt %d", bp->tx.cnt, bp->tx.cnt_req);
549  dbg_prn(" prod_id %d cons_id %d\n", bp->tx.prod_id, bp->tx.cons_id);
550 }
551 
552 void dump_tx_pkt(u8 *pkt, u16 len, u16 idx)
553 {
554  dbg_prn(" TX(%d) Addr %lx Size %d", idx, virt_to_bus(pkt), len);
555 #if defined(DEBUG_TX_DUMP)
556  dump_mem(pkt, (u32)len, DISP_U8);
557 #else
558  dbg_prn("\n");
559 #endif
560 }
561 
562 void dump_tx_bd(struct tx_bd_short *tx_bd, u16 len, int idx)
563 {
564  dbg_prn(" Tx(%d) BD Addr %lx Size %d", idx, virt_to_bus(tx_bd), len);
565 #if defined(DEBUG_TX_DUMP)
566  dump_mem((u8 *)tx_bd, (u32)len, DISP_U8);
567 #else
568  dbg_prn("\n");
569 #endif
570 }
571 
572 void dbg_tx_done(u8 *pkt, u16 len, u16 idx)
573 {
574  dbg_prn(" Tx(%d) Done pkt %lx Size %d\n", idx, virt_to_bus(pkt), len);
575 }
576 #else
577 #define dbg_tx_avail(bp, a, u)
578 #define dbg_tx_vlan(bp, src, plen, len)
579 #define dbg_tx_pad(plen, len)
580 #define dump_tx_stat(bp)
581 #define dump_tx_pkt(pkt, len, idx)
582 #define dump_tx_bd(prod_bd, len, idx)
583 #define dbg_tx_done(pkt, len, idx)
584 #endif
585 
586 #if defined(DEBUG_LINK)
587 static void dump_evt(u8 *cmp, u32 type, u16 cid, u8 ring)
588 {
589  u32 size;
590  u8 c;
591 
592  if (ring) {
593  c = 'N';
594  size = sizeof(struct nq_base);
595  } else {
596  c = 'C';
597  size = sizeof(struct cmpl_base);
598  }
599  switch (type) {
601  break;
602  default:
603  return;
604  }
605  dbg_prn("- %cQ Type (ae) cid %d", c, cid);
606  dump_mem(cmp, size, DISP_U8);
607 }
608 
609 void dbg_link_info(struct bnxt *bp)
610 {
611  dbg_prn(" Current Speed : ");
612  switch (bp->current_link_speed) {
614  dbg_prn("200 %s", str_gbps);
615  break;
617  dbg_prn("100 %s", str_gbps);
618  break;
620  dbg_prn("50 %s", str_gbps);
621  break;
623  dbg_prn("40 %s", str_gbps);
624  break;
626  dbg_prn("25 %s", str_gbps);
627  break;
629  dbg_prn("20 %s", str_gbps);
630  break;
632  dbg_prn("10 %s", str_gbps);
633  break;
635  dbg_prn("2.5 %s", str_gbps);
636  break;
638  dbg_prn("2 %s", str_gbps);
639  break;
641  dbg_prn("1 %s", str_gbps);
642  break;
644  dbg_prn("100 %s", str_mbps);
645  break;
647  dbg_prn("10 %s", str_mbps);
648  break;
649  default:
650  dbg_prn("%x", bp->current_link_speed);
651  }
652  dbg_prn("\n");
653  dbg_prn(" media_detect : %x\n", bp->media_detect);
654 }
655 
656 void dbg_link_status(struct bnxt *bp)
657 {
658  dbg_prn(" Port(%d) : Link", bp->port_idx);
659  if (bp->link_status == STATUS_LINK_ACTIVE)
660  dbg_prn("Up");
661  else
662  dbg_prn("Down");
663  dbg_prn("\n");
664 }
665 
666 void dbg_link_state(struct bnxt *bp, u32 tmo)
667 {
669  dbg_link_info(bp);
670  dbg_prn(" Link wait time : %d ms", tmo);
671  pause_drv();
672 }
673 #else
674 #define dump_evt(cq, ty, id, ring)
675 #define dbg_link_status(bp)
676 #define dbg_link_state(bp, tmo)
677 #endif
#define dump_evt(cq, ty, id, ring)
Definition: bnxt_dbg.h:674
#define dbg_tx_avail(bp, a, u)
Definition: bnxt_dbg.h:577
uint16_t u16
Definition: stdint.h:21
uint32_t c
Definition: md4.c:30
#define str_mbps
Definition: bnxt.h:215
u16 length
Definition: sky2.h:9
uint8_t irq
Interrupt number.
Definition: pci.h:229
#define STATUS_SUCCESS
Definition: bnxt.h:62
#define MAC_HDR_SIZE
Definition: bnxt.h:190
#define dbg_flags(func, flags)
Definition: bnxt_dbg.h:326
#define SHORT_CMD_SUPPORTED
Definition: bnxt.h:1024
#define dbg_hw_cmd(bp, func, cmd_len, resp_len, cmd_tmo, err)
Definition: bnxt_dbg.h:378
#define PORT_PHY_QCFG_RESP_LINK_SPEED_2_5GB
Definition: bnxt_hsi.h:3172
#define dbg_alloc_rx_iob(iob, id, cid)
Definition: bnxt_dbg.h:470
#define dbg_func_resource_qcaps(bp)
Definition: bnxt_dbg.h:320
#define RESP_BUFFER_SIZE
Definition: bnxt.h:164
#define PORT_PHY_QCFG_RESP_LINK_SPEED_2GB
Definition: bnxt_hsi.h:3171
#define dbg_short_cmd(sreq, func, len)
Definition: bnxt_dbg.h:398
#define test_if
Definition: bnxt.h:1018
#define PORT_PHY_QCFG_RESP_LINK_SPEED_10GB
Definition: bnxt_hsi.h:3173
#define dbg_rxp(iob, rx_len, drop)
Definition: bnxt_dbg.h:473
#define LINK_SPEED_DRV_AUTONEG
Definition: bnxt.h:224
#define NQ_RING_BUFFER_SIZE
Definition: bnxt.h:180
#define PORT_PHY_QCFG_RESP_LINK_SPEED_100GB
Definition: bnxt_hsi.h:3178
#define PORT_PHY_QCFG_RESP_LINK_SPEED_1GB
Definition: bnxt_hsi.h:3170
static void const void * src
Definition: crypto.h:244
#define dbg_tx_vlan(bp, src, plen, len)
Definition: bnxt_dbg.h:578
__le16 req_type
Definition: bnxt_hsi.h:86
Definition: bnxt_hsi.h:68
uint16_t bp
Definition: registers.h:23
#define PCI_BASE_ADDRESS_0
Definition: pci.h:62
__le16 max_ext_req_len
Definition: bnxt_hsi.h:466
#define PORT_PHY_QCFG_RESP_LINK_SPEED_200GB
Definition: bnxt_hsi.h:3179
uint32_t buffer
Buffer index (or NETVSC_RNDIS_NO_BUFFER)
Definition: netvsc.h:16
#define NQ_CN_TYPE_MASK
Definition: bnxt.h:571
#define dbg_pci(bp, func, creg)
Definition: bnxt_dbg.h:140
#define dump_nq(nq, id)
Definition: bnxt_dbg.h:517
#define STATUS_LINK_ACTIVE
Definition: bnxt.h:66
u16 type
Definition: bnxt.h:563
#define LINK_SPEED_DRV_40G
Definition: bnxt.h:232
static __always_inline unsigned long virt_to_bus(volatile const void *addr)
Convert virtual address to a bus address.
Definition: io.h:183
uint16_t device
Device ID.
Definition: pci.h:225
#define PORT_PHY_QCFG_RESP_LINK_SPEED_25GB
Definition: bnxt_hsi.h:3175
#define REQ_BUFFER_SIZE
Definition: bnxt.h:163
#define SHORT_CMD_REQUIRED
Definition: bnxt.h:1025
#define RX_RING_BUFFER_SIZE
Definition: bnxt.h:158
#define dbg_mem(bp, func)
Definition: bnxt_dbg.h:175
#define CMPL_BASE_TYPE_HWRM_ASYNC_EVENT
Definition: bnxt.h:535
#define BYTE_SWAP_S(w)
Definition: bnxt.h:193
Definition: bnx2.h:150
#define dbg_func_qcaps(bp)
Definition: bnxt_dbg.h:321
#define dbg_rx_vlan(bp, metadata, flags2, rx_vid)
Definition: bnxt_dbg.h:469
#define PCI_BASE_ADDRESS_2
Definition: pci.h:64
unsigned long pci_bar_start(struct pci_device *pci, unsigned int reg)
Find the start of a PCI BAR.
Definition: pci.c:96
#define STATUS_TIMEOUT
Definition: bnxt.h:86
#define CMPL_BASE_TYPE_RX_L2
Definition: bnxt.h:526
#define dbg_bnxt_pause()
Definition: bnxt_dbg.h:327
#define TX_RING_BUFFER_SIZE
Definition: bnxt.h:157
#define str_gbps
Definition: bnxt.h:216
int meta(WINDOW *, bool)
int getchar(void)
Read a single character from any console.
Definition: console.c:85
#define dbg_rx_cid(idx, cid)
Definition: bnxt_dbg.h:471
#define dbg_rx_stat(bp)
Definition: bnxt_dbg.h:474
#define dbg_alloc_rx_iob_fail(iob_idx, cons_id)
Definition: bnxt_dbg.h:472
#define CMPL_BASE_TYPE_TX_L2
Definition: bnxt.h:525
#define PORT_PHY_QCFG_RESP_LINK_SPEED_20GB
Definition: bnxt_hsi.h:3174
A PCI device.
Definition: pci.h:206
#define LINK_SPEED_DRV_MASK
Definition: bnxt.h:222
#define PORT_PHY_QCFG_RESP_LINK_SPEED_10MB
Definition: bnxt_hsi.h:3181
u16 type
Definition: bnxt.h:522
#define dump_tx_pkt(pkt, len, idx)
Definition: bnxt_dbg.h:581
#define CQ_RING_BUFFER_SIZE
Definition: bnxt.h:160
#define dump_tx_stat(bp)
Definition: bnxt_dbg.h:580
#define PORT_PHY_QCFG_RESP_LINK_SPEED_40GB
Definition: bnxt_hsi.h:3176
uint16_t vendor
Vendor ID.
Definition: pci.h:223
#define dbg_chip_info(bp)
Definition: bnxt_dbg.h:324
#define LINK_SPEED_DRV_10G
Definition: bnxt.h:228
#define dump_cq(cq, id, toggle)
Definition: bnxt_dbg.h:516
#define CMPL_BASE_TYPE_STAT_EJECT
Definition: bnxt.h:531
#define dbg_tx_done(pkt, len, idx)
Definition: bnxt_dbg.h:583
uint32_t busdevfn
Segment, bus, device, and function (bus:dev.fn) number.
Definition: pci.h:233
#define prn_set_speed(speed)
Definition: bnxt_dbg.h:323
uint32_t len
Length.
Definition: ena.h:14
#define dbg_fw_ver(resp, tmo)
Definition: bnxt_dbg.h:319
uint32_t type
Operating system type.
Definition: ena.h:12
#define LINK_SPEED_DRV_SHIFT
Definition: bnxt.h:223
#define PORT_PHY_QCFG_RESP_LINK_SPEED_50GB
Definition: bnxt_hsi.h:3177
#define dump_rx_bd(rx_cmp, rx_cmp_hi, desc_idx)
Definition: bnxt_dbg.h:468
void * data
Start of data.
Definition: iobuf.h:48
#define LINK_SPEED_DRV_50G
Definition: bnxt.h:234
uint8_t size
Entry size (in 32-bit words)
Definition: ena.h:16
#define LINK_SPEED_DRV_200G
Definition: bnxt.h:238
#define DMA_BUFFER_SIZE
Definition: bnxt.h:165
#define LINK_SPEED_DRV_100G
Definition: bnxt.h:236
#define dbg_link_status(bp)
Definition: bnxt_dbg.h:675
#define dump_tx_bd(prod_bd, len, idx)
Definition: bnxt_dbg.h:582
#define dbg_num_rings(bp)
Definition: bnxt_dbg.h:325
#define LINK_SPEED_DRV_1G
Definition: bnxt.h:226
#define dbg_link_state(bp, tmo)
Definition: bnxt_dbg.h:676
#define dbg_func_qcfg(bp)
Definition: bnxt_dbg.h:322
#define PCI_BASE_ADDRESS_4
Definition: pci.h:66
Definition: bnxt.h:562
u16 len
Definition: bnxt.h:637
#define dbg_tx_pad(plen, len)
Definition: bnxt_dbg.h:579
#define dbg_prn(func)
Definition: bnxt_dbg.h:112
unsigned int sleep(unsigned int secs)
Sleep (interruptibly) for a fixed number of seconds.
Definition: timer.c:133
__le16 max_req_win_len
Definition: bnxt_hsi.h:438
#define CMPL_BASE_TYPE_MASK
Definition: bnxt.h:523
uint8_t u8
Definition: stdint.h:19
#define PORT_PHY_QCFG_RESP_LINK_SPEED_100MB
Definition: bnxt_hsi.h:3169
uint32_t u32
Definition: stdint.h:23
Definition: bnxt.h:914
uint16_t flag
Flag number.
Definition: hyperv.h:14
A persistent I/O buffer.
Definition: iobuf.h:33
uint8_t flags
Flags.
Definition: ena.h:18
#define LINK_SPEED_DRV_25G
Definition: bnxt.h:230