36#include "opt_kern_tls.h"
37#include "opt_ratelimit.h"
43#include <sys/kernel.h>
45#include <sys/eventhandler.h>
46#include <sys/module.h>
47#include <sys/malloc.h>
49#include <sys/taskqueue.h>
51#include <dev/pci/pcireg.h>
52#include <dev/pci/pcivar.h>
53#include <dev/pci/pci_private.h>
54#include <sys/firmware.h>
57#include <sys/socket.h>
58#include <sys/sockio.h>
59#include <sys/sysctl.h>
60#include <net/ethernet.h>
62#include <net/if_types.h>
64#include <net/if_vlan_var.h>
66#include <net/rss_config.h>
68#include <netinet/in.h>
69#include <netinet/ip.h>
71#include <netinet/tcp_seq.h>
73#if defined(__i386__) || defined(__amd64__)
74#include <machine/md_var.h>
75#include <machine/cputypes.h>
81#include <ddb/db_lex.h>
118 DEVMETHOD(t4_is_main_ready,
t4_ready),
165 .d_version = D_VERSION,
183 DEVMETHOD(t4_is_main_ready,
t4_ready),
222 DEVMETHOD(t4_is_main_ready,
t4_ready),
250static int cxgbe_ioctl(
struct ifnet *,
unsigned long, caddr_t);
253#if defined(KERN_TLS) || defined(RATELIMIT)
254static int cxgbe_snd_tag_alloc(
struct ifnet *,
union if_snd_tag_alloc_params *,
255 struct m_snd_tag **);
258MALLOC_DEFINE(M_CXGBE,
"cxgbe",
"Chelsio T4/T5 Ethernet driver and services");
267static struct sx t4_uld_list_lock;
281SYSCTL_NODE(_hw, OID_AUTO, cxgbe, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
282 "cxgbe(4) parameters");
283SYSCTL_NODE(_hw, OID_AUTO, cxl, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
284 "cxgbe(4) T5+ parameters");
285SYSCTL_NODE(_hw_cxgbe, OID_AUTO, toe, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
286 "cxgbe(4) TOE parameters");
294 "Number of TX queues per port");
295TUNABLE_INT(
"hw.cxgbe.ntxq10g", &
t4_ntxq);
300 "Number of RX queues per port");
301TUNABLE_INT(
"hw.cxgbe.nrxq10g", &
t4_nrxq);
304static int t4_ntxq_vi = -
NTXQ_VI;
305SYSCTL_INT(_hw_cxgbe, OID_AUTO, ntxq_vi, CTLFLAG_RDTUN, &t4_ntxq_vi, 0,
306 "Number of TX queues per VI");
309static int t4_nrxq_vi = -
NRXQ_VI;
310SYSCTL_INT(_hw_cxgbe, OID_AUTO, nrxq_vi, CTLFLAG_RDTUN, &t4_nrxq_vi, 0,
311 "Number of RX queues per VI");
313static int t4_rsrv_noflowq = 0;
314SYSCTL_INT(_hw_cxgbe, OID_AUTO, rsrv_noflowq, CTLFLAG_RDTUN, &t4_rsrv_noflowq,
315 0,
"Reserve TX queue 0 of each VI for non-flowid packets");
317#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
319static int t4_nofldtxq = -NOFLDTXQ;
320SYSCTL_INT(_hw_cxgbe, OID_AUTO, nofldtxq, CTLFLAG_RDTUN, &t4_nofldtxq, 0,
321 "Number of offload TX queues per port");
324static int t4_nofldrxq = -NOFLDRXQ;
325SYSCTL_INT(_hw_cxgbe, OID_AUTO, nofldrxq, CTLFLAG_RDTUN, &t4_nofldrxq, 0,
326 "Number of offload RX queues per port");
329static int t4_nofldtxq_vi = -NOFLDTXQ_VI;
330SYSCTL_INT(_hw_cxgbe, OID_AUTO, nofldtxq_vi, CTLFLAG_RDTUN, &t4_nofldtxq_vi, 0,
331 "Number of offload TX queues per VI");
334static int t4_nofldrxq_vi = -NOFLDRXQ_VI;
335SYSCTL_INT(_hw_cxgbe, OID_AUTO, nofldrxq_vi, CTLFLAG_RDTUN, &t4_nofldrxq_vi, 0,
336 "Number of offload RX queues per VI");
338#define TMR_IDX_OFLD 1
339int t4_tmr_idx_ofld = TMR_IDX_OFLD;
340SYSCTL_INT(_hw_cxgbe, OID_AUTO, holdoff_timer_idx_ofld, CTLFLAG_RDTUN,
341 &t4_tmr_idx_ofld, 0,
"Holdoff timer index for offload queues");
343#define PKTC_IDX_OFLD (-1)
344int t4_pktc_idx_ofld = PKTC_IDX_OFLD;
345SYSCTL_INT(_hw_cxgbe, OID_AUTO, holdoff_pktc_idx_ofld, CTLFLAG_RDTUN,
346 &t4_pktc_idx_ofld, 0,
"holdoff packet counter index for offload queues");
349static u_long t4_toe_keepalive_idle = 0;
350SYSCTL_ULONG(_hw_cxgbe_toe, OID_AUTO, keepalive_idle, CTLFLAG_RDTUN,
351 &t4_toe_keepalive_idle, 0,
"TOE keepalive idle timer (us)");
354static u_long t4_toe_keepalive_interval = 0;
355SYSCTL_ULONG(_hw_cxgbe_toe, OID_AUTO, keepalive_interval, CTLFLAG_RDTUN,
356 &t4_toe_keepalive_interval, 0,
"TOE keepalive interval timer (us)");
359static int t4_toe_keepalive_count = 0;
360SYSCTL_INT(_hw_cxgbe_toe, OID_AUTO, keepalive_count, CTLFLAG_RDTUN,
361 &t4_toe_keepalive_count, 0,
"Number of TOE keepalive probes before abort");
364static u_long t4_toe_rexmt_min = 0;
365SYSCTL_ULONG(_hw_cxgbe_toe, OID_AUTO, rexmt_min, CTLFLAG_RDTUN,
366 &t4_toe_rexmt_min, 0,
"Minimum TOE retransmit interval (us)");
369static u_long t4_toe_rexmt_max = 0;
370SYSCTL_ULONG(_hw_cxgbe_toe, OID_AUTO, rexmt_max, CTLFLAG_RDTUN,
371 &t4_toe_rexmt_max, 0,
"Maximum TOE retransmit interval (us)");
374static int t4_toe_rexmt_count = 0;
375SYSCTL_INT(_hw_cxgbe_toe, OID_AUTO, rexmt_count, CTLFLAG_RDTUN,
376 &t4_toe_rexmt_count, 0,
"Number of TOE retransmissions before abort");
379static int t4_toe_rexmt_backoff[16] = {
380 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
382SYSCTL_NODE(_hw_cxgbe_toe, OID_AUTO, rexmt_backoff,
383 CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
384 "cxgbe(4) TOE retransmit backoff values");
385SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 0, CTLFLAG_RDTUN,
386 &t4_toe_rexmt_backoff[0], 0,
"");
387SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 1, CTLFLAG_RDTUN,
388 &t4_toe_rexmt_backoff[1], 0,
"");
389SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 2, CTLFLAG_RDTUN,
390 &t4_toe_rexmt_backoff[2], 0,
"");
391SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 3, CTLFLAG_RDTUN,
392 &t4_toe_rexmt_backoff[3], 0,
"");
393SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 4, CTLFLAG_RDTUN,
394 &t4_toe_rexmt_backoff[4], 0,
"");
395SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 5, CTLFLAG_RDTUN,
396 &t4_toe_rexmt_backoff[5], 0,
"");
397SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 6, CTLFLAG_RDTUN,
398 &t4_toe_rexmt_backoff[6], 0,
"");
399SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 7, CTLFLAG_RDTUN,
400 &t4_toe_rexmt_backoff[7], 0,
"");
401SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 8, CTLFLAG_RDTUN,
402 &t4_toe_rexmt_backoff[8], 0,
"");
403SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 9, CTLFLAG_RDTUN,
404 &t4_toe_rexmt_backoff[9], 0,
"");
405SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 10, CTLFLAG_RDTUN,
406 &t4_toe_rexmt_backoff[10], 0,
"");
407SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 11, CTLFLAG_RDTUN,
408 &t4_toe_rexmt_backoff[11], 0,
"");
409SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 12, CTLFLAG_RDTUN,
410 &t4_toe_rexmt_backoff[12], 0,
"");
411SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 13, CTLFLAG_RDTUN,
412 &t4_toe_rexmt_backoff[13], 0,
"");
413SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 14, CTLFLAG_RDTUN,
414 &t4_toe_rexmt_backoff[14], 0,
"");
415SYSCTL_INT(_hw_cxgbe_toe_rexmt_backoff, OID_AUTO, 15, CTLFLAG_RDTUN,
416 &t4_toe_rexmt_backoff[15], 0,
"");
418static int t4_toe_tls_rx_timeout = 5;
419SYSCTL_INT(_hw_cxgbe_toe, OID_AUTO, tls_rx_timeout, CTLFLAG_RDTUN,
420 &t4_toe_tls_rx_timeout, 0,
421 "Timeout in seconds to downgrade TLS sockets to plain TOE");
425#define NN_MAIN_VI (1 << 0)
426#define NN_EXTRA_VI (1 << 1)
427static int t4_native_netmap = NN_EXTRA_VI;
428SYSCTL_INT(_hw_cxgbe, OID_AUTO, native_netmap, CTLFLAG_RDTUN, &t4_native_netmap,
429 0,
"Native netmap support. bit 0 = main VI, bit 1 = extra VIs");
432static int t4_nnmtxq = -NNMTXQ;
433SYSCTL_INT(_hw_cxgbe, OID_AUTO, nnmtxq, CTLFLAG_RDTUN, &t4_nnmtxq, 0,
434 "Number of netmap TX queues");
437static int t4_nnmrxq = -NNMRXQ;
438SYSCTL_INT(_hw_cxgbe, OID_AUTO, nnmrxq, CTLFLAG_RDTUN, &t4_nnmrxq, 0,
439 "Number of netmap RX queues");
442static int t4_nnmtxq_vi = -NNMTXQ_VI;
443SYSCTL_INT(_hw_cxgbe, OID_AUTO, nnmtxq_vi, CTLFLAG_RDTUN, &t4_nnmtxq_vi, 0,
444 "Number of netmap TX queues per VI");
447static int t4_nnmrxq_vi = -NNMRXQ_VI;
448SYSCTL_INT(_hw_cxgbe, OID_AUTO, nnmrxq_vi, CTLFLAG_RDTUN, &t4_nnmrxq_vi, 0,
449 "Number of netmap RX queues per VI");
458 0,
"Holdoff timer index");
459TUNABLE_INT(
"hw.cxgbe.holdoff_timer_idx_10G", &
t4_tmr_idx);
464 0,
"Holdoff packet counter index");
465TUNABLE_INT(
"hw.cxgbe.holdoff_pktc_idx_10G", &
t4_pktc_idx);
472 "Number of descriptors in each TX queue");
476 "Number of descriptors in each RX queue");
483 0,
"Interrupt types allowed (bit 0 = INTx, 1 = MSI, 2 = MSI-X)");
488#define DEFAULT_CF "default"
489#define BUILTIN_CF "built-in"
490#define FLASH_CF "flash"
491#define UWIRE_CF "uwire"
492#define FPGA_CF "fpga"
494SYSCTL_STRING(_hw_cxgbe, OID_AUTO, config_file, CTLFLAG_RDTUN, t4_cfg_file,
495 sizeof(t4_cfg_file),
"Firmware configuration file");
507SYSCTL_INT(_hw_cxgbe, OID_AUTO, pause_settings, CTLFLAG_RDTUN,
508 &t4_pause_settings, 0,
509 "PAUSE settings (bit 0 = rx_pause, 1 = tx_pause, 2 = pause_autoneg)");
516static int t4_fec = -1;
517SYSCTL_INT(_hw_cxgbe, OID_AUTO, fec, CTLFLAG_RDTUN, &t4_fec, 0,
518 "Forward Error Correction (bit 0 = RS, bit 1 = BASER_RS)");
531static int t4_force_fec = -1;
532SYSCTL_INT(_hw_cxgbe, OID_AUTO, force_fec, CTLFLAG_RDTUN, &t4_force_fec, 0,
533 "Controls the use of FORCE_FEC bit in L1 configuration.");
541static int t4_autoneg = -1;
542SYSCTL_INT(_hw_cxgbe, OID_AUTO, autoneg, CTLFLAG_RDTUN, &t4_autoneg, 0,
543 "Link autonegotiation");
550static int t4_fw_install = 1;
551SYSCTL_INT(_hw_cxgbe, OID_AUTO, fw_install, CTLFLAG_RDTUN, &t4_fw_install, 0,
552 "Firmware auto-install (0 = prohibited, 1 = allowed, 2 = encouraged)");
558static int t4_nbmcaps_allowed = 0;
559SYSCTL_INT(_hw_cxgbe, OID_AUTO, nbmcaps_allowed, CTLFLAG_RDTUN,
560 &t4_nbmcaps_allowed, 0,
"Default NBM capabilities");
562static int t4_linkcaps_allowed = 0;
563SYSCTL_INT(_hw_cxgbe, OID_AUTO, linkcaps_allowed, CTLFLAG_RDTUN,
564 &t4_linkcaps_allowed, 0,
"Default link capabilities");
568SYSCTL_INT(_hw_cxgbe, OID_AUTO, switchcaps_allowed, CTLFLAG_RDTUN,
569 &t4_switchcaps_allowed, 0,
"Default switch capabilities");
578SYSCTL_INT(_hw_cxgbe, OID_AUTO, niccaps_allowed, CTLFLAG_RDTUN,
579 &t4_niccaps_allowed, 0,
"Default NIC capabilities");
581static int t4_toecaps_allowed = -1;
582SYSCTL_INT(_hw_cxgbe, OID_AUTO, toecaps_allowed, CTLFLAG_RDTUN,
583 &t4_toecaps_allowed, 0,
"Default TCP offload capabilities");
585static int t4_rdmacaps_allowed = -1;
586SYSCTL_INT(_hw_cxgbe, OID_AUTO, rdmacaps_allowed, CTLFLAG_RDTUN,
587 &t4_rdmacaps_allowed, 0,
"Default RDMA capabilities");
589static int t4_cryptocaps_allowed = -1;
590SYSCTL_INT(_hw_cxgbe, OID_AUTO, cryptocaps_allowed, CTLFLAG_RDTUN,
591 &t4_cryptocaps_allowed, 0,
"Default crypto capabilities");
593static int t4_iscsicaps_allowed = -1;
594SYSCTL_INT(_hw_cxgbe, OID_AUTO, iscsicaps_allowed, CTLFLAG_RDTUN,
595 &t4_iscsicaps_allowed, 0,
"Default iSCSI capabilities");
597static int t4_fcoecaps_allowed = 0;
598SYSCTL_INT(_hw_cxgbe, OID_AUTO, fcoecaps_allowed, CTLFLAG_RDTUN,
599 &t4_fcoecaps_allowed, 0,
"Default FCoE capabilities");
601static int t5_write_combine = 0;
602SYSCTL_INT(_hw_cxl, OID_AUTO, write_combine, CTLFLAG_RDTUN, &t5_write_combine,
603 0,
"Use WC instead of UC for BAR2");
605static int t4_num_vis = 1;
606SYSCTL_INT(_hw_cxgbe, OID_AUTO, num_vis, CTLFLAG_RDTUN, &t4_num_vis, 0,
607 "Number of VIs per port");
616static int pcie_relaxed_ordering = -1;
617SYSCTL_INT(_hw_cxgbe, OID_AUTO, pcie_relaxed_ordering, CTLFLAG_RDTUN,
618 &pcie_relaxed_ordering, 0,
619 "PCIe Relaxed Ordering: 0 = disable, 1 = enable, 2 = leave alone");
621static int t4_panic_on_fatal_err = 0;
622SYSCTL_INT(_hw_cxgbe, OID_AUTO, panic_on_fatal_err, CTLFLAG_RWTUN,
623 &t4_panic_on_fatal_err, 0,
"panic on fatal errors");
625static int t4_reset_on_fatal_err = 0;
626SYSCTL_INT(_hw_cxgbe, OID_AUTO, reset_on_fatal_err, CTLFLAG_RWTUN,
627 &t4_reset_on_fatal_err, 0,
"reset adapter on fatal errors");
629static int t4_tx_vm_wr = 0;
630SYSCTL_INT(_hw_cxgbe, OID_AUTO, tx_vm_wr, CTLFLAG_RWTUN, &t4_tx_vm_wr, 0,
631 "Use VM work requests to transmit packets.");
650static int t4_attack_filter = 0;
651SYSCTL_INT(_hw_cxgbe, OID_AUTO, attack_filter, CTLFLAG_RDTUN,
652 &t4_attack_filter, 0,
"Drop suspicious traffic");
654static int t4_drop_ip_fragments = 0;
655SYSCTL_INT(_hw_cxgbe, OID_AUTO, drop_ip_fragments, CTLFLAG_RDTUN,
656 &t4_drop_ip_fragments, 0,
"Drop IP fragments");
658static int t4_drop_pkts_with_l2_errors = 1;
659SYSCTL_INT(_hw_cxgbe, OID_AUTO, drop_pkts_with_l2_errors, CTLFLAG_RDTUN,
660 &t4_drop_pkts_with_l2_errors, 0,
661 "Drop all frames with Layer 2 length or checksum errors");
663static int t4_drop_pkts_with_l3_errors = 0;
664SYSCTL_INT(_hw_cxgbe, OID_AUTO, drop_pkts_with_l3_errors, CTLFLAG_RDTUN,
665 &t4_drop_pkts_with_l3_errors, 0,
666 "Drop all frames with IP version, length, or checksum errors");
668static int t4_drop_pkts_with_l4_errors = 0;
669SYSCTL_INT(_hw_cxgbe, OID_AUTO, drop_pkts_with_l4_errors, CTLFLAG_RDTUN,
670 &t4_drop_pkts_with_l4_errors, 0,
671 "Drop all frames with Layer 4 length, checksum, or other errors");
677static int t4_cop_managed_offloading = 0;
678SYSCTL_INT(_hw_cxgbe, OID_AUTO, cop_managed_offloading, CTLFLAG_RDTUN,
679 &t4_cop_managed_offloading, 0,
680 "COP (Connection Offload Policy) controls all TOE offload");
687static int t4_kern_tls = 0;
688SYSCTL_INT(_hw_cxgbe, OID_AUTO, kern_tls, CTLFLAG_RDTUN, &t4_kern_tls, 0,
689 "Enable KERN_TLS mode for all supported adapters");
691SYSCTL_NODE(_hw_cxgbe, OID_AUTO, tls, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
692 "cxgbe(4) KERN_TLS parameters");
694static int t4_tls_inline_keys = 0;
695SYSCTL_INT(_hw_cxgbe_tls, OID_AUTO, inline_keys, CTLFLAG_RDTUN,
696 &t4_tls_inline_keys, 0,
697 "Always pass TLS keys in work requests (1) or attempt to store TLS keys "
700static int t4_tls_combo_wrs = 0;
701SYSCTL_INT(_hw_cxgbe_tls, OID_AUTO, combo_wrs, CTLFLAG_RDTUN, &t4_tls_combo_wrs,
702 0,
"Attempt to combine TCB field updates with TLS record work requests.");
706static int vi_mac_funcs[] = {
768 driver_intr_t *,
void *,
char *);
831static int sysctl_tls(SYSCTL_HANDLER_ARGS);
832static int sysctl_tls_rx_ports(SYSCTL_HANDLER_ARGS);
833static int sysctl_tls_rx_timeout(SYSCTL_HANDLER_ARGS);
834static int sysctl_tp_tick(SYSCTL_HANDLER_ARGS);
835static int sysctl_tp_dack_timer(SYSCTL_HANDLER_ARGS);
836static int sysctl_tp_timer(SYSCTL_HANDLER_ARGS);
837static int sysctl_tp_shift_cnt(SYSCTL_HANDLER_ARGS);
838static int sysctl_tp_backoff(SYSCTL_HANDLER_ARGS);
839static int sysctl_holdoff_tmr_idx_ofld(SYSCTL_HANDLER_ARGS);
840static int sysctl_holdoff_pktc_idx_ofld(SYSCTL_HANDLER_ARGS);
856static int toe_capability(
struct vi_info *,
bool);
857static void t4_async_event(
struct adapter *);
860static int ktls_capability(
struct adapter *,
bool);
862static int mod_event(module_t,
int,
void *);
877 {0xa000,
"Chelsio Terminator 4 FPGA"},
878 {0x4400,
"Chelsio T440-dbg"},
879 {0x4401,
"Chelsio T420-CR"},
880 {0x4402,
"Chelsio T422-CR"},
881 {0x4403,
"Chelsio T440-CR"},
882 {0x4404,
"Chelsio T420-BCH"},
883 {0x4405,
"Chelsio T440-BCH"},
884 {0x4406,
"Chelsio T440-CH"},
885 {0x4407,
"Chelsio T420-SO"},
886 {0x4408,
"Chelsio T420-CX"},
887 {0x4409,
"Chelsio T420-BT"},
888 {0x440a,
"Chelsio T404-BT"},
889 {0x440e,
"Chelsio T440-LP-CR"},
891 {0xb000,
"Chelsio Terminator 5 FPGA"},
892 {0x5400,
"Chelsio T580-dbg"},
893 {0x5401,
"Chelsio T520-CR"},
894 {0x5402,
"Chelsio T522-CR"},
895 {0x5403,
"Chelsio T540-CR"},
896 {0x5407,
"Chelsio T520-SO"},
897 {0x5409,
"Chelsio T520-BT"},
898 {0x540a,
"Chelsio T504-BT"},
899 {0x540d,
"Chelsio T580-CR"},
900 {0x540e,
"Chelsio T540-LP-CR"},
901 {0x5410,
"Chelsio T580-LP-CR"},
902 {0x5411,
"Chelsio T520-LL-CR"},
903 {0x5412,
"Chelsio T560-CR"},
904 {0x5414,
"Chelsio T580-LP-SO-CR"},
905 {0x5415,
"Chelsio T502-BT"},
906 {0x5418,
"Chelsio T540-BT"},
907 {0x5419,
"Chelsio T540-LP-BT"},
908 {0x541a,
"Chelsio T540-SO-BT"},
909 {0x541b,
"Chelsio T540-SO-CR"},
912 {0x5483,
"Custom T540-CR"},
913 {0x5484,
"Custom T540-BT"},
915 {0xc006,
"Chelsio Terminator 6 FPGA"},
916 {0x6400,
"Chelsio T6-DBG-25"},
917 {0x6401,
"Chelsio T6225-CR"},
918 {0x6402,
"Chelsio T6225-SO-CR"},
919 {0x6403,
"Chelsio T6425-CR"},
920 {0x6404,
"Chelsio T6425-SO-CR"},
921 {0x6405,
"Chelsio T6225-OCP-SO"},
922 {0x6406,
"Chelsio T62100-OCP-SO"},
923 {0x6407,
"Chelsio T62100-LP-CR"},
924 {0x6408,
"Chelsio T62100-SO-CR"},
925 {0x6409,
"Chelsio T6210-BT"},
926 {0x640d,
"Chelsio T62100-CR"},
927 {0x6410,
"Chelsio T6-DBG-100"},
928 {0x6411,
"Chelsio T6225-LL-CR"},
929 {0x6414,
"Chelsio T61100-OCP-SO"},
930 {0x6415,
"Chelsio T6201-BT"},
933 {0x6480,
"Custom T6225-CR"},
934 {0x6481,
"Custom T62100-CR"},
935 {0x6482,
"Custom T6225-CR"},
936 {0x6483,
"Custom T62100-CR"},
937 {0x6484,
"Custom T64100-CR"},
938 {0x6485,
"Custom T6240-SO"},
939 {0x6486,
"Custom T6225-SO-CR"},
940 {0x6487,
"Custom T6225-CR"},
957 uint16_t v = pci_get_vendor(dev);
958 uint16_t d = pci_get_device(dev);
959 uint8_t f = pci_get_function(dev);
965 if (d == 0xa000 && f != 0)
968 for (i = 0; i < nitems(
t4_pciids); i++) {
971 return (BUS_PROBE_DEFAULT);
982 uint16_t v = pci_get_vendor(dev);
983 uint16_t d = pci_get_device(dev);
984 uint8_t f = pci_get_function(dev);
990 if (d == 0xb000 && f != 0)
993 for (i = 0; i < nitems(
t5_pciids); i++) {
996 return (BUS_PROBE_DEFAULT);
1007 uint16_t v = pci_get_vendor(dev);
1008 uint16_t d = pci_get_device(dev);
1013 for (i = 0; i < nitems(
t6_pciids); i++) {
1016 return (BUS_PROBE_DEFAULT);
1036 root_port = pci_find_pcie_root_port(dev);
1037 if (root_port == NULL) {
1038 device_printf(dev,
"Unable to find parent root port\n");
1042 v = pcie_adjust_config(root_port, PCIER_DEVICE_CTL,
1043 PCIEM_CTL_RELAXED_ORD_ENABLE | PCIEM_CTL_NOSNOOP_ENABLE, 0, 2);
1044 if ((v & (PCIEM_CTL_RELAXED_ORD_ENABLE | PCIEM_CTL_NOSNOOP_ENABLE)) !=
1046 device_printf(dev,
"Disabled No Snoop/Relaxed Ordering on %s\n",
1047 device_get_nameunit(root_port));
1053 .ifnet_name =
"cxgbe",
1054 .vi_ifnet_name =
"vcxgbe",
1055 .pf03_drv_name =
"t4iov",
1056 .vf_nexus_name =
"t4vf",
1057 .vf_ifnet_name =
"cxgbev"
1059 .nexus_name =
"t5nex",
1060 .ifnet_name =
"cxl",
1061 .vi_ifnet_name =
"vcxl",
1062 .pf03_drv_name =
"t5iov",
1063 .vf_nexus_name =
"t5vf",
1064 .vf_ifnet_name =
"cxlv"
1066 .nexus_name =
"t6nex",
1068 .vi_ifnet_name =
"vcc",
1069 .pf03_drv_name =
"t6iov",
1070 .vf_nexus_name =
"t6vf",
1071 .vf_ifnet_name =
"ccv"
1084 device_printf(sc->
dev,
"chip id %d is not supported.\n",
id);
1092 const char *parent, *name;
1097 parent = device_get_nameunit(sc->
dev);
1099 while (resource_find_dev(&line, name, &unit,
"at", parent) == 0) {
1100 if (resource_long_value(name, unit,
"port", &value) == 0 &&
1111 int rc = 0, i, j, rqidx, tqidx, nports;
1112 struct make_dev_args mda;
1116#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
1123 int nm_rqidx, nm_tqidx;
1127 sc = device_get_softc(dev);
1129 sysctl_ctx_init(&sc->
ctx);
1130 TUNABLE_INT_FETCH(
"hw.cxgbe.dflags", &sc->
debug_flags);
1132 if ((pci_get_device(dev) & 0xff00) == 0x5400)
1134 pci_enable_busmaster(dev);
1135 if (pci_find_cap(dev, PCIY_EXPRESS, &i) == 0) {
1138 pci_set_max_read_req(dev, 4096);
1139 v = pci_read_config(dev, i + PCIER_DEVICE_CTL, 2);
1140 sc->
params.
pci.
mps = 128 << ((v & PCIEM_CTL_MAX_PAYLOAD) >> 5);
1141 if (pcie_relaxed_ordering == 0 &&
1142 (v & PCIEM_CTL_RELAXED_ORD_ENABLE) != 0) {
1143 v &= ~PCIEM_CTL_RELAXED_ORD_ENABLE;
1144 pci_write_config(dev, i + PCIER_DEVICE_CTL, v, 2);
1145 }
else if (pcie_relaxed_ordering == 1 &&
1146 (v & PCIEM_CTL_RELAXED_ORD_ENABLE) == 0) {
1147 v |= PCIEM_CTL_RELAXED_ORD_ENABLE;
1148 pci_write_config(dev, i + PCIER_DEVICE_CTL, v, 2);
1157 device_get_nameunit(dev));
1160 device_get_nameunit(dev));
1164 mtx_init(&sc->
sfl_lock,
"starving freelists", 0, MTX_DEF);
1165 TAILQ_INIT(&sc->sfl);
1168 mtx_init(&sc->
reg_lock,
"indirect register access", 0, MTX_DEF);
1171 rw_init(&sc->
policy_lock,
"connection offload policy");
1181 SYSCTL_CHILDREN(device_get_sysctl_tree(sc->
dev)), OID_AUTO,
"ctrlq",
1182 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"control queues");
1184 SYSCTL_CHILDREN(device_get_sysctl_tree(sc->
dev)), OID_AUTO,
"fwq",
1185 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"firmware event queue");
1194 buf = malloc(PAGE_SIZE, M_CXGBE, M_ZERO | M_WAITOK);
1198 device_printf(dev,
"failed to prepare adapter: %d.\n", rc);
1213 if (sc->
names == NULL) {
1226 make_dev_args_init(&mda);
1228 mda.mda_uid = UID_ROOT;
1229 mda.mda_gid = GID_WHEEL;
1230 mda.mda_mode = 0600;
1231 mda.mda_si_drv1 = sc;
1232 rc = make_dev_s(&mda, &sc->
cdev,
"%s", device_get_nameunit(dev));
1234 device_printf(dev,
"failed to create nexus char device: %d.\n",
1238 if (TUNABLE_INT_FETCH(
"hw.cxgbe.sos", &i) && i != 0) {
1239 device_printf(dev,
"recovery mode.\n");
1243#if defined(__i386__)
1244 if ((cpu_feature & CPUID_CX8) == 0) {
1245 device_printf(dev,
"64 bit atomics not available.\n");
1291 pi = malloc(
sizeof(*pi), M_CXGBE, M_ZERO | M_WAITOK);
1301 pi->
vi = malloc(
sizeof(
struct vi_info) * t4_num_vis, M_CXGBE,
1310 device_printf(
dev,
"unable to initialize port %d: %d\n",
1312 free(pi->
vi, M_CXGBE);
1324 device_get_nameunit(
dev), i);
1336 }
else if (
is_t4(sc)) {
1359 if (pi->
dev == NULL) {
1361 "failed to add device for port %d.\n", i);
1366 device_set_softc(pi->
dev, pi);
1391#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
1399 M_CXGBE, M_ZERO | M_WAITOK);
1411 M_CXGBE, M_ZERO | M_WAITOK);
1417 if (t4_native_netmap & NN_MAIN_VI) {
1421 if (num_vis > 1 && t4_native_netmap & NN_EXTRA_VI) {
1429 M_CXGBE, M_ZERO | M_WAITOK);
1431 M_CXGBE, M_ZERO | M_WAITOK);
1436 s->
ctrlq = malloc(nports *
sizeof(
struct sge_wrq), M_CXGBE,
1447 sc->
irq = malloc(sc->
intr_count *
sizeof(
struct irq), M_CXGBE,
1455 t4_init_etid_table(sc);
1469#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
1476 nm_rqidx = nm_tqidx = 0;
1503 if (j == 0 && vi->
ntxq > 1)
1508#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
1540 "failed to setup interrupt handlers: %d\n", rc);
1544 rc = bus_generic_probe(
dev);
1546 device_printf(
dev,
"failed to probe child drivers: %d\n", rc);
1559 rc = bus_generic_attach(
dev);
1562 "failed to attach all child ports: %d\n", rc);
1567 "PCIe gen%d x%d, %d ports, %d %s interrupt%s, %d eq, %d iq\n",
1578 if (rc != 0 && sc->
cdev) {
1581 "error during attach, adapter is now in recovery mode.\n");
1600 sc = device_get_softc(bus);
1603 if (pi != NULL && pi->
dev ==
dev) {
1604 sbuf_printf(sb,
"port=%d", pi->
port_id);
1616 sc = device_get_softc(
dev);
1628 sc = device_get_softc(
dev);
1632 if (pi == NULL || pi->
dev == NULL)
1645 for (i = 0; i < PCI_FUNCMAX; i++) {
1646 if (i == pci_get_function(
dev))
1648 sibling = pci_find_dbsf(pci_get_domain(
dev), pci_get_bus(
dev),
1649 pci_get_slot(
dev), i);
1650 if (sibling == NULL || !device_is_attached(sibling))
1653 error = T4_DETACH_CHILD(sibling);
1655 (
void)T4_ATTACH_CHILD(sibling);
1673 "failed to detach sibling devices: %d\n", rc);
1687 sc = device_get_softc(
dev);
1690 destroy_dev(sc->
cdev);
1695 SLIST_REMOVE(&t4_list, sc,
adapter, link);
1698 sc->
flags &= ~CHK_MBOX_ACCESS;
1704 if (device_is_attached(
dev)) {
1705 rc = bus_generic_detach(
dev);
1708 "failed to detach child devices: %d\n", rc);
1724 device_delete_child(
dev, pi->
dev);
1727 free(pi->
vi, M_CXGBE);
1732 device_delete_children(
dev);
1733 sysctl_ctx_free(&sc->
ctx);
1740 pci_release_msi(
dev);
1743 bus_release_resource(
dev, SYS_RES_MEMORY, sc->
regs_rid,
1747 bus_release_resource(
dev, SYS_RES_MEMORY, sc->
udbs_rid,
1751 bus_release_resource(
dev, SYS_RES_MEMORY, sc->
msix_rid,
1760 t4_free_etid_table(sc);
1768#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
1778 free(sc->
irq, M_CXGBE);
1779 free(sc->
sge.
rxq, M_CXGBE);
1780 free(sc->
sge.
txq, M_CXGBE);
1793 if (mtx_initialized(&sc->
tids.ftid_lock)) {
1794 mtx_destroy(&sc->
tids.ftid_lock);
1797 if (mtx_initialized(&sc->
tids.atid_lock))
1798 mtx_destroy(&sc->
tids.atid_lock);
1799 if (mtx_initialized(&sc->
ifp_lock))
1813 if (rw_initialized(&mw->mw_lock))
1814 rw_destroy(&mw->mw_lock);
1821 bzero(sc,
sizeof(*sc));
1833 const int caps = IFCAP_TOE | IFCAP_TXTLS | IFCAP_NETMAP | IFCAP_TXRTLMT;
1841 if (vi->
ifp->if_capenable & caps)
1883#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
1888 CH_ALERT(sc,
"suspend requested\n");
1899 CH_ERR(sc,
"not safe to suspend.\n");
1934 if (
ifp->if_drv_flags & IFF_DRV_RUNNING) {
1936 callout_stop(&vi->
tick);
1938 callout_drain(&vi->
tick);
1949#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
1957#if defined(TCP_OFFLOAD)
1959 ofld_rxq->
iq.
flags &= ~IQ_HW_ALLOCATED;
1986 CH_ALERT(sc,
"suspend completed.\n");
2056#define COMPARE_CAPS(c) do { \
2057 if (o->c##caps != sc->c##caps) { \
2058 CH_ERR(sc, "%scaps 0x%04x -> 0x%04x.\n", #c, o->c##caps, \
2081#define COMPARE_PARAM(p, name) do { \
2082 if (o->p != sc->p) { \
2083 CH_ERR(sc, #name " %d -> %d\n", o->p, sc->p); \
2103 COMPARE_PARAM(params.filter2_wr_support, filter2_wr_support);
2104 COMPARE_PARAM(params.ulptx_memwrite_dsgl, ulptx_memwrite_dsgl);
2105 COMPARE_PARAM(params.fr_nsmr_tpte_wr_support, fr_nsmr_tpte_wr_support);
2106 COMPARE_PARAM(params.max_pkts_per_eth_tx_pkts_wr, max_pkts_per_eth_tx_pkts_wr);
2154 CH_ALERT(sc,
"resume requested.\n");
2167 CH_ERR(sc,
"%s: can't read device registers\n", __func__);
2179 if (TUNABLE_INT_FETCH(
"hw.cxgbe.sos", &i) && i != 0) {
2180 CH_ALERT(sc,
"recovery mode on resume.\n");
2188 old_state = malloc(
sizeof(*old_state), M_CXGBE, M_ZERO | M_WAITOK);
2219 MPASS(pi->
vi != NULL);
2225 "failed to re-initialize port %d: %d\n", i, rc);
2240 "failed to re-allocate extra VI: %d\n", rc);
2258 CH_ERR(sc,
"failed to re-initialize adapter: %d\n", rc);
2269 vi->
flags &= ~VI_SKIP_STATS;
2275 CH_ERR(vi,
"failed to re-initialize "
2276 "interface: %d\n", rc);
2281 if (!(
ifp->if_drv_flags & IFF_DRV_RUNNING))
2292 CH_ERR(vi,
"failed to re-configure MAC: %d\n", rc);
2298 CH_ERR(vi,
"failed to re-enable VI: %d\n", rc);
2307 callout_schedule(&vi->
tick, hz);
2329 if (!(
ifp->if_drv_flags & IFF_DRV_RUNNING))
2333 CH_ERR(vi,
"failed to re-configure MCAST MACs: %d\n", rc);
2342 CH_ALERT(sc,
"resume completed.\n");
2345 free(old_state, M_CXGBE);
2372 CH_ALERT(sc,
"reset requested.\n");
2379 CH_ERR(sc,
"adapter is suspended, use resume (not reset).\n");
2386 CH_ERR(sc,
"not safe to reset.\n");
2399 rc = BUS_RESET_CHILD(device_get_parent(sc->
dev), sc->
dev, 0);
2402 CH_ERR(sc,
"bus_reset_child failed: %d.\n", rc);
2409 CH_ALERT(sc,
"bus_reset_child succeeded.\n");
2411 CH_ERR(sc,
"adapter did not reset properly, flags "
2412 "0x%08x, error_flags 0x%08x.\n", sc->
flags,
2435 snprintf(buf,
sizeof(buf),
"port %d", pi->
port_id);
2436 device_set_desc_copy(
dev, buf);
2438 return (BUS_PROBE_DEFAULT);
2441#define T4_CAP (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | \
2442 IFCAP_VLAN_HWCSUM | IFCAP_TSO | IFCAP_JUMBO_MTU | IFCAP_LRO | \
2443 IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE | IFCAP_HWCSUM_IPV6 | IFCAP_HWSTATS | \
2444 IFCAP_HWRXTSTMP | IFCAP_MEXTPG)
2445#define T4_CAP_ENABLE (T4_CAP)
2452 struct sysctl_ctx_list *ctx = &vi->
ctx;
2453 struct sysctl_oid_list *children;
2454 struct pfil_head_args pa;
2457 sysctl_ctx_init(
ctx);
2458 children = SYSCTL_CHILDREN(device_get_sysctl_tree(vi->
dev));
2459 vi->
rxq_oid = SYSCTL_ADD_NODE(
ctx, children, OID_AUTO,
"rxq",
2460 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"NIC rx queues");
2461 vi->
txq_oid = SYSCTL_ADD_NODE(
ctx, children, OID_AUTO,
"txq",
2462 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"NIC tx queues");
2464 vi->
nm_rxq_oid = SYSCTL_ADD_NODE(
ctx, children, OID_AUTO,
"nm_rxq",
2465 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"netmap rx queues");
2466 vi->
nm_txq_oid = SYSCTL_ADD_NODE(
ctx, children, OID_AUTO,
"nm_txq",
2467 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"netmap tx queues");
2470 vi->
ofld_rxq_oid = SYSCTL_ADD_NODE(
ctx, children, OID_AUTO,
"ofld_rxq",
2471 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"TOE rx queues");
2473#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
2474 vi->
ofld_txq_oid = SYSCTL_ADD_NODE(
ctx, children, OID_AUTO,
"ofld_txq",
2475 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"TOE/ETHOFLD tx queues");
2479 mtx_init(&vi->
tick_mtx,
"vi tick", NULL, MTX_DEF);
2485 ifp = if_alloc_dev(IFT_ETHER,
dev);
2487 device_printf(
dev,
"Cannot allocate ifnet\n");
2493 if_initname(
ifp, device_get_name(
dev), device_get_unit(
dev));
2494 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
2504#if defined(KERN_TLS) || defined(RATELIMIT)
2505 ifp->if_snd_tag_alloc = cxgbe_snd_tag_alloc;
2508 ifp->if_ratelimit_query = cxgbe_ratelimit_query;
2513 ifp->if_hwassist = CSUM_TCP | CSUM_UDP | CSUM_IP | CSUM_TSO |
2514 CSUM_UDP_IPV6 | CSUM_TCP_IPV6;
2516 ifp->if_capabilities |= IFCAP_VXLAN_HWCSUM | IFCAP_VXLAN_HWTSO;
2517 ifp->if_capenable |= IFCAP_VXLAN_HWCSUM | IFCAP_VXLAN_HWTSO;
2518 ifp->if_hwassist |= CSUM_INNER_IP6_UDP | CSUM_INNER_IP6_TCP |
2519 CSUM_INNER_IP6_TSO | CSUM_INNER_IP | CSUM_INNER_IP_UDP |
2520 CSUM_INNER_IP_TCP | CSUM_INNER_IP_TSO | CSUM_ENCAP_VXLAN;
2525 ifp->if_capabilities |= IFCAP_TOE;
2529 ifp->if_capabilities |= IFCAP_TXRTLMT;
2530 ifp->if_capenable |= IFCAP_TXRTLMT;
2534 ifp->if_hw_tsomax = IP_MAXPACKET;
2543 ifp->if_hw_tsomaxsegsize = 65536;
2546 ifp->if_capabilities |= IFCAP_TXTLS;
2548 ifp->if_capenable |= IFCAP_TXTLS;
2555 cxgbe_nm_attach(vi);
2557 sb = sbuf_new_auto();
2558 sbuf_printf(sb,
"%d txq, %d rxq (NIC)", vi->
ntxq, vi->
nrxq);
2559#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
2560 switch (
ifp->if_capabilities & (IFCAP_TOE | IFCAP_TXRTLMT)) {
2562 sbuf_printf(sb,
"; %d txq (TOE)", vi->
nofldtxq);
2564 case IFCAP_TOE | IFCAP_TXRTLMT:
2565 sbuf_printf(sb,
"; %d txq (TOE/ETHOFLD)", vi->
nofldtxq);
2568 sbuf_printf(sb,
"; %d txq (ETHOFLD)", vi->
nofldtxq);
2573 if (
ifp->if_capabilities & IFCAP_TOE)
2574 sbuf_printf(sb,
", %d rxq (TOE)", vi->
nofldrxq);
2577 if (
ifp->if_capabilities & IFCAP_NETMAP)
2578 sbuf_printf(sb,
"; %d txq, %d rxq (netmap)",
2582 device_printf(
dev,
"%s\n", sbuf_data(sb));
2587 pa.pa_version = PFIL_VERSION;
2588 pa.pa_flags = PFIL_IN;
2589 pa.pa_type = PFIL_TYPE_ETHERNET;
2590 pa.pa_headname =
ifp->if_xname;
2591 vi->
pfil = pfil_head_register(&pa);
2604 sysctl_ctx_init(&
pi->
ctx);
2614 if (vi->
dev == NULL) {
2615 device_printf(
dev,
"failed to add VI %d\n", i);
2618 device_set_softc(vi->
dev, vi);
2623 bus_generic_attach(
dev);
2631 struct ifnet *
ifp = vi->
ifp;
2633 if (vi->
pfil != NULL) {
2634 pfil_head_unregister(vi->
pfil);
2638 ether_ifdetach(
ifp);
2642 if (
ifp->if_capabilities & IFCAP_NETMAP)
2643 cxgbe_nm_detach(vi);
2646 callout_drain(&vi->
tick);
2647 sysctl_ctx_free(&vi->
ctx);
2662 rc = bus_generic_detach(
dev);
2665 device_delete_children(
dev);
2667 sysctl_ctx_free(&pi->
ctx);
2676 ifmedia_removeall(&pi->
media);
2698 int rc = 0, mtu,
flags;
2702 struct ifreq *ifr = (
struct ifreq *)data;
2708 if (mtu < ETHERMIN || mtu >
MAX_MTU)
2718 ifp->if_drv_flags & IFF_DRV_RUNNING)
2734 if (
ifp->if_flags & IFF_UP) {
2735 if (
ifp->if_drv_flags & IFF_DRV_RUNNING) {
2737 if ((
ifp->if_flags ^ flags) &
2738 (IFF_PROMISC | IFF_ALLMULTI)) {
2746 }
else if (
ifp->if_drv_flags & IFF_DRV_RUNNING) {
2767 mask = ifr->ifr_reqcap ^
ifp->if_capenable;
2768 if (mask & IFCAP_TXCSUM) {
2769 ifp->if_capenable ^= IFCAP_TXCSUM;
2770 ifp->if_hwassist ^= (CSUM_TCP | CSUM_UDP | CSUM_IP);
2772 if (IFCAP_TSO4 &
ifp->if_capenable &&
2773 !(IFCAP_TXCSUM &
ifp->if_capenable)) {
2774 mask &= ~IFCAP_TSO4;
2775 ifp->if_capenable &= ~IFCAP_TSO4;
2777 "tso4 disabled due to -txcsum.\n");
2780 if (mask & IFCAP_TXCSUM_IPV6) {
2781 ifp->if_capenable ^= IFCAP_TXCSUM_IPV6;
2782 ifp->if_hwassist ^= (CSUM_UDP_IPV6 | CSUM_TCP_IPV6);
2784 if (IFCAP_TSO6 &
ifp->if_capenable &&
2785 !(IFCAP_TXCSUM_IPV6 &
ifp->if_capenable)) {
2786 mask &= ~IFCAP_TSO6;
2787 ifp->if_capenable &= ~IFCAP_TSO6;
2789 "tso6 disabled due to -txcsum6.\n");
2792 if (mask & IFCAP_RXCSUM)
2793 ifp->if_capenable ^= IFCAP_RXCSUM;
2794 if (mask & IFCAP_RXCSUM_IPV6)
2795 ifp->if_capenable ^= IFCAP_RXCSUM_IPV6;
2803 if (mask & IFCAP_TSO4) {
2804 if (!(IFCAP_TSO4 &
ifp->if_capenable) &&
2805 !(IFCAP_TXCSUM &
ifp->if_capenable)) {
2806 if_printf(
ifp,
"enable txcsum first.\n");
2810 ifp->if_capenable ^= IFCAP_TSO4;
2812 if (mask & IFCAP_TSO6) {
2813 if (!(IFCAP_TSO6 &
ifp->if_capenable) &&
2814 !(IFCAP_TXCSUM_IPV6 &
ifp->if_capenable)) {
2815 if_printf(
ifp,
"enable txcsum6 first.\n");
2819 ifp->if_capenable ^= IFCAP_TSO6;
2821 if (mask & IFCAP_LRO) {
2822#if defined(INET) || defined(INET6)
2826 ifp->if_capenable ^= IFCAP_LRO;
2828 if (
ifp->if_capenable & IFCAP_LRO)
2836 if (mask & IFCAP_TOE) {
2837 int enable = (
ifp->if_capenable ^ mask) & IFCAP_TOE;
2839 rc = toe_capability(vi, enable);
2843 ifp->if_capenable ^= mask;
2846 if (mask & IFCAP_VLAN_HWTAGGING) {
2847 ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
2848 if (
ifp->if_drv_flags & IFF_DRV_RUNNING)
2851 if (mask & IFCAP_VLAN_MTU) {
2852 ifp->if_capenable ^= IFCAP_VLAN_MTU;
2856 if (mask & IFCAP_VLAN_HWTSO)
2857 ifp->if_capenable ^= IFCAP_VLAN_HWTSO;
2858 if (mask & IFCAP_VLAN_HWCSUM)
2859 ifp->if_capenable ^= IFCAP_VLAN_HWCSUM;
2861 if (mask & IFCAP_TXRTLMT)
2862 ifp->if_capenable ^= IFCAP_TXRTLMT;
2864 if (mask & IFCAP_HWRXTSTMP) {
2868 ifp->if_capenable ^= IFCAP_HWRXTSTMP;
2870 if (
ifp->if_capenable & IFCAP_HWRXTSTMP)
2876 if (mask & IFCAP_MEXTPG)
2877 ifp->if_capenable ^= IFCAP_MEXTPG;
2880 if (mask & IFCAP_TXTLS) {
2881 int enable = (
ifp->if_capenable ^ mask) & IFCAP_TXTLS;
2883 rc = ktls_capability(sc, enable);
2887 ifp->if_capenable ^= (mask & IFCAP_TXTLS);
2890 if (mask & IFCAP_VXLAN_HWCSUM) {
2891 ifp->if_capenable ^= IFCAP_VXLAN_HWCSUM;
2892 ifp->if_hwassist ^= CSUM_INNER_IP6_UDP |
2893 CSUM_INNER_IP6_TCP | CSUM_INNER_IP |
2894 CSUM_INNER_IP_UDP | CSUM_INNER_IP_TCP;
2896 if (mask & IFCAP_VXLAN_HWTSO) {
2897 ifp->if_capenable ^= IFCAP_VXLAN_HWTSO;
2898 ifp->if_hwassist ^= CSUM_INNER_IP6_TSO |
2902#ifdef VLAN_CAPABILITIES
2903 VLAN_CAPABILITIES(
ifp);
2912 rc = ifmedia_ioctl(
ifp, ifr, &pi->
media, cmd);
2916 struct ifi2creq i2c;
2918 rc = copyin(ifr_data_get_ptr(ifr), &i2c,
sizeof(i2c));
2921 if (i2c.dev_addr != 0xA0 && i2c.dev_addr != 0xA2) {
2925 if (i2c.len >
sizeof(i2c.data)) {
2936 i2c.offset, i2c.len, &i2c.data[0]);
2939 rc = copyout(&i2c, ifr_data_get_ptr(ifr),
sizeof(i2c));
2944 rc = ether_ioctl(
ifp, cmd, data);
2961 MPASS(m->m_nextpkt == NULL);
2962#if defined(KERN_TLS) || defined(RATELIMIT)
2963 if (m->m_pkthdr.csum_flags & CSUM_SND_TAG)
2964 MPASS(m->m_pkthdr.snd_tag->ifp ==
ifp);
2973 if (__predict_false(rc != 0)) {
2979 if (m->m_pkthdr.csum_flags & CSUM_SND_TAG) {
2980 if (m->m_pkthdr.snd_tag->sw->type == IF_SND_TAG_TYPE_RATE_LIMIT)
2981 return (ethofld_transmit(
ifp, m));
2988 if (M_HASHTYPE_GET(m) != M_HASHTYPE_NONE)
2994 if (__predict_false(rc != 0))
3029 struct fw_vi_stats_vf *s = &vi->
stats;
3036 case IFCOUNTER_IPACKETS:
3037 return (s->rx_bcast_frames + s->rx_mcast_frames +
3038 s->rx_ucast_frames);
3039 case IFCOUNTER_IERRORS:
3040 return (s->rx_err_frames);
3041 case IFCOUNTER_OPACKETS:
3042 return (s->tx_bcast_frames + s->tx_mcast_frames +
3043 s->tx_ucast_frames + s->tx_offload_frames);
3044 case IFCOUNTER_OERRORS:
3045 return (s->tx_drop_frames);
3046 case IFCOUNTER_IBYTES:
3047 return (s->rx_bcast_bytes + s->rx_mcast_bytes +
3049 case IFCOUNTER_OBYTES:
3050 return (s->tx_bcast_bytes + s->tx_mcast_bytes +
3051 s->tx_ucast_bytes + s->tx_offload_bytes);
3052 case IFCOUNTER_IMCASTS:
3053 return (s->rx_mcast_frames);
3054 case IFCOUNTER_OMCASTS:
3055 return (s->tx_mcast_frames);
3056 case IFCOUNTER_OQDROPS: {
3065 drops += counter_u64_fetch(txq->
r->
dropped);
3073 return (if_get_counter_default(
ifp, c));
3089 case IFCOUNTER_IPACKETS:
3092 case IFCOUNTER_IERRORS:
3096 case IFCOUNTER_OPACKETS:
3099 case IFCOUNTER_OERRORS:
3102 case IFCOUNTER_IBYTES:
3105 case IFCOUNTER_OBYTES:
3108 case IFCOUNTER_IMCASTS:
3111 case IFCOUNTER_OMCASTS:
3114 case IFCOUNTER_IQDROPS:
3119 case IFCOUNTER_OQDROPS: {
3128 drops += counter_u64_fetch(txq->
r->
dropped);
3136 return (if_get_counter_default(
ifp, c));
3140#if defined(KERN_TLS) || defined(RATELIMIT)
3142cxgbe_snd_tag_alloc(
struct ifnet *
ifp,
union if_snd_tag_alloc_params *params,
3143 struct m_snd_tag **pt)
3147 switch (params->hdr.type) {
3149 case IF_SND_TAG_TYPE_RATE_LIMIT:
3150 error = cxgbe_rate_tag_alloc(
ifp, params, pt);
3154 case IF_SND_TAG_TYPE_TLS:
3174 struct ifmedia *ifm = &pi->
media;
3183 if (IFM_SUBTYPE(ifm->ifm_media) == IFM_AUTO) {
3195 ifmedia_baudrate(ifm->ifm_media) / 1000000;
3197 if (IFM_OPTIONS(ifm->ifm_media) & IFM_ETH_RXPAUSE)
3199 if (IFM_OPTIONS(ifm->ifm_media) & IFM_ETH_TXPAUSE)
3221 MPASS(powerof2(speed));
3232 return (IFM_1000_T);
3239 return (IFM_10G_KX4);
3243 return (IFM_10G_CX4);
3247 return (IFM_1000_KX);
3258 return (IFM_1000_KX);
3260 return (IFM_10G_KR);
3262 return (IFM_25G_KR);
3264 return (IFM_40G_KR4);
3266 return (IFM_50G_KR2);
3268 return (IFM_100G_KR4);
3286 return (IFM_1000_LX);
3288 return (IFM_10G_LR);
3290 return (IFM_25G_LR);
3292 return (IFM_40G_LR4);
3294 return (IFM_50G_LR2);
3296 return (IFM_100G_LR4);
3302 return (IFM_1000_SX);
3304 return (IFM_10G_SR);
3306 return (IFM_25G_SR);
3308 return (IFM_40G_SR4);
3310 return (IFM_50G_SR2);
3312 return (IFM_100G_SR4);
3317 return (IFM_10G_ER);
3323 return (IFM_1000_CX);
3325 return (IFM_10G_TWINAX);
3327 return (IFM_25G_CR);
3329 return (IFM_40G_CR4);
3331 return (IFM_50G_CR2);
3333 return (IFM_100G_CR4);
3338 return (IFM_10G_LRM);
3355 return (IFM_UNKNOWN);
3383 ifmr->ifm_status = IFM_AVALID;
3386 ifmr->ifm_status |= IFM_ACTIVE;
3389 ifmr->ifm_active = IFM_ETHER | IFM_FDX;
3390 ifmr->ifm_active &= ~(IFM_ETH_TXPAUSE | IFM_ETH_RXPAUSE);
3392 ifmr->ifm_active |= IFM_ETH_RXPAUSE;
3394 ifmr->ifm_active |= IFM_ETH_TXPAUSE;
3407 snprintf(buf,
sizeof(buf),
"port %d vi %td", vi->
pi->
port_id,
3409 device_set_desc_copy(
dev, buf);
3411 return (BUS_PROBE_DEFAULT);
3417 int func, index, rc;
3418 uint32_t param, val;
3422 index = vi -
pi->
vi;
3424 KASSERT(index < nitems(vi_mac_funcs),
3425 (
"%s: VI %s doesn't have a MAC func", __func__,
3426 device_get_nameunit(vi->
dev)));
3427 func = vi_mac_funcs[index];
3431 CH_ERR(vi,
"failed to allocate virtual interface %d"
3432 "for port %d: %d\n", index,
pi->
port_id, -rc);
3444 device_printf(vi->
dev,
"RSS table not available.\n");
3457 MPASS((val >> 16) == vi->
rss_size);
3472 vi = device_get_softc(
dev);
3498 vi = device_get_softc(
dev);
3519 panic(
"%s: panic on fatal error", device_get_nameunit(sc->
dev));
3537 if (t4_reset_on_fatal_err) {
3538 CH_ALERT(sc,
"resetting on fatal error.\n");
3540 if (rc == 0 && t4_panic_on_fatal_err) {
3541 CH_ALERT(sc,
"reset was successful, "
3542 "system will NOT panic.\n");
3547 if (t4_panic_on_fatal_err) {
3548 CH_ALERT(sc,
"panicking on fatal error (after 30s).\n");
3574 log(LOG_ALERT,
"%s: encountered fatal error, adapter stopped (%d).\n",
3575 device_get_nameunit(sc->
dev), fw_error);
3583 SLIST_INSERT_HEAD(&t4_list, sc, link);
3591 sc->
regs_res = bus_alloc_resource_any(sc->
dev, SYS_RES_MEMORY,
3594 device_printf(sc->
dev,
"cannot map registers.\n");
3603 sc->
msix_res = bus_alloc_resource_any(sc->
dev, SYS_RES_MEMORY,
3606 device_printf(sc->
dev,
"cannot map MSI-X BAR.\n");
3625 sc->
udbs_res = bus_alloc_resource_any(sc->
dev, SYS_RES_MEMORY,
3628 device_printf(sc->
dev,
"cannot map doorbell BAR.\n");
3635#if defined(__i386__) || defined(__amd64__)
3636 if (t5_write_combine) {
3648 rc = pmap_change_attr((vm_offset_t)sc->
udbs_base,
3649 rman_get_size(sc->
udbs_res), PAT_WRITE_COMBINING);
3655 device_printf(sc->
dev,
3656 "couldn't enable write combining: %d\n",
3705 bar0 &= (uint32_t) PCIM_BAR_MEM_BASE;
3716 if (!rw_initialized(&mw->mw_lock)) {
3717 rw_init(&mw->mw_lock,
"memory window access");
3726 rw_wlock(&mw->mw_lock);
3728 rw_wunlock(&mw->mw_lock);
3750 rw_assert(&mw->mw_lock, RA_WLOCKED);
3774 if (addr & 3 || len & 3 || len <= 0)
3779 rw_rlock(&mw->mw_lock);
3781 if (addr >= mw_end || addr < mw->
mw_curpos) {
3783 if (!rw_try_upgrade(&mw->mw_lock)) {
3784 rw_runlock(&mw->mw_lock);
3785 rw_wlock(&mw->mw_lock);
3787 rw_assert(&mw->mw_lock, RA_WLOCKED);
3789 rw_downgrade(&mw->mw_lock);
3792 rw_assert(&mw->mw_lock, RA_RLOCKED);
3793 while (addr < mw_end && len > 0) {
3797 *val++ = le32toh(v);
3806 rw_runlock(&mw->mw_lock);
3826 mtx_init(&t->atid_lock,
"atid lock", NULL, MTX_DEF);
3829 for (i = 1; i < t->
natids; i++)
3842 (
"%s: %d atids still in use.", __func__, t->
atids_in_use));
3844 if (mtx_initialized(&t->atid_lock))
3845 mtx_destroy(&t->atid_lock);
3856 mtx_lock(&t->atid_lock);
3866 mtx_unlock(&t->atid_lock);
3884 mtx_lock(&t->atid_lock);
3888 mtx_unlock(&t->atid_lock);
3919 return ((
const struct t4_range *)a)->start -
3920 ((
const struct t4_range *)b)->start;
3930 struct t4_range mem_ranges[4], *
r, *next;
3931 uint32_t em, addr_len;
3932 int i, n, remaining;
3935 if (addr & 3 || len & 3 || len == 0)
3943 bzero(
r,
sizeof(mem_ranges));
3949 if (addr >=
r->start &&
3950 addr + len <= r->
start +
r->size)
3961 if (addr >=
r->start &&
3962 addr + len <= r->
start +
r->size)
3973 if (addr >=
r->start &&
3974 addr + len <= r->
start +
r->size)
3985 if (addr >=
r->start &&
3986 addr + len <= r->
start +
r->size)
3992 MPASS(n <= nitems(mem_ranges));
4000 for (remaining = n - 1; remaining > 0; remaining--,
r++) {
4004 MPASS(next->
size > 0);
4006 while (
r->start +
r->size >= next->
start) {
4008 r->size = max(
r->start +
r->size,
4011 if (--remaining == 0)
4015 if (next !=
r + 1) {
4021 MPASS(next->
size > 0);
4022 memcpy(
r + 1, next, remaining *
sizeof(*
r));
4030 MPASS(n < nitems(mem_ranges));
4031 bzero(&mem_ranges[n], (nitems(mem_ranges) - n) *
4040 for (i = 0; i < n; i++,
r++) {
4041 if (addr >=
r->start &&
4042 addr + len <= r->
start +
r->size)
4064 panic(
"%s: cannot translate fw mtype %d.", __func__, mtype);
4077 uint32_t em, addr_len, maddr;
4080 if (off & 3 || len & 3 || len == 0)
4113 *addr = maddr + off;
4154 bzero(iaq,
sizeof(*iaq));
4161#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
4174 if (t4_native_netmap & NN_MAIN_VI) {
4178 if (t4_native_netmap & NN_EXTRA_VI) {
4185 if (iaq->
nirq <= navail &&
4201 if (iaq->
nirq <= navail &&
4203 device_printf(sc->
dev,
"virtual interfaces per port "
4204 "reduced to %d from %d. nrxq=%u, nofldrxq=%u, "
4205 "nrxq_vi=%u nofldrxq_vi=%u, nnmrxq_vi=%u. "
4206 "itype %d, navail %u, nirq %d.\n",
4209 itype, navail, iaq->
nirq);
4221 if (iaq->
num_vis != t4_num_vis) {
4222 device_printf(sc->
dev,
"extra virtual interfaces disabled. "
4223 "nrxq=%u, nofldrxq=%u, nrxq_vi=%u nofldrxq_vi=%u, "
4224 "nnmrxq_vi=%u. itype %d, navail %u, nirq %d.\n",
4235 if (iaq->
nrxq > 1) {
4238 }
while (!powerof2(iaq->
nrxq));
4245 old_nirq = iaq->
nirq;
4247 if (iaq->
nirq <= navail &&
4249 device_printf(sc->
dev,
"running with reduced number of "
4250 "rx queues because of shortage of interrupts. "
4251 "nrxq=%u, nofldrxq=%u. "
4252 "itype %d, navail %u, nirq %d.\n", iaq->
nrxq,
4256 }
while (old_nirq != iaq->
nirq);
4259 device_printf(sc->
dev,
"running with minimal number of queues. "
4260 "itype %d, navail %u.\n", itype, navail);
4276 MPASS(iaq->
nirq > 0);
4277 MPASS(iaq->
nrxq > 0);
4278 MPASS(iaq->
ntxq > 0);
4280 MPASS(powerof2(iaq->
nirq));
4287 int rc, itype, navail, nalloc;
4289 for (itype =
INTR_MSIX; itype; itype >>= 1) {
4295 navail = pci_msix_count(sc->
dev);
4297 navail = pci_msi_count(sc->
dev);
4308 rc = pci_alloc_msix(sc->
dev, &nalloc);
4310 rc = pci_alloc_msi(sc->
dev, &nalloc);
4312 if (rc == 0 && nalloc > 0) {
4313 if (nalloc == iaq->
nirq)
4320 device_printf(sc->
dev,
"fewer vectors than requested, "
4321 "type=%d, req=%d, rcvd=%d; will downshift req.\n",
4322 itype, iaq->
nirq, nalloc);
4323 pci_release_msi(sc->
dev);
4328 device_printf(sc->
dev,
4329 "failed to allocate vectors:%d, type=%d, req=%d, rcvd=%d\n",
4330 itype, rc, iaq->
nirq, nalloc);
4333 device_printf(sc->
dev,
4334 "failed to find a usable interrupt type. "
4336 pci_msix_count(sc->
dev), pci_msi_count(sc->
dev));
4341#define FW_VERSION(chip) ( \
4342 V_FW_HDR_FW_VER_MAJOR(chip##FW_VERSION_MAJOR) | \
4343 V_FW_HDR_FW_VER_MINOR(chip##FW_VERSION_MINOR) | \
4344 V_FW_HDR_FW_VER_MICRO(chip##FW_VERSION_MICRO) | \
4345 V_FW_HDR_FW_VER_BUILD(chip##FW_VERSION_BUILD))
4346#define FW_INTFVER(chip, intf) (chip##FW_HDR_INTFVER_##intf)
4377 .kld_name =
"t4fw_cfg",
4378 .fw_mod_name =
"t4fw",
4386 .intfver_iscsipdu =
FW_INTFVER(T4, ISCSIPDU),
4393 .kld_name =
"t5fw_cfg",
4394 .fw_mod_name =
"t5fw",
4402 .intfver_iscsipdu =
FW_INTFVER(T5, ISCSIPDU),
4409 .kld_name =
"t6fw_cfg",
4410 .fw_mod_name =
"t6fw",
4418 .intfver_iscsipdu =
FW_INTFVER(T6, ISCSIPDU),
4431 for (i = 0; i < nitems(
fw_info); i++) {
4454#define SAME_INTF(x) (hdr1->intfver_##x == hdr2->intfver_##x)
4466 const struct firmware **fw)
4476 device_printf(sc->
dev,
4477 "unable to look up firmware information for chip %d.\n",
4483 if (*dcfg != NULL) {
4494 const struct firmware *fw)
4498 firmware_put(fw, FIRMWARE_UNLOAD);
4500 firmware_put(dcfg, FIRMWARE_UNLOAD);
4511 const struct fw_h *drv_fw,
const char *reason,
int *already)
4513 const struct firmware *cfg, *fw;
4514 const uint32_t c = be32toh(card_fw->
fw_ver);
4517 struct fw_h bundled_fw;
4518 bool load_attempted;
4521 load_attempted =
false;
4522 fw_install = t4_fw_install < 0 ? -t4_fw_install : t4_fw_install;
4524 memcpy(&bundled_fw, drv_fw,
sizeof(bundled_fw));
4525 if (t4_fw_install < 0) {
4527 if (rc != 0 || fw == NULL) {
4528 device_printf(sc->
dev,
4529 "failed to load firmware module: %d. cfg %p, fw %p;"
4530 " will use compiled-in firmware version for"
4531 "hw.cxgbe.fw_install checks.\n",
4534 memcpy(&bundled_fw, fw->data,
sizeof(bundled_fw));
4536 load_attempted =
true;
4538 d = be32toh(bundled_fw.
fw_ver);
4545 if (c == 0xffffffff) {
4555 reason =
"incompatible or unusable";
4560 reason =
"older than the version bundled with this driver";
4564 if (fw_install == 2 && d != c) {
4565 reason =
"different than the version bundled with this driver";
4578 if (fw_install == 0) {
4579 device_printf(sc->
dev,
"firmware on card (%u.%u.%u.%u) is %s, "
4580 "but the driver is prohibited from installing a firmware "
4592 if (!load_attempted) {
4594 if (rc != 0 || fw == NULL) {
4595 device_printf(sc->
dev,
4596 "failed to load firmware module: %d. cfg %p, fw %p\n",
4602 device_printf(sc->
dev,
"firmware on card (%u.%u.%u.%u) is %s, "
4603 "but the driver cannot take corrective action because it "
4604 "is unable to load the firmware module.\n",
4610 k = be32toh(((
const struct fw_hdr *)fw->data)->fw_ver);
4612 MPASS(t4_fw_install > 0);
4613 device_printf(sc->
dev,
4614 "firmware in KLD (%u.%u.%u.%u) is not what the driver was "
4615 "expecting (%u.%u.%u.%u) and will not be used.\n",
4624 device_printf(sc->
dev,
"firmware on card (%u.%u.%u.%u) is %s, "
4625 "installing firmware %u.%u.%u.%u on card.\n",
4633 device_printf(sc->
dev,
"failed to install firmware: %d\n", rc);
4637 memcpy(card_fw, fw->data,
sizeof(*card_fw));
4654 int rc, already = 0;
4658 const struct fw_h *drv_fw;
4662 device_printf(sc->
dev,
4663 "unable to look up firmware information for chip %d.\n",
4670 card_fw = malloc(
sizeof(*card_fw), M_CXGBE, M_ZERO | M_WAITOK);
4674 device_printf(sc->
dev,
4675 "unable to read firmware header from card's flash: %d\n",
4690 device_printf(sc->
dev,
4691 "failed to connect to the firmware: %d, %d. "
4695 "not responding properly to HELLO", &already) == ERESTART)
4717 device_printf(sc->
dev,
"couldn't be master(%d), "
4718 "device not already initialized either(%d). "
4727 device_printf(sc->
dev,
"PF%d is master, device state %d. "
4736 sc->
flags &= ~FW_OK;
4738 free(card_fw, M_CXGBE);
4744 uint32_t mtype, uint32_t moff)
4747 const struct firmware *dcfg, *rcfg = NULL;
4748 const uint32_t *cfdata;
4749 uint32_t cflen, addr;
4755 if (strncmp(cfg_file,
DEFAULT_CF,
sizeof(t4_cfg_file)) == 0) {
4756 if (pci_get_device(sc->
dev) == 0x440a)
4757 snprintf(cfg_file,
sizeof(t4_cfg_file),
UWIRE_CF);
4759 snprintf(cfg_file,
sizeof(t4_cfg_file),
FPGA_CF);
4762 if (strncmp(cfg_file,
DEFAULT_CF,
sizeof(t4_cfg_file)) == 0) {
4764 device_printf(sc->
dev,
4765 "KLD with default config is not available.\n");
4769 cfdata = dcfg->data;
4770 cflen = dcfg->datasize & ~3;
4776 device_printf(sc->
dev,
4777 "unable to look up firmware information for chip %d.\n",
4784 rcfg = firmware_get(s);
4786 device_printf(sc->
dev,
4787 "unable to load module \"%s\" for configuration "
4788 "profile \"%s\".\n", s, cfg_file);
4792 cfdata = rcfg->data;
4793 cflen = rcfg->datasize & ~3;
4797 device_printf(sc->
dev,
4798 "config file too long (%d, max allowed is %d).\n",
4806 device_printf(sc->
dev,
4807 "%s: addr (%d/0x%x) or len %d is not valid: %d.\n",
4808 __func__, mtype, moff, cflen, rc);
4815 firmware_put(rcfg, FIRMWARE_UNLOAD);
4832#define FW_PARAM_DEV(param) \
4833 (V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) | \
4834 V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_##param))
4835#define FW_PARAM_PFVF(param) \
4836 (V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_PFVF) | \
4837 V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_PFVF_##param))
4854 device_printf(sc->
dev,
"firmware reset failed: %d.\n", rc);
4858 bzero(&caps,
sizeof(caps));
4861 if (strncmp(cfg_file,
BUILTIN_CF,
sizeof(t4_cfg_file)) == 0) {
4865 }
else if (strncmp(cfg_file,
FLASH_CF,
sizeof(t4_cfg_file)) == 0) {
4880 device_printf(sc->
dev,
4881 "failed to query config file location: %d.\n", rc);
4893 device_printf(sc->
dev,
4894 "failed to upload config file to card: %d.\n", rc);
4900 device_printf(sc->
dev,
"failed to pre-process config file: %d "
4901 "(mtype %d, moff 0x%x).\n", rc, mtype, moff);
4908 device_printf(sc->
dev,
4909 "WARNING: config file checksum mismatch: %08x %08x\n",
4919#define LIMIT_CAPS(x) do { \
4920 caps.x##caps &= htobe16(caps_allowed->x##caps); \
4951 device_printf(sc->
dev,
4952 "failed to process config file: %d.\n", rc);
4962 device_printf(sc->
dev,
"fw_initialize failed: %d.\n", rc);
4975 char cfg_file[
sizeof(t4_cfg_file)];
4983#define COPY_CAPS(x) do { \
4984 caps_allowed.x##caps = t4_##x##caps_allowed; \
4997 snprintf(cfg_file,
sizeof(cfg_file),
"%s", t4_cfg_file);
5000 if (rc != 0 && fallback) {
5001 device_printf(sc->
dev,
5002 "failed (%d) to configure card with \"%s\" profile, "
5003 "will fall back to a basic configuration and retry.\n",
5005 snprintf(cfg_file,
sizeof(cfg_file),
"%s",
BUILTIN_CF);
5023 uint32_t param[2], val[2];
5055 device_printf(sc->
dev,
5056 "failed to query parameters (pre_init): %d.\n", rc);
5069 device_printf(sc->
dev,
5070 "failed to get devlog parameters: %d.\n", rc);
5084 uint32_t param, val;
5096 device_printf(sc->
dev,
5097 "failed to enable high priority filters :%d.\n",
5106 if (rc == 0 && val == 1)
5122 uint32_t param[7], val[7];
5136 device_printf(sc->
dev,
5137 "failed to query parameters (post_init): %d.\n", rc);
5143 if ((
int)val[3] > (
int)val[2]) {
5151 (
"%s: L2 table size (%u) larger than expected (%u)",
5159 device_printf(sc->
dev,
5160 "failed to query parameters (post_init2): %d.\n", rc);
5177 device_printf(sc->
dev,
5178 "failed to query hpfilter parameters: %d.\n", rc);
5181 if ((
int)val[1] > (
int)val[0]) {
5198 device_printf(sc->
dev,
5199 "failed to query rawf parameters: %d.\n", rc);
5202 if ((
int)val[1] > (
int)val[0]) {
5204 sc->
nrawf = val[1] - val[0] + 1;
5271 MPASS(val[0] > 0 && val[0] < 256);
5277 bzero(&caps,
sizeof(caps));
5283 device_printf(sc->
dev,
5284 "failed to get card capabilities: %d.\n", rc);
5288#define READ_CAPS(x) do { \
5289 sc->x = htobe16(caps.x); \
5309 device_printf(sc->
dev,
5310 "failed to query HASHFILTER parameters: %d.\n", rc);
5327 device_printf(sc->
dev,
5328 "failed to query NIC parameters: %d.\n", rc);
5331 if ((
int)val[1] > (
int)val[0]) {
5349 device_printf(sc->
dev,
5350 "failed to query TOE parameters: %d.\n", rc);
5359 if ((
int)val[2] > (
int)val[1]) {
5388 device_printf(sc->
dev,
5389 "failed to query RDMA parameters(1): %d.\n", rc);
5407 device_printf(sc->
dev,
5408 "failed to query RDMA parameters(2): %d.\n", rc);
5424 device_printf(sc->
dev,
5425 "failed to query RDMA parameters(3): %d.\n", rc);
5438 device_printf(sc->
dev,
5439 "failed to query iSCSI parameters: %d.\n", rc);
5450 device_printf(sc->
dev,
5451 "failed to query TLS parameters: %d.\n", rc);
5483 tstamp = tcp_ts_getticks();
5486 callout_schedule_sbt(&sc->
ktls_tick, SBT_1MS, 0, C_HARDCLOCK);
5490t4_config_kern_tls(
struct adapter *sc,
bool enable)
5500 CH_ERR(sc,
"failed to %s NIC TLS: %d\n",
5501 enable ?
"enable" :
"disable", rc);
5510 sc->
flags &= ~KERN_TLS_ON;
5521 uint32_t mask, param, val;
5552 if (t4_drop_ip_fragments != 0) {
5557 if (t4_drop_pkts_with_l2_errors != 0)
5559 if (t4_drop_pkts_with_l3_errors != 0) {
5563 if (t4_drop_pkts_with_l4_errors != 0) {
5577 if (t4_toe_keepalive_idle != 0) {
5583 if (t4_toe_keepalive_interval != 0) {
5589 if (t4_toe_keepalive_count != 0) {
5596 if (t4_toe_rexmt_min != 0) {
5602 if (t4_toe_rexmt_max != 0) {
5608 if (t4_toe_rexmt_count != 0) {
5615 for (i = 0; i < nitems(t4_toe_rexmt_backoff); i++) {
5616 if (t4_toe_rexmt_backoff[i] != -1) {
5618 shift = (i & 3) << 3;
5639 if (t4_kern_tls != 0)
5640 t4_config_kern_tls(sc,
true);
5656 snprintf(buf,
sizeof(buf),
"Chelsio %s", p->
vpd.
id);
5658 device_set_desc_copy(sc->
dev, buf);
5665 ifmedia_add(ifm, m, 0, NULL);
5666 ifmedia_add(ifm, m | IFM_ETH_TXPAUSE, 0, NULL);
5667 ifmedia_add(ifm, m | IFM_ETH_RXPAUSE, 0, NULL);
5668 ifmedia_add(ifm, m | IFM_ETH_TXPAUSE | IFM_ETH_RXPAUSE, 0, NULL);
5680 struct ifmedia *ifm;
5688 if (ifm->ifm_cur != NULL &&
5689 IFM_SUBTYPE(ifm->ifm_cur->ifm_media) == IFM_NONE)
5695 ifmedia_set(ifm, IFM_ETHER | IFM_AUTO);
5698 mword = IFM_ETHER | IFM_FDX;
5700 mword |= IFM_ETH_TXPAUSE;
5702 mword |= IFM_ETH_RXPAUSE;
5708 ifmedia_set(ifm, mword);
5736 int unknown, mword, bit;
5738 struct ifmedia *ifm;
5749 ifmedia_removeall(ifm);
5752 if (__predict_false(
ss == 0)) {
5755 MPASS(LIST_EMPTY(&ifm->ifm_list));
5756 ifmedia_add(ifm, IFM_ETHER | IFM_NONE, 0, NULL);
5757 ifmedia_set(ifm, IFM_ETHER | IFM_NONE);
5767 if (mword == IFM_NONE) {
5769 }
else if (mword == IFM_UNKNOWN)
5778 ifmedia_add(ifm, IFM_ETHER | IFM_AUTO, 0, NULL);
5792 MPASS(lc->
pcaps != 0);
5797 if (t4_autoneg == 0)
5799 else if (t4_autoneg == 1)
5809 else if (t4_fec == 0)
5820 if (t4_force_fec < 0)
5822 else if (t4_force_fec > 0)
5843 if ((fwspeed & lc->
pcaps) == 0) {
5921 device_printf(pi->
dev,
"l1cfg failed: %d\n", rc);
5938#define FW_MAC_EXACT_CHUNK 7
5959 ctx->mcaddr[
ctx->i] = LLADDR(sdl);
5960 MPASS(ETHER_IS_MULTICAST(
ctx->mcaddr[
ctx->i]));
5965 ctx->i,
ctx->mcaddr, NULL, &
ctx->hash, 0);
5969 for (j = 0; j <
ctx->i; j++) {
5971 "failed to add mc address"
5973 "%02x:%02x:%02x rc=%d\n",
5974 ctx->mcaddr[j][0],
ctx->mcaddr[j][1],
5975 ctx->mcaddr[j][2],
ctx->mcaddr[j][3],
5976 ctx->mcaddr[j][4],
ctx->mcaddr[j][5],
5999 int mtu = -1, promisc = -1, allmulti = -1, vlanex = -1;
6000 uint8_t match_all_mac[ETHER_ADDR_LEN] = {0};
6003 KASSERT(
flags, (
"%s: not told what to update.", __func__));
6009 promisc =
ifp->if_flags & IFF_PROMISC ? 1 : 0;
6012 allmulti =
ifp->if_flags & IFF_ALLMULTI ? 1 : 0;
6015 vlanex =
ifp->if_capenable & IFCAP_VLAN_HWTAGGING ? 1 : 0;
6019 allmulti, 1, vlanex,
false);
6021 if_printf(
ifp,
"set_rxmode (%x) failed: %d\n",
flags,
6028 uint8_t ucaddr[ETHER_ADDR_LEN];
6030 bcopy(IF_LLADDR(
ifp), ucaddr,
sizeof(ucaddr));
6035 if_printf(
ifp,
"change_mac failed: %d\n", rc);
6044 struct epoch_tracker et;
6059 NET_EPOCH_ENTER(et);
6072 for (j = 0; j < ctx.
i; j++) {
6074 "failed to add mcast address"
6076 "%02x:%02x:%02x rc=%d\n",
6090 if_printf(
ifp,
"failed to set mcast address hash: %d\n",
6105 if_printf(
ifp,
"failed to add VXLAN TCAM entry: %d.\n",
6129 WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
6130 "begin_synchronized_op");
6156 if (mtx_sleep(&sc->
flags, &sc->
sc_lock, pri, wmesg, 0)) {
6162 KASSERT(!
IS_BUSY(sc), (
"%s: controller busy.", __func__));
6212 KASSERT(
IS_BUSY(sc), (
"%s: controller not busy.", __func__));
6223 struct ifnet *
ifp = vi->
ifp;
6229 if (
ifp->if_drv_flags & IFF_DRV_RUNNING)
6252 if_printf(
ifp,
"enable_vi failed: %d\n", rc);
6281 ifp->if_drv_flags |= IFF_DRV_RUNNING;
6307 struct ifnet *
ifp = vi->
ifp;
6314 if (__predict_false(
ifp->if_drv_flags & IFF_DRV_RUNNING)) {
6315 KASSERT(0, (
"uninited VI is running"));
6316 if_printf(
ifp,
"uninited VI with running ifnet. "
6317 "vi->flags 0x%016lx, if_flags 0x%08x, "
6318 "if_drv_flags 0x%08x\n", vi->
flags,
ifp->if_flags,
6333 if_printf(
ifp,
"disable_vi failed: %d\n", rc);
6344 callout_stop(&vi->
tick);
6348 if (!(
ifp->if_drv_flags & IFF_DRV_RUNNING)) {
6352 ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
6375 int rc,
rid, p, q, v;
6389 int nbuckets = rss_getnumbuckets();
6403 (
"%s: too few intr.", __func__));
6406 (
"%s: too few intr.", __func__));
6436 for (q = 0; q < n; q++) {
6437 snprintf(s,
sizeof(s),
"%x%c%x", p,
6445 if (irq->nm_rxq != NULL &&
6449 t4_nm_intr, irq->nm_rxq, s);
6451 if (irq->nm_rxq != NULL &&
6455 t4_vi_intr, irq, s);
6458 if (irq->rxq != NULL &&
6459 irq->nm_rxq == NULL) {
6468 bus_bind_intr(sc->
dev, irq->res,
6469 rss_getcpu(q % nbuckets));
6478 snprintf(s,
sizeof(s),
"%x%c%x", p,
6485 bus_bind_intr(sc->
dev, irq->res,
6486 rss_getcpu(q % nbuckets));
6495 snprintf(s,
sizeof(s),
"%x%c%x", p,
'A' + v, q);
6517 uint32_t raw_rss_key[RSS_KEYSIZE /
sizeof(uint32_t)];
6518 uint32_t rss_key[RSS_KEYSIZE /
sizeof(uint32_t)];
6522 rss_getkey((
void *)&raw_rss_key[0]);
6523 for (i = 0; i < nitems(rss_key); i++) {
6524 rss_key[i] = htobe32(raw_rss_key[nitems(rss_key) - 1 - i]);
6547 for (i = 0; i < nitems(sc->
tq); i++) {
6548 if (sc->
tq[i] != NULL)
6550 sc->
tq[i] = taskqueue_create(
"t4 taskq", M_NOWAIT,
6551 taskqueue_thread_enqueue, &sc->
tq[i]);
6552 if (sc->
tq[i] == NULL) {
6553 CH_ERR(sc,
"failed to allocate task queue %d\n", i);
6556 taskqueue_start_threads(&sc->
tq[i], 1, PI_NET,
"%s tq%d",
6557 device_get_nameunit(sc->
dev), i);
6575 (
"%s: FULL_INIT_DONE already", __func__));
6596 for (i = 0; i < nitems(sc->
tq) && sc->
tq[i]; i++) {
6597 taskqueue_free(sc->
tq[i]);
6601 sc->
flags &= ~FULL_INIT_DONE;
6605#define SUPPORTED_RSS_HASHTYPES (RSS_HASHTYPE_RSS_IPV4 | \
6606 RSS_HASHTYPE_RSS_TCP_IPV4 | RSS_HASHTYPE_RSS_IPV6 | \
6607 RSS_HASHTYPE_RSS_TCP_IPV6 | RSS_HASHTYPE_RSS_UDP_IPV4 | \
6608 RSS_HASHTYPE_RSS_UDP_IPV6)
6612hashconfig_to_hashen(
int hashconfig)
6616 if (hashconfig & RSS_HASHTYPE_RSS_IPV4)
6618 if (hashconfig & RSS_HASHTYPE_RSS_IPV6)
6620 if (hashconfig & RSS_HASHTYPE_RSS_UDP_IPV4) {
6624 if (hashconfig & RSS_HASHTYPE_RSS_UDP_IPV6) {
6628 if (hashconfig & RSS_HASHTYPE_RSS_TCP_IPV4)
6630 if (hashconfig & RSS_HASHTYPE_RSS_TCP_IPV6)
6638hashen_to_hashconfig(
int hashen)
6652 hashconfig |= RSS_HASHTYPE_RSS_UDP_IPV4;
6654 hashconfig |= RSS_HASHTYPE_RSS_UDP_IPV6;
6657 hashconfig |= RSS_HASHTYPE_RSS_TCP_IPV4;
6659 hashconfig |= RSS_HASHTYPE_RSS_TCP_IPV6;
6661 hashconfig |= RSS_HASHTYPE_RSS_IPV4;
6663 hashconfig |= RSS_HASHTYPE_RSS_IPV6;
6665 return (hashconfig);
6679 int nbuckets = rss_getnumbuckets();
6680 int hashconfig = rss_gethashconfig();
6697 CH_ALERT(vi,
"nrxq (%d) > hw RSS table size (%d); "
6698 "some queues will never receive traffic.\n", vi->
nrxq,
6701 CH_ALERT(vi,
"nrxq (%d), hw RSS table size (%d); "
6702 "expect uneven traffic distribution.\n", vi->
nrxq,
6706 if (vi->
nrxq != nbuckets) {
6707 CH_ALERT(vi,
"nrxq (%d) != kernel RSS buckets (%d);"
6708 "performance will be impacted.\n", vi->
nrxq, nbuckets);
6711 if (vi->
rss == NULL)
6716 j = rss_get_indirection_to_bucket(i);
6732 CH_ERR(vi,
"rss_config failed: %d\n", rc);
6737 vi->
hashen = hashconfig_to_hashen(hashconfig);
6744 extra = hashen_to_hashconfig(vi->
hashen) ^ hashconfig;
6752 extra &= SUPPORTED_RSS_HASHTYPES;
6753 MPASS((extra & hashconfig) == 0);
6757 "global RSS config (0x%x) cannot be accommodated.\n",
6760 if (extra & RSS_HASHTYPE_RSS_IPV4)
6761 CH_ALERT(vi,
"IPv4 2-tuple hashing forced on.\n");
6762 if (extra & RSS_HASHTYPE_RSS_TCP_IPV4)
6763 CH_ALERT(vi,
"TCP/IPv4 4-tuple hashing forced on.\n");
6764 if (extra & RSS_HASHTYPE_RSS_IPV6)
6765 CH_ALERT(vi,
"IPv6 2-tuple hashing forced on.\n");
6766 if (extra & RSS_HASHTYPE_RSS_TCP_IPV6)
6767 CH_ALERT(vi,
"TCP/IPv6 4-tuple hashing forced on.\n");
6768 if (extra & RSS_HASHTYPE_RSS_UDP_IPV4)
6769 CH_ALERT(vi,
"UDP/IPv4 4-tuple hashing forced on.\n");
6770 if (extra & RSS_HASHTYPE_RSS_UDP_IPV6)
6771 CH_ALERT(vi,
"UDP/IPv6 4-tuple hashing forced on.\n");
6781 CH_ERR(vi,
"rss hash/defaultq config failed: %d\n", rc);
6795 (
"%s: VI_INIT_DONE already", __func__));
6815 free(vi->
rss, M_CXGBE);
6816 free(vi->
nm_rss, M_CXGBE);
6820 vi->
flags &= ~VI_INIT_DONE;
6835 pause(
"rquiesce", 1);
6846 pause(
"equiesce", 1);
6848 pause(
"dquiesce", 1);
6856 struct mbuf *m, *nextpkt;
6860 for (
m = txsd->
m;
m != NULL;
m = nextpkt) {
6861 nextpkt =
m->m_nextpkt;
6862 m->m_nextpkt = NULL;
6897 (
"%s: still starving", __func__));
6920#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
6931#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
6950 driver_intr_t *handler,
void *arg,
char *name)
6955 irq->res = bus_alloc_resource_any(sc->
dev, SYS_RES_IRQ, &irq->rid,
6956 RF_SHAREABLE | RF_ACTIVE);
6957 if (irq->res == NULL) {
6958 device_printf(sc->
dev,
6959 "failed to allocate IRQ for rid %d, name %s.\n",
rid, name);
6963 rc = bus_setup_intr(sc->
dev, irq->res, INTR_MPSAFE | INTR_TYPE_NET,
6964 NULL, handler, arg, &irq->tag);
6966 device_printf(sc->
dev,
6967 "failed to setup interrupt for rid %d, name %s: %d\n",
6970 bus_describe_intr(sc->
dev, irq->res, irq->tag,
"%s", name);
6979 bus_teardown_intr(sc->
dev, irq->res, irq->tag);
6981 bus_release_resource(sc->
dev, SYS_RES_IRQ, irq->rid, irq->res);
6983 bzero(irq,
sizeof(*irq));
6996#define A_PL_INDIR_CMD 0x1f8
6998#define S_PL_AUTOINC 31
6999#define M_PL_AUTOINC 0x1U
7000#define V_PL_AUTOINC(x) ((x) << S_PL_AUTOINC)
7001#define G_PL_AUTOINC(x) (((x) >> S_PL_AUTOINC) & M_PL_AUTOINC)
7004#define M_PL_VFID 0xffU
7005#define V_PL_VFID(x) ((x) << S_PL_VFID)
7006#define G_PL_VFID(x) (((x) >> S_PL_VFID) & M_PL_VFID)
7009#define M_PL_ADDR 0xfffffU
7010#define V_PL_ADDR(x) ((x) << S_PL_ADDR)
7011#define G_PL_ADDR(x) (((x) >> S_PL_ADDR) & M_PL_ADDR)
7013#define A_PL_INDIR_DATA 0x1fc
7024 mtx_assert(&sc->
reg_lock, MA_OWNED);
7030 return (((uint64_t)stats[1]) << 32 | stats[0]);
7037#define GET_STAT(name) \
7038 read_vf_stat(sc, vin, A_MPS_VF_STAT_##name##_L)
7042 stats->tx_bcast_bytes =
GET_STAT(TX_VF_BCAST_BYTES);
7043 stats->tx_bcast_frames =
GET_STAT(TX_VF_BCAST_FRAMES);
7044 stats->tx_mcast_bytes =
GET_STAT(TX_VF_MCAST_BYTES);
7045 stats->tx_mcast_frames =
GET_STAT(TX_VF_MCAST_FRAMES);
7046 stats->tx_ucast_bytes =
GET_STAT(TX_VF_UCAST_BYTES);
7047 stats->tx_ucast_frames =
GET_STAT(TX_VF_UCAST_FRAMES);
7048 stats->tx_drop_frames =
GET_STAT(TX_VF_DROP_FRAMES);
7049 stats->tx_offload_bytes =
GET_STAT(TX_VF_OFFLOAD_BYTES);
7050 stats->tx_offload_frames =
GET_STAT(TX_VF_OFFLOAD_FRAMES);
7051 stats->rx_bcast_bytes =
GET_STAT(RX_VF_BCAST_BYTES);
7052 stats->rx_bcast_frames =
GET_STAT(RX_VF_BCAST_FRAMES);
7053 stats->rx_mcast_bytes =
GET_STAT(RX_VF_MCAST_BYTES);
7054 stats->rx_mcast_frames =
GET_STAT(RX_VF_MCAST_FRAMES);
7055 stats->rx_ucast_bytes =
GET_STAT(RX_VF_UCAST_BYTES);
7056 stats->rx_ucast_frames =
GET_STAT(RX_VF_UCAST_FRAMES);
7057 stats->rx_err_frames =
GET_STAT(RX_VF_ERR_FRAMES);
7080 const struct timeval interval = {0, 250000};
7082 mtx_assert(&vi->
tick_mtx, MA_OWNED);
7088 timevalsub(&tv, &interval);
7099 u_int i, v, tnl_cong_drops, chan_map;
7101 const struct timeval interval = {0, 250000};
7105 mtx_assert(&vi->
tick_mtx, MA_OWNED);
7111 timevalsub(&tv, &interval);
7126 tnl_cong_drops += v;
7139 mtx_assert(&vi->
tick_mtx, MA_OWNED);
7142 callout_schedule(&vi->
tick, hz);
7150 mtx_assert(&vi->
tick_mtx, MA_OWNED);
7153 callout_schedule(&vi->
tick, hz);
7160 "\20\001IPMI\002NCSI",
7161 "\20\001PPP\002QFC\003DCBX",
7162 "\20\001INGRESS\002EGRESS",
7163 "\20\001NIC\002VM\003IDS\004UM\005UM_ISGL"
7164 "\006HASHFILTER\007ETHOFLD",
7166 "\20\001RDDP\002RDMAC",
7167 "\20\001INITIATOR_PDU\002TARGET_PDU"
7168 "\003INITIATOR_CNXOFLD\004TARGET_CNXOFLD"
7169 "\005INITIATOR_SSNOFLD\006TARGET_SSNOFLD"
7171 "\010INITIATOR_CMDOFLD\011TARGET_CMDOFLD",
7172 "\20\001LOOKASIDE\002TLSKEYS\003IPSEC_INLINE"
7174 "\20\001INITIATOR\002TARGET\003CTRL_OFLD"
7175 "\004PO_INITIATOR\005PO_TARGET",
7181 struct sysctl_ctx_list *ctx = &sc->
ctx;
7182 struct sysctl_oid *oid;
7183 struct sysctl_oid_list *children, *c0;
7184 static char *
doorbells = {
"\20\1UDB\2WCWR\3UDBWC\4KDB"};
7189 oid = device_get_sysctl_tree(sc->
dev);
7190 c0 = children = SYSCTL_CHILDREN(oid);
7193 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"do_rx_copy", CTLFLAG_RW,
7196 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"nports", CTLFLAG_RD, NULL,
7199 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"doorbells",
7200 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
doorbells,
7202 "available doorbells");
7204 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"core_clock", CTLFLAG_RD, NULL,
7207 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"holdoff_timers",
7208 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
7212 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"holdoff_pkt_counts",
7213 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
7220 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"lro_timeout", CTLFLAG_RW,
7221 &sc->
lro_timeout, 0,
"lro inactive-flush timeout (in us)");
7223 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"dflags", CTLFLAG_RW,
7224 &sc->
debug_flags, 0,
"flags to enable runtime debugging");
7226 SYSCTL_ADD_STRING(ctx, children, OID_AUTO,
"tp_version",
7227 CTLFLAG_RD, sc->
tp_version, 0,
"TP microcode version");
7229 SYSCTL_ADD_STRING(ctx, children, OID_AUTO,
"firmware_version",
7230 CTLFLAG_RD, sc->
fw_version, 0,
"firmware version");
7235 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"hw_revision", CTLFLAG_RD,
7236 NULL,
chip_rev(sc),
"chip hardware revision");
7238 SYSCTL_ADD_STRING(ctx, children, OID_AUTO,
"sn",
7239 CTLFLAG_RD, sc->
params.
vpd.
sn, 0,
"serial number");
7241 SYSCTL_ADD_STRING(ctx, children, OID_AUTO,
"pn",
7244 SYSCTL_ADD_STRING(ctx, children, OID_AUTO,
"ec",
7245 CTLFLAG_RD, sc->
params.
vpd.
ec, 0,
"engineering change");
7247 SYSCTL_ADD_STRING(ctx, children, OID_AUTO,
"md_version",
7248 CTLFLAG_RD, sc->
params.
vpd.
md, 0,
"manufacturing diags version");
7250 SYSCTL_ADD_STRING(ctx, children, OID_AUTO,
"na",
7251 CTLFLAG_RD, sc->
params.
vpd.
na, 0,
"network address");
7253 SYSCTL_ADD_STRING(ctx, children, OID_AUTO,
"er_version", CTLFLAG_RD,
7256 SYSCTL_ADD_STRING(ctx, children, OID_AUTO,
"bs_version", CTLFLAG_RD,
7257 sc->
bs_version, 0,
"bootstrap firmware version");
7259 SYSCTL_ADD_UINT(ctx, children, OID_AUTO,
"scfg_version", CTLFLAG_RD,
7262 SYSCTL_ADD_UINT(ctx, children, OID_AUTO,
"vpd_version", CTLFLAG_RD,
7265 SYSCTL_ADD_STRING(ctx, children, OID_AUTO,
"cf",
7266 CTLFLAG_RD, sc->
cfg_file, 0,
"configuration file");
7268 SYSCTL_ADD_UINT(ctx, children, OID_AUTO,
"cfcsum", CTLFLAG_RD, NULL,
7269 sc->
cfcsum,
"config file checksum");
7271#define SYSCTL_CAP(name, n, text) \
7272 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, #name, \
7273 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, caps_decoder[n], \
7274 (uintptr_t)&sc->name, sysctl_bitfield_16b, "A", \
7275 "available " text " capabilities")
7288 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"nfilters", CTLFLAG_RD,
7291 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"temperature",
7292 CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7294 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"reset_sensor",
7295 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0,
7298 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"loadavg",
7299 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7301 "microprocessor load averages (debug firmwares only)");
7303 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"core_vdd",
7304 CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
sysctl_vdd,
7305 "I",
"core Vdd (in mV)");
7307 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"local_cpus",
7308 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, LOCAL_CPUS,
7311 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"intr_cpus",
7312 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, INTR_CPUS,
7313 sysctl_cpus,
"A",
"preferred CPUs for interrupts");
7315 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"swintr", CTLFLAG_RW,
7316 &sc->
swintr, 0,
"software triggered interrupts");
7318 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"reset",
7320 "1 = reset adapter, 0 = zero reset counter");
7325 oid = SYSCTL_ADD_NODE(ctx, c0, OID_AUTO,
"misc",
7326 CTLFLAG_RD | CTLFLAG_SKIP | CTLFLAG_MPSAFE, NULL,
7327 "logs and miscellaneous information");
7328 children = SYSCTL_CHILDREN(oid);
7330 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cctrl",
7331 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7334 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_ibq_tp0",
7335 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7338 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_ibq_tp1",
7339 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 1,
7342 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_ibq_ulp",
7343 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 2,
7346 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_ibq_sge0",
7347 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 3,
7350 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_ibq_sge1",
7351 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 4,
7354 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_ibq_ncsi",
7355 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 5,
7358 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_la",
7359 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7362 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_ma_la",
7363 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7366 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_obq_ulp0",
7367 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7370 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_obq_ulp1",
7371 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7374 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_obq_ulp2",
7375 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7378 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_obq_ulp3",
7379 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7382 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_obq_sge",
7383 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7386 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_obq_ncsi",
7387 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7391 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_obq_sge0_rx",
7392 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7394 "CIM OBQ 6 (SGE0-RX)");
7396 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_obq_sge1_rx",
7397 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7399 "CIM OBQ 7 (SGE1-RX)");
7402 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_pif_la",
7403 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7406 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cim_qcfg",
7407 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7410 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"cpl_stats",
7411 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7414 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"ddp_stats",
7415 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7418 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tid_stats",
7419 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7422 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"devlog",
7423 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7426 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"fcoe_stats",
7427 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7430 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"hw_sched",
7431 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7434 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"l2t",
7435 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7438 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"smt",
7439 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7440 sysctl_smt,
"A",
"hardware source MAC table");
7443 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"clip",
7444 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7448 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"lb_stats",
7449 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7452 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"meminfo",
7453 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7456 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"mps_tcam",
7457 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7459 "A",
"MPS TCAM entries");
7461 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"path_mtus",
7462 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7465 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"pm_stats",
7466 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7469 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"rdma_stats",
7470 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7473 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tcp_stats",
7474 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7477 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tids",
7478 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7481 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tp_err_stats",
7482 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7485 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tnl_stats",
7486 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7489 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tp_la_mask",
7490 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0,
7493 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tp_la",
7494 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7497 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tx_rate",
7498 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7501 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"ulprx_la",
7502 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7506 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"wcwr_stats",
7507 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7516 oid = SYSCTL_ADD_NODE(ctx, c0, OID_AUTO,
"tls",
7517 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"KERN_TLS parameters");
7518 children = SYSCTL_CHILDREN(oid);
7520 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"inline_keys",
7522 "keys in work requests (1) or attempt to store TLS keys "
7524 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"combo_wrs",
7526 "TCB field updates with TLS record work requests.");
7538 oid = SYSCTL_ADD_NODE(ctx, c0, OID_AUTO,
"toe",
7539 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"TOE parameters");
7540 children = SYSCTL_CHILDREN(oid);
7543 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"cong_algorithm",
7545 "(-1 = default, 0 = reno, 1 = tahoe, 2 = newreno, "
7549 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"sndbuf", CTLFLAG_RW,
7550 &sc->
tt.
sndbuf, 0,
"hardware send buffer");
7553 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"ddp",
7554 CTLFLAG_RW | CTLFLAG_SKIP, &sc->
tt.
ddp, 0,
"");
7555 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"rx_zcopy", CTLFLAG_RW,
7556 &sc->
tt.
ddp, 0,
"Enable zero-copy aio_read(2)");
7559 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"rx_coalesce",
7563 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tls", CTLTYPE_INT |
7564 CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0, sysctl_tls,
"I",
7565 "Inline TLS allowed");
7567 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tls_rx_ports",
7568 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0,
7569 sysctl_tls_rx_ports,
"I",
7570 "TCP ports that use inline TLS+TOE RX");
7573 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tls_rx_timeout",
7574 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0,
7575 sysctl_tls_rx_timeout,
"I",
7576 "Timeout in seconds to downgrade TLS sockets to plain TOE");
7579 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"tx_align",
7580 CTLFLAG_RW, &sc->
tt.
tx_align, 0,
"chop and align payload");
7583 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"tx_zcopy",
7585 "Enable zero-copy aio_write(2)");
7588 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
7589 "cop_managed_offloading", CTLFLAG_RW,
7591 "COP (Connection Offload Policy) controls all TOE offload");
7594 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"autorcvbuf_inc",
7596 "autorcvbuf increment");
7599 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
7600 "update_hc_on_pmtu_change", CTLFLAG_RW,
7602 "Update hostcache entry if the PMTU changes");
7605 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"iso", CTLFLAG_RW,
7606 &sc->
tt.
iso, 0,
"Enable iSCSI segmentation offload");
7608 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"timer_tick",
7609 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7610 sysctl_tp_tick,
"A",
"TP timer tick (us)");
7612 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"timestamp_tick",
7613 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 1,
7614 sysctl_tp_tick,
"A",
"TCP timestamp tick (us)");
7616 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"dack_tick",
7617 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 2,
7618 sysctl_tp_tick,
"A",
"DACK tick (us)");
7620 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"dack_timer",
7621 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
7622 sysctl_tp_dack_timer,
"IU",
"DACK timer (us)");
7624 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"rexmt_min",
7625 CTLTYPE_ULONG | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7627 "Minimum retransmit interval (us)");
7629 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"rexmt_max",
7630 CTLTYPE_ULONG | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7632 "Maximum retransmit interval (us)");
7634 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"persist_min",
7635 CTLTYPE_ULONG | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7637 "Persist timer min (us)");
7639 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"persist_max",
7640 CTLTYPE_ULONG | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7642 "Persist timer max (us)");
7644 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"keepalive_idle",
7645 CTLTYPE_ULONG | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7647 "Keepalive idle timer (us)");
7649 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"keepalive_interval",
7650 CTLTYPE_ULONG | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7652 "Keepalive interval timer (us)");
7654 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"initial_srtt",
7655 CTLTYPE_ULONG | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7658 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"finwait2_timer",
7659 CTLTYPE_ULONG | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7661 "FINWAIT2 timer (us)");
7663 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"syn_rexmt_count",
7664 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7666 "Number of SYN retransmissions before abort");
7668 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"rexmt_count",
7669 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7671 "Number of retransmissions before abort");
7673 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"keepalive_count",
7674 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7676 "Number of keepalive probes before abort");
7678 oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO,
"rexmt_backoff",
7679 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
7680 "TOE retransmit backoffs");
7681 children = SYSCTL_CHILDREN(oid);
7682 for (i = 0; i < 16; i++) {
7683 snprintf(s,
sizeof(s),
"%u", i);
7684 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, s,
7685 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7686 i, sysctl_tp_backoff,
"IU",
7687 "TOE retransmit backoff");
7696 struct sysctl_ctx_list *ctx = &vi->
ctx;
7697 struct sysctl_oid *oid;
7698 struct sysctl_oid_list *children;
7703 oid = device_get_sysctl_tree(vi->
dev);
7704 children = SYSCTL_CHILDREN(oid);
7706 SYSCTL_ADD_UINT(ctx, children, OID_AUTO,
"viid", CTLFLAG_RD, NULL,
7707 vi->
viid,
"VI identifer");
7708 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"nrxq", CTLFLAG_RD,
7709 &vi->
nrxq, 0,
"# of rx queues");
7710 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"ntxq", CTLFLAG_RD,
7711 &vi->
ntxq, 0,
"# of tx queues");
7712 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"first_rxq", CTLFLAG_RD,
7713 &vi->
first_rxq, 0,
"index of first rx queue");
7714 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"first_txq", CTLFLAG_RD,
7715 &vi->
first_txq, 0,
"index of first tx queue");
7716 SYSCTL_ADD_UINT(ctx, children, OID_AUTO,
"rss_base", CTLFLAG_RD, NULL,
7717 vi->
rss_base,
"start of RSS indirection table");
7718 SYSCTL_ADD_UINT(ctx, children, OID_AUTO,
"rss_size", CTLFLAG_RD, NULL,
7719 vi->
rss_size,
"size of RSS indirection table");
7722 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"rsrv_noflowq",
7723 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0,
7725 "Reserve queue 0 for non-flowid packets");
7730 SYSCTL_ADD_UINT(ctx, children, OID_AUTO,
"tx_vm_wr", CTLFLAG_RD,
7731 NULL, 1,
"use VM work requests for transmit");
7733 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"tx_vm_wr",
7734 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0,
7740 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"nofldrxq", CTLFLAG_RD,
7742 "# of rx queues for offloaded TCP connections");
7743 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"first_ofld_rxq",
7745 "index of first TOE rx queue");
7746 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"holdoff_tmr_idx_ofld",
7747 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0,
7748 sysctl_holdoff_tmr_idx_ofld,
"I",
7749 "holdoff timer index for TOE queues");
7750 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"holdoff_pktc_idx_ofld",
7751 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0,
7752 sysctl_holdoff_pktc_idx_ofld,
"I",
7753 "holdoff packet counter index for TOE queues");
7756#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
7758 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"nofldtxq", CTLFLAG_RD,
7760 "# of tx queues for TOE/ETHOFLD");
7761 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"first_ofld_txq",
7763 "index of first TOE/ETHOFLD tx queue");
7768 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"nnmrxq", CTLFLAG_RD,
7769 &vi->
nnmrxq, 0,
"# of netmap rx queues");
7770 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"nnmtxq", CTLFLAG_RD,
7771 &vi->
nnmtxq, 0,
"# of netmap tx queues");
7772 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"first_nm_rxq",
7774 "index of first netmap rx queue");
7775 SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"first_nm_txq",
7777 "index of first netmap tx queue");
7781 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"holdoff_tmr_idx",
7782 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0,
7784 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"holdoff_pktc_idx",
7785 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0,
7788 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"qsize_rxq",
7789 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0,
7791 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
"qsize_txq",
7792 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0,
7799 struct sysctl_ctx_list *ctx = &pi->
ctx;
7800 struct sysctl_oid *oid;
7801 struct sysctl_oid_list *children, *children2;
7805 static char *tc_flags = {
"\20\1USER"};
7810 oid = device_get_sysctl_tree(pi->
dev);
7811 children = SYSCTL_CHILDREN(oid);
7813 SYSCTL_ADD_PROC(
ctx, children, OID_AUTO,
"linkdnrc",
7814 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, pi, 0,
7817 SYSCTL_ADD_PROC(
ctx, children, OID_AUTO,
"temperature",
7818 CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, pi, 0,
7820 SYSCTL_ADD_PROC(
ctx, children, OID_AUTO,
"fw_version",
7821 CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, pi, 1,
7825 SYSCTL_ADD_PROC(
ctx, children, OID_AUTO,
"pause_settings",
7826 CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_MPSAFE, pi, 0,
7828 "PAUSE settings (bit 0 = rx_pause, 1 = tx_pause, 2 = pause_autoneg)");
7829 SYSCTL_ADD_PROC(
ctx, children, OID_AUTO,
"link_fec",
7831 "FEC in use on the link");
7832 SYSCTL_ADD_PROC(
ctx, children, OID_AUTO,
"requested_fec",
7833 CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_MPSAFE, pi, 0,
7835 "FECs to use (bit 0 = RS, 1 = FC, 2 = none, 5 = auto, 6 = module)");
7836 SYSCTL_ADD_PROC(
ctx, children, OID_AUTO,
"module_fec",
7838 "FEC recommended by the cable/transceiver");
7839 SYSCTL_ADD_PROC(
ctx, children, OID_AUTO,
"autoneg",
7840 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, pi, 0,
7842 "autonegotiation (-1 = not supported)");
7843 SYSCTL_ADD_PROC(
ctx, children, OID_AUTO,
"force_fec",
7844 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, pi, 0,
7847 SYSCTL_ADD_INT(
ctx, children, OID_AUTO,
"rcaps", CTLFLAG_RD,
7849 SYSCTL_ADD_INT(
ctx, children, OID_AUTO,
"pcaps", CTLFLAG_RD,
7851 SYSCTL_ADD_INT(
ctx, children, OID_AUTO,
"acaps", CTLFLAG_RD,
7853 SYSCTL_ADD_INT(
ctx, children, OID_AUTO,
"lpacaps", CTLFLAG_RD,
7856 SYSCTL_ADD_INT(
ctx, children, OID_AUTO,
"max_speed", CTLFLAG_RD, NULL,
7858 SYSCTL_ADD_INT(
ctx, children, OID_AUTO,
"mps_bg_map", CTLFLAG_RD, NULL,
7860 SYSCTL_ADD_INT(
ctx, children, OID_AUTO,
"rx_e_chan_map", CTLFLAG_RD,
7862 SYSCTL_ADD_INT(
ctx, children, OID_AUTO,
"rx_c_chan", CTLFLAG_RD, NULL,
7871 oid = SYSCTL_ADD_NODE(
ctx, children, OID_AUTO,
"tc",
7872 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
7873 "Tx scheduler traffic classes (cl_rl)");
7874 children2 = SYSCTL_CHILDREN(oid);
7875 SYSCTL_ADD_UINT(
ctx, children2, OID_AUTO,
"pktsize",
7877 "pktsize for per-flow cl-rl (0 means up to the driver )");
7878 SYSCTL_ADD_UINT(
ctx, children2, OID_AUTO,
"burstsize",
7880 "burstsize for per-flow cl-rl (0 means up to the driver)");
7884 snprintf(name,
sizeof(name),
"%d", i);
7885 children2 = SYSCTL_CHILDREN(SYSCTL_ADD_NODE(ctx,
7886 SYSCTL_CHILDREN(oid), OID_AUTO, name,
7887 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"traffic class"));
7888 SYSCTL_ADD_UINT(ctx, children2, OID_AUTO,
"state",
7889 CTLFLAG_RD, &tc->
state, 0,
"current state");
7890 SYSCTL_ADD_PROC(ctx, children2, OID_AUTO,
"flags",
7891 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, tc_flags,
7893 SYSCTL_ADD_UINT(ctx, children2, OID_AUTO,
"refcount",
7894 CTLFLAG_RD, &tc->
refcount, 0,
"references to this class");
7895 SYSCTL_ADD_PROC(ctx, children2, OID_AUTO,
"params",
7896 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc,
7898 "traffic class parameters");
7904 oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO,
"stats",
7905 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"port statistics");
7906 children = SYSCTL_CHILDREN(oid);
7907 SYSCTL_ADD_UINT(ctx, children, OID_AUTO,
"tx_parse_error", CTLFLAG_RD,
7909 "# of tx packets with invalid length or # of segments");
7911#define T4_REGSTAT(name, stat, desc) \
7912 SYSCTL_ADD_OID(ctx, children, OID_AUTO, #name, \
7913 CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, \
7914 (is_t4(sc) ? PORT_REG(pi->tx_chan, A_MPS_PORT_STAT_##stat##_L) : \
7915 T5_PORT_REG(pi->tx_chan, A_MPS_PORT_STAT_##stat##_L)), \
7916 sysctl_handle_t4_reg64, "QU", desc)
7919#define T4_PORTSTAT(name, desc) \
7920 SYSCTL_ADD_UQUAD(ctx, children, OID_AUTO, #name, CTLFLAG_RD, \
7921 &pi->stats.name, desc)
7923 T4_REGSTAT(tx_octets, TX_PORT_BYTES,
"# of octets in good frames");
7924 T4_REGSTAT(tx_frames, TX_PORT_FRAMES,
"total # of good frames");
7925 T4_REGSTAT(tx_bcast_frames, TX_PORT_BCAST,
"# of broadcast frames");
7926 T4_REGSTAT(tx_mcast_frames, TX_PORT_MCAST,
"# of multicast frames");
7927 T4_REGSTAT(tx_ucast_frames, TX_PORT_UCAST,
"# of unicast frames");
7928 T4_REGSTAT(tx_error_frames, TX_PORT_ERROR,
"# of error frames");
7929 T4_REGSTAT(tx_frames_64, TX_PORT_64B,
"# of tx frames in this range");
7930 T4_REGSTAT(tx_frames_65_127, TX_PORT_65B_127B,
"# of tx frames in this range");
7931 T4_REGSTAT(tx_frames_128_255, TX_PORT_128B_255B,
"# of tx frames in this range");
7932 T4_REGSTAT(tx_frames_256_511, TX_PORT_256B_511B,
"# of tx frames in this range");
7933 T4_REGSTAT(tx_frames_512_1023, TX_PORT_512B_1023B,
"# of tx frames in this range");
7934 T4_REGSTAT(tx_frames_1024_1518, TX_PORT_1024B_1518B,
"# of tx frames in this range");
7935 T4_REGSTAT(tx_frames_1519_max, TX_PORT_1519B_MAX,
"# of tx frames in this range");
7936 T4_REGSTAT(tx_drop, TX_PORT_DROP,
"# of dropped tx frames");
7937 T4_REGSTAT(tx_pause, TX_PORT_PAUSE,
"# of pause frames transmitted");
7938 T4_REGSTAT(tx_ppp0, TX_PORT_PPP0,
"# of PPP prio 0 frames transmitted");
7939 T4_REGSTAT(tx_ppp1, TX_PORT_PPP1,
"# of PPP prio 1 frames transmitted");
7940 T4_REGSTAT(tx_ppp2, TX_PORT_PPP2,
"# of PPP prio 2 frames transmitted");
7941 T4_REGSTAT(tx_ppp3, TX_PORT_PPP3,
"# of PPP prio 3 frames transmitted");
7942 T4_REGSTAT(tx_ppp4, TX_PORT_PPP4,
"# of PPP prio 4 frames transmitted");
7943 T4_REGSTAT(tx_ppp5, TX_PORT_PPP5,
"# of PPP prio 5 frames transmitted");
7944 T4_REGSTAT(tx_ppp6, TX_PORT_PPP6,
"# of PPP prio 6 frames transmitted");
7945 T4_REGSTAT(tx_ppp7, TX_PORT_PPP7,
"# of PPP prio 7 frames transmitted");
7947 T4_REGSTAT(rx_octets, RX_PORT_BYTES,
"# of octets in good frames");
7948 T4_REGSTAT(rx_frames, RX_PORT_FRAMES,
"total # of good frames");
7949 T4_REGSTAT(rx_bcast_frames, RX_PORT_BCAST,
"# of broadcast frames");
7950 T4_REGSTAT(rx_mcast_frames, RX_PORT_MCAST,
"# of multicast frames");
7951 T4_REGSTAT(rx_ucast_frames, RX_PORT_UCAST,
"# of unicast frames");
7952 T4_REGSTAT(rx_too_long, RX_PORT_MTU_ERROR,
"# of frames exceeding MTU");
7953 T4_REGSTAT(rx_jabber, RX_PORT_MTU_CRC_ERROR,
"# of jabber frames");
7956 "# of frames received with bad FCS since last link up");
7959 "# of frames received with bad FCS");
7961 T4_REGSTAT(rx_len_err, RX_PORT_LEN_ERROR,
"# of frames received with length error");
7962 T4_REGSTAT(rx_symbol_err, RX_PORT_SYM_ERROR,
"symbol errors");
7963 T4_REGSTAT(rx_runt, RX_PORT_LESS_64B,
"# of short frames received");
7964 T4_REGSTAT(rx_frames_64, RX_PORT_64B,
"# of rx frames in this range");
7965 T4_REGSTAT(rx_frames_65_127, RX_PORT_65B_127B,
"# of rx frames in this range");
7966 T4_REGSTAT(rx_frames_128_255, RX_PORT_128B_255B,
"# of rx frames in this range");
7967 T4_REGSTAT(rx_frames_256_511, RX_PORT_256B_511B,
"# of rx frames in this range");
7968 T4_REGSTAT(rx_frames_512_1023, RX_PORT_512B_1023B,
"# of rx frames in this range");
7969 T4_REGSTAT(rx_frames_1024_1518, RX_PORT_1024B_1518B,
"# of rx frames in this range");
7970 T4_REGSTAT(rx_frames_1519_max, RX_PORT_1519B_MAX,
"# of rx frames in this range");
7971 T4_REGSTAT(rx_pause, RX_PORT_PAUSE,
"# of pause frames received");
7972 T4_REGSTAT(rx_ppp0, RX_PORT_PPP0,
"# of PPP prio 0 frames received");
7973 T4_REGSTAT(rx_ppp1, RX_PORT_PPP1,
"# of PPP prio 1 frames received");
7974 T4_REGSTAT(rx_ppp2, RX_PORT_PPP2,
"# of PPP prio 2 frames received");
7975 T4_REGSTAT(rx_ppp3, RX_PORT_PPP3,
"# of PPP prio 3 frames received");
7976 T4_REGSTAT(rx_ppp4, RX_PORT_PPP4,
"# of PPP prio 4 frames received");
7977 T4_REGSTAT(rx_ppp5, RX_PORT_PPP5,
"# of PPP prio 5 frames received");
7978 T4_REGSTAT(rx_ppp6, RX_PORT_PPP6,
"# of PPP prio 6 frames received");
7979 T4_REGSTAT(rx_ppp7, RX_PORT_PPP7,
"# of PPP prio 7 frames received");
7981 T4_PORTSTAT(rx_ovflow0,
"# drops due to buffer-group 0 overflows");
7982 T4_PORTSTAT(rx_ovflow1,
"# drops due to buffer-group 1 overflows");
7983 T4_PORTSTAT(rx_ovflow2,
"# drops due to buffer-group 2 overflows");
7984 T4_PORTSTAT(rx_ovflow3,
"# drops due to buffer-group 3 overflows");
7985 T4_PORTSTAT(rx_trunc0,
"# of buffer-group 0 truncated packets");
7986 T4_PORTSTAT(rx_trunc1,
"# of buffer-group 1 truncated packets");
7987 T4_PORTSTAT(rx_trunc2,
"# of buffer-group 2 truncated packets");
7988 T4_PORTSTAT(rx_trunc3,
"# of buffer-group 3 truncated packets");
7997 int rc, *i, space = 0;
8000 sbuf_new_for_sysctl(&sb, NULL, 64, req);
8001 for (i = arg1; arg2; arg2 -=
sizeof(int), i++) {
8003 sbuf_printf(&sb,
" ");
8004 sbuf_printf(&sb,
"%d", *i);
8007 rc = sbuf_finish(&sb);
8018 rc = sysctl_wire_old_buffer(req, 0);
8022 sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
8026 sbuf_printf(sb,
"%b", *(uint8_t *)(uintptr_t)arg2, (
char *)arg1);
8027 rc = sbuf_finish(sb);
8039 rc = sysctl_wire_old_buffer(req, 0);
8043 sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
8047 sbuf_printf(sb,
"%b", *(uint16_t *)(uintptr_t)arg2, (
char *)arg1);
8048 rc = sbuf_finish(sb);
8071 op ? 0x20 : 0xc820, &v);
8079 rc = sysctl_handle_int(oidp, &v, 0, req);
8090 rc = sysctl_handle_int(oidp, &val, 0, req);
8091 if (rc != 0 || req->newptr == NULL)
8094 if ((val >= 1) && (vi->
ntxq > 1))
8112 rc = sysctl_handle_int(oidp, &val, 0, req);
8113 if (rc != 0 || req->newptr == NULL)
8116 if (val != 0 && val != 1)
8125 else if (vi->
ifp->if_drv_flags & IFF_DRV_RUNNING) {
8146 vi->
flags &= ~TX_USES_VM_WR;
8172 rc = sysctl_handle_int(oidp, &idx, 0, req);
8173 if (rc != 0 || req->newptr == NULL)
8186#ifdef atomic_store_rel_8
8207 rc = sysctl_handle_int(oidp, &idx, 0, req);
8208 if (rc != 0 || req->newptr == NULL)
8237 rc = sysctl_handle_int(oidp, &qsize, 0, req);
8238 if (rc != 0 || req->newptr == NULL)
8241 if (qsize < 128 || (qsize & 7))
8267 rc = sysctl_handle_int(oidp, &qsize, 0, req);
8268 if (rc != 0 || req->newptr == NULL)
8271 if (qsize < 128 || qsize > 65536)
8296 if (req->newptr == NULL) {
8298 static char *bits =
"\20\1RX\2TX\3AUTO";
8300 rc = sysctl_wire_old_buffer(req, 0);
8304 sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
8315 rc = sbuf_finish(sb);
8325 rc = sysctl_handle_string(oidp, s,
sizeof(s), req);
8331 if (s[0] <
'0' || s[0] >
'9')
8363 static char *bits =
"\20\1RS-FEC\2FC-FEC\3NO-FEC\4RSVD1\5RSVD2";
8365 rc = sysctl_wire_old_buffer(req, 0);
8369 sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
8373 sbuf_printf(sb,
"%b", lc->
fec, bits);
8375 sbuf_printf(sb,
"no link");
8376 rc = sbuf_finish(sb);
8391 if (req->newptr == NULL) {
8393 static char *bits =
"\20\1RS-FEC\2FC-FEC\3NO-FEC\4RSVD2"
8394 "\5RSVD3\6auto\7module";
8396 rc = sysctl_wire_old_buffer(req, 0);
8400 sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
8405 rc = sbuf_finish(sb);
8411 snprintf(s,
sizeof(s),
"%d",
8415 rc = sysctl_handle_string(oidp, s,
sizeof(s), req);
8419 n = strtol(&s[0], NULL, 0);
8473 static char *bits =
"\20\1RS-FEC\2FC-FEC\3NO-FEC\4RSVD2\5RSVD3";
8475 rc = sysctl_wire_old_buffer(req, 0);
8479 sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
8505 sbuf_printf(sb,
"n/a");
8511 rc = sbuf_finish(sb);
8532 rc = sysctl_handle_int(oidp, &val, 0, req);
8533 if (rc != 0 || req->newptr == NULL)
8573 MPASS(val >= -1 && val <= 1);
8574 rc = sysctl_handle_int(oidp, &val, 0, req);
8575 if (rc != 0 || req->newptr == NULL)
8579 if (val < -1 || val > 1)
8622 uint32_t param, val;
8640 t = val == 0 ? -1 : val;
8642 rc = sysctl_handle_int(oidp, &t, 0, req);
8651 uint32_t param, val;
8681 uint32_t param, val;
8684 rc = sysctl_handle_int(oidp, &v, 0, req);
8685 if (rc != 0 || req->newptr == NULL || v <= 0)
8716 uint32_t param, val;
8732 rc = sysctl_wire_old_buffer(req, 0);
8736 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
8740 if (val == 0xffffffff) {
8742 sbuf_printf(sb,
"not available");
8744 sbuf_printf(sb,
"%d %d %d", val & 0xff, (val >> 8) & 0xff,
8745 (val >> 16) & 0xff);
8747 rc = sbuf_finish(sb);
8760 static const char *dec_fac[] = {
8761 "0.5",
"0.5625",
"0.625",
"0.6875",
"0.75",
"0.8125",
"0.875",
8765 rc = sysctl_wire_old_buffer(req, 0);
8769 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
8783 sbuf_printf(sb,
"%2d: %4u %4u %4u %4u %4u %4u %4u %4u\n", i,
8784 incr[0][i], incr[1][i], incr[2][i], incr[3][i], incr[4][i],
8785 incr[5][i], incr[6][i], incr[7][i]);
8786 sbuf_printf(sb,
"%8u %4u %4u %4u %4u %4u %4u %4u %5u %s\n",
8787 incr[8][i], incr[9][i], incr[10][i], incr[11][i],
8788 incr[12][i], incr[13][i], incr[14][i], incr[15][i],
8792 rc = sbuf_finish(sb);
8799 "TP0",
"TP1",
"ULP",
"SGE0",
"SGE1",
"NC-SI",
8800 "ULP0",
"ULP1",
"ULP2",
"ULP3",
"SGE",
"NC-SI",
8801 "SGE0-RX",
"SGE1-RX"
8809 int rc, i, n, qid = arg2;
8814 KASSERT(qid >= 0 && qid <
CIM_NUM_IBQ + cim_num_obq,
8815 (
"%s: bad qid %d\n", __func__, qid));
8821 buf = malloc(n *
sizeof(uint32_t), M_CXGBE, M_ZERO | M_WAITOK);
8833 buf = malloc(n *
sizeof(uint32_t), M_CXGBE, M_ZERO | M_WAITOK);
8846 n = rc *
sizeof(uint32_t);
8848 rc = sysctl_wire_old_buffer(req, 0);
8852 sb = sbuf_new_for_sysctl(NULL, NULL, PAGE_SIZE, req);
8858 sbuf_printf(sb,
"%s%d %s", qtype , qid,
qname[arg2]);
8859 for (i = 0, p = buf; i < n; i += 16, p += 4)
8860 sbuf_printf(sb,
"\n%#06x: %08x %08x %08x %08x", i, p[0], p[1],
8863 rc = sbuf_finish(sb);
8875 sbuf_printf(sb,
"Status Data PC%s",
8877 " LS0Stat LS0Addr LS0Data");
8881 sbuf_printf(sb,
"\n %02x %08x %08x", p[5] & 0xff,
8883 sbuf_printf(sb,
"\n %02x %02x%06x %02x%06x",
8884 (p[3] >> 8) & 0xff, p[3] & 0xff, p[4] >> 8,
8885 p[4] & 0xff, p[5] >> 8);
8886 sbuf_printf(sb,
"\n %02x %x%07x %x%07x",
8887 (p[0] >> 4) & 0xff, p[0] & 0xf, p[1] >> 4,
8888 p[1] & 0xf, p[2] >> 4);
8891 "\n %02x %x%07x %x%07x %08x %08x "
8893 (p[0] >> 4) & 0xff, p[0] & 0xf, p[1] >> 4,
8894 p[1] & 0xf, p[2] >> 4, p[2] & 0xf, p[3], p[4], p[5],
8905 sbuf_printf(sb,
"Status Inst Data PC%s",
8907 " LS0Stat LS0Addr LS0Data LS1Stat LS1Addr LS1Data");
8911 sbuf_printf(sb,
"\n %02x %08x %08x %08x",
8912 p[3] & 0xff, p[2], p[1], p[0]);
8913 sbuf_printf(sb,
"\n %02x %02x%06x %02x%06x %02x%06x",
8914 (p[6] >> 8) & 0xff, p[6] & 0xff, p[5] >> 8,
8915 p[5] & 0xff, p[4] >> 8, p[4] & 0xff, p[3] >> 8);
8916 sbuf_printf(sb,
"\n %02x %04x%04x %04x%04x %04x%04x",
8917 (p[9] >> 16) & 0xff, p[9] & 0xffff, p[8] >> 16,
8918 p[8] & 0xffff, p[7] >> 16, p[7] & 0xffff,
8921 sbuf_printf(sb,
"\n %02x %04x%04x %04x%04x %04x%04x "
8922 "%08x %08x %08x %08x %08x %08x",
8923 (p[9] >> 16) & 0xff,
8924 p[9] & 0xffff, p[8] >> 16,
8925 p[8] & 0xffff, p[7] >> 16,
8926 p[7] & 0xffff, p[6] >> 16,
8927 p[2], p[1], p[0], p[5], p[4], p[3]);
8938 MPASS(flags == M_WAITOK || flags == M_NOWAIT);
8970 rc = sysctl_wire_old_buffer(req, 0);
8973 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
8979 rc = sbuf_finish(sb);
8987 log(LOG_DEBUG,
"%s: CIM debug regs1 %08x %08x %08x %08x %08x\n",
8988 device_get_nameunit(sc->
dev),
8994 log(LOG_DEBUG,
"%s: CIM debug regs2 %08x %08x %08x %08x %08x\n",
8995 device_get_nameunit(sc->
dev),
9009 if (sbuf_new(&sb, NULL, 4096, SBUF_AUTOEXTEND) != &sb) {
9010 log(LOG_DEBUG,
"%s: failed to generate CIM LA dump.\n",
9011 device_get_nameunit(sc->
dev));
9016 rc = sbuf_finish(&sb);
9018 log(LOG_DEBUG,
"%s: CIM LA dump follows.\n%s\n",
9019 device_get_nameunit(sc->
dev), sbuf_data(&sb));
9040 rc = sysctl_wire_old_buffer(req, 0);
9044 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
9048 buf = malloc(2 *
CIM_MALA_SIZE * 5 *
sizeof(uint32_t), M_CXGBE,
9062 sbuf_printf(sb,
"\n%02x%08x%08x%08x%08x", p[4], p[3], p[2],
9066 sbuf_printf(sb,
"\n\nCnt ID Tag UE Data RDY VLD");
9068 sbuf_printf(sb,
"\n%3u %2u %x %u %08x%08x %u %u",
9069 (p[2] >> 10) & 0xff, (p[2] >> 7) & 7,
9070 (p[2] >> 3) & 0xf, (p[2] >> 2) & 1,
9071 (p[1] >> 2) | ((p[2] & 3) << 30),
9072 (p[0] >> 2) | ((p[1] & 3) << 30), (p[0] >> 1) & 1,
9075 rc = sbuf_finish(sb);
9091 rc = sysctl_wire_old_buffer(req, 0);
9095 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
9112 sbuf_printf(sb,
"Cntl ID DataBE Addr Data");
9114 sbuf_printf(sb,
"\n %02x %02x %04x %08x %08x%08x%08x%08x",
9115 (p[5] >> 22) & 0xff, (p[5] >> 16) & 0x3f, p[5] & 0xffff,
9116 p[4], p[3], p[2], p[1], p[0]);
9119 sbuf_printf(sb,
"\n\nCntl ID Data");
9121 sbuf_printf(sb,
"\n %02x %02x %08x%08x%08x%08x",
9122 (p[4] >> 6) & 0xff, p[4] & 0x3f, p[3], p[2], p[1], p[0]);
9125 rc = sbuf_finish(sb);
9143 u_int cim_num_obq, ibq_rdaddr, obq_rdaddr, nq;
9161 rc = -
t4_cim_read(sc, obq_rdaddr, 2 * cim_num_obq,
9171 rc = sysctl_wire_old_buffer(req, 0);
9175 sb = sbuf_new_for_sysctl(NULL, NULL, PAGE_SIZE, req);
9180 " Queue Base Size Thres RdPtr WrPtr SOP EOP Avail");
9183 sbuf_printf(sb,
"\n%7s %5x %5u %5u %6x %4x %4u %4u %5u",
9187 for ( ; i < nq; i++, p += 4, wr += 2)
9188 sbuf_printf(sb,
"\n%7s %5x %5u %12x %4x %4u %4u %5u",
qname[i],
9193 rc = sbuf_finish(sb);
9207 rc = sysctl_wire_old_buffer(
req, 0);
9211 sb = sbuf_new_for_sysctl(NULL, NULL, 256,
req);
9225 sbuf_printf(sb,
" channel 0 channel 1"
9226 " channel 2 channel 3");
9227 sbuf_printf(sb,
"\nCPL requests: %10u %10u %10u %10u",
9228 stats.
req[0], stats.
req[1], stats.
req[2], stats.
req[3]);
9229 sbuf_printf(sb,
"\nCPL responses: %10u %10u %10u %10u",
9230 stats.
rsp[0], stats.
rsp[1], stats.
rsp[2], stats.
rsp[3]);
9232 sbuf_printf(sb,
" channel 0 channel 1");
9233 sbuf_printf(sb,
"\nCPL requests: %10u %10u",
9234 stats.
req[0], stats.
req[1]);
9235 sbuf_printf(sb,
"\nCPL responses: %10u %10u",
9236 stats.
rsp[0], stats.
rsp[1]);
9239 rc = sbuf_finish(sb);
9253 rc = sysctl_wire_old_buffer(req, 0);
9257 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
9268 sbuf_printf(sb,
"Frames: %u\n", stats.
frames);
9269 sbuf_printf(sb,
"Octets: %ju\n", stats.
octets);
9270 sbuf_printf(sb,
"Drops: %u", stats.
drops);
9271 rc = sbuf_finish(sb);
9286 rc = sysctl_wire_old_buffer(req, 0);
9290 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
9301 sbuf_printf(sb,
"Delete: %u\n", stats.
del);
9302 sbuf_printf(sb,
"Invalidate: %u\n", stats.
inv);
9303 sbuf_printf(sb,
"Active: %u\n", stats.
act);
9304 sbuf_printf(sb,
"Passive: %u", stats.
pas);
9305 rc = sbuf_finish(sb);
9352 int i, j, rc, nentries, first = 0;
9355 uint64_t ftstamp = UINT64_MAX;
9357 if (dparams->
addr == 0)
9360 MPASS(flags == M_WAITOK || flags == M_NOWAIT);
9361 buf = malloc(dparams->
size, M_CXGBE, M_ZERO | flags);
9376 for (i = 0; i < nentries; i++) {
9384 for (j = 0; j < 8; j++)
9396 sbuf_printf(sb,
"%10s %15s %8s %8s %s\n",
9397 "Seq#",
"Tstamp",
"Level",
"Facility",
"Message");
9405 sbuf_printf(sb,
"%10d %15ju %8s %8s ",
9415 if (++i == nentries)
9417 }
while (i != first);
9430 rc = sysctl_wire_old_buffer(req, 0);
9433 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
9439 rc = sbuf_finish(sb);
9450 if (sbuf_new(&sb, NULL, 4096, SBUF_AUTOEXTEND) != &sb) {
9451 log(LOG_DEBUG,
"%s: failed to generate devlog dump.\n",
9452 device_get_nameunit(sc->
dev));
9457 rc = sbuf_finish(&sb);
9459 log(LOG_DEBUG,
"%s: device log follows.\n%s",
9460 device_get_nameunit(sc->
dev), sbuf_data(&sb));
9475 rc = sysctl_wire_old_buffer(req, 0);
9483 for (i = 0; i < nchan; i++)
9490 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
9495 sbuf_printf(sb,
" channel 0 channel 1"
9496 " channel 2 channel 3");
9497 sbuf_printf(sb,
"\noctetsDDP: %16ju %16ju %16ju %16ju",
9500 sbuf_printf(sb,
"\nframesDDP: %16u %16u %16u %16u",
9503 sbuf_printf(sb,
"\nframesDrop: %16u %16u %16u %16u",
9507 sbuf_printf(sb,
" channel 0 channel 1");
9508 sbuf_printf(sb,
"\noctetsDDP: %16ju %16ju",
9510 sbuf_printf(sb,
"\nframesDDP: %16u %16u",
9512 sbuf_printf(sb,
"\nframesDrop: %16u %16u",
9516 rc = sbuf_finish(sb);
9528 unsigned int map, kbps, ipg, mode;
9531 rc = sysctl_wire_old_buffer(req, 0);
9535 sb = sbuf_new_for_sysctl(NULL, NULL, 512, req);
9549 sbuf_printf(sb,
"Scheduler Mode Channel Rate (Kbps) "
9550 "Class IPG (0.1 ns) Flow IPG (us)");
9552 for (i = 0; i < NTX_SCHED; ++i, map >>= 2) {
9554 sbuf_printf(sb,
"\n %u %-5s %u ", i,
9555 (mode & (1 << i)) ?
"flow" :
"class", map & 3);
9557 sbuf_printf(sb,
"%9u ", kbps);
9559 sbuf_printf(sb,
" disabled ");
9562 sbuf_printf(sb,
"%13u ", ipg);
9564 sbuf_printf(sb,
" disabled ");
9567 sbuf_printf(sb,
"%10u", pace_tab[i]);
9569 sbuf_printf(sb,
" disabled");
9571 rc = sbuf_finish(sb);
9586 static const char *stat_name[] = {
9587 "OctetsOK:",
"FramesOK:",
"BcastFrames:",
"McastFrames:",
9588 "UcastFrames:",
"ErrorFrames:",
"Frames64:",
"Frames65To127:",
9589 "Frames128To255:",
"Frames256To511:",
"Frames512To1023:",
9590 "Frames1024To1518:",
"Frames1519ToMax:",
"FramesDropped:",
9591 "BG0FramesDropped:",
"BG1FramesDropped:",
"BG2FramesDropped:",
9592 "BG3FramesDropped:",
"BG0FramesTrunc:",
"BG1FramesTrunc:",
9593 "BG2FramesTrunc:",
"BG3FramesTrunc:"
9596 rc = sysctl_wire_old_buffer(req, 0);
9600 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
9604 memset(s, 0,
sizeof(s));
9620 sbuf_printf(sb,
"%s Loopback %u"
9621 " Loopback %u", i == 0 ?
"" :
"\n", i, i + 1);
9623 for (j = 0; j < nitems(stat_name); j++)
9624 sbuf_printf(sb,
"\n%-17s %20ju %20ju", stat_name[j],
9628 rc = sbuf_finish(sb);
9642 rc = sysctl_wire_old_buffer(req, 0);
9645 sb = sbuf_new_for_sysctl(NULL, NULL, 64, req);
9650 sbuf_printf(sb,
"n/a");
9654 rc = sbuf_finish(sb);
9669 return ((
const struct mem_desc *)a)->base -
9670 ((
const struct mem_desc *)b)->base;
9682 size = to - from + 1;
9687 sbuf_printf(sb,
"%-15s %#x-%#x [%u]\n", name, from, to, size);
9696 uint32_t lo, hi, used, alloc;
9697 static const char *memory[] = {
9698 "EDC0:",
"EDC1:",
"MC:",
"MC0:",
"MC1:",
"HMA:"
9700 static const char *
region[] = {
9701 "DBQ contexts:",
"IMSG contexts:",
"FLM cache:",
"TCBs:",
9702 "Pstructs:",
"Timers:",
"Rx FL:",
"Tx FL:",
"Pstruct FL:",
9703 "Tx payload:",
"Rx payload:",
"LE hash:",
"iSCSI region:",
9704 "TDDP region:",
"TPT region:",
"STAG region:",
"RQ region:",
9705 "RQUDP region:",
"PBL region:",
"TXPBL region:",
9706 "DBVFIFO region:",
"ULPRX state:",
"ULPTX state:",
9707 "On-chip queues:",
"TLS keys:",
9713 rc = sysctl_wire_old_buffer(req, 0);
9717 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
9721 for (i = 0; i < nitems(mem); i++) {
9770 MPASS(i <= nitems(avail));
9810#define ulp_region(reg) \
9811 md->base = t4_read_reg(sc, A_ULP_ ## reg ## _LLIMIT);\
9812 (md++)->limit = t4_read_reg(sc, A_ULP_ ## reg ## _ULIMIT)
9834 size = fifo_size << 2;
9868 for (n = 0; n < i - 1; n++)
9877 for (lo = 0; lo < i; lo++)
9879 avail[lo].
limit - 1);
9881 sbuf_printf(sb,
"\n");
9882 for (i = 0; i < n; i++) {
9886 mem[i].
limit = i < n - 1 ? mem[i + 1].
base - 1 : ~0;
9891 sbuf_printf(sb,
"\n");
9901 sbuf_printf(sb,
"\n%u Rx pages of size %uKiB for %u channels\n",
9908 sbuf_printf(sb,
"%u Tx pages of size %u%ciB for %u channels\n",
9910 hi >= (1 << 20) ? (hi >> 20) : (hi >> 10),
9912 sbuf_printf(sb,
"%u p-structs\n",
9915 for (i = 0; i < 4; i++) {
9928 sbuf_printf(sb,
"\nPort %d using %u pages out of %u allocated",
9945 "\nLoopback %d using %u pages out of %u allocated",
9951 rc = sbuf_finish(sb);
9961 memcpy(addr, (
char *)&y + 2, ETHER_ADDR_LEN);
9973 rc = sysctl_wire_old_buffer(req, 0);
9977 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
9982 "Idx Ethernet address Mask Vld Ports PF"
9983 " VF Replication P0 P1 P2 P3 ML");
9985 uint64_t tcamx, tcamy, mask;
9986 uint32_t cls_lo, cls_hi;
9987 uint8_t addr[ETHER_ADDR_LEN];
10012 sbuf_printf(sb,
"\n%3u %02x:%02x:%02x:%02x:%02x:%02x %012jx"
10013 " %c %#x%4u%4d", i, addr[0], addr[1], addr[2],
10014 addr[3], addr[4], addr[5], (uintmax_t)mask,
10022 memset(&ldst_cmd, 0,
sizeof(ldst_cmd));
10040 sizeof(ldst_cmd), &ldst_cmd);
10045 sbuf_printf(sb,
" %08x %08x %08x %08x",
10052 sbuf_printf(sb,
"%36s",
"");
10054 sbuf_printf(sb,
"%4u%3u%3u%3u %#3x",
G_SRAM_PRIO0(cls_lo),
10060 (void) sbuf_finish(sb);
10062 rc = sbuf_finish(sb);
10077 rc = sysctl_wire_old_buffer(req, 0);
10081 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
10085 sbuf_printf(sb,
"Idx Ethernet address Mask VNI Mask"
10086 " IVLAN Vld DIP_Hit Lookup Port Vld Ports PF VF"
10088 " P0 P1 P2 P3 ML\n");
10091 uint8_t dip_hit, vlan_vld, lookup_type, port_num;
10093 uint64_t tcamx, tcamy, val, mask;
10094 uint32_t cls_lo, cls_hi, ctl, data2, vnix, vniy;
10095 uint8_t addr[ETHER_ADDR_LEN];
10169 sbuf_printf(sb,
"\n%3u %02x:%02x:%02x:%02x:%02x:%02x "
10170 "%012jx %06x %06x - - %3c"
10171 " I %4x %3c %#x%4u%4d", i, addr[0],
10172 addr[1], addr[2], addr[3], addr[4], addr[5],
10173 (uintmax_t)mask, vniy, vnix, dip_hit ?
'Y' :
'N',
10178 sbuf_printf(sb,
"\n%3u %02x:%02x:%02x:%02x:%02x:%02x "
10179 "%012jx - - ", i, addr[0], addr[1],
10180 addr[2], addr[3], addr[4], addr[5],
10184 sbuf_printf(sb,
"%4u Y ", ivlan);
10186 sbuf_printf(sb,
" - N ");
10188 sbuf_printf(sb,
"- %3c %4x %3c %#x%4u%4d",
10189 lookup_type ?
'I' :
'O', port_num,
10199 memset(&ldst_cmd, 0,
sizeof(ldst_cmd));
10217 sizeof(ldst_cmd), &ldst_cmd);
10222 sbuf_printf(sb,
" %08x %08x %08x %08x"
10223 " %08x %08x %08x %08x",
10234 sbuf_printf(sb,
"%72s",
"");
10236 sbuf_printf(sb,
"%4u%3u%3u%3u %#x",
10243 (void) sbuf_finish(sb);
10245 rc = sbuf_finish(sb);
10257 uint16_t mtus[
NMTUS];
10259 rc = sysctl_wire_old_buffer(req, 0);
10272 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
10276 sbuf_printf(sb,
"%u %u %u %u %u %u %u %u %u %u %u %u %u %u %u %u",
10277 mtus[0], mtus[1], mtus[2], mtus[3], mtus[4], mtus[5], mtus[6],
10278 mtus[7], mtus[8], mtus[9], mtus[10], mtus[11], mtus[12], mtus[13],
10279 mtus[14], mtus[15]);
10281 rc = sbuf_finish(sb);
10296 "Read:",
"Write bypass:",
"Write mem:",
"Bypass + mem:",
10297 "Tx FIFO wait", NULL,
"Tx latency"
10300 "Read:",
"Write bypass:",
"Write mem:",
"Flush:",
10301 "Rx FIFO wait", NULL,
"Rx latency"
10304 rc = sysctl_wire_old_buffer(req, 0);
10319 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
10323 sbuf_printf(sb,
" Tx pcmds Tx bytes");
10324 for (i = 0; i < 4; i++) {
10325 sbuf_printf(sb,
"\n%-13s %10u %20ju", tx_stats[i], tx_cnt[i],
10329 sbuf_printf(sb,
"\n Rx pcmds Rx bytes");
10330 for (i = 0; i < 4; i++) {
10331 sbuf_printf(sb,
"\n%-13s %10u %20ju", rx_stats[i], rx_cnt[i],
10337 "\n Total wait Total occupancy");
10338 sbuf_printf(sb,
"\n%-13s %10u %20ju", tx_stats[i], tx_cnt[i],
10340 sbuf_printf(sb,
"\n%-13s %10u %20ju", rx_stats[i], rx_cnt[i],
10344 MPASS(i < nitems(tx_stats));
10347 "\n Reads Total wait");
10348 sbuf_printf(sb,
"\n%-13s %10u %20ju", tx_stats[i], tx_cnt[i],
10350 sbuf_printf(sb,
"\n%-13s %10u %20ju", rx_stats[i], rx_cnt[i],
10354 rc = sbuf_finish(sb);
10368 rc = sysctl_wire_old_buffer(req, 0);
10381 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
10385 sbuf_printf(sb,
"NoRQEModDefferals: %u\n", stats.
rqe_dfr_mod);
10386 sbuf_printf(sb,
"NoRQEPktDefferals: %u", stats.
rqe_dfr_pkt);
10388 rc = sbuf_finish(sb);
10402 rc = sysctl_wire_old_buffer(req, 0);
10415 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
10421 sbuf_printf(sb,
"OutRsts: %20u %20u\n",
10423 sbuf_printf(sb,
"InSegs: %20ju %20ju\n",
10425 sbuf_printf(sb,
"OutSegs: %20ju %20ju\n",
10427 sbuf_printf(sb,
"RetransSegs: %20ju %20ju",
10430 rc = sbuf_finish(sb);
10445 rc = sysctl_wire_old_buffer(req, 0);
10449 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
10454 sbuf_printf(sb,
"ATID range: 0-%u, in use: %u\n", t->
natids - 1,
10459 sbuf_printf(sb,
"HPFTID range: %u-%u, in use: %u\n",
10464 bool hashen =
false;
10483 sbuf_printf(sb,
"TID range: ");
10486 sbuf_printf(sb,
"%u-%u, ", t->
tid_base, x - 1);
10487 sbuf_printf(sb,
"%u-%u", y, t->
ntids - 1);
10492 sbuf_printf(sb,
", in use: %u\n",
10497 sbuf_printf(sb,
"STID range: %u-%u, in use: %u\n", t->
stid_base,
10502 sbuf_printf(sb,
"FTID range: %u-%u, in use: %u\n", t->
ftid_base,
10507 sbuf_printf(sb,
"ETID range: %u-%u, in use: %u\n", t->
etid_base,
10521 sbuf_printf(sb,
"HW TID usage: %u IP users, %u IPv6 users", x, y);
10524 rc = sbuf_finish(sb);
10526 (
void)sbuf_finish(sb);
10540 rc = sysctl_wire_old_buffer(req, 0);
10553 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
10558 sbuf_printf(sb,
" channel 0 channel 1"
10559 " channel 2 channel 3\n");
10560 sbuf_printf(sb,
"macInErrs: %10u %10u %10u %10u\n",
10563 sbuf_printf(sb,
"hdrInErrs: %10u %10u %10u %10u\n",
10566 sbuf_printf(sb,
"tcpInErrs: %10u %10u %10u %10u\n",
10569 sbuf_printf(sb,
"tcp6InErrs: %10u %10u %10u %10u\n",
10572 sbuf_printf(sb,
"tnlCongDrops: %10u %10u %10u %10u\n",
10575 sbuf_printf(sb,
"tnlTxDrops: %10u %10u %10u %10u\n",
10578 sbuf_printf(sb,
"ofldVlanDrops: %10u %10u %10u %10u\n",
10581 sbuf_printf(sb,
"ofldChanDrops: %10u %10u %10u %10u\n\n",
10585 sbuf_printf(sb,
" channel 0 channel 1\n");
10586 sbuf_printf(sb,
"macInErrs: %10u %10u\n",
10588 sbuf_printf(sb,
"hdrInErrs: %10u %10u\n",
10590 sbuf_printf(sb,
"tcpInErrs: %10u %10u\n",
10592 sbuf_printf(sb,
"tcp6InErrs: %10u %10u\n",
10594 sbuf_printf(sb,
"tnlCongDrops: %10u %10u\n",
10596 sbuf_printf(sb,
"tnlTxDrops: %10u %10u\n",
10598 sbuf_printf(sb,
"ofldVlanDrops: %10u %10u\n",
10600 sbuf_printf(sb,
"ofldChanDrops: %10u %10u\n\n",
10604 sbuf_printf(sb,
"ofldNoNeigh: %u\nofldCongDefer: %u",
10607 rc = sbuf_finish(sb);
10621 rc = sysctl_wire_old_buffer(req, 0);
10634 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
10639 sbuf_printf(sb,
" channel 0 channel 1"
10640 " channel 2 channel 3\n");
10641 sbuf_printf(sb,
"OutPkts: %10u %10u %10u %10u\n",
10644 sbuf_printf(sb,
"InPkts: %10u %10u %10u %10u",
10648 sbuf_printf(sb,
" channel 0 channel 1\n");
10649 sbuf_printf(sb,
"OutPkts: %10u %10u\n",
10651 sbuf_printf(sb,
"InPkts: %10u %10u",
10655 rc = sbuf_finish(sb);
10670 rc = sysctl_handle_int(oidp, &mask, 0, req);
10671 if (rc != 0 || req->newptr == NULL)
10701 uint64_t mask = (1ULL << f->
width) - 1;
10702 int len = snprintf(buf,
sizeof(buf),
"%s: %ju", f->
name,
10703 ((uintmax_t)v >> f->
start) & mask);
10705 if (line_size + len >= 79) {
10707 sbuf_printf(sb,
"\n ");
10709 sbuf_printf(sb,
"%s ", buf);
10710 line_size += len + 1;
10713 sbuf_printf(sb,
"\n");
10717 {
"RcfOpCodeOut", 60, 4 },
10718 {
"State", 56, 4 },
10719 {
"WcfState", 52, 4 },
10720 {
"RcfOpcSrcOut", 50, 2 },
10721 {
"CRxError", 49, 1 },
10722 {
"ERxError", 48, 1 },
10723 {
"SanityFailed", 47, 1 },
10724 {
"SpuriousMsg", 46, 1 },
10725 {
"FlushInputMsg", 45, 1 },
10726 {
"FlushInputCpl", 44, 1 },
10727 {
"RssUpBit", 43, 1 },
10728 {
"RssFilterHit", 42, 1 },
10730 {
"InitTcb", 31, 1 },
10731 {
"LineNumber", 24, 7 },
10733 {
"EdataOut", 22, 1 },
10735 {
"CdataOut", 20, 1 },
10736 {
"EreadPdu", 19, 1 },
10737 {
"CreadPdu", 18, 1 },
10738 {
"TunnelPkt", 17, 1 },
10739 {
"RcfPeerFin", 16, 1 },
10740 {
"RcfReasonOut", 12, 4 },
10741 {
"TxCchannel", 10, 2 },
10742 {
"RcfTxChannel", 8, 2 },
10743 {
"RxEchannel", 6, 2 },
10744 {
"RcfRxChannel", 5, 1 },
10745 {
"RcfDataOutSrdy", 4, 1 },
10746 {
"RxDvld", 3, 1 },
10747 {
"RxOoDvld", 2, 1 },
10748 {
"RxCongestion", 1, 1 },
10749 {
"TxCongestion", 0, 1 },
10754 {
"CplCmdIn", 56, 8 },
10755 {
"CplCmdOut", 48, 8 },
10756 {
"ESynOut", 47, 1 },
10757 {
"EAckOut", 46, 1 },
10758 {
"EFinOut", 45, 1 },
10759 {
"ERstOut", 44, 1 },
10760 {
"SynIn", 43, 1 },
10761 {
"AckIn", 42, 1 },
10762 {
"FinIn", 41, 1 },
10763 {
"RstIn", 40, 1 },
10764 {
"DataIn", 39, 1 },
10765 {
"DataInVld", 38, 1 },
10766 {
"PadIn", 37, 1 },
10767 {
"RxBufEmpty", 36, 1 },
10768 {
"RxDdp", 35, 1 },
10769 {
"RxFbCongestion", 34, 1 },
10770 {
"TxFbCongestion", 33, 1 },
10771 {
"TxPktSumSrdy", 32, 1 },
10772 {
"RcfUlpType", 28, 4 },
10773 {
"Eread", 27, 1 },
10774 {
"Ebypass", 26, 1 },
10775 {
"Esave", 25, 1 },
10776 {
"Static0", 24, 1 },
10777 {
"Cread", 23, 1 },
10778 {
"Cbypass", 22, 1 },
10779 {
"Csave", 21, 1 },
10780 {
"CPktOut", 20, 1 },
10781 {
"RxPagePoolFull", 18, 2 },
10782 {
"RxLpbkPkt", 17, 1 },
10783 {
"TxLpbkPkt", 16, 1 },
10784 {
"RxVfValid", 15, 1 },
10785 {
"SynLearned", 14, 1 },
10786 {
"SetDelEntry", 13, 1 },
10787 {
"SetInvEntry", 12, 1 },
10788 {
"CpcmdDvld", 11, 1 },
10789 {
"CpcmdSave", 10, 1 },
10790 {
"RxPstructsFull", 8, 2 },
10791 {
"EpcmdDvld", 7, 1 },
10792 {
"EpcmdFlush", 6, 1 },
10793 {
"EpcmdTrimPrefix", 5, 1 },
10794 {
"EpcmdTrimPostfix", 4, 1 },
10795 {
"ERssIp4Pkt", 3, 1 },
10796 {
"ERssIp6Pkt", 2, 1 },
10797 {
"ERssTcpUdpPkt", 1, 1 },
10798 {
"ERssFceFipPkt", 0, 1 },
10803 {
"CplCmdIn", 56, 8 },
10804 {
"MpsVfVld", 55, 1 },
10805 {
"MpsPf", 52, 3 },
10806 {
"MpsVf", 44, 8 },
10807 {
"SynIn", 43, 1 },
10808 {
"AckIn", 42, 1 },
10809 {
"FinIn", 41, 1 },
10810 {
"RstIn", 40, 1 },
10811 {
"DataIn", 39, 1 },
10812 {
"DataInVld", 38, 1 },
10813 {
"PadIn", 37, 1 },
10814 {
"RxBufEmpty", 36, 1 },
10815 {
"RxDdp", 35, 1 },
10816 {
"RxFbCongestion", 34, 1 },
10817 {
"TxFbCongestion", 33, 1 },
10818 {
"TxPktSumSrdy", 32, 1 },
10819 {
"RcfUlpType", 28, 4 },
10820 {
"Eread", 27, 1 },
10821 {
"Ebypass", 26, 1 },
10822 {
"Esave", 25, 1 },
10823 {
"Static0", 24, 1 },
10824 {
"Cread", 23, 1 },
10825 {
"Cbypass", 22, 1 },
10826 {
"Csave", 21, 1 },
10827 {
"CPktOut", 20, 1 },
10828 {
"RxPagePoolFull", 18, 2 },
10829 {
"RxLpbkPkt", 17, 1 },
10830 {
"TxLpbkPkt", 16, 1 },
10831 {
"RxVfValid", 15, 1 },
10832 {
"SynLearned", 14, 1 },
10833 {
"SetDelEntry", 13, 1 },
10834 {
"SetInvEntry", 12, 1 },
10835 {
"CpcmdDvld", 11, 1 },
10836 {
"CpcmdSave", 10, 1 },
10837 {
"RxPstructsFull", 8, 2 },
10838 {
"EpcmdDvld", 7, 1 },
10839 {
"EpcmdFlush", 6, 1 },
10840 {
"EpcmdTrimPrefix", 5, 1 },
10841 {
"EpcmdTrimPostfix", 4, 1 },
10842 {
"ERssIp4Pkt", 3, 1 },
10843 {
"ERssIp6Pkt", 2, 1 },
10844 {
"ERssTcpUdpPkt", 1, 1 },
10845 {
"ERssFceFipPkt", 0, 1 },
10861 sbuf_printf(sb,
"\n");
10863 if (idx < (
TPLA_SIZE / 2 - 1) || p[1] != ~0ULL)
10872 sbuf_printf(sb,
"\n");
10874 if (idx < (
TPLA_SIZE / 2 - 1) || p[1] != ~0ULL)
10886 void (*show_func)(
struct sbuf *, uint64_t *, int);
10888 rc = sysctl_wire_old_buffer(req, 0);
10892 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
10896 buf = malloc(
TPLA_SIZE *
sizeof(uint64_t), M_CXGBE, M_ZERO | M_WAITOK);
10922 for (i = 0; i <
TPLA_SIZE / inc; i++, p += inc)
10923 (*show_func)(sb, p, i);
10924 rc = sbuf_finish(sb);
10927 free(buf, M_CXGBE);
10939 rc = sysctl_wire_old_buffer(req, 0);
10952 sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
10957 sbuf_printf(sb,
" channel 0 channel 1"
10958 " channel 2 channel 3\n");
10959 sbuf_printf(sb,
"NIC B/s: %10ju %10ju %10ju %10ju\n",
10960 nrate[0], nrate[1], nrate[2], nrate[3]);
10961 sbuf_printf(sb,
"Offload B/s: %10ju %10ju %10ju %10ju",
10962 orate[0], orate[1], orate[2], orate[3]);
10964 sbuf_printf(sb,
" channel 0 channel 1\n");
10965 sbuf_printf(sb,
"NIC B/s: %10ju %10ju\n",
10966 nrate[0], nrate[1]);
10967 sbuf_printf(sb,
"Offload B/s: %10ju %10ju",
10968 orate[0], orate[1]);
10971 rc = sbuf_finish(sb);
10985 rc = sysctl_wire_old_buffer(req, 0);
10989 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
10993 buf = malloc(
ULPRX_LA_SIZE * 8 *
sizeof(uint32_t), M_CXGBE,
10994 M_ZERO | M_WAITOK);
11006 sbuf_printf(sb,
" Pcmd Type Message"
11009 sbuf_printf(sb,
"\n%08x%08x %4x %08x %08x%08x%08x%08x",
11010 p[1], p[0], p[2], p[3], p[7], p[6], p[5], p[4]);
11012 rc = sbuf_finish(sb);
11015 free(buf, M_CXGBE);
11025 uint32_t cfg, s1, s2;
11029 rc = sysctl_wire_old_buffer(req, 0);
11045 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
11054 sbuf_printf(sb,
"total %d, incomplete %d", s1, s2);
11055 else if (mode == 1)
11056 sbuf_printf(sb,
"total %d, data overflow %d", s1, s2);
11058 sbuf_printf(sb,
"unknown mode %d", mode);
11060 rc = sbuf_finish(sb);
11070 enum cpu_sets op = arg2;
11075 MPASS(op == LOCAL_CPUS || op == INTR_CPUS);
11078 rc = bus_get_cpus(sc->
dev, op,
sizeof(cpuset), &cpuset);
11082 rc = sysctl_wire_old_buffer(req, 0);
11086 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
11091 sbuf_printf(sb,
"%d ", i);
11092 rc = sbuf_finish(sb);
11106 rc = sysctl_handle_int(oidp, &val, 0, req);
11107 if (rc != 0 || req->newptr == NULL)
11128sysctl_tls(SYSCTL_HANDLER_ARGS)
11135 rc = sysctl_handle_int(oidp, &v, 0, req);
11136 if (rc != 0 || req->newptr == NULL)
11163sysctl_tls_rx_ports(SYSCTL_HANDLER_ARGS)
11166 int *old_ports, *new_ports;
11167 int i, new_count, rc;
11169 if (req->newptr == NULL && req->oldptr == NULL)
11184 rc = SYSCTL_OUT(req, &i,
sizeof(i));
11188 if (rc == 0 && req->newptr != NULL) {
11189 new_count = req->newlen /
sizeof(new_ports[0]);
11190 new_ports = malloc(new_count *
sizeof(new_ports[0]), M_CXGBE,
11192 rc = SYSCTL_IN(req, new_ports, new_count *
11193 sizeof(new_ports[0]));
11198 if (new_count == 1 && new_ports[0] == -1) {
11204 free(old_ports, M_CXGBE);
11206 for (i = 0; i < new_count; i++) {
11207 if (new_ports[i] < 1 ||
11208 new_ports[i] > IPPORT_MAX) {
11219 free(old_ports, M_CXGBE);
11223 free(new_ports, M_CXGBE);
11231sysctl_tls_rx_timeout(SYSCTL_HANDLER_ARGS)
11237 rc = sysctl_handle_int(oidp, &v, 0, req);
11238 if (rc != 0 || req->newptr == NULL)
11254unit_conv(
char *buf,
size_t len, u_int val, u_int factor)
11256 u_int rem = val % factor;
11259 snprintf(buf, len,
"%u", val / factor);
11261 while (rem % 10 == 0)
11263 snprintf(buf, len,
"%u.%u", val / factor, rem);
11268sysctl_tp_tick(SYSCTL_HANDLER_ARGS)
11281 if (
res == (u_int)-1)
11301 unit_conv(buf,
sizeof(buf), (cclk_ps << re), 1000000);
11303 return (sysctl_handle_string(oidp, buf,
sizeof(buf), req));
11307sysctl_tp_dack_timer(SYSCTL_HANDLER_ARGS)
11311 u_int dack_tmr, dack_re, v;
11327 v = ((cclk_ps << dack_re) / 1000000) * dack_tmr;
11329 return (sysctl_handle_int(oidp, &v, 0, req));
11333sysctl_tp_timer(SYSCTL_HANDLER_ARGS)
11336 int rc, reg = arg2;
11338 u_long tp_tick_us, v;
11352 tp_tick_us = (cclk_ps << tre) / 1000000;
11362 return (sysctl_handle_long(oidp, &v, 0, req));
11370sysctl_tp_shift_cnt(SYSCTL_HANDLER_ARGS)
11373 int rc, idx = arg2;
11376 MPASS(idx >= 0 && idx <= 24);
11389 return (sysctl_handle_int(oidp, &v, 0, req));
11393sysctl_tp_backoff(SYSCTL_HANDLER_ARGS)
11396 int rc, idx = arg2;
11399 MPASS(idx >= 0 && idx < 16);
11402 shift = (idx & 3) << 3;
11414 return (sysctl_handle_int(oidp, &v, 0, req));
11418sysctl_holdoff_tmr_idx_ofld(SYSCTL_HANDLER_ARGS)
11428 rc = sysctl_handle_int(oidp, &idx, 0, req);
11429 if (rc != 0 || req->newptr == NULL)
11442#ifdef atomic_store_rel_8
11455sysctl_holdoff_pktc_idx_ofld(SYSCTL_HANDLER_ARGS)
11463 rc = sysctl_handle_int(oidp, &idx, 0, req);
11464 if (rc != 0 || req->newptr == NULL)
11550 fw_data = malloc(fw->
len, M_CXGBE, M_WAITOK);
11552 rc = copyin(fw->
data, fw_data, fw->
len);
11556 free(fw_data, M_CXGBE);
11566 uint8_t *cfg_data = NULL;
11577 if (cfg->
len == 0) {
11583 cfg_data = malloc(cfg->
len, M_CXGBE, M_WAITOK);
11585 rc = copyin(cfg->
data, cfg_data, cfg->
len);
11589 free(cfg_data, M_CXGBE);
11599 uint8_t *br_data = NULL;
11602 if (br->
len > 1024 * 1024)
11627 if (br->
len == 0) {
11633 br_data = malloc(br->
len, M_CXGBE, M_WAITOK);
11635 rc = copyin(br->
data, br_data, br->
len);
11639 free(br_data, M_CXGBE);
11649 uint8_t *bc_data = NULL;
11660 if (bc->
len == 0) {
11666 bc_data = malloc(bc->
len, M_CXGBE, M_WAITOK);
11668 rc = copyin(bc->
data, bc_data, bc->
len);
11672 free(bc_data, M_CXGBE);
11683 void *handle, *buf;
11686 buf = malloc(dump->
len, M_CXGBE, M_NOWAIT | M_ZERO);
11691 if (handle == NULL) {
11701 device_printf(sc->
dev,
"%s: wr_flash %u, len %u, data %p.\n",
11714 rc = copyout(buf, dump->
data, dump->
len);
11717 free(buf, M_CXGBE);
11731 for (i = 0; i < op->
nrules; i++,
r++) {
11732 free(
r->bpf_prog.bf_insns, M_CXGBE);
11734 free(op->
rule, M_CXGBE);
11743 struct bpf_program *bf;
11755 }
else if (uop->
nrules > 256) {
11760 op = malloc(
sizeof(*op), M_CXGBE, M_ZERO | M_WAITOK);
11763 op->
rule = malloc(len, M_CXGBE, M_ZERO | M_WAITOK);
11764 rc = copyin(uop->
rule, op->
rule, len);
11766 free(op->
rule, M_CXGBE);
11772 for (i = 0; i < op->
nrules; i++,
r++) {
11802 bf->bf_insns = NULL;
11803 if (bf->bf_len == 0) {
11807 len = bf->bf_len *
sizeof(*bf->bf_insns);
11808 bf->bf_insns = malloc(len, M_CXGBE, M_ZERO | M_WAITOK);
11809 rc = copyin(u, bf->bf_insns, len);
11813 if (!bpf_validate(bf->bf_insns, bf->bf_len)) {
11828#define MAX_READ_BUF_SIZE (128 * 1024)
11832 uint32_t addr, remaining, n;
11848 remaining = mr->
len;
11849 dst = (
void *)mr->
data;
11851 while (remaining) {
11862 rc = copyout(buf, dst, n);
11871 free(buf, M_CXGBE);
11874#undef MAX_READ_BUF_SIZE
11884 if (i2cd->
len >
sizeof(i2cd->
data))
11903 int i, v, chan_map;
11909#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
11918 pi = sc->
port[port_id];
11939 i = ffs(chan_map) - 1;
11942 chan_map &= ~(1 << i);
11957#if defined(INET) || defined(INET6)
11958 rxq->
lro.lro_queued = 0;
11959 rxq->
lro.lro_flushed = 0;
12000#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
12044 struct in6_addr in6;
12046 bcopy(&ca->
addr[0], &in6.s6_addr[0],
sizeof(in6.s6_addr));
12060 struct in6_addr in6;
12062 bcopy(&ca->
addr[0], &in6.s6_addr[0],
sizeof(in6.s6_addr));
12074 return (pci_find_cap(sc->
dev, cap, &i) == 0 ? i : 0);
12081 struct pci_devinfo *dinfo;
12084 dinfo = device_get_ivars(dev);
12086 pci_cfg_save(dev, dinfo, 0);
12094 struct pci_devinfo *dinfo;
12097 dinfo = device_get_ivars(dev);
12099 pci_cfg_restore(dev, dinfo);
12109 static const char *mod_str[] = {
12110 NULL,
"LR",
"SR",
"ER",
"TWINAX",
"active TWINAX",
"LRM"
12114 (
"%s: port_type %u", __func__, pi->
port_type));
12130 if_printf(
ifp,
"transceiver unplugged.\n");
12132 if_printf(
ifp,
"unknown transceiver inserted.\n");
12134 if_printf(
ifp,
"unsupported transceiver inserted.\n");
12136 if_printf(
ifp,
"%dGbps %s transceiver inserted.\n",
12139 if_printf(
ifp,
"transceiver (type %d) inserted.\n",
12157 if (lc->
speed > 25000 ||
12181 ifp->if_baudrate = IF_Mbps(lc->
speed);
12182 if_link_state_change(
ifp, LINK_STATE_UP);
12184 if_link_state_change(
ifp, LINK_STATE_DOWN);
12195 SLIST_FOREACH(sc, &t4_list, link) {
12212 rc = priv_check(td, PRIV_DRIVER);
12226 else if (edata->
size == 4)
12228 else if (edata->
size == 8)
12245 else if (edata->
size == 4) {
12246 if (edata->
val & 0xffffffff00000000)
12249 }
else if (edata->
size == 8)
12262 if (regs->
len < reglen) {
12263 regs->
len = reglen;
12267 regs->
len = reglen;
12268 buf = malloc(reglen, M_CXGBE, M_WAITOK | M_ZERO);
12276 rc = copyout(buf, regs->
data, reglen);
12277 free(buf, M_CXGBE);
12355toe_capability(
struct vi_info *vi,
bool enable)
12383 if (v->
ifp->if_capenable & IFCAP_TXTLS) {
12385 "%s has NIC TLS enabled.\n",
12386 device_get_nameunit(v->
dev));
12392 CH_WARN(sc,
"Disable NIC TLS on all interfaces "
12393 "associated with this adapter before "
12394 "trying to enable TOE.\n");
12397 rc = t4_config_kern_tls(sc,
false);
12402 if ((vi->
ifp->if_capenable & IFCAP_TOE) != 0) {
12424 if (!uld_active(sc,
ULD_TOM)) {
12425 rc = t4_activate_uld(sc,
ULD_TOM);
12426 if (rc == EAGAIN) {
12428 "You must kldload t4_tom.ko before trying "
12429 "to enable TOE on a cxgbe interface.\n");
12434 (
"%s: TOM activated but softc NULL", __func__));
12435 KASSERT(uld_active(sc,
ULD_TOM),
12436 (
"%s: TOM activated but flag not set", __func__));
12453 KASSERT(uld_active(sc,
ULD_TOM),
12454 (
"%s: TOM never initialized?", __func__));
12465t4_register_uld(
struct uld_info *ui)
12470 sx_xlock(&t4_uld_list_lock);
12471 SLIST_FOREACH(u, &t4_uld_list, link) {
12478 SLIST_INSERT_HEAD(&t4_uld_list, ui, link);
12481 sx_xunlock(&t4_uld_list_lock);
12486t4_unregister_uld(
struct uld_info *ui)
12491 sx_xlock(&t4_uld_list_lock);
12493 SLIST_FOREACH(u, &t4_uld_list, link) {
12500 SLIST_REMOVE(&t4_uld_list, ui,
uld_info, link);
12506 sx_xunlock(&t4_uld_list_lock);
12511t4_activate_uld(
struct adapter *sc,
int id)
12522 sx_slock(&t4_uld_list_lock);
12524 SLIST_FOREACH(ui, &t4_uld_list, link) {
12541 sx_sunlock(&t4_uld_list_lock);
12547t4_deactivate_uld(
struct adapter *sc,
int id)
12558 sx_slock(&t4_uld_list_lock);
12560 SLIST_FOREACH(ui, &t4_uld_list, link) {
12571 sx_sunlock(&t4_uld_list_lock);
12577t4_async_event(
struct adapter *sc)
12583 sx_slock(&t4_uld_list_lock);
12584 SLIST_FOREACH(ui, &t4_uld_list, link) {
12590 sx_sunlock(&t4_uld_list_lock);
12606ktls_capability(
struct adapter *sc,
bool enable)
12620 "Disable TOE on all interfaces associated with "
12621 "this adapter before trying to enable NIC TLS.\n");
12624 return (t4_config_kern_tls(sc,
true));
12647 nq = *t < 0 ? -*t : c;
12662 t4_ntxq = rss_getnumbuckets();
12672 t4_nrxq = rss_getnumbuckets();
12680#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
12689#if defined(TCP_OFFLOAD) || defined(KERN_TLS)
12690 if (t4_toecaps_allowed == -1)
12693 if (t4_toecaps_allowed == -1)
12694 t4_toecaps_allowed = 0;
12698 if (t4_rdmacaps_allowed == -1) {
12703 if (t4_iscsicaps_allowed == -1) {
12709 if (t4_tmr_idx_ofld < 0 || t4_tmr_idx_ofld >=
SGE_NTIMERS)
12710 t4_tmr_idx_ofld = TMR_IDX_OFLD;
12712 if (t4_pktc_idx_ofld < -1 || t4_pktc_idx_ofld >=
SGE_NCOUNTERS)
12713 t4_pktc_idx_ofld = PKTC_IDX_OFLD;
12715 if (t4_toe_tls_rx_timeout < 0)
12716 t4_toe_tls_rx_timeout = 0;
12718 if (t4_rdmacaps_allowed == -1)
12719 t4_rdmacaps_allowed = 0;
12721 if (t4_iscsicaps_allowed == -1)
12722 t4_iscsicaps_allowed = 0;
12757 if (t4_num_vis < 1)
12759 if (t4_num_vis > nitems(vi_mac_funcs)) {
12760 t4_num_vis = nitems(vi_mac_funcs);
12761 printf(
"cxgbe: number of VIs limited to %d\n", t4_num_vis);
12764 if (pcie_relaxed_ordering < 0 || pcie_relaxed_ordering > 2) {
12765 pcie_relaxed_ordering = 1;
12766#if defined(__i386__) || defined(__amd64__)
12767 if (cpu_vendor_id == CPU_VENDOR_INTEL)
12768 pcie_relaxed_ordering = 0;
12775t4_dump_tcb(
struct adapter *sc,
int tid)
12777 uint32_t base, i, j, off, pf, reg, save, tcb_addr, win_pos;
12789 win_pos = tcb_addr & ~0xf;
12792 win_pos = tcb_addr & ~0x7f;
12797 off = tcb_addr - win_pos;
12798 for (i = 0; i < 4; i++) {
12800 for (j = 0; j < 8; j++, off += 4)
12803 db_printf(
"%08x %08x %08x %08x %08x %08x %08x %08x\n",
12804 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
12813t4_dump_devlog(
struct adapter *sc)
12817 int i, first, j, m, nentries, rc;
12818 uint64_t ftstamp = UINT64_MAX;
12820 if (dparams->
start == 0) {
12821 db_printf(
"devlog params not valid\n");
12830 for (i = 0; i < nentries && !db_pager_quit; i++) {
12832 sizeof(e), (
void *)&e);
12836 if (e.timestamp == 0)
12839 e.timestamp = be64toh(e.timestamp);
12840 if (e.timestamp < ftstamp) {
12841 ftstamp = e.timestamp;
12852 sizeof(e), (
void *)&e);
12856 if (e.timestamp == 0)
12859 e.timestamp = be64toh(e.timestamp);
12860 e.seqno = be32toh(e.seqno);
12861 for (j = 0; j < 8; j++)
12862 e.params[j] = be32toh(e.params[j]);
12864 db_printf(
"%10d %15ju %8s %8s ",
12865 e.seqno, e.timestamp,
12870 db_printf(e.fmt, e.params[0], e.params[1], e.params[2],
12871 e.params[3], e.params[4], e.params[5], e.params[6],
12874 if (++i == nentries)
12876 }
while (i != first && !db_pager_quit);
12879static struct command_table db_t4_table = LIST_HEAD_INITIALIZER(db_t4_table);
12880_DB_SET(_show,
t4, NULL, db_show_table, 0, &db_t4_table);
12882DB_FUNC(devlog, db_show_devlog, db_t4_table, CS_OWN, NULL)
12889 t = db_read_token();
12891 dev = device_lookup_by_name(db_tok_string);
12896 db_printf(
"usage: show t4 devlog <nexus>\n");
12901 db_printf(
"device not found\n");
12905 t4_dump_devlog(device_get_softc(dev));
12908DB_FUNC(tcb, db_show_t4tcb, db_t4_table, CS_OWN, NULL)
12917 t = db_read_token();
12919 dev = device_lookup_by_name(db_tok_string);
12920 t = db_read_token();
12921 if (t == tNUMBER) {
12922 tid = db_tok_number;
12929 db_printf(
"usage: show t4 tcb <nexus> <tid>\n");
12934 db_printf(
"device not found\n");
12938 db_printf(
"invalid tid\n");
12942 t4_dump_tcb(device_get_softc(dev), tid);
12959 uint8_t match_all_mac[ETHER_ADDR_LEN] = {0};
12975 "failed to add VXLAN TCAM entry: %d.\n", rc);
13001 CH_ERR(sc,
"VXLAN already configured on port %d; "
13002 "ignoring attempt to configure it on port %d\n",
13026 CH_ERR(sc,
"VXLAN operation on port %d was stopped earlier; "
13027 "ignoring attempt to stop it again.\n", sc->
vxlan_port);
13036 sa_family_t family, u_int
port)
13040 MPASS(family == AF_INET || family == AF_INET6);
13053 MPASS(family == AF_INET || family == AF_INET6);
13068 static int loaded = 0;
13073 if (loaded++ == 0) {
13090 SLIST_INIT(&t4_list);
13093 sx_init(&t4_uld_list_lock,
"T4/T5 ULDs");
13094 SLIST_INIT(&t4_uld_list);
13105 EVENTHANDLER_REGISTER(vxlan_start,
13107 EVENTHANDLER_PRI_ANY);
13109 EVENTHANDLER_REGISTER(vxlan_stop,
13111 EVENTHANDLER_PRI_ANY);
13112 reset_tq = taskqueue_create(
"t4_rst_tq", M_WAITOK,
13113 taskqueue_thread_enqueue, &
reset_tq);
13114 taskqueue_start_threads(&
reset_tq, 1, PI_SOFT,
13122 if (--loaded == 0) {
13127 if (!SLIST_EMPTY(&t4_list)) {
13133 sx_slock(&t4_uld_list_lock);
13134 if (!SLIST_EMPTY(&t4_uld_list)) {
13136 sx_sunlock(&t4_uld_list_lock);
13143 uprintf(
"%ju clusters with custom free routine "
13145 pause(
"t4unload", 2 * hz);
13148 sx_sunlock(&t4_uld_list_lock);
13153 EVENTHANDLER_DEREGISTER(vxlan_start,
13155 EVENTHANDLER_DEREGISTER(vxlan_stop,
13165 sx_destroy(&t4_uld_list_lock);
unsigned int t4_qsize_txq
void t4_tracer_modunload(void)
static struct wrqe * alloc_wrqe(int wr_len, struct sge_wrq *wrq)
void t4_sge_sysctls(struct adapter *, struct sysctl_ctx_list *, struct sysctl_oid_list *)
int t4_filter_rpl(struct sge_iq *, const struct rss_header *, struct mbuf *)
#define ADAPTER_UNLOCK(sc)
int t4_hashfilter_ao_rpl(struct sge_iq *, const struct rss_header *, struct mbuf *)
int parse_pkt(struct mbuf **, bool)
int t4_trace_pkt(struct sge_iq *, const struct rss_header *, struct mbuf *)
static uint32_t t4_read_reg(struct adapter *sc, uint32_t reg)
int t4_init_tx_sched(struct adapter *)
void t4_sge_modload(void)
int t4_get_tracer(struct adapter *, struct t4_tracer *)
int set_filter_mask(struct adapter *, uint32_t)
void t4_update_fl_bufsize(struct ifnet *)
void t4_tweak_chip_settings(struct adapter *)
int t4_del_hashfilter_rpl(struct sge_iq *, const struct rss_header *, struct mbuf *)
uint8_t ss[SGE_MAX_WR_LEN]
int del_filter(struct adapter *, struct t4_filter *)
int t5_trace_pkt(struct sge_iq *, const struct rss_header *, struct mbuf *)
int t4_setup_adapter_queues(struct adapter *)
void t4_tracer_port_detach(struct adapter *)
unsigned int t4_qsize_rxq
#define for_each_vi(_pi, _iter, _vi)
void free_fl_buffers(struct adapter *, struct sge_fl *)
int sysctl_tc_params(SYSCTL_HANDLER_ARGS)
static int read_via_memwin(struct adapter *sc, int idx, uint32_t addr, uint32_t *val, int len)
static void t4_write_reg64(struct adapter *sc, uint32_t reg, uint64_t val)
int t4_hashfilter_tcb_rpl(struct sge_iq *, const struct rss_header *, struct mbuf *)
void t4_register_cpl_handler(int, cpl_handler_t)
static void t4_write_reg(struct adapter *sc, uint32_t reg, uint32_t val)
static void * wrtod(struct wrqe *wr)
#define ADAPTER_LOCK_ASSERT_OWNED(sc)
int t4_create_dma_tag(struct adapter *)
int t4_set_tracer(struct adapter *, struct t4_tracer *)
struct sge_nm_rxq * nm_rxq
int t4_set_sched_queue(struct adapter *, struct t4_sched_queue *)
void t4_register_shared_cpl_handler(int, cpl_handler_t, int)
static void t4_wrq_tx(struct adapter *sc, struct wrqe *wr)
void t4_sge_modunload(void)
int t4_free_tx_sched(struct adapter *)
int t4_setup_vi_queues(struct vi_info *)
int t4_teardown_adapter_queues(struct adapter *)
int set_filter_mode(struct adapter *, uint32_t)
static bool hw_off_limits(struct adapter *sc)
#define for_each_rxq(vi, iter, q)
static int forwarding_intr_to_fwq(struct adapter *sc)
int t4_destroy_dma_tag(struct adapter *)
int get_filter_mode(struct adapter *, uint32_t *)
#define ASSERT_SYNCHRONIZED_OP(sc)
int get_filter(struct adapter *, struct t4_filter *)
#define for_each_ofld_rxq(vi, iter, q)
#define IDXINCR(idx, incr, wrap)
void t4_tracer_modload(void)
static int write_via_memwin(struct adapter *sc, int idx, uint32_t addr, const uint32_t *val, int len)
#define for_each_ofld_txq(vi, iter, q)
uint64_t t4_sge_extfree_refs(void)
int t4_set_sched_class(struct adapter *, struct t4_sched_params *)
void free_hftid_hash(struct tid_info *)
#define for_each_txq(vi, iter, q)
#define PORT_LOCK_ASSERT_OWNED(pi)
int set_filter(struct adapter *, struct t4_filter *)
void t4_init_rx_buf_info(struct adapter *)
int t4_verify_chip_settings(struct adapter *)
#define ADAPTER_LOCK_ASSERT_NOTOWNED(sc)
#define CXGBE_UNIMPLEMENTED(s)
int t4_teardown_vi_queues(struct vi_info *)
static uint64_t t4_read_reg64(struct adapter *sc, uint32_t reg)
uint32_t speed_to_fwcap(unsigned int speed)
int t4_shutdown_adapter(struct adapter *adapter)
int t4_sge_ctxt_rd_bd(struct adapter *adap, unsigned int cid, enum ctxt_type ctype, u32 *data)
void t4_get_regs(struct adapter *adap, u8 *buf, size_t buf_size)
void t4_tp_get_tnl_stats(struct adapter *adap, struct tp_tnl_stats *st, bool sleep_ok)
int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid, int start, int n, const u16 *rspq, unsigned int nrspq)
int t4_fw_upgrade(struct adapter *adap, unsigned int mbox, const u8 *fw_data, unsigned int size, int force)
int t4_free_vi(struct adapter *adap, unsigned int mbox, unsigned int pf, unsigned int vf, unsigned int viid)
bool t4_slow_intr_handler(struct adapter *adapter, bool verbose)
void t4_read_cong_tbl(struct adapter *adap, u16 incr[NMTUS][NCCTRL_WIN])
int t4_alloc_raw_mac_filt(struct adapter *adap, unsigned int viid, const u8 *addr, const u8 *mask, unsigned int idx, u8 lookup_type, u8 port_id, bool sleep_ok)
static u_int us_to_tcp_ticks(const struct adapter *adap, u_long us)
void t4_intr_enable(struct adapter *adapter)
void t4_cim_read_ma_la(struct adapter *adap, u32 *ma_req, u32 *ma_rsp)
void t4_pmtx_get_stats(struct adapter *adap, u32 cnt[], u64 cycles[])
int t4_load_cfg(struct adapter *adapter, const u8 *cfg_data, unsigned int size)
void t4_tp_get_tcp_stats(struct adapter *adap, struct tp_tcp_stats *v4, struct tp_tcp_stats *v6, bool sleep_ok)
int t4_mem_read(struct adapter *adap, int mtype, u32 addr, u32 size, __be32 *data)
int t4_query_params(struct adapter *adap, unsigned int mbox, unsigned int pf, unsigned int vf, unsigned int nparams, const u32 *params, u32 *val)
void t4_read_indirect(struct adapter *adap, unsigned int addr_reg, unsigned int data_reg, u32 *vals, unsigned int nregs, unsigned int start_idx)
void t4_get_tx_sched(struct adapter *adap, unsigned int sched, unsigned int *kbps, unsigned int *ipg, bool sleep_ok)
void t4_get_fcoe_stats(struct adapter *adap, unsigned int idx, struct tp_fcoe_stats *st, bool sleep_ok)
void t4_intr_disable(struct adapter *adapter)
static int is_offload(const struct adapter *adap)
int t4_fw_initialize(struct adapter *adap, unsigned int mbox)
void t4_read_mtu_tbl(struct adapter *adap, u16 *mtus, u8 *mtu_log)
static int t4_wr_mbox(struct adapter *adap, int mbox, const void *cmd, int size, void *rpl)
void t4_set_reg_field(struct adapter *adap, unsigned int addr, u32 mask, u32 val)
int t4_sge_ctxt_rd(struct adapter *adap, unsigned int mbox, unsigned int cid, enum ctxt_type ctype, u32 *data)
int t4_fw_reset(struct adapter *adap, unsigned int mbox, int reset)
int t4_fw_bye(struct adapter *adap, unsigned int mbox)
#define PCI_VENDOR_ID_CHELSIO
int t4_alloc_vi_func(struct adapter *adap, unsigned int mbox, unsigned int port, unsigned int pf, unsigned int vf, unsigned int nmac, u8 *mac, u16 *rss_size, uint8_t *vfvld, uint16_t *vin, unsigned int portfunc, unsigned int idstype)
int t4_mdio_rd(struct adapter *adap, unsigned int mbox, unsigned int phy_addr, unsigned int mmd, unsigned int reg, unsigned int *valp)
int t4_i2c_rd(struct adapter *adap, unsigned int mbox, int port, unsigned int devid, unsigned int offset, unsigned int len, u8 *buf)
void t4_ulprx_read_la(struct adapter *adap, u32 *la_buf)
static int is_t6(struct adapter *adap)
int t4_get_version_info(struct adapter *adapter)
void t4_get_chan_txrate(struct adapter *adap, u64 *nic_rate, u64 *ofld_rate)
int t4_load_fw(struct adapter *adapter, const u8 *fw_data, unsigned int size)
void t4_load_mtus(struct adapter *adap, const unsigned short *mtus, const unsigned short *alpha, const unsigned short *beta)
int t4_load_boot(struct adapter *adap, u8 *boot_data, unsigned int boot_addr, unsigned int size)
unsigned int t4_get_regs_len(struct adapter *adapter)
int t4_set_addr_hash(struct adapter *adap, unsigned int mbox, unsigned int viid, bool ucast, u64 vec, bool sleep_ok)
int t4_prep_adapter(struct adapter *adapter, u32 *buf)
int t4_cim_read(struct adapter *adap, unsigned int addr, unsigned int n, unsigned int *valp)
void t4_clr_port_stats(struct adapter *adap, int idx)
int t4_update_port_info(struct port_info *pi)
int t4_config_vi_rss(struct adapter *adapter, int mbox, unsigned int viid, unsigned int flags, unsigned int defq, unsigned int skeyidx, unsigned int skey)
u32 t4_hw_pci_read_cfg4(adapter_t *adapter, int reg)
void t4_tp_get_err_stats(struct adapter *adap, struct tp_err_stats *st, bool sleep_ok)
int t4_init_devlog_params(struct adapter *adapter, int fw_attach)
static int chip_id(struct adapter *adap)
int t4_load_bootcfg(struct adapter *adapter, const u8 *cfg_data, unsigned int size)
void t4_get_usm_stats(struct adapter *adap, struct tp_usm_stats *st, bool sleep_ok)
static int chip_rev(struct adapter *adap)
#define for_each_port(adapter, iter)
int t4_set_params(struct adapter *adap, unsigned int mbox, unsigned int pf, unsigned int vf, unsigned int nparams, const u32 *params, const u32 *val)
int t4_enable_vi(struct adapter *adap, unsigned int mbox, unsigned int viid, bool rx_en, bool tx_en)
void t4_write_rss_key(struct adapter *adap, const u32 *key, int idx, bool sleep_ok)
void t4_intr_clear(struct adapter *adapter)
static int is_t4(struct adapter *adap)
void t4_tp_get_tid_stats(struct adapter *adap, struct tp_tid_stats *st, bool sleep_ok)
void t4_report_fw_error(struct adapter *adap)
void t4_read_cimq_cfg(struct adapter *adap, u16 *base, u16 *size, u16 *thres)
int t4_fw_hello(struct adapter *adap, unsigned int mbox, unsigned int evt_mbox, enum dev_master master, enum dev_state *state)
void t4_tp_get_rdma_stats(struct adapter *adap, struct tp_rdma_stats *st, bool sleep_ok)
int t4_link_l1cfg(struct adapter *adap, unsigned int mbox, unsigned int port, struct link_config *lc)
int t4_alloc_mac_filt(struct adapter *adap, unsigned int mbox, unsigned int viid, bool free, unsigned int naddr, const u8 **addr, u16 *idx, u64 *hash, bool sleep_ok)
int t4_cim_read_la(struct adapter *adap, u32 *la_buf, unsigned int *wrptr)
static int is_ethoffload(const struct adapter *adap)
void t4_get_port_stats(struct adapter *adap, int idx, struct port_stats *p)
static int is_ktls(const struct adapter *adap)
void t4_pmrx_get_stats(struct adapter *adap, u32 cnt[], u64 cycles[])
int t4_change_mac(struct adapter *adap, unsigned int mbox, unsigned int viid, int idx, const u8 *addr, bool persist, uint16_t *smt_idx)
void t4_get_lb_stats(struct adapter *adap, int idx, struct lb_port_stats *p)
void t4_read_pace_tbl(struct adapter *adap, unsigned int pace_vals[NTX_SCHED])
void t4_tp_read_la(struct adapter *adap, u64 *la_buf, unsigned int *wrptr)
void t4_tp_wr_bits_indirect(struct adapter *adap, unsigned int addr, unsigned int mask, unsigned int val)
void t4_cim_read_pif_la(struct adapter *adap, u32 *pif_req, u32 *pif_rsp, unsigned int *pif_req_wrptr, unsigned int *pif_rsp_wrptr)
void t4_write_indirect(struct adapter *adap, unsigned int addr_reg, unsigned int data_reg, const u32 *vals, unsigned int nregs, unsigned int start_idx)
static int port_top_speed(const struct port_info *pi)
int t4_set_rxmode(struct adapter *adap, unsigned int mbox, unsigned int viid, int mtu, int promisc, int all_multi, int bcast, int vlanex, bool sleep_ok)
static int is_t5(struct adapter *adap)
int t4_port_init(struct adapter *adap, int mbox, int pf, int vf, int port_id)
int t4_init_tp_params(struct adapter *adap)
int t4_init_sge_params(struct adapter *adapter)
const char * t4_link_down_rc_str(unsigned char link_down_rc)
static int is_fpga(struct adapter *adap)
int t4_get_fw_hdr(struct adapter *adapter, struct fw_hdr *hdr)
int t4_read_cim_obq(struct adapter *adap, unsigned int qid, u32 *data, size_t n)
int t4_read_cim_ibq(struct adapter *adap, unsigned int qid, u32 *data, size_t n)
int t4_flash_cfg_addr(struct adapter *adapter)
void t4_tp_get_cpl_stats(struct adapter *adap, struct tp_cpl_stats *st, bool sleep_ok)
int cudbg_collect(void *handle, void *outbuf, u32 *outbuf_size)
void * cudbg_alloc_handle(void)
int(* cudbg_print_cb)(char *str,...)
static struct cudbg_init * cudbg_get_init(void *handle)
void cudbg_free_handle(IN void *handle)
static const char *const region[]
#define INIT_TP_WR_MIT_CPL(w, cpl, tid)
#define CH_WARN(adap, fmt,...)
#define CH_ERR(adap, fmt,...)
#define CH_ALERT(adap, fmt,...)
struct devlog_params devlog
unsigned short a_wnd[NCCTRL_WIN]
unsigned int max_ird_adapter
bool fr_nsmr_tpte_wr_support
unsigned short mtus[NMTUS]
bool viid_smt_extn_support
unsigned int ofldq_wr_cred
unsigned int filter2_wr_support
unsigned int max_pkts_per_eth_tx_pkts_wr
unsigned short b_wnd[NCCTRL_WIN]
unsigned int max_ordird_qp
struct adapter_params params
struct sysctl_oid * fwq_oid
const void * reset_thread
const struct devnames * names
uint8_t chan_map[MAX_NCHAN]
struct t4_offload_policy * policy
volatile uint8_t * udbs_base
const struct chip_params * chip_params
struct sysctl_ctx_list ctx
struct resource * regs_res
struct resource * udbs_res
struct adapter_params params
struct rwlock policy_lock
struct resource * msix_res
struct port_info * port[MAX_NPORTS]
struct task fatal_error_task
struct sysctl_oid * ctrlq_oid
struct memwin memwin[NUM_MEMWIN]
struct callout sfl_callout
struct taskqueue * tq[MAX_NCHAN]
u8 dbg_bitmap[CUDBG_MAX_BITMAP_LEN]
const char * vi_ifnet_name
__u8 fmt[FW_DEVLOG_FMT_LEN]
__be32 params[FW_DEVLOG_FMT_PARAMS_NUM]
union fw_ldst_cmd::fw_ldst u
const uint8_t * mcaddr[FW_MAC_EXACT_CHUNK]
struct sysctl_ctx_list ctx
struct link_config link_cfg
struct tx_sched_params * sched_params
uint64_t cl_fast_recycled
counter_u64_t rx_iscsi_ddp_setup_error
uint64_t rx_iscsi_fl_pdus
uint64_t rx_iscsi_ddp_pdus
u_long rx_toe_tls_records
uint64_t rx_iscsi_fl_octets
uint64_t rx_iscsi_ddp_octets
counter_u64_t rx_iscsi_ddp_setup_ok
counter_u64_t tx_iscsi_octets
counter_u64_t tx_iscsi_iso_wrs
counter_u64_t tx_toe_tls_octets
counter_u64_t tx_toe_tls_records
counter_u64_t tx_iscsi_pdus
int counter_val[SGE_NCOUNTERS]
int timer_val[SGE_NTIMERS]
uint64_t kern_tls_options
uint64_t kern_tls_partial
uint64_t kern_tls_records
uint64_t kern_tls_fin_short
struct sge_ofld_rxq * ofld_rxq
struct sge_nm_rxq * nm_rxq
struct sge_nm_txq * nm_txq
struct sge_ofld_txq * ofld_txq
struct offload_rule * rule
uint32_t data[T4_SGE_CONTEXT_SIZE/4]
union aopen_entry * afree
struct filter_entry * ftid_tab
struct filter_entry * hpftid_tab
union aopen_entry * atid_tab
int update_hc_on_pmtu_change
int cop_managed_offloading
u32 tcp6_in_errs[MAX_NCHAN]
u32 tnl_tx_drops[MAX_NCHAN]
u32 mac_in_errs[MAX_NCHAN]
u32 tnl_cong_drops[MAX_NCHAN]
u32 ofld_vlan_drops[MAX_NCHAN]
u32 tcp_in_errs[MAX_NCHAN]
u32 hdr_in_errs[MAX_NCHAN]
u32 ofld_chan_drops[MAX_NCHAN]
struct tx_cl_rl_params cl_rl[]
void(* async_event)(struct adapter *)
int(* deactivate)(struct adapter *)
int(* activate)(struct adapter *)
struct sysctl_ctx_list ctx
struct sysctl_oid * ofld_rxq_oid
struct sysctl_oid * rxq_oid
struct fw_vi_stats_vf stats
struct timeval last_refreshed
struct sysctl_oid * nm_rxq_oid
uint8_t hw_addr[ETHER_ADDR_LEN]
struct sysctl_oid * txq_oid
struct sysctl_oid * ofld_txq_oid
struct sysctl_oid * nm_txq_oid
int t4_release_clip_addr(struct adapter *sc, struct in6_addr *in6)
struct clip_entry * t4_get_clip_entry(struct adapter *sc, struct in6_addr *in6, bool add)
void t4_init_clip_table(struct adapter *)
void t4_clip_modunload(void)
void t4_destroy_clip_table(struct adapter *)
int sysctl_clip(SYSCTL_HANDLER_ARGS)
void t4_clip_modload(void)
#define V_QINTR_TIMER_IDX(x)
#define V_QINTR_CNT_EN(x)
#define CHELSIO_T4_SCHED_QUEUE
#define CHELSIO_T4_REGDUMP
#define CHELSIO_T4_SET_FILTER_MODE
#define CHELSIO_T4_GET_SGE_CONTEXT
#define CHELSIO_T4_CLEAR_STATS
#define CHELSIO_T4_RELEASE_CLIP_ADDR
#define CHELSIO_T4_CUDBG_DUMP
#define CHELSIO_T4_LOAD_BOOTCFG
#define CHELSIO_T4_LOAD_BOOT
#define CHELSIO_T4_GET_TRACER
#define CHELSIO_T4_GET_FILTER_MODE
#define CHELSIO_T4_HOLD_CLIP_ADDR
#define CHELSIO_T4_SETREG
#define CHELSIO_T4_SET_FILTER_MASK
#define CHELSIO_T4_GETREG
#define CHELSIO_T4_LOAD_CFG
#define CHELSIO_T4_LOAD_FW
#define CHELSIO_T4_SET_OFLD_POLICY
#define CHELSIO_T4_GET_FILTER
#define CHELSIO_T4_GET_MEM
#define CHELSIO_T4_GET_I2C
#define CHELSIO_T4_DEL_FILTER
#define CHELSIO_T4_SCHED_CLASS
#define CHELSIO_T4_SET_TRACER
#define CHELSIO_T4_SET_FILTER
int cxgbe_tls_tag_alloc(struct ifnet *ifp, union if_snd_tag_alloc_params *params, struct m_snd_tag **pt)
void t6_ktls_modunload(void)
void t6_ktls_modload(void)
int t4_init_l2t(struct adapter *sc, int flags)
int t4_free_l2t(struct l2t_data *d)
int sysctl_l2t(SYSCTL_HANDLER_ARGS)
int do_l2t_write_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m)
void t4_fatal_err(struct adapter *sc, bool fw_error)
static void dump_cim_regs(struct adapter *)
static int set_params__pre_init(struct adapter *)
static int cxgbe_detach(device_t)
static int port_mword(struct port_info *pi, uint32_t speed)
static int sysctl_ulprx_la(SYSCTL_HANDLER_ARGS)
static eventhandler_tag vxlan_stop_evtag
static int sysctl_tx_vm_wr(SYSCTL_HANDLER_ARGS)
static struct callout fatal_callout
static void t4_set_desc(struct adapter *)
int t4_setup_intr_handlers(struct adapter *sc)
static int cxgbe_ioctl(struct ifnet *, unsigned long, caddr_t)
static void mem_region_show(struct sbuf *sb, const char *name, unsigned int from, unsigned int to)
static int sysctl_qsize_txq(SYSCTL_HANDLER_ARGS)
static driver_t vcxgbe_driver
static void queue_tid_release(struct adapter *sc, int tid)
static struct fw_info * find_fw_info(int chip)
static void set_current_media(struct port_info *pi)
static int get_params__pre_init(struct adapter *)
static int sysctl_mps_tcam_t6(SYSCTL_HANDLER_ARGS)
static int sysctl_hw_sched(SYSCTL_HANDLER_ARGS)
static int notify_siblings(device_t, int)
static int sysctl_path_mtus(SYSCTL_HANDLER_ARGS)
static driver_t cxl_driver
static devclass_t t6_devclass
static int contact_firmware(struct adapter *)
static void ifmedia_add4(struct ifmedia *ifm, int m)
static int load_fw_module(struct adapter *sc, const struct firmware **dcfg, const struct firmware **fw)
static char * caps_decoder[]
static int mod_event(module_t, int, void *)
static int sysctl_reset(SYSCTL_HANDLER_ARGS)
static void t4_init_atid_table(struct adapter *)
int cxgbe_media_change(struct ifnet *ifp)
static int copy_cfg_file_to_card(struct adapter *sc, char *cfg_file, uint32_t mtype, uint32_t moff)
static void quiesce_wrq(struct sge_wrq *)
static int sysctl_lb_stats(SYSCTL_HANDLER_ARGS)
static int t4_alloc_irq(struct adapter *, struct irq *, int rid, driver_intr_t *, void *, char *)
int t4_os_find_pci_capability(struct adapter *sc, int cap)
static int sysctl_linkdnrc(SYSCTL_HANDLER_ARGS)
static int t4_reset_post(device_t, device_t)
static int sysctl_reset_sensor(SYSCTL_HANDLER_ARGS)
static void cxgbe_init(void *)
#define SYSCTL_CAP(name, n, text)
static void t4_clr_vi_stats(struct adapter *sc, u_int vin)
static int vcxgbe_detach(device_t)
void t4_os_cim_err(struct adapter *sc)
static int sysctl_module_fec(SYSCTL_HANDLER_ARGS)
static int t4_suspend(device_t)
void t4_add_adapter(struct adapter *sc)
static int load_cfg(struct adapter *, struct t4_data *)
void t4_os_link_changed(struct port_info *pi)
static int sysctl_link_fec(SYSCTL_HANDLER_ARGS)
static void cxgbe_tick(void *)
int alloc_atid(struct adapter *sc, void *ctx)
void doom_vi(struct adapter *sc, struct vi_info *vi)
#define MAX_READ_BUF_SIZE
static driver_t cxgbe_driver
static const char * qname[CIM_NUM_IBQ+CIM_NUM_OBQ_T5]
static void t4_vxlan_stop_handler(void *arg __unused, struct ifnet *ifp, sa_family_t family, u_int port)
static void delayed_panic(void *arg)
static int t4_range_cmp(const void *a, const void *b)
static void unload_fw_module(struct adapter *sc, const struct firmware *dcfg, const struct firmware *fw)
static int vcxgbe_probe(device_t)
static int sysctl_ddp_stats(SYSCTL_HANDLER_ARGS)
static const struct memwin_init t4_memwin[NUM_MEMWIN]
static struct sx t4_list_lock
int adapter_init(struct adapter *sc)
static u_int add_maddr(void *arg, struct sockaddr_dl *sdl, u_int cnt)
int update_mac_settings(struct ifnet *ifp, int flags)
void * lookup_atid(struct adapter *sc, int atid)
static void cxgbe_qflush(struct ifnet *)
static int cxgbe_probe(device_t)
static int cfg_itype_and_nqueues(struct adapter *, struct intrs_and_queues *)
static void dump_devlog(struct adapter *)
void t4_init_devnames(struct adapter *sc)
static driver_t cc_driver
static int sysctl_mps_tcam(SYSCTL_HANDLER_ARGS)
static void t5_attribute_workaround(device_t dev)
int t4_map_bar_2(struct adapter *sc)
static int sysctl_holdoff_tmr_idx(SYSCTL_HANDLER_ARGS)
int rw_via_memwin(struct adapter *sc, int idx, uint32_t addr, uint32_t *val, int len, int rw)
static void t4_vxlan_stop(struct adapter *sc, void *arg)
static bool fixed_ifmedia(struct port_info *)
static int t4_detach(device_t)
static int partition_resources(struct adapter *)
static void fatal_error_task(void *, int)
static const struct field_desc tp_la2[]
static int get_sge_context(struct adapter *, struct t4_sge_context *)
static int cxgbe_init_synchronized(struct vi_info *)
void vi_sysctls(struct vi_info *vi)
static int sysctl_cpl_stats(SYSCTL_HANDLER_ARGS)
static void cxgbe_sysctls(struct port_info *)
static void calculate_iaq(struct adapter *sc, struct intrs_and_queues *iaq, int itype, int navail)
static void position_memwin(struct adapter *, int, uint32_t)
#define T4_REGSTAT(name, stat, desc)
static int cxgbe_attach(device_t)
#define FW_PARAM_DEV(param)
static int sysctl_vdd(SYSCTL_HANDLER_ARGS)
static int t4_free_irq(struct adapter *, struct irq *)
static struct taskqueue * reset_tq
void t4_sysctls(struct adapter *sc)
static int stop_adapter(struct adapter *sc)
static void save_caps_and_params(struct adapter *sc, struct adapter_pre_reset_state *o)
void t4_os_portmod_changed(struct port_info *pi)
static device_method_t t4_methods[]
static int sysctl_force_fec(SYSCTL_HANDLER_ARGS)
device_method_t cxgbe_methods[]
static int sysctl_tp_la_mask(SYSCTL_HANDLER_ARGS)
void free_atid(struct adapter *sc, int atid)
static const struct field_desc tp_la0[]
static int sysctl_bitfield_8b(SYSCTL_HANDLER_ARGS)
static int cxgbe_vi_attach(device_t dev, struct vi_info *vi)
static int sbuf_cim_la(struct adapter *sc, struct sbuf *sb, int flags)
static void build_medialist(struct port_info *)
static void get_regs(struct adapter *, struct t4_regdump *, uint8_t *)
static driver_t t5_driver
int t4_detach_common(device_t dev)
static int fixup_devlog_params(struct adapter *)
static void sbuf_cim_la6(struct adapter *sc, struct sbuf *sb, uint32_t *buf, uint32_t cfg)
static int mem_desc_cmp(const void *a, const void *b)
static int t4_ifnet_unit(struct adapter *sc, struct port_info *pi)
SX_SYSINIT(cxgbe_mlu, &mlu, "cxgbe mod load/unload")
static devclass_t cxgbe_devclass
static int sysctl_int_array(SYSCTL_HANDLER_ARGS)
static int sysctl_handle_t4_reg64(SYSCTL_HANDLER_ARGS)
static void enable_vxlan_rx(struct adapter *)
static int sysctl_cim_qcfg(SYSCTL_HANDLER_ARGS)
int t4_map_bars_0_and_4(struct adapter *sc)
static devclass_t t5_devclass
static int t4_attach(device_t)
static int t6_probe(device_t)
static driver_t vcc_driver
static int sysctl_bitfield_16b(SYSCTL_HANDLER_ARGS)
static devclass_t vcxl_devclass
static int validate_mt_off_len(struct adapter *, int, uint32_t, uint32_t, uint32_t *)
static void setup_memwin(struct adapter *)
static const struct field_desc tp_la1[]
static int apply_cfg_and_initialize(struct adapter *sc, char *cfg_file, const struct caps_allowed *caps_allowed)
static int adapter_full_init(struct adapter *)
static int set_offload_policy(struct adapter *, struct t4_offload_policy *)
static int sysctl_qsize_rxq(SYSCTL_HANDLER_ARGS)
static void vi_tick(void *)
static int cxgbe_transmit(struct ifnet *, struct mbuf *)
static void vi_full_uninit(struct vi_info *)
static int sysctl_temperature(SYSCTL_HANDLER_ARGS)
static void adapter_full_uninit(struct adapter *)
static int sysctl_autoneg(SYSCTL_HANDLER_ARGS)
static int t4_probe(device_t)
#define FW_INTFVER(chip, intf)
static void init_link_config(struct port_info *)
static void quiesce_iq_fl(struct adapter *, struct sge_iq *, struct sge_fl *)
static int sysctl_meminfo(SYSCTL_HANDLER_ARGS)
static int fwmtype_to_hwmtype(int)
static int read_i2c(struct adapter *, struct t4_i2c_data *)
static int sysctl_tx_rate(SYSCTL_HANDLER_ARGS)
static void tp_la_show2(struct sbuf *sb, uint64_t *p, int idx)
static int compare_caps_and_params(struct adapter *sc, struct adapter_pre_reset_state *o)
static const char *const devlog_level_strings[]
static devclass_t vcc_devclass
static int cxgbe_uninit_synchronized(struct vi_info *)
#define T4_PORTSTAT(name, desc)
static void reset_adapter_task(void *, int)
#define COMPARE_PARAM(p, name)
static driver_t t6_driver
static uint64_t cxgbe_get_counter(struct ifnet *, ift_counter)
CTASSERT(sizeof(struct cluster_metadata)<=CL_METADATA_SIZE)
int t4_os_pci_restore_state(struct adapter *sc)
static int sysctl_tnl_stats(SYSCTL_HANDLER_ARGS)
static void t4_get_vi_stats(struct adapter *sc, u_int vin, struct fw_vi_stats_vf *stats)
static uint64_t read_vf_stat(struct adapter *sc, u_int vin, int reg)
static int t4_child_location(device_t, device_t, struct sbuf *)
static int load_bootcfg(struct adapter *, struct t4_data *)
static devclass_t cc_devclass
int vi_init(struct vi_info *vi)
static int apply_link_config(struct port_info *)
static int hold_clip_addr(struct adapter *, struct t4_clip_addr *)
static void quiesce_vi(struct vi_info *)
static d_ioctl_t t4_ioctl
static int sysctl_requested_fec(SYSCTL_HANDLER_ARGS)
static int t4_reset_prepare(device_t, device_t)
static int clear_stats(struct adapter *, u_int)
static driver_t vcxl_driver
static int t4_read_port_device(device_t, int, device_t *)
static void field_desc_show(struct sbuf *sb, uint64_t v, const struct field_desc *f)
static eventhandler_tag vxlan_start_evtag
static int reset_adapter(struct adapter *sc)
static void tp_la_show3(struct sbuf *sb, uint64_t *p, int idx)
static int set_params__post_init(struct adapter *)
static int load_fw(struct adapter *, struct t4_data *)
static int sysctl_cpus(SYSCTL_HANDLER_ARGS)
static int fixup_link_config(struct port_info *)
static void t4_vxlan_start(struct adapter *sc, void *arg)
static int sysctl_devlog(SYSCTL_HANDLER_ARGS)
void t4_iterate(void(*func)(struct adapter *, void *), void *arg)
static void tp_la_show(struct sbuf *sb, uint64_t *p, int idx)
static devclass_t vcxgbe_devclass
void cxgbe_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
MALLOC_DEFINE(M_CXGBE, "cxgbe", "Chelsio T4/T5 Ethernet driver and services")
void release_tid(struct adapter *sc, int tid, struct sge_wrq *ctrlq)
static int sysctl_tid_stats(SYSCTL_HANDLER_ARGS)
static int cudbg_dump(struct adapter *, struct t4_cudbg_dump *)
static void cxgbe_vi_detach(struct vi_info *vi)
static int sysctl_tcp_stats(SYSCTL_HANDLER_ARGS)
static int sysctl_wcwr_stats(SYSCTL_HANDLER_ARGS)
static device_method_t t6_methods[]
static void sbuf_cim_la4(struct adapter *sc, struct sbuf *sb, uint32_t *buf, uint32_t cfg)
static void tweak_tunables(void)
static device_method_t vcxgbe_methods[]
static int release_clip_addr(struct adapter *, struct t4_clip_addr *)
static int validate_mem_range(struct adapter *, uint32_t, uint32_t)
static void t4_free_atid_table(struct adapter *)
static int sysctl_tp_err_stats(SYSCTL_HANDLER_ARGS)
int t4_os_pci_save_state(struct adapter *sc)
static int sysctl_loadavg(SYSCTL_HANDLER_ARGS)
static int sysctl_holdoff_pktc_idx(SYSCTL_HANDLER_ARGS)
static void cxgbe_refresh_stats(struct vi_info *)
static devclass_t t4_devclass
static int read_card_mem(struct adapter *, int, struct t4_mem_range *)
static int alloc_extra_vi(struct adapter *, struct port_info *, struct vi_info *)
static int sysctl_fcoe_stats(SYSCTL_HANDLER_ARGS)
static int sysctl_tp_la(SYSCTL_HANDLER_ARGS)
static int sysctl_cim_la(SYSCTL_HANDLER_ARGS)
static int t4_resume(device_t)
static int sysctl_pm_stats(SYSCTL_HANDLER_ARGS)
int begin_synchronized_op(struct adapter *sc, struct vi_info *vi, int flags, char *wmesg)
void end_synchronized_op(struct adapter *sc, int flags)
#define FW_MAC_EXACT_CHUNK
static int sysctl_rdma_stats(SYSCTL_HANDLER_ARGS)
static device_method_t t5_methods[]
static int t4_ready(device_t)
static int install_kld_firmware(struct adapter *sc, struct fw_h *card_fw, const struct fw_h *drv_fw, const char *reason, int *already)
static int t5_probe(device_t)
static int vcxgbe_attach(device_t)
static void write_global_rss_key(struct adapter *sc)
static int sysctl_cim_pif_la(SYSCTL_HANDLER_ARGS)
static int sbuf_devlog(struct adapter *sc, struct sbuf *sb, int flags)
static const char *const devlog_facility_strings[]
static int sysctl_noflowq(SYSCTL_HANDLER_ARGS)
static bool ok_to_reset(struct adapter *sc)
#define FW_PARAM_PFVF(param)
static int sysctl_cctrl(SYSCTL_HANDLER_ARGS)
static void dump_cimla(struct adapter *)
static void t4_vxlan_start_handler(void *arg __unused, struct ifnet *ifp, sa_family_t family, u_int port)
DRIVER_MODULE(t4nex, pci, t4_driver, t4_devclass, mod_event, 0)
static void free_offload_policy(struct t4_offload_policy *)
static int sysctl_pause_settings(SYSCTL_HANDLER_ARGS)
static int sysctl_cim_ibq_obq(SYSCTL_HANDLER_ARGS)
static devclass_t cxl_devclass
static int vi_full_init(struct vi_info *)
static void quiesce_txq(struct sge_txq *)
static uint64_t vi_get_counter(struct ifnet *, ift_counter)
MODULE_DEPEND(t4nex, firmware, 1, 1, 1)
static int get_params__post_init(struct adapter *)
static void vi_refresh_stats(struct vi_info *)
static driver_t t4_driver
static int sysctl_cim_ma_la(SYSCTL_HANDLER_ARGS)
static void tcamxy2valmask(uint64_t x, uint64_t y, uint8_t *addr, uint64_t *mask)
static void calculate_nqueues(int *t, int nc, const int c)
static int fw_compatible(const struct fw_h *hdr1, const struct fw_h *hdr2)
static const struct memwin_init t5_memwin[NUM_MEMWIN]
static void update_nirq(struct intrs_and_queues *iaq, int nports)
static int sysctl_btphy(SYSCTL_HANDLER_ARGS)
static int load_boot(struct adapter *, struct t4_bootrom *)
static int sysctl_tids(SYSCTL_HANDLER_ARGS)
static struct cdevsw t4_cdevsw
void mp_ring_check_drainage(struct mp_ring *r, int budget)
bool mp_ring_is_idle(struct mp_ring *r)
int mp_ring_enqueue(struct mp_ring *r, void **items, int n, int budget)
void mp_ring_reset_stats(struct mp_ring *r)
#define V_TXPKT_VF_VLD(x)
#define V_TXPKT_OPCODE(x)
#define A_TP_CMM_MM_RX_FLST_BASE
#define A_TP_PMM_RX_MAX_PAGE
#define T5_PORT_REG(idx, reg)
#define A_TP_FINWAIT2_TIMER
#define A_MPS_CLS_TCAM_DATA2_CTL
#define V_KEEPALIVEINTVL(x)
#define G_EXT_MEM1_BASE(x)
#define A_TP_CMM_TIMER_BASE
#define A_PCIE_PF_EXPROM_OFST
#define A_MPS_TRC_RSS_CONTROL
#define A_EDC_H_BIST_STATUS_RDATA
#define MPS_CLS_SRAM_H(idx)
#define A_MPS_RX_MAC_BG_PG_CNT0
#define F_UPDBGLACAPTPCONLY
#define A_TP_PMM_TX_MAX_PAGE
#define A_MPS_VF_STAT_TX_VF_BCAST_BYTES_L
#define A_MPS_RX_LPBK_BG_PG_CNT0
#define F_ATTACKFILTERENABLE
#define A_MA_TARGET_MEM_ENABLE
#define PORT_REG(idx, reg)
#define A_MPS_CLS_TCAM_RDATA2_REQ_ID1
#define F_DROPERRORTCPHDRLEN
#define PCIE_MEM_ACCESS_REG(reg_addr, idx)
#define A_CIM_SDRAM_BASE_ADDR
#define M_TIMERBACKOFFINDEX0
#define F_DROPERRORPKTLEN
#define V_STATSOURCE_T5(x)
#define F_DROPERRORCSUMIP
#define A_ULP_TX_ERR_TABLE_BASE
#define F_EXT_MEM1_ENABLE
#define V_RXTSHIFTMAXR1(x)
#define A_UP_IBQ_0_SHADOW_RDADDR
#define G_T6_SRAM_PRIO3(x)
#define A_TP_CMM_MM_MAX_PSTRUCT
#define F_DROPERRORTCPOPT
#define A_MPS_CLS_TCAM_RDATA0_REQ_ID1
#define A_TP_GLOBAL_CONFIG
#define A_LE_DB_ACT_CNT_IPV6
#define A_TP_RSS_CONFIG_TNL
#define A_PCIE_MEM_ACCESS_OFFSET
#define V_KEEPALIVEMAXR2(x)
#define F_DROPERRORIPHDRLEN
#define A_TP_DBG_LA_CONFIG
#define G_T6_DBVFIFO_SIZE(x)
#define A_TP_CMM_TCB_BASE
#define A_ULP_RX_CTX_BASE
#define A_MA_EXT_MEMORY_BAR
#define G_EXT_MEM1_SIZE(x)
#define A_SGE_FLM_CACHE_BADDR
#define A_TP_SYNC_TIME_HI
#define G_EXT_MEM_BASE(x)
#define A_MPS_VF_STAT_RX_VF_ERR_FRAMES_H
#define A_CIM_EXTMEM2_BASE_ADDR
#define G_T6_SRAM_PRIO2(x)
#define A_LE_DB_ACT_CNT_IPV4
#define A_CIM_SDRAM_ADDR_SIZE
#define A_MAC_PORT_AFRAMECHECKSEQUENCEERRORS
#define A_TP_TIMER_RESOLUTION
#define V_KEEPALIVEMAXR1(x)
#define A_LE_DB_SERVER_INDEX
#define A_EDC_H_BIST_USER_WDATA2
#define A_UP_IBQ_0_RDADDR
#define MYPF_REG(reg_addr)
#define A_TP_TCP_BACKOFF_REG0
#define A_CIM_EXTMEM2_ADDR_SIZE
#define G_DELAYEDACKRESOLUTION(x)
#define A_PCIE_MEM_ACCESS_BASE_WIN
#define A_EDC_H_BIST_USER_WDATA0
#define A_EDC_H_BIST_CMD_LEN
#define F_DROPERRORETHHDRLEN
#define G_TIMESTAMPRESOLUTION(x)
#define A_MPS_T5_TRC_RSS_CONTROL
#define V_RXTSHIFTMAXR2(x)
#define A_MPS_CLS_TCAM_RDATA1_REQ_ID1
#define A_SGE_DBVFIFO_BADDR
#define A_LE_DB_HASH_TID_BASE
#define G_T6_SRAM_PRIO0(x)
#define A_T6_LE_DB_HASH_TID_BASE
#define A_UP_OBQ_0_SHADOW_REALADDR
#define A_UP_UP_DBG_LA_CFG
#define A_TP_MIB_TNL_CNG_DROP_0
#define G_STATSOURCE_T5(x)
#define A_SGE_DBQ_CTXT_BADDR
#define A_MPS_PORT_STAT_RX_PORT_CRC_ERROR_L
#define A_EDC_H_BIST_DATA_PATTERN
#define A_TP_PMM_TX_PAGE_SIZE
#define A_MA_EXT_MEMORY1_BAR
#define A_MPS_RX_VXLAN_TYPE
#define MPS_CLS_TCAM_Y_L(idx)
#define A_SGE_IMSG_CTXT_BADDR
#define A_MAC_PORT_MTIP_1G10G_RX_CRCERRORS
#define S_T6_MULTILISTEN0
#define V_KEEPALIVEIDLE(x)
#define MPS_CLS_SRAM_L(idx)
#define A_TP_PMM_RX_PAGE_SIZE
#define G_EXT_MEM_SIZE(x)
#define A_EDC_H_BIST_USER_WDATA1
#define A_UP_OBQ_0_REALADDR
#define A_SGE_DBVFIFO_SIZE
#define A_TP_SYNC_TIME_LO
#define A_LE_DB_SRVR_START_INDEX
#define A_LE_DB_HASH_TBL_BASE_ADDR
#define A_TP_CMM_MM_TX_FLST_BASE
#define A_LE_DB_ACTIVE_TABLE_START_INDEX
#define A_LE_DB_TID_HASHBASE
#define G_TIMERRESOLUTION(x)
#define A_TP_TX_MOD_QUEUE_REQ_MAP
#define VF_MPS_REG(reg_addr)
#define G_T6_SRAM_PRIO1(x)
#define A_SGE_PF_KDOORBELL
#define MPS_CLS_TCAM_X_L(idx)
#define V_CTLTCAMINDEX(x)
#define A_TP_CMM_MM_PS_FLST_BASE
#define F_DROPERRORATTACK
SYSCTL_INT(_hw_cxgbe, OID_AUTO, fl_pktshift, CTLFLAG_RDTUN, &fl_pktshift, 0, "payload DMA offset in rx buffer (bytes)")
int t4_free_smt(struct smt_data *s)
int t4_init_smt(struct adapter *sc, int flags)
int do_smt_write_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m)
int sysctl_smt(SYSCTL_HANDLER_ARGS)
#define G_FW_HDR_FW_VER_MAJOR(x)
#define F_FW_RSS_VI_CONFIG_CMD_UDPEN
@ FW_PARAM_DEV_DIAG_RESET_TMP_SENSOR
@ FW_CAPS_CONFIG_NIC_HASHFILTER
@ FW_CAPS_CONFIG_NIC_ETHOFLD
#define FW_PORT_CAP32_FC_TX
#define F_FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN
#define S_FW_PORT_CAP32_SPEED
#define M_FW_PORT_CAP32_FEC
#define FW_PORT_CAP32_SPEED_1G
#define FW_PORT_CAP32_FEC_RS
static bool fec_supported(uint32_t caps)
#define FW_PORT_CAP32_FORCE_PAUSE
#define G_FW_PARAMS_PARAM_Y(x)
#define M_FW_PORT_CAP32_SPEED
#define F_FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN
#define G_FW_HDR_FW_VER_BUILD(x)
@ FW_DEVLOG_FACILITY_FILTER
@ FW_DEVLOG_FACILITY_CHNET
@ FW_DEVLOG_FACILITY_PORT
@ FW_DEVLOG_FACILITY_OFLD
@ FW_DEVLOG_FACILITY_SCHED
@ FW_DEVLOG_FACILITY_CORE
@ FW_DEVLOG_FACILITY_TIMER
@ FW_DEVLOG_FACILITY_FOISCSI
@ FW_DEVLOG_FACILITY_ISCSI
@ FW_DEVLOG_FACILITY_FCOE
@ FW_DEVLOG_FACILITY_FOFCOE
@ FW_DEVLOG_FACILITY_DMAQ
#define FW_PORT_CAP32_ANEG
#define FW_PORT_CAP32_SPEED_100G
#define V_FW_PARAMS_PARAM_Y(x)
#define FW_PORT_CAP32_FC_RX
#define FW_PORT_CAP32_FORCE_FEC
#define V_FW_PARAMS_PARAM_YZ(x)
static bool is_bt(enum fw_port_type port_type)
#define F_FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN
#define FW_PORT_CAP32_SPEED_10G
@ FW_HDR_FLAGS_RESET_HALT
#define V_FW_CAPS_CONFIG_CMD_MEMADDR64K_CF(x)
@ FW_PARAMS_PARAM_DEV_RSSINFO
@ FW_PARAMS_PARAM_DEV_LOAD
@ FW_PARAMS_PARAM_DEV_KTLS_HW
@ FW_PARAMS_PARAM_DEV_DIAG
#define F_FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN
#define V_FW_PORT_CAP32_FEC(x)
@ FW_PORT_MOD_TYPE_TWINAX_PASSIVE
@ FW_PORT_MOD_TYPE_UNKNOWN
@ FW_PORT_MOD_TYPE_TWINAX_ACTIVE
@ FW_PORT_MOD_TYPE_NOTSUPPORTED
#define FW_PORT_CAP32_SPEED_50G
#define FW_PORT_CAP32_FEC_BASER_RS
#define G_FW_PORT_CAP32_SPEED(x)
#define V_FW_PARAMS_MNEM(x)
#define V_FW_LDST_CMD_IDX(x)
#define V_FW_LDST_CMD_ADDRSPACE(x)
@ FW_CAPS_CONFIG_SWITCH_EGRESS
@ FW_CAPS_CONFIG_SWITCH_INGRESS
#define FW_VERSION32(MAJOR, MINOR, MICRO, BUILD)
@ FW_PORT_TYPE_FIBER_XAUI
#define V_FW_LDST_CMD_FID(x)
#define G_FW_HDR_FW_VER_MINOR(x)
@ FW_PARAMS_PARAM_DEV_KTLS_HW_USER_ENABLE
#define G_FW_PARAMS_PARAM_Z(x)
#define FW_PORT_CAP32_SPEED_100M
#define F_FW_CAPS_CONFIG_CMD_CFVALID
#define FW_PORT_CAP32_SPEED_40G
@ FW_CAPS_CONFIG_RDMA_RDDP
@ FW_CAPS_CONFIG_RDMA_RDMAC
#define V_FW_PARAMS_PARAM_Z(x)
#define V_FW_CAPS_CONFIG_CMD_MEMTYPE_CF(x)
#define V_FW_PARAMS_PARAM_X(x)
@ FW_CAPS_CONFIG_ISCSI_T10DIF
@ FW_CAPS_CONFIG_ISCSI_INITIATOR_PDU
@ FW_CAPS_CONFIG_ISCSI_TARGET_PDU
#define G_FW_HDR_FW_VER_MICRO(x)
#define FW_PORT_CAP32_SPEED_25G
#define FW_LEN16(fw_struct)
struct fw_ldst_cmd::fw_ldst::fw_ldst_mps::fw_ldst_mps_rplc rplc
union fw_ldst_cmd::fw_ldst::fw_ldst_mps mps