Add some new event counters.
Add the following counters for 82575 and newer except 80003, ICHs and PCHs: - Only 82576 document describes about the circuit breaker, so the following two might be only for 82575: - Circuit Breaker TX Manageability Packet - Circuit Breaker RX Dropped Packet - 82575's document doesn't describe the following two, but we can see the same value as GO{T,R}C have: - Host Good Octets RX - Host Good Octets TX - 82575's document doesn't describe the LENERRS (Length Errors) counter. I don't know if it has. - Perhaps Non-SerDes/SGMII devices don't have SCVPC (SerDes/SGMII Code Violation Packet) register. We don't care if it's SerDes/SGMII or not for now. - HRMPC (Header Redirection Missed Packet) appears only once in 8257[56]'s datasheet. FreeBSD's igb counts it, so we do, too. - Count the following two for I350 and newer. I don't know if PCHs have: - EEE TX LPI - EEE RX LPI
This commit is contained in:
parent
94358c7ac6
commit
87132aa835
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: if_wm.c,v 1.775 2023/05/11 07:14:46 msaitoh Exp $ */
|
||||
/* $NetBSD: if_wm.c,v 1.776 2023/05/11 07:19:02 msaitoh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
|
||||
|
@ -82,7 +82,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.775 2023/05/11 07:14:46 msaitoh Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.776 2023/05/11 07:19:02 msaitoh Exp $");
|
||||
|
||||
#ifdef _KERNEL_OPT
|
||||
#include "opt_if_wm.h"
|
||||
|
@ -601,6 +601,7 @@ struct wm_softc {
|
|||
struct evcnt sc_ev_mcc; /* Multiple Collision */
|
||||
struct evcnt sc_ev_latecol; /* Late Collision */
|
||||
struct evcnt sc_ev_colc; /* Collision */
|
||||
struct evcnt sc_ev_cbtmpc; /* Circuit Breaker Tx Mng. Packet */
|
||||
struct evcnt sc_ev_dc; /* Defer */
|
||||
struct evcnt sc_ev_tncrs; /* Tx-No CRS */
|
||||
struct evcnt sc_ev_sec; /* Sequence Error */
|
||||
|
@ -611,6 +612,7 @@ struct wm_softc {
|
|||
struct evcnt sc_ev_htdpmc; /* Host Tx Discarded Pkts by MAC */
|
||||
|
||||
struct evcnt sc_ev_rlec; /* Receive Length Error */
|
||||
struct evcnt sc_ev_cbrdpc; /* Circuit Breaker Rx Dropped Packet */
|
||||
struct evcnt sc_ev_prc64; /* Packets Rx (64 bytes) */
|
||||
struct evcnt sc_ev_prc127; /* Packets Rx (65-127 bytes) */
|
||||
struct evcnt sc_ev_prc255; /* Packets Rx (128-255 bytes) */
|
||||
|
@ -673,12 +675,17 @@ struct wm_softc {
|
|||
struct evcnt sc_ev_hgptc; /* Host Good Packets TX */
|
||||
struct evcnt sc_ev_debug4; /* Debug Counter 4 */
|
||||
struct evcnt sc_ev_htcbdpc; /* Host Tx Circuit Breaker Drp. Pkts */
|
||||
|
||||
struct evcnt sc_ev_hgorc; /* Host Good Octets Rx */
|
||||
struct evcnt sc_ev_hgotc; /* Host Good Octets Tx */
|
||||
struct evcnt sc_ev_lenerrs; /* Length Error */
|
||||
struct evcnt sc_ev_tlpic; /* EEE Tx LPI */
|
||||
struct evcnt sc_ev_rlpic; /* EEE Rx LPI */
|
||||
struct evcnt sc_ev_b2ogprc; /* BMC2OS pkts received by host */
|
||||
struct evcnt sc_ev_o2bspc; /* OS2BMC pkts transmitted by host */
|
||||
struct evcnt sc_ev_b2ospc; /* BMC2OS pkts sent by BMC */
|
||||
struct evcnt sc_ev_o2bgptc; /* OS2BMC pkts received by BMC */
|
||||
|
||||
struct evcnt sc_ev_scvpc; /* SerDes/SGMII Code Violation Pkt. */
|
||||
struct evcnt sc_ev_hrmpc; /* Header Redirection Missed Packet */
|
||||
#endif /* WM_EVENT_COUNTERS */
|
||||
|
||||
struct sysctllog *sc_sysctllog;
|
||||
|
@ -3262,6 +3269,9 @@ alloc_retry:
|
|||
"TCP Segmentation Context Tx Fail");
|
||||
else {
|
||||
/* XXX Is the circuit breaker only for 82576? */
|
||||
evcnt_attach_dynamic(&sc->sc_ev_cbrdpc,
|
||||
EVCNT_TYPE_MISC, NULL, xname,
|
||||
"Circuit Breaker Rx Dropped Packet");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_cbrmpc,
|
||||
EVCNT_TYPE_MISC, NULL, xname,
|
||||
"Circuit Breaker Rx Manageability Packet");
|
||||
|
@ -3289,6 +3299,11 @@ alloc_retry:
|
|||
NULL, xname, "Multiple Collision");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_latecol, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "Late Collisions");
|
||||
|
||||
if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc))
|
||||
evcnt_attach_dynamic(&sc->sc_ev_cbtmpc, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "Circuit Breaker Tx Manageability Packet");
|
||||
|
||||
evcnt_attach_dynamic(&sc->sc_ev_dc, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "Defer");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_prc64, EVCNT_TYPE_MISC,
|
||||
|
@ -3411,8 +3426,19 @@ alloc_retry:
|
|||
/* XXX Is the circuit breaker only for 82576? */
|
||||
evcnt_attach_dynamic(&sc->sc_ev_htcbdpc, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "Host Tx Circuit Breaker Dropped Packets");
|
||||
|
||||
evcnt_attach_dynamic(&sc->sc_ev_hgorc, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "Host Good Octets Rx");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_hgotc, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "Host Good Octets Tx");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_lenerrs, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "Length Errors");
|
||||
}
|
||||
if ((sc->sc_type >= WM_T_I350) && (sc->sc_type < WM_T_80003)) {
|
||||
if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) {
|
||||
evcnt_attach_dynamic(&sc->sc_ev_tlpic, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "EEE Tx LPI");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_rlpic, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "EEE Rx LPI");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_b2ogprc, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "BMC2OS Packets received by host");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_o2bspc, EVCNT_TYPE_MISC,
|
||||
|
@ -3421,6 +3447,10 @@ alloc_retry:
|
|||
NULL, xname, "BMC2OS Packets sent by BMC");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_o2bgptc, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "OS2BMC Packets received by BMC");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_scvpc, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "SerDes/SGMII Code Violation Packet");
|
||||
evcnt_attach_dynamic(&sc->sc_ev_hrmpc, EVCNT_TYPE_MISC,
|
||||
NULL, xname, "Header Redirection Missed Packet");
|
||||
}
|
||||
#endif /* WM_EVENT_COUNTERS */
|
||||
|
||||
|
@ -3488,8 +3518,10 @@ wm_detach(device_t self, int flags __unused)
|
|||
evcnt_detach(&sc->sc_ev_tsctc);
|
||||
if ((sc->sc_type < WM_T_82575) || WM_IS_ICHPCH(sc))
|
||||
evcnt_detach(&sc->sc_ev_tsctfc);
|
||||
else
|
||||
else {
|
||||
evcnt_detach(&sc->sc_ev_cbrdpc);
|
||||
evcnt_detach(&sc->sc_ev_cbrmpc);
|
||||
}
|
||||
}
|
||||
|
||||
if (sc->sc_type >= WM_T_82542_2_1) {
|
||||
|
@ -3504,6 +3536,10 @@ wm_detach(device_t self, int flags __unused)
|
|||
evcnt_detach(&sc->sc_ev_ecol);
|
||||
evcnt_detach(&sc->sc_ev_mcc);
|
||||
evcnt_detach(&sc->sc_ev_latecol);
|
||||
|
||||
if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc))
|
||||
evcnt_detach(&sc->sc_ev_cbtmpc);
|
||||
|
||||
evcnt_detach(&sc->sc_ev_dc);
|
||||
evcnt_detach(&sc->sc_ev_prc64);
|
||||
evcnt_detach(&sc->sc_ev_prc127);
|
||||
|
@ -3558,12 +3594,20 @@ wm_detach(device_t self, int flags __unused)
|
|||
evcnt_detach(&sc->sc_ev_debug4);
|
||||
evcnt_detach(&sc->sc_ev_rxdmtc);
|
||||
evcnt_detach(&sc->sc_ev_htcbdpc);
|
||||
|
||||
evcnt_detach(&sc->sc_ev_hgorc);
|
||||
evcnt_detach(&sc->sc_ev_hgotc);
|
||||
evcnt_detach(&sc->sc_ev_lenerrs);
|
||||
}
|
||||
if ((sc->sc_type >= WM_T_I350) && (sc->sc_type < WM_T_80003)) {
|
||||
if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) {
|
||||
evcnt_detach(&sc->sc_ev_tlpic);
|
||||
evcnt_detach(&sc->sc_ev_rlpic);
|
||||
evcnt_detach(&sc->sc_ev_b2ogprc);
|
||||
evcnt_detach(&sc->sc_ev_o2bspc);
|
||||
evcnt_detach(&sc->sc_ev_b2ospc);
|
||||
evcnt_detach(&sc->sc_ev_o2bgptc);
|
||||
evcnt_detach(&sc->sc_ev_scvpc);
|
||||
evcnt_detach(&sc->sc_ev_hrmpc);
|
||||
}
|
||||
#endif /* WM_EVENT_COUNTERS */
|
||||
|
||||
|
@ -3895,10 +3939,16 @@ wm_tick(void *arg)
|
|||
WM_EVCNT_ADD(&sc->sc_ev_tx_xoff, CSR_READ(sc, WMREG_XOFFTXC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_rx_macctl, CSR_READ(sc, WMREG_FCRUC));
|
||||
}
|
||||
|
||||
WM_EVCNT_ADD(&sc->sc_ev_scc, CSR_READ(sc, WMREG_SCC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_ecol, CSR_READ(sc, WMREG_ECOL));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_mcc, CSR_READ(sc, WMREG_MCC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_latecol, CSR_READ(sc, WMREG_LATECOL));
|
||||
|
||||
if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) {
|
||||
WM_EVCNT_ADD(&sc->sc_ev_cbtmpc, CSR_READ(sc, WMREG_CBTMPC));
|
||||
}
|
||||
|
||||
WM_EVCNT_ADD(&sc->sc_ev_dc, CSR_READ(sc, WMREG_DC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_prc64, CSR_READ(sc, WMREG_PRC64));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_prc127, CSR_READ(sc, WMREG_PRC127));
|
||||
|
@ -3975,14 +4025,30 @@ wm_tick(void *arg)
|
|||
WM_EVCNT_ADD(&sc->sc_ev_debug4, CSR_READ(sc, WMREG_DEBUG4));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_rxdmtc, CSR_READ(sc, WMREG_RXDMTC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_htcbdpc, CSR_READ(sc, WMREG_HTCBDPC));
|
||||
}
|
||||
|
||||
if (((sc->sc_type >= WM_T_I350) && (sc->sc_type < WM_T_80003))
|
||||
&& ((CSR_READ(sc, WMREG_MANC) & MANC_EN_BMC2OS) != 0)) {
|
||||
WM_EVCNT_ADD(&sc->sc_ev_b2ogprc, CSR_READ(sc, WMREG_B2OGPRC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_o2bspc, CSR_READ(sc, WMREG_O2BSPC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_b2ospc, CSR_READ(sc, WMREG_B2OSPC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_o2bgptc, CSR_READ(sc, WMREG_O2BGPTC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_hgorc,
|
||||
CSR_READ(sc, WMREG_HGORCL) +
|
||||
((uint64_t)CSR_READ(sc, WMREG_HGORCH) << 32));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_hgotc,
|
||||
CSR_READ(sc, WMREG_HGOTCL) +
|
||||
((uint64_t)CSR_READ(sc, WMREG_HGOTCH) << 32));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_lenerrs, CSR_READ(sc, WMREG_LENERRS));
|
||||
}
|
||||
if ((sc->sc_type >= WM_T_I350) && (sc->sc_type < WM_T_80003)) {
|
||||
WM_EVCNT_ADD(&sc->sc_ev_tlpic, CSR_READ(sc, WMREG_TLPIC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_rlpic, CSR_READ(sc, WMREG_RLPIC));
|
||||
if ((CSR_READ(sc, WMREG_MANC) & MANC_EN_BMC2OS) != 0) {
|
||||
WM_EVCNT_ADD(&sc->sc_ev_b2ogprc,
|
||||
CSR_READ(sc, WMREG_B2OGPRC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_o2bspc,
|
||||
CSR_READ(sc, WMREG_O2BSPC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_b2ospc,
|
||||
CSR_READ(sc, WMREG_B2OSPC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_o2bgptc,
|
||||
CSR_READ(sc, WMREG_O2BGPTC));
|
||||
}
|
||||
WM_EVCNT_ADD(&sc->sc_ev_scvpc, CSR_READ(sc, WMREG_SCVPC));
|
||||
WM_EVCNT_ADD(&sc->sc_ev_hrmpc, CSR_READ(sc, WMREG_HRMPC));
|
||||
}
|
||||
net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
|
||||
if_statadd_ref(nsr, if_collisions, colc);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: if_wmreg.h,v 1.129 2023/05/11 07:14:46 msaitoh Exp $ */
|
||||
/* $NetBSD: if_wmreg.h,v 1.130 2023/05/11 07:19:02 msaitoh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001 Wasabi Systems, Inc.
|
||||
|
@ -1152,6 +1152,7 @@ struct livengood_tcpip_ctxdesc {
|
|||
#define WMREG_MCC 0x401c /* Multiple Collision Count - R/clr */
|
||||
#define WMREG_LATECOL 0x4020 /* Late Collisions Count - R/clr */
|
||||
#define WMREG_COLC 0x4028 /* Collision Count - R/clr */
|
||||
#define WMREG_CBTMPC 0x402c /* Circuit Breaker Tx Manageability Packet */
|
||||
#define WMREG_DC 0x4030 /* Defer Count - R/clr */
|
||||
#define WMREG_TNCRS 0x4034 /* Tx with No CRS - R/clr */
|
||||
#define WMREG_SEC 0x4038 /* Sequence Error Count */
|
||||
|
@ -1162,6 +1163,7 @@ struct livengood_tcpip_ctxdesc {
|
|||
#define WMREG_HTDPMC 0x403c /* Host Tx Discarded Packets by MAC Count */
|
||||
|
||||
#define WMREG_RLEC 0x4040 /* Receive Length Error Count */
|
||||
#define WMREG_CBRDPC 0x4044 /* Circuit Breaker Rx Dropped Packet Count */
|
||||
#define WMREG_XONRXC 0x4048 /* XON Rx Count - R/clr */
|
||||
#define WMREG_XONTXC 0x404c /* XON Tx Count - R/clr */
|
||||
#define WMREG_XOFFRXC 0x4050 /* XOFF Rx Count - R/clr */
|
||||
|
@ -1230,6 +1232,11 @@ struct livengood_tcpip_ctxdesc {
|
|||
#define WMREG_DEBUG4 0x411c /* Debug Counter 4 */
|
||||
#define WMREG_RXDMTC 0x4120 /* Rx Desc Min Thresh Count */
|
||||
#define WMREG_HTCBDPC 0x4124 /* Host Tx Circuit Breaker Dropped Pkt. Cnt. */
|
||||
#define WMREG_HGORCL 0x4128 /* Host Good Octets Rx Count Low (>=82576?) */
|
||||
#define WMREG_HGORCH 0x412c /* Host Good Octets Rx Count High (>=82576?) */
|
||||
#define WMREG_HGOTCL 0x4130 /* Host Good Octets Tx Count Low (>=82576?) */
|
||||
#define WMREG_HGOTCH 0x4134 /* Host Good Octets Tx Count High (>=82576?) */
|
||||
#define WMREG_LENERRS 0x4138 /* Length Errors Count (>=82576?) */
|
||||
|
||||
#define WMREG_TLPIC 0x4148 /* EEE Tx LPI Count */
|
||||
#define WMREG_RLPIC 0x414c /* EEE Rx LPI Count */
|
||||
|
@ -1270,6 +1277,7 @@ struct livengood_tcpip_ctxdesc {
|
|||
#define WMREG_PCS_ANADV 0x4218 /* AN Advertsement */
|
||||
#define WMREG_PCS_LPAB 0x421c /* Link Partnet Ability */
|
||||
#define WMREG_PCS_NPTX 0x4220 /* Next Page Transmit */
|
||||
#define WMREG_SCVPC 0x4228 /* SerDes/SGMII Code Violation Packet Count */
|
||||
|
||||
#define WMREG_RXCSUM 0x5000 /* Receive Checksum register */
|
||||
#define RXCSUM_PCSS 0x000000ff /* Packet Checksum Start */
|
||||
|
@ -1467,6 +1475,8 @@ struct livengood_tcpip_ctxdesc {
|
|||
#define WMREG_B2OSPC 0x8fe0 /* BMC2OS packets sent by BMC */
|
||||
#define WMREG_O2BGPTC 0x8fe4 /* OS2BMC packets received by BMC */
|
||||
|
||||
#define WMREG_HRMPC 0xa018 /* Header Redirection Missed Packet Count */
|
||||
|
||||
#define WMREG_EEC 0x12010
|
||||
#define EEC_FLASH_DETECTED __BIT(19) /* FLASH */
|
||||
#define EEC_FLUPD __BIT(23) /* Update FLASH */
|
||||
|
|
Loading…
Reference in New Issue