|
@@ -5501,6 +5501,7 @@ void t4_get_port_stats_offset(struct adapter *adap, int idx,
|
|
|
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, MPS_STAT_CTL_A);
|
|
|
|
|
|
#define GET_STAT(name) \
|
|
|
t4_read_reg64(adap, \
|
|
@@ -5532,6 +5533,14 @@ void t4_get_port_stats(struct adapter *adap, int idx, struct port_stats *p)
|
|
|
p->tx_ppp6 = GET_STAT(TX_PORT_PPP6);
|
|
|
p->tx_ppp7 = GET_STAT(TX_PORT_PPP7);
|
|
|
|
|
|
+ if (CHELSIO_CHIP_VERSION(adap->params.chip) >= CHELSIO_T5) {
|
|
|
+ if (stat_ctl & COUNTPAUSESTATTX_F) {
|
|
|
+ p->tx_frames -= p->tx_pause;
|
|
|
+ p->tx_octets -= p->tx_pause * 64;
|
|
|
+ }
|
|
|
+ if (stat_ctl & COUNTPAUSEMCTX_F)
|
|
|
+ p->tx_mcast_frames -= p->tx_pause;
|
|
|
+ }
|
|
|
p->rx_octets = GET_STAT(RX_PORT_BYTES);
|
|
|
p->rx_frames = GET_STAT(RX_PORT_FRAMES);
|
|
|
p->rx_bcast_frames = GET_STAT(RX_PORT_BCAST);
|
|
@@ -5560,6 +5569,15 @@ void t4_get_port_stats(struct adapter *adap, int idx, struct port_stats *p)
|
|
|
p->rx_ppp6 = GET_STAT(RX_PORT_PPP6);
|
|
|
p->rx_ppp7 = GET_STAT(RX_PORT_PPP7);
|
|
|
|
|
|
+ if (CHELSIO_CHIP_VERSION(adap->params.chip) >= CHELSIO_T5) {
|
|
|
+ if (stat_ctl & COUNTPAUSESTATRX_F) {
|
|
|
+ p->rx_frames -= p->rx_pause;
|
|
|
+ p->rx_octets -= p->rx_pause * 64;
|
|
|
+ }
|
|
|
+ if (stat_ctl & COUNTPAUSEMCRX_F)
|
|
|
+ p->rx_mcast_frames -= p->rx_pause;
|
|
|
+ }
|
|
|
+
|
|
|
p->rx_ovflow0 = (bgmap & 1) ? GET_STAT_COM(RX_BG_0_MAC_DROP_FRAME) : 0;
|
|
|
p->rx_ovflow1 = (bgmap & 2) ? GET_STAT_COM(RX_BG_1_MAC_DROP_FRAME) : 0;
|
|
|
p->rx_ovflow2 = (bgmap & 4) ? GET_STAT_COM(RX_BG_2_MAC_DROP_FRAME) : 0;
|