代码拉取完成,页面将自动刷新
From 9bdcedb5d634b438139daf6de851a0f40e8708fe Mon Sep 17 00:00:00 2001
From: veega2022 <zhuweijia@huawei.com>
Date: Thu, 22 Feb 2024 10:34:09 +0800
Subject: [PATCH] hikptool: The nic_port command is adapted to display the DFX
of the ROH MAC
ROH MAC is different from ETH MAC. For ROH MAC,
the following DFX parameters are added:
tx link lanes, rx link lanes, pcs link, mac link, tx retry count, etc.
For the firmware of earlier versions,
the MAC DFX of the ETH type is displayed by default.
Signed-off-by: veega2022 <zhuweijia@huawei.com>
---
net/nic/nic_mac/hikp_mac_cmd.h | 1 +
net/nic/nic_mac/hikp_nic_port.c | 63 +++++++++++++++++++++++++++++++--
net/nic/nic_mac/hikp_nic_port.h | 25 +++++++++++++
3 files changed, 86 insertions(+), 3 deletions(-)
diff --git a/net/nic/nic_mac/hikp_mac_cmd.h b/net/nic/nic_mac/hikp_mac_cmd.h
index f74fd2a..9a3f0d9 100644
--- a/net/nic/nic_mac/hikp_mac_cmd.h
+++ b/net/nic/nic_mac/hikp_mac_cmd.h
@@ -32,6 +32,7 @@ enum mac_port_sub_cmd {
QUERY_HOT_PLUG_CARD_DFX,
QUERY_PORT_CDR_DFX,
QUERY_PORT_INFO_DFX_CAP,
+ QUERY_PORT_ROH_MAC_DFX,
};
enum mac_dump_reg_sub_cmd {
diff --git a/net/nic/nic_mac/hikp_nic_port.c b/net/nic/nic_mac/hikp_nic_port.c
index 5ba6927..725ef95 100644
--- a/net/nic/nic_mac/hikp_nic_port.c
+++ b/net/nic/nic_mac/hikp_nic_port.c
@@ -174,7 +174,7 @@ static void mac_show_speed(uint32_t speed, uint32_t lanes)
printf("speed: %s_%s\n", speed_str, lanes_str);
}
-static void mac_cmd_disp_mac_info(const struct mac_cmd_mac_dfx *mac_dfx)
+static void mac_cmd_disp_eth_mac_info(const struct mac_cmd_mac_dfx *mac_dfx)
{
printf("\n========================== MAC INFO ==========================\n");
mac_show_speed(mac_dfx->speed, mac_dfx->lanes);
@@ -192,7 +192,7 @@ static void mac_cmd_disp_mac_info(const struct mac_cmd_mac_dfx *mac_dfx)
printf("pcs_err = 0x%x\n", mac_dfx->pcs_err_cnt);
}
-static void mac_cmd_show_mac(struct major_cmd_ctrl *self)
+static void mac_cmd_show_eth_mac(struct major_cmd_ctrl *self)
{
struct mac_cmd_mac_dfx *mac_dfx = NULL;
struct hikp_cmd_ret *cmd_ret = NULL;
@@ -206,8 +206,65 @@ static void mac_cmd_show_mac(struct major_cmd_ctrl *self)
}
mac_dfx = (struct mac_cmd_mac_dfx *)(cmd_ret->rsp_data);
- mac_cmd_disp_mac_info(mac_dfx);
+ mac_cmd_disp_eth_mac_info(mac_dfx);
+ free(cmd_ret);
+ cmd_ret = NULL;
+}
+
+static void mac_cmd_disp_roh_mac_info(const struct mac_cmd_roh_mac_dfx *mac_dfx)
+{
+ printf("\n========================== MAC INFO ==========================\n");
+ mac_show_speed(mac_dfx->speed, mac_dfx->lanes);
+ mac_print_enum("fec", mac_dfx->fec, g_fec_table, HIKP_ARRAY_SIZE(g_fec_table), "unknown");
+ mac_print_enum("sds_rate", mac_dfx->sds_rate, g_sds_rate_table,
+ HIKP_ARRAY_SIZE(g_sds_rate_table), "unknown");
+ printf("tx_link_lanes: %u\n", mac_dfx->tx_link_lanes);
+ printf("rx_link_lanes: %u\n", mac_dfx->rx_link_lanes);
+ mac_print_link("pcs_link", mac_dfx->pcs_link);
+ mac_print_link("mac_link", mac_dfx->mac_link);
+ printf("tx_retry_cnt: %u\n", mac_dfx->tx_retry_cnt);
+}
+
+static void mac_cmd_show_roh_mac(struct major_cmd_ctrl *self)
+{
+ struct mac_cmd_roh_mac_dfx *mac_dfx = NULL;
+ struct hikp_cmd_ret *cmd_ret = NULL;
+ int ret;
+
+ ret = mac_cmd_get_dfx_cfg(QUERY_PORT_ROH_MAC_DFX, &cmd_ret);
+ if (ret) {
+ snprintf(self->err_str, sizeof(self->err_str), "mac get roh mac dfx failed.");
+ self->err_no = -ENOSPC;
+ return;
+ }
+
+ mac_dfx = (struct mac_cmd_roh_mac_dfx *)(cmd_ret->rsp_data);
+ mac_cmd_disp_roh_mac_info(mac_dfx);
free(cmd_ret);
+ cmd_ret = NULL;
+}
+
+static void mac_cmd_show_mac(struct major_cmd_ctrl *self)
+{
+ struct mac_cmd_port_hardware *hw = NULL;
+ struct hikp_cmd_ret *hw_cmd_ret = NULL;
+ int ret;
+
+ ret = mac_cmd_get_dfx_cfg(QUERY_PORT_HARDWARE, &hw_cmd_ret);
+ if (ret) {
+ snprintf(self->err_str, sizeof(self->err_str), "mac get hardware dfx failed.");
+ self->err_no = -ENOSPC;
+ return;
+ }
+
+ hw = (struct mac_cmd_port_hardware *)(hw_cmd_ret->rsp_data);
+ if (hw->cmd_mac_type == CMD_MAC_TYPE_ROH || hw->cmd_mac_type == CMD_MAC_TYPE_UB)
+ mac_cmd_show_roh_mac(self);
+ else
+ mac_cmd_show_eth_mac(self);
+
+ free(hw_cmd_ret);
+ hw_cmd_ret = NULL;
}
static void mac_cmd_disp_link_info(struct mac_cmd_link_dfx *link_dfx)
diff --git a/net/nic/nic_mac/hikp_nic_port.h b/net/nic/nic_mac/hikp_nic_port.h
index 78928b3..cb72ebc 100644
--- a/net/nic/nic_mac/hikp_nic_port.h
+++ b/net/nic/nic_mac/hikp_nic_port.h
@@ -107,6 +107,9 @@ struct mac_item {
struct mac_cmd_port_hardware {
uint8_t port_type;
uint8_t media_type;
+ uint8_t cmd_mac_type : 4,
+ rsv0 : 4;
+ uint8_t rsv1;
};
struct mac_cmd_mac_dfx {
@@ -230,6 +233,28 @@ struct mac_cmd_port_dfx_cap {
uint32_t rsvd[3];
};
+enum cmd_mac_type {
+ CMD_MAC_TYPE_ETH = 0,
+ CMD_MAC_TYPE_ROH,
+ CMD_MAC_TYPE_UB,
+ CMD_MAC_TYPE_MAX,
+};
+
+struct mac_cmd_roh_mac_dfx {
+ uint8_t speed;
+ uint8_t fec;
+ uint8_t lanes;
+ uint8_t sds_rate;
+ uint8_t tx_link_lanes : 4,
+ rx_link_lanes : 4;
+ uint8_t pcs_link : 1,
+ mac_link : 1,
+ rsv0 : 6;
+ uint8_t rsv1[2];
+ uint32_t tx_retry_cnt;
+ uint32_t rsv2[4];
+};
+
struct mac_cmd_dfx_callback {
uint32_t mask;
void (*show_dfx)(struct major_cmd_ctrl *self);
--
2.30.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。