u64 rx_trunc1; /* buffer-group 1 truncated packets */
u64 rx_trunc2; /* buffer-group 2 truncated packets */
u64 rx_trunc3; /* buffer-group 3 truncated packets */
+
+ u64 rx_tp_tnl_cong_drops[NCHAN]; /* TP frame drops due to congestion */
};
struct sge_params {
*/
void t4_get_port_stats(struct adapter *adap, int idx, struct port_stats *p)
{
- u32 bgmap = t4_get_mps_bg_map(adap, idx);
u32 stat_ctl = t4_read_reg(adap, A_MPS_STAT_CTL);
+ u32 bgmap = t4_get_mps_bg_map(adap, idx);
+ u32 val[NCHAN] = { 0 };
+ u8 i;
#define GET_STAT(name) \
t4_read_reg64(adap, \
p->rx_trunc2 = (bgmap & 4) ? GET_STAT_COM(RX_BG_2_MAC_TRUNC_FRAME) : 0;
p->rx_trunc3 = (bgmap & 8) ? GET_STAT_COM(RX_BG_3_MAC_TRUNC_FRAME) : 0;
+ t4_read_indirect(adap, A_TP_MIB_INDEX, A_TP_MIB_DATA, &val[idx], 1,
+ A_TP_MIB_TNL_CNG_DROP_0 + idx);
+
+ for (i = 0; i < NCHAN; i++)
+ p->rx_tp_tnl_cong_drops[i] = val[i];
#undef GET_STAT
#undef GET_STAT_COM
}
*/
void t4_clr_port_stats(struct adapter *adap, int idx)
{
- unsigned int i;
u32 bgmap = t4_get_mps_bg_map(adap, idx);
u32 port_base_addr;
+ unsigned int i;
+ u32 val = 0;
if (is_t4(adap->params.chip))
port_base_addr = PORT_BASE(idx);
A_MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_L +
i * 8, 0);
}
+ t4_write_indirect(adap, A_TP_MIB_INDEX, A_TP_MIB_DATA,
+ &val, 1, A_TP_MIB_TNL_CNG_DROP_0 + idx);
}
/**
#define A_TP_PIO_ADDR 0x7e40
#define A_TP_PIO_DATA 0x7e44
+#define A_TP_MIB_INDEX 0x7e50
+#define A_TP_MIB_DATA 0x7e54
#define A_TP_RSS_SECRET_KEY0 0x40
#define S_RM_OVLAN 9
#define V_RM_OVLAN(x) ((x) << S_RM_OVLAN)
+#define A_TP_MIB_TNL_CNG_DROP_0 0x18
+
/* registers for module MA */
#define A_MA_EDRAM0_BAR 0x77c0
ps.rx_ovflow2 + ps.rx_ovflow3 +
ps.rx_trunc0 + ps.rx_trunc1 +
ps.rx_trunc2 + ps.rx_trunc3;
+ for (i = 0; i < NCHAN; i++)
+ eth_stats->imissed += ps.rx_tp_tnl_cong_drops[i];
+
eth_stats->ierrors = ps.rx_symbol_err + ps.rx_fcs_err +
ps.rx_jabber + ps.rx_too_long + ps.rx_runt +
ps.rx_len_err;
{"rx_bg1_truncated_packets", offsetof(struct port_stats, rx_trunc1)},
{"rx_bg2_truncated_packets", offsetof(struct port_stats, rx_trunc2)},
{"rx_bg3_truncated_packets", offsetof(struct port_stats, rx_trunc3)},
+ {"rx_tp_tnl_cong_drops0",
+ offsetof(struct port_stats, rx_tp_tnl_cong_drops[0])},
+ {"rx_tp_tnl_cong_drops1",
+ offsetof(struct port_stats, rx_tp_tnl_cong_drops[1])},
+ {"rx_tp_tnl_cong_drops2",
+ offsetof(struct port_stats, rx_tp_tnl_cong_drops[2])},
+ {"rx_tp_tnl_cong_drops3",
+ offsetof(struct port_stats, rx_tp_tnl_cong_drops[3])},
};
static const struct cxgbe_dev_xstats_name_off