1 Star 0 Fork 72

叶青龙/dpdk

forked from src-openEuler/dpdk 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0126-net-hns3-support-backplane-media-type.patch 4.07 KB
一键复制 编辑 原始数据 按行查看 历史
From 0e4f6eceec1c0cd0cae67504b90eb6a4f0451307 Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen@huawei.com>
Date: Fri, 21 Oct 2022 15:36:02 +0800
Subject: [PATCH 126/189] net/hns3: support backplane media type
The 802.11 physical PMA sub-layer defines three media: copper, fiber and
backplane. For PMD, the backplane is similar to the fiber, the main
differences are that backplane doesn't have optical module.
Because the interface of firmware fiber is also applicable to the
backplane, this patch supports the backplane only through simple
extension.
Cc: stable@dpdk.org
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
---
drivers/net/hns3/hns3_ethdev.c | 54 +++++++++++++++++++---------------
1 file changed, 30 insertions(+), 24 deletions(-)
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
index 8a8f3f1950..5632b82078 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -2788,11 +2788,8 @@ hns3_check_media_type(struct hns3_hw *hw, uint8_t media_type)
}
break;
case HNS3_MEDIA_TYPE_FIBER:
- ret = 0;
- break;
case HNS3_MEDIA_TYPE_BACKPLANE:
- PMD_INIT_LOG(ERR, "Media type is Backplane, not supported.");
- ret = -EOPNOTSUPP;
+ ret = 0;
break;
default:
PMD_INIT_LOG(ERR, "Unknown media type = %u!", media_type);
@@ -4245,14 +4242,11 @@ hns3_update_link_info(struct rte_eth_dev *eth_dev)
{
struct hns3_adapter *hns = eth_dev->data->dev_private;
struct hns3_hw *hw = &hns->hw;
- int ret = 0;
if (hw->mac.media_type == HNS3_MEDIA_TYPE_COPPER)
- ret = hns3_update_copper_link_info(hw);
- else if (hw->mac.media_type == HNS3_MEDIA_TYPE_FIBER)
- ret = hns3_update_fiber_link_info(hw);
+ return hns3_update_copper_link_info(hw);
- return ret;
+ return hns3_update_fiber_link_info(hw);
}
static int
@@ -4545,11 +4539,13 @@ hns3_get_port_supported_speed(struct rte_eth_dev *eth_dev)
if (ret)
return ret;
- if (mac->media_type == HNS3_MEDIA_TYPE_FIBER) {
+ if (mac->media_type == HNS3_MEDIA_TYPE_FIBER ||
+ mac->media_type == HNS3_MEDIA_TYPE_BACKPLANE) {
/*
* Some firmware does not support the report of supported_speed,
- * and only report the effective speed of SFP. In this case, it
- * is necessary to use the SFP's speed as the supported_speed.
+ * and only report the effective speed of SFP/backplane. In this
+ * case, it is necessary to use the SFP/backplane's speed as the
+ * supported_speed.
*/
if (mac->supported_speed == 0)
mac->supported_speed =
@@ -4811,7 +4807,7 @@ hns3_check_port_speed(struct hns3_hw *hw, uint32_t link_speeds)
if (mac->media_type == HNS3_MEDIA_TYPE_COPPER)
speed_bit = hns3_convert_link_speeds2bitmap_copper(link_speeds);
- else if (mac->media_type == HNS3_MEDIA_TYPE_FIBER)
+ else
speed_bit = hns3_convert_link_speeds2bitmap_fiber(link_speeds);
if (!(speed_bit & supported_speed)) {
@@ -4955,6 +4951,19 @@ hns3_set_fiber_port_link_speed(struct hns3_hw *hw,
return hns3_cfg_mac_speed_dup(hw, cfg->speed, cfg->duplex);
}
+static const char *
+hns3_get_media_type_name(uint8_t media_type)
+{
+ if (media_type == HNS3_MEDIA_TYPE_FIBER)
+ return "fiber";
+ else if (media_type == HNS3_MEDIA_TYPE_COPPER)
+ return "copper";
+ else if (media_type == HNS3_MEDIA_TYPE_BACKPLANE)
+ return "backplane";
+ else
+ return "unknown";
+}
+
static int
hns3_set_port_link_speed(struct hns3_hw *hw,
struct hns3_set_link_speed_cfg *cfg)
@@ -4969,18 +4978,15 @@ hns3_set_port_link_speed(struct hns3_hw *hw,
#endif
ret = hns3_set_copper_port_link_speed(hw, cfg);
- if (ret) {
- hns3_err(hw, "failed to set copper port link speed,"
- "ret = %d.", ret);
- return ret;
- }
- } else if (hw->mac.media_type == HNS3_MEDIA_TYPE_FIBER) {
+ } else {
ret = hns3_set_fiber_port_link_speed(hw, cfg);
- if (ret) {
- hns3_err(hw, "failed to set fiber port link speed,"
- "ret = %d.", ret);
- return ret;
- }
+ }
+
+ if (ret) {
+ hns3_err(hw, "failed to set %s port link speed, ret = %d.",
+ hns3_get_media_type_name(hw->mac.media_type),
+ ret);
+ return ret;
}
return 0;
--
2.23.0
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yeqinglong01/dpdk.git
git@gitee.com:yeqinglong01/dpdk.git
yeqinglong01
dpdk
dpdk
master

搜索帮助