168 lines
5.1 KiB
Diff
168 lines
5.1 KiB
Diff
|
|
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
|
||
|
|
|