Commit 5c9e418b authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'ethtool-strings'



Alexander Duyck says:

====================
ethtool: Factor out common code related to writing ethtool strings

This patch set is meant to be a cleanup and refactoring of common code bits
from several drivers. Specificlly a number of drivers engage in a pattern
where they will use some variant on an sprintf or memcpy to write a string
into the ethtool string array and then they will increment their pointer by
ETH_GSTRING_LEN.

Instead of having each driver implement this independently I am refactoring
the code so that we have one central function, ethtool_sprintf that does
all this and takes a double pointer to access the data, a formatted string
to print, and the variable arguments that are associated with the string.

Changes from v1:
Fixed usage of char ** vs  unsigned char ** in hisilicon drivers

Changes from RFC:
Renamed ethtool_gsprintf to ethtool_sprintf
Fixed reverse xmas tree issue in patch 2
====================

Reviewed-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 0c88eda9 acebe5b6
Loading
Loading
Loading
Loading
+11 −14
Original line number Diff line number Diff line
@@ -251,10 +251,10 @@ static void ena_queue_strings(struct ena_adapter *adapter, u8 **data)
		for (j = 0; j < ENA_STATS_ARRAY_TX; j++) {
			ena_stats = &ena_stats_tx_strings[j];

			snprintf(*data, ETH_GSTRING_LEN,
			ethtool_sprintf(data,
					"queue_%u_%s_%s", i,
				 is_xdp ? "xdp_tx" : "tx", ena_stats->name);
			(*data) += ETH_GSTRING_LEN;
					is_xdp ? "xdp_tx" : "tx",
					ena_stats->name);
		}

		if (!is_xdp) {
@@ -264,9 +264,9 @@ static void ena_queue_strings(struct ena_adapter *adapter, u8 **data)
			for (j = 0; j < ENA_STATS_ARRAY_RX; j++) {
				ena_stats = &ena_stats_rx_strings[j];

				snprintf(*data, ETH_GSTRING_LEN,
					 "queue_%u_rx_%s", i, ena_stats->name);
				(*data) += ETH_GSTRING_LEN;
				ethtool_sprintf(data,
						"queue_%u_rx_%s", i,
						ena_stats->name);
			}
		}
	}
@@ -280,9 +280,8 @@ static void ena_com_dev_strings(u8 **data)
	for (i = 0; i < ENA_STATS_ARRAY_ENA_COM; i++) {
		ena_stats = &ena_stats_ena_com_strings[i];

		snprintf(*data, ETH_GSTRING_LEN,
		ethtool_sprintf(data,
				"ena_admin_q_%s", ena_stats->name);
		(*data) += ETH_GSTRING_LEN;
	}
}

@@ -295,15 +294,13 @@ static void ena_get_strings(struct ena_adapter *adapter,

	for (i = 0; i < ENA_STATS_ARRAY_GLOBAL; i++) {
		ena_stats = &ena_stats_global_strings[i];
		memcpy(data, ena_stats->name, ETH_GSTRING_LEN);
		data += ETH_GSTRING_LEN;
		ethtool_sprintf(&data, ena_stats->name);
	}

	if (eni_stats_needed) {
		for (i = 0; i < ENA_STATS_ARRAY_ENI(adapter); i++) {
			ena_stats = &ena_stats_eni_strings[i];
			memcpy(data, ena_stats->name, ETH_GSTRING_LEN);
			data += ETH_GSTRING_LEN;
			ethtool_sprintf(&data, ena_stats->name);
		}
	}

+105 −161
Original line number Diff line number Diff line
@@ -524,6 +524,68 @@ bnad_set_pauseparam(struct net_device *netdev,
	return 0;
}

static void bnad_get_txf_strings(u8 **string, int f_num)
{
	ethtool_sprintf(string, "txf%d_ucast_octets", f_num);
	ethtool_sprintf(string, "txf%d_ucast", f_num);
	ethtool_sprintf(string, "txf%d_ucast_vlan", f_num);
	ethtool_sprintf(string, "txf%d_mcast_octets", f_num);
	ethtool_sprintf(string, "txf%d_mcast", f_num);
	ethtool_sprintf(string, "txf%d_mcast_vlan", f_num);
	ethtool_sprintf(string, "txf%d_bcast_octets", f_num);
	ethtool_sprintf(string, "txf%d_bcast", f_num);
	ethtool_sprintf(string, "txf%d_bcast_vlan", f_num);
	ethtool_sprintf(string, "txf%d_errors", f_num);
	ethtool_sprintf(string, "txf%d_filter_vlan", f_num);
	ethtool_sprintf(string, "txf%d_filter_mac_sa", f_num);
}

static void bnad_get_rxf_strings(u8 **string, int f_num)
{
	ethtool_sprintf(string, "rxf%d_ucast_octets", f_num);
	ethtool_sprintf(string, "rxf%d_ucast", f_num);
	ethtool_sprintf(string, "rxf%d_ucast_vlan", f_num);
	ethtool_sprintf(string, "rxf%d_mcast_octets", f_num);
	ethtool_sprintf(string, "rxf%d_mcast", f_num);
	ethtool_sprintf(string, "rxf%d_mcast_vlan", f_num);
	ethtool_sprintf(string, "rxf%d_bcast_octets", f_num);
	ethtool_sprintf(string, "rxf%d_bcast", f_num);
	ethtool_sprintf(string, "rxf%d_bcast_vlan", f_num);
	ethtool_sprintf(string, "rxf%d_frame_drops", f_num);
}

static void bnad_get_cq_strings(u8 **string, int q_num)
{
	ethtool_sprintf(string, "cq%d_producer_index", q_num);
	ethtool_sprintf(string, "cq%d_consumer_index", q_num);
	ethtool_sprintf(string, "cq%d_hw_producer_index", q_num);
	ethtool_sprintf(string, "cq%d_intr", q_num);
	ethtool_sprintf(string, "cq%d_poll", q_num);
	ethtool_sprintf(string, "cq%d_schedule", q_num);
	ethtool_sprintf(string, "cq%d_keep_poll", q_num);
	ethtool_sprintf(string, "cq%d_complete", q_num);
}

static void bnad_get_rxq_strings(u8 **string, int q_num)
{
	ethtool_sprintf(string, "rxq%d_packets", q_num);
	ethtool_sprintf(string, "rxq%d_bytes", q_num);
	ethtool_sprintf(string, "rxq%d_packets_with_error", q_num);
	ethtool_sprintf(string, "rxq%d_allocbuf_failed", q_num);
	ethtool_sprintf(string, "rxq%d_mapbuf_failed", q_num);
	ethtool_sprintf(string, "rxq%d_producer_index", q_num);
	ethtool_sprintf(string, "rxq%d_consumer_index", q_num);
}

static void bnad_get_txq_strings(u8 **string, int q_num)
{
	ethtool_sprintf(string, "txq%d_packets", q_num);
	ethtool_sprintf(string, "txq%d_bytes", q_num);
	ethtool_sprintf(string, "txq%d_producer_index", q_num);
	ethtool_sprintf(string, "txq%d_consumer_index", q_num);
	ethtool_sprintf(string, "txq%d_hw_consumer_index", q_num);
}

static void
bnad_get_strings(struct net_device *netdev, u32 stringset, u8 *string)
{
@@ -531,72 +593,27 @@ bnad_get_strings(struct net_device *netdev, u32 stringset, u8 *string)
	int i, j, q_num;
	u32 bmap;

	if (stringset != ETH_SS_STATS)
		return;

	mutex_lock(&bnad->conf_mutex);

	switch (stringset) {
	case ETH_SS_STATS:
	for (i = 0; i < BNAD_ETHTOOL_STATS_NUM; i++) {
			BUG_ON(!(strlen(bnad_net_stats_strings[i]) <
				   ETH_GSTRING_LEN));
			strncpy(string, bnad_net_stats_strings[i],
				ETH_GSTRING_LEN);
			string += ETH_GSTRING_LEN;
		BUG_ON(!(strlen(bnad_net_stats_strings[i]) < ETH_GSTRING_LEN));
		ethtool_sprintf(&string, bnad_net_stats_strings[i]);
	}

	bmap = bna_tx_rid_mask(&bnad->bna);
	for (i = 0; bmap; i++) {
			if (bmap & 1) {
				sprintf(string, "txf%d_ucast_octets", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_ucast", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_ucast_vlan", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_mcast_octets", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_mcast", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_mcast_vlan", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_bcast_octets", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_bcast", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_bcast_vlan", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_errors", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_filter_vlan", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txf%d_filter_mac_sa", i);
				string += ETH_GSTRING_LEN;
			}
		if (bmap & 1)
			bnad_get_txf_strings(&string, i);
		bmap >>= 1;
	}

	bmap = bna_rx_rid_mask(&bnad->bna);
		for (i = 0; bmap; i++) {
			if (bmap & 1) {
				sprintf(string, "rxf%d_ucast_octets", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxf%d_ucast", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxf%d_ucast_vlan", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxf%d_mcast_octets", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxf%d_mcast", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxf%d_mcast_vlan", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxf%d_bcast_octets", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxf%d_bcast", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxf%d_bcast_vlan", i);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxf%d_frame_drops", i);
				string += ETH_GSTRING_LEN;
			}
	for (i = 0; bmap; i++, bmap >>= 1) {
		if (bmap & 1)
			bnad_get_rxf_strings(&string, i);
		bmap >>= 1;
	}

@@ -604,26 +621,8 @@ bnad_get_strings(struct net_device *netdev, u32 stringset, u8 *string)
	for (i = 0; i < bnad->num_rx; i++) {
		if (!bnad->rx_info[i].rx)
			continue;
			for (j = 0; j < bnad->num_rxp_per_rx; j++) {
				sprintf(string, "cq%d_producer_index", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "cq%d_consumer_index", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "cq%d_hw_producer_index",
					q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "cq%d_intr", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "cq%d_poll", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "cq%d_schedule", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "cq%d_keep_poll", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "cq%d_complete", q_num);
				string += ETH_GSTRING_LEN;
				q_num++;
			}
		for (j = 0; j < bnad->num_rxp_per_rx; j++)
			bnad_get_cq_strings(&string, q_num++);
	}

	q_num = 0;
@@ -631,48 +630,11 @@ bnad_get_strings(struct net_device *netdev, u32 stringset, u8 *string)
		if (!bnad->rx_info[i].rx)
			continue;
		for (j = 0; j < bnad->num_rxp_per_rx; j++) {
				sprintf(string, "rxq%d_packets", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxq%d_bytes", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxq%d_packets_with_error",
								q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxq%d_allocbuf_failed", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxq%d_mapbuf_failed", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxq%d_producer_index", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "rxq%d_consumer_index", q_num);
				string += ETH_GSTRING_LEN;
				q_num++;
			bnad_get_rxq_strings(&string, q_num++);
			if (bnad->rx_info[i].rx_ctrl[j].ccb &&
					bnad->rx_info[i].rx_ctrl[j].ccb->
					rcb[1] &&
					bnad->rx_info[i].rx_ctrl[j].ccb->
					rcb[1]->rxq) {
					sprintf(string, "rxq%d_packets", q_num);
					string += ETH_GSTRING_LEN;
					sprintf(string, "rxq%d_bytes", q_num);
					string += ETH_GSTRING_LEN;
					sprintf(string,
					"rxq%d_packets_with_error", q_num);
					string += ETH_GSTRING_LEN;
					sprintf(string, "rxq%d_allocbuf_failed",
								q_num);
					string += ETH_GSTRING_LEN;
					sprintf(string, "rxq%d_mapbuf_failed",
						q_num);
					string += ETH_GSTRING_LEN;
					sprintf(string, "rxq%d_producer_index",
								q_num);
					string += ETH_GSTRING_LEN;
					sprintf(string, "rxq%d_consumer_index",
								q_num);
					string += ETH_GSTRING_LEN;
					q_num++;
				}
			    bnad->rx_info[i].rx_ctrl[j].ccb->rcb[1] &&
			    bnad->rx_info[i].rx_ctrl[j].ccb->rcb[1]->rxq)
				bnad_get_rxq_strings(&string, q_num++);
		}
	}

@@ -680,26 +642,8 @@ bnad_get_strings(struct net_device *netdev, u32 stringset, u8 *string)
	for (i = 0; i < bnad->num_tx; i++) {
		if (!bnad->tx_info[i].tx)
			continue;
			for (j = 0; j < bnad->num_txq_per_tx; j++) {
				sprintf(string, "txq%d_packets", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txq%d_bytes", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txq%d_producer_index", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txq%d_consumer_index", q_num);
				string += ETH_GSTRING_LEN;
				sprintf(string, "txq%d_hw_consumer_index",
									q_num);
				string += ETH_GSTRING_LEN;
				q_num++;
			}
		}

		break;

	default:
		break;
		for (j = 0; j < bnad->num_txq_per_tx; j++)
			bnad_get_txq_strings(&string, q_num++);
	}

	mutex_unlock(&bnad->conf_mutex);
+3 −6
Original line number Diff line number Diff line
@@ -687,17 +687,14 @@ static void hns_gmac_get_stats(void *mac_drv, u64 *data)

static void hns_gmac_get_strings(u32 stringset, u8 *data)
{
	char *buff = (char *)data;
	u8 *buff = data;
	u32 i;

	if (stringset != ETH_SS_STATS)
		return;

	for (i = 0; i < ARRAY_SIZE(g_gmac_stats_string); i++) {
		snprintf(buff, ETH_GSTRING_LEN, "%s",
			 g_gmac_stats_string[i].desc);
		buff = buff + ETH_GSTRING_LEN;
	}
	for (i = 0; i < ARRAY_SIZE(g_gmac_stats_string); i++)
		ethtool_sprintf(&buff, g_gmac_stats_string[i].desc);
}

static int hns_gmac_get_sset_count(int stringset)
+15 −26
Original line number Diff line number Diff line
@@ -462,33 +462,22 @@ int hns_ppe_get_regs_count(void)
 */
void hns_ppe_get_strings(struct hns_ppe_cb *ppe_cb, int stringset, u8 *data)
{
	char *buff = (char *)data;
	int index = ppe_cb->index;

	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_rx_sw_pkt", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_rx_pkt_ok", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_rx_drop_pkt_no_bd", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_rx_alloc_buf_fail", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_rx_alloc_buf_wait", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_rx_pkt_drop_no_buf", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_rx_pkt_err_fifo_full", index);
	buff = buff + ETH_GSTRING_LEN;

	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_tx_bd", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_tx_pkt", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_tx_pkt_ok", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_tx_pkt_err_fifo_empty", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "ppe%d_tx_pkt_err_csum_fail", index);
	u8 *buff = data;

	ethtool_sprintf(&buff, "ppe%d_rx_sw_pkt", index);
	ethtool_sprintf(&buff, "ppe%d_rx_pkt_ok", index);
	ethtool_sprintf(&buff, "ppe%d_rx_drop_pkt_no_bd", index);
	ethtool_sprintf(&buff, "ppe%d_rx_alloc_buf_fail", index);
	ethtool_sprintf(&buff, "ppe%d_rx_alloc_buf_wait", index);
	ethtool_sprintf(&buff, "ppe%d_rx_pkt_drop_no_buf", index);
	ethtool_sprintf(&buff, "ppe%d_rx_pkt_err_fifo_full", index);

	ethtool_sprintf(&buff, "ppe%d_tx_bd", index);
	ethtool_sprintf(&buff, "ppe%d_tx_pkt", index);
	ethtool_sprintf(&buff, "ppe%d_tx_pkt_ok", index);
	ethtool_sprintf(&buff, "ppe%d_tx_pkt_err_fifo_empty", index);
	ethtool_sprintf(&buff, "ppe%d_tx_pkt_err_csum_fail", index);
}

void hns_ppe_get_stats(struct hns_ppe_cb *ppe_cb, u64 *data)
+32 −59
Original line number Diff line number Diff line
@@ -929,69 +929,42 @@ int hns_rcb_get_ring_regs_count(void)
 */
void hns_rcb_get_strings(int stringset, u8 *data, int index)
{
	char *buff = (char *)data;
	u8 *buff = data;

	if (stringset != ETH_SS_STATS)
		return;

	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_rcb_pkt_num", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_ppe_tx_pkt_num", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_ppe_drop_pkt_num", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_fbd_num", index);
	buff = buff + ETH_GSTRING_LEN;

	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_pkt_num", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_bytes", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_err_cnt", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_io_err", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_sw_err", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_seg_pkt", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_restart_queue", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "tx_ring%d_tx_busy", index);
	buff = buff + ETH_GSTRING_LEN;

	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_rcb_pkt_num", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_ppe_pkt_num", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_ppe_drop_pkt_num", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_fbd_num", index);
	buff = buff + ETH_GSTRING_LEN;

	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_pkt_num", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_bytes", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_err_cnt", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_io_err", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_sw_err", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_seg_pkt", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_reuse_pg", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_len_err", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_non_vld_desc_err", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_bd_num_err", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_l2_err", index);
	buff = buff + ETH_GSTRING_LEN;
	snprintf(buff, ETH_GSTRING_LEN, "rx_ring%d_l3l4csum_err", index);
	ethtool_sprintf(&buff, "tx_ring%d_rcb_pkt_num", index);
	ethtool_sprintf(&buff, "tx_ring%d_ppe_tx_pkt_num", index);
	ethtool_sprintf(&buff, "tx_ring%d_ppe_drop_pkt_num", index);
	ethtool_sprintf(&buff, "tx_ring%d_fbd_num", index);

	ethtool_sprintf(&buff, "tx_ring%d_pkt_num", index);
	ethtool_sprintf(&buff, "tx_ring%d_bytes", index);
	ethtool_sprintf(&buff, "tx_ring%d_err_cnt", index);
	ethtool_sprintf(&buff, "tx_ring%d_io_err", index);
	ethtool_sprintf(&buff, "tx_ring%d_sw_err", index);
	ethtool_sprintf(&buff, "tx_ring%d_seg_pkt", index);
	ethtool_sprintf(&buff, "tx_ring%d_restart_queue", index);
	ethtool_sprintf(&buff, "tx_ring%d_tx_busy", index);

	ethtool_sprintf(&buff, "rx_ring%d_rcb_pkt_num", index);
	ethtool_sprintf(&buff, "rx_ring%d_ppe_pkt_num", index);
	ethtool_sprintf(&buff, "rx_ring%d_ppe_drop_pkt_num", index);
	ethtool_sprintf(&buff, "rx_ring%d_fbd_num", index);

	ethtool_sprintf(&buff, "rx_ring%d_pkt_num", index);
	ethtool_sprintf(&buff, "rx_ring%d_bytes", index);
	ethtool_sprintf(&buff, "rx_ring%d_err_cnt", index);
	ethtool_sprintf(&buff, "rx_ring%d_io_err", index);
	ethtool_sprintf(&buff, "rx_ring%d_sw_err", index);
	ethtool_sprintf(&buff, "rx_ring%d_seg_pkt", index);
	ethtool_sprintf(&buff, "rx_ring%d_reuse_pg", index);
	ethtool_sprintf(&buff, "rx_ring%d_len_err", index);
	ethtool_sprintf(&buff, "rx_ring%d_non_vld_desc_err", index);
	ethtool_sprintf(&buff, "rx_ring%d_bd_num_err", index);
	ethtool_sprintf(&buff, "rx_ring%d_l2_err", index);
	ethtool_sprintf(&buff, "rx_ring%d_l3l4csum_err", index);
}

void hns_rcb_get_common_regs(struct rcb_common_cb *rcb_com, void *data)
Loading