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:
Ron Mercer 2009-10-10 09:35:10 +00:00 committed by David S. Miller
parent 8092886094
commit 6abd23468d
2 changed files with 90 additions and 0 deletions

View File

@ -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;
}; };
/* /*

View File

@ -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,