mirror of https://gitee.com/openkylin/linux.git
qlge: Add CBFC pause frame counters to ethtool stats.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8092886094
commit
6abd23468d
|
@ -1363,6 +1363,27 @@ struct nic_stats {
|
||||||
u64 rx_1024_to_1518_pkts;
|
u64 rx_1024_to_1518_pkts;
|
||||||
u64 rx_1519_to_max_pkts;
|
u64 rx_1519_to_max_pkts;
|
||||||
u64 rx_len_err_pkts;
|
u64 rx_len_err_pkts;
|
||||||
|
/*
|
||||||
|
* These stats come from offset 500h to 5C8h
|
||||||
|
* in the XGMAC register.
|
||||||
|
*/
|
||||||
|
u64 tx_cbfc_pause_frames0;
|
||||||
|
u64 tx_cbfc_pause_frames1;
|
||||||
|
u64 tx_cbfc_pause_frames2;
|
||||||
|
u64 tx_cbfc_pause_frames3;
|
||||||
|
u64 tx_cbfc_pause_frames4;
|
||||||
|
u64 tx_cbfc_pause_frames5;
|
||||||
|
u64 tx_cbfc_pause_frames6;
|
||||||
|
u64 tx_cbfc_pause_frames7;
|
||||||
|
u64 rx_cbfc_pause_frames0;
|
||||||
|
u64 rx_cbfc_pause_frames1;
|
||||||
|
u64 rx_cbfc_pause_frames2;
|
||||||
|
u64 rx_cbfc_pause_frames3;
|
||||||
|
u64 rx_cbfc_pause_frames4;
|
||||||
|
u64 rx_cbfc_pause_frames5;
|
||||||
|
u64 rx_cbfc_pause_frames6;
|
||||||
|
u64 rx_cbfc_pause_frames7;
|
||||||
|
u64 rx_nic_fifo_drop;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -132,6 +132,41 @@ static void ql_update_stats(struct ql_adapter *qdev)
|
||||||
iter++;
|
iter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get Per-priority TX pause frame counter statistics.
|
||||||
|
*/
|
||||||
|
for (i = 0x500; i < 0x540; i += 8) {
|
||||||
|
if (ql_read_xgmac_reg64(qdev, i, &data)) {
|
||||||
|
QPRINTK(qdev, DRV, ERR,
|
||||||
|
"Error reading status register 0x%.04x.\n", i);
|
||||||
|
goto end;
|
||||||
|
} else
|
||||||
|
*iter = data;
|
||||||
|
iter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get Per-priority RX pause frame counter statistics.
|
||||||
|
*/
|
||||||
|
for (i = 0x568; i < 0x5a8; i += 8) {
|
||||||
|
if (ql_read_xgmac_reg64(qdev, i, &data)) {
|
||||||
|
QPRINTK(qdev, DRV, ERR,
|
||||||
|
"Error reading status register 0x%.04x.\n", i);
|
||||||
|
goto end;
|
||||||
|
} else
|
||||||
|
*iter = data;
|
||||||
|
iter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get RX NIC FIFO DROP statistics.
|
||||||
|
*/
|
||||||
|
if (ql_read_xgmac_reg64(qdev, 0x5b8, &data)) {
|
||||||
|
QPRINTK(qdev, DRV, ERR,
|
||||||
|
"Error reading status register 0x%.04x.\n", i);
|
||||||
|
goto end;
|
||||||
|
} else
|
||||||
|
*iter = data;
|
||||||
end:
|
end:
|
||||||
ql_sem_unlock(qdev, qdev->xg_sem_mask);
|
ql_sem_unlock(qdev, qdev->xg_sem_mask);
|
||||||
quit:
|
quit:
|
||||||
|
@ -185,6 +220,23 @@ static char ql_stats_str_arr[][ETH_GSTRING_LEN] = {
|
||||||
{"rx_1024_to_1518_pkts"},
|
{"rx_1024_to_1518_pkts"},
|
||||||
{"rx_1519_to_max_pkts"},
|
{"rx_1519_to_max_pkts"},
|
||||||
{"rx_len_err_pkts"},
|
{"rx_len_err_pkts"},
|
||||||
|
{"tx_cbfc_pause_frames0"},
|
||||||
|
{"tx_cbfc_pause_frames1"},
|
||||||
|
{"tx_cbfc_pause_frames2"},
|
||||||
|
{"tx_cbfc_pause_frames3"},
|
||||||
|
{"tx_cbfc_pause_frames4"},
|
||||||
|
{"tx_cbfc_pause_frames5"},
|
||||||
|
{"tx_cbfc_pause_frames6"},
|
||||||
|
{"tx_cbfc_pause_frames7"},
|
||||||
|
{"rx_cbfc_pause_frames0"},
|
||||||
|
{"rx_cbfc_pause_frames1"},
|
||||||
|
{"rx_cbfc_pause_frames2"},
|
||||||
|
{"rx_cbfc_pause_frames3"},
|
||||||
|
{"rx_cbfc_pause_frames4"},
|
||||||
|
{"rx_cbfc_pause_frames5"},
|
||||||
|
{"rx_cbfc_pause_frames6"},
|
||||||
|
{"rx_cbfc_pause_frames7"},
|
||||||
|
{"rx_nic_fifo_drop"},
|
||||||
};
|
};
|
||||||
|
|
||||||
static void ql_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
|
static void ql_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
|
||||||
|
@ -257,6 +309,23 @@ ql_get_ethtool_stats(struct net_device *ndev,
|
||||||
*data++ = s->rx_1024_to_1518_pkts;
|
*data++ = s->rx_1024_to_1518_pkts;
|
||||||
*data++ = s->rx_1519_to_max_pkts;
|
*data++ = s->rx_1519_to_max_pkts;
|
||||||
*data++ = s->rx_len_err_pkts;
|
*data++ = s->rx_len_err_pkts;
|
||||||
|
*data++ = s->tx_cbfc_pause_frames0;
|
||||||
|
*data++ = s->tx_cbfc_pause_frames1;
|
||||||
|
*data++ = s->tx_cbfc_pause_frames2;
|
||||||
|
*data++ = s->tx_cbfc_pause_frames3;
|
||||||
|
*data++ = s->tx_cbfc_pause_frames4;
|
||||||
|
*data++ = s->tx_cbfc_pause_frames5;
|
||||||
|
*data++ = s->tx_cbfc_pause_frames6;
|
||||||
|
*data++ = s->tx_cbfc_pause_frames7;
|
||||||
|
*data++ = s->rx_cbfc_pause_frames0;
|
||||||
|
*data++ = s->rx_cbfc_pause_frames1;
|
||||||
|
*data++ = s->rx_cbfc_pause_frames2;
|
||||||
|
*data++ = s->rx_cbfc_pause_frames3;
|
||||||
|
*data++ = s->rx_cbfc_pause_frames4;
|
||||||
|
*data++ = s->rx_cbfc_pause_frames5;
|
||||||
|
*data++ = s->rx_cbfc_pause_frames6;
|
||||||
|
*data++ = s->rx_cbfc_pause_frames7;
|
||||||
|
*data++ = s->rx_nic_fifo_drop;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ql_get_settings(struct net_device *ndev,
|
static int ql_get_settings(struct net_device *ndev,
|
||||||
|
|
Loading…
Reference in New Issue