File Index
Files and directories
Sign in
FILE

hclge_comm_tqp_stats.c

File preview with syntax highlighting.

linux-6.19.14/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_tqp_stats.c C
  1// SPDX-License-Identifier: GPL-2.0+
  2// Copyright (c) 2021-2021 Hisilicon Limited.
  3
  4#include <linux/err.h>
  5
  6#include "hnae3.h"
  7#include "hclge_comm_cmd.h"
  8#include "hclge_comm_tqp_stats.h"
  9
 10u64 *hclge_comm_tqps_get_stats(struct hnae3_handle *handle, u64 *data)
 11{
 12	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
 13	struct hclge_comm_tqp *tqp;
 14	u64 *buff = data;
 15	u16 i;
 16
 17	for (i = 0; i < kinfo->num_tqps; i++) {
 18		tqp = container_of(kinfo->tqp[i], struct hclge_comm_tqp, q);
 19		*buff++ = tqp->tqp_stats.rcb_tx_ring_pktnum_rcd;
 20	}
 21
 22	for (i = 0; i < kinfo->num_tqps; i++) {
 23		tqp = container_of(kinfo->tqp[i], struct hclge_comm_tqp, q);
 24		*buff++ = tqp->tqp_stats.rcb_rx_ring_pktnum_rcd;
 25	}
 26
 27	return buff;
 28}
 29EXPORT_SYMBOL_GPL(hclge_comm_tqps_get_stats);
 30
 31int hclge_comm_tqps_get_sset_count(struct hnae3_handle *handle)
 32{
 33	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
 34
 35	return kinfo->num_tqps * HCLGE_COMM_QUEUE_PAIR_SIZE;
 36}
 37EXPORT_SYMBOL_GPL(hclge_comm_tqps_get_sset_count);
 38
 39void hclge_comm_tqps_get_strings(struct hnae3_handle *handle, u8 **data)
 40{
 41	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
 42	u16 i;
 43
 44	for (i = 0; i < kinfo->num_tqps; i++) {
 45		struct hclge_comm_tqp *tqp =
 46			container_of(kinfo->tqp[i], struct hclge_comm_tqp, q);
 47		ethtool_sprintf(data, "txq%u_pktnum_rcd", tqp->index);
 48	}
 49
 50	for (i = 0; i < kinfo->num_tqps; i++) {
 51		struct hclge_comm_tqp *tqp =
 52			container_of(kinfo->tqp[i], struct hclge_comm_tqp, q);
 53		ethtool_sprintf(data, "rxq%u_pktnum_rcd", tqp->index);
 54	}
 55}
 56EXPORT_SYMBOL_GPL(hclge_comm_tqps_get_strings);
 57
 58int hclge_comm_tqps_update_stats(struct hnae3_handle *handle,
 59				 struct hclge_comm_hw *hw)
 60{
 61	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
 62	struct hclge_comm_tqp *tqp;
 63	struct hclge_desc desc;
 64	int ret;
 65	u16 i;
 66
 67	for (i = 0; i < kinfo->num_tqps; i++) {
 68		tqp = container_of(kinfo->tqp[i], struct hclge_comm_tqp, q);
 69		hclge_comm_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_RX_STATS,
 70						true);
 71
 72		desc.data[0] = cpu_to_le32(tqp->index);
 73		ret = hclge_comm_cmd_send(hw, &desc, 1);
 74		if (ret) {
 75			dev_err(&hw->cmq.csq.pdev->dev,
 76				"failed to get tqp stat, ret = %d, rx = %u.\n",
 77				ret, i);
 78			return ret;
 79		}
 80		tqp->tqp_stats.rcb_rx_ring_pktnum_rcd +=
 81			le32_to_cpu(desc.data[1]);
 82
 83		hclge_comm_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_TX_STATS,
 84						true);
 85
 86		desc.data[0] = cpu_to_le32(tqp->index);
 87		ret = hclge_comm_cmd_send(hw, &desc, 1);
 88		if (ret) {
 89			dev_err(&hw->cmq.csq.pdev->dev,
 90				"failed to get tqp stat, ret = %d, tx = %u.\n",
 91				ret, i);
 92			return ret;
 93		}
 94		tqp->tqp_stats.rcb_tx_ring_pktnum_rcd +=
 95			le32_to_cpu(desc.data[1]);
 96	}
 97
 98	return 0;
 99}
100EXPORT_SYMBOL_GPL(hclge_comm_tqps_update_stats);
101
102void hclge_comm_reset_tqp_stats(struct hnae3_handle *handle)
103{
104	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
105	struct hclge_comm_tqp *tqp;
106	struct hnae3_queue *queue;
107	u16 i;
108
109	for (i = 0; i < kinfo->num_tqps; i++) {
110		queue = kinfo->tqp[i];
111		tqp = container_of(queue, struct hclge_comm_tqp, q);
112		memset(&tqp->tqp_stats, 0, sizeof(tqp->tqp_stats));
113	}
114}
115EXPORT_SYMBOL_GPL(hclge_comm_reset_tqp_stats);
~/ Read-only file preview.