diff options
Diffstat (limited to 'drivers/net/ethernet/microsoft/mana/mana_ethtool.c')
| -rw-r--r-- | drivers/net/ethernet/microsoft/mana/mana_ethtool.c | 52 | 
1 files changed, 51 insertions, 1 deletions
diff --git a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c index 5b776a33a817..a64c81410dc1 100644 --- a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c +++ b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c @@ -13,6 +13,15 @@ static const struct {  } mana_eth_stats[] = {  	{"stop_queue", offsetof(struct mana_ethtool_stats, stop_queue)},  	{"wake_queue", offsetof(struct mana_ethtool_stats, wake_queue)}, +	{"tx_cqes", offsetof(struct mana_ethtool_stats, tx_cqes)}, +	{"tx_cq_err", offsetof(struct mana_ethtool_stats, tx_cqe_err)}, +	{"tx_cqe_unknown_type", offsetof(struct mana_ethtool_stats, +					tx_cqe_unknown_type)}, +	{"rx_cqes", offsetof(struct mana_ethtool_stats, rx_cqes)}, +	{"rx_coalesced_err", offsetof(struct mana_ethtool_stats, +					rx_coalesced_err)}, +	{"rx_cqe_unknown_type", offsetof(struct mana_ethtool_stats, +					rx_cqe_unknown_type)},  };  static int mana_get_sset_count(struct net_device *ndev, int stringset) @@ -23,7 +32,8 @@ static int mana_get_sset_count(struct net_device *ndev, int stringset)  	if (stringset != ETH_SS_STATS)  		return -EINVAL; -	return ARRAY_SIZE(mana_eth_stats) + num_queues * 8; +	return ARRAY_SIZE(mana_eth_stats) + num_queues * +				(MANA_STATS_RX_COUNT + MANA_STATS_TX_COUNT);  }  static void mana_get_strings(struct net_device *ndev, u32 stringset, u8 *data) @@ -61,6 +71,22 @@ static void mana_get_strings(struct net_device *ndev, u32 stringset, u8 *data)  		p += ETH_GSTRING_LEN;  		sprintf(p, "tx_%d_xdp_xmit", i);  		p += ETH_GSTRING_LEN; +		sprintf(p, "tx_%d_tso_packets", i); +		p += ETH_GSTRING_LEN; +		sprintf(p, "tx_%d_tso_bytes", i); +		p += ETH_GSTRING_LEN; +		sprintf(p, "tx_%d_tso_inner_packets", i); +		p += ETH_GSTRING_LEN; +		sprintf(p, "tx_%d_tso_inner_bytes", i); +		p += ETH_GSTRING_LEN; +		sprintf(p, "tx_%d_long_pkt_fmt", i); +		p += ETH_GSTRING_LEN; +		sprintf(p, "tx_%d_short_pkt_fmt", i); +		p += ETH_GSTRING_LEN; +		sprintf(p, "tx_%d_csum_partial", i); +		p += ETH_GSTRING_LEN; +		sprintf(p, "tx_%d_mana_map_err", i); +		p += ETH_GSTRING_LEN;  	}  } @@ -78,6 +104,14 @@ static void mana_get_ethtool_stats(struct net_device *ndev,  	u64 xdp_xmit;  	u64 xdp_drop;  	u64 xdp_tx; +	u64 tso_packets; +	u64 tso_bytes; +	u64 tso_inner_packets; +	u64 tso_inner_bytes; +	u64 long_pkt_fmt; +	u64 short_pkt_fmt; +	u64 csum_partial; +	u64 mana_map_err;  	int q, i = 0;  	if (!apc->port_is_up) @@ -113,11 +147,27 @@ static void mana_get_ethtool_stats(struct net_device *ndev,  			packets = tx_stats->packets;  			bytes = tx_stats->bytes;  			xdp_xmit = tx_stats->xdp_xmit; +			tso_packets = tx_stats->tso_packets; +			tso_bytes = tx_stats->tso_bytes; +			tso_inner_packets = tx_stats->tso_inner_packets; +			tso_inner_bytes = tx_stats->tso_inner_bytes; +			long_pkt_fmt = tx_stats->long_pkt_fmt; +			short_pkt_fmt = tx_stats->short_pkt_fmt; +			csum_partial = tx_stats->csum_partial; +			mana_map_err = tx_stats->mana_map_err;  		} while (u64_stats_fetch_retry(&tx_stats->syncp, start));  		data[i++] = packets;  		data[i++] = bytes;  		data[i++] = xdp_xmit; +		data[i++] = tso_packets; +		data[i++] = tso_bytes; +		data[i++] = tso_inner_packets; +		data[i++] = tso_inner_bytes; +		data[i++] = long_pkt_fmt; +		data[i++] = short_pkt_fmt; +		data[i++] = csum_partial; +		data[i++] = mana_map_err;  	}  }  |