Skip to content

Commit e46da6a

Browse files
Guangbin Huangdavem330
authored andcommitted
net: hns3: refine function hclge_cfg_mac_speed_dup_hw()
To reuse the code of converting speed of driver to speed of firmware in function hclge_cfg_mac_speed_dup_hw(), encapsulate them into a new function hclge_convert_to_fw_speed(). Signed-off-by: Guangbin Huang <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent a4ae2bc commit e46da6a

File tree

2 files changed

+37
-39
lines changed

2 files changed

+37
-39
lines changed

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2653,11 +2653,38 @@ static u8 hclge_check_speed_dup(u8 duplex, int speed)
26532653
return duplex;
26542654
}
26552655

2656+
struct hclge_mac_speed_map hclge_mac_speed_map_to_fw[] = {
2657+
{HCLGE_MAC_SPEED_10M, HCLGE_FW_MAC_SPEED_10M},
2658+
{HCLGE_MAC_SPEED_100M, HCLGE_FW_MAC_SPEED_100M},
2659+
{HCLGE_MAC_SPEED_1G, HCLGE_FW_MAC_SPEED_1G},
2660+
{HCLGE_MAC_SPEED_10G, HCLGE_FW_MAC_SPEED_10G},
2661+
{HCLGE_MAC_SPEED_25G, HCLGE_FW_MAC_SPEED_25G},
2662+
{HCLGE_MAC_SPEED_40G, HCLGE_FW_MAC_SPEED_40G},
2663+
{HCLGE_MAC_SPEED_50G, HCLGE_FW_MAC_SPEED_50G},
2664+
{HCLGE_MAC_SPEED_100G, HCLGE_FW_MAC_SPEED_100G},
2665+
{HCLGE_MAC_SPEED_200G, HCLGE_FW_MAC_SPEED_200G},
2666+
};
2667+
2668+
static int hclge_convert_to_fw_speed(u32 speed_drv, u32 *speed_fw)
2669+
{
2670+
u16 i;
2671+
2672+
for (i = 0; i < ARRAY_SIZE(hclge_mac_speed_map_to_fw); i++) {
2673+
if (hclge_mac_speed_map_to_fw[i].speed_drv == speed_drv) {
2674+
*speed_fw = hclge_mac_speed_map_to_fw[i].speed_fw;
2675+
return 0;
2676+
}
2677+
}
2678+
2679+
return -EINVAL;
2680+
}
2681+
26562682
static int hclge_cfg_mac_speed_dup_hw(struct hclge_dev *hdev, int speed,
26572683
u8 duplex)
26582684
{
26592685
struct hclge_config_mac_speed_dup_cmd *req;
26602686
struct hclge_desc desc;
2687+
u32 speed_fw;
26612688
int ret;
26622689

26632690
req = (struct hclge_config_mac_speed_dup_cmd *)desc.data;
@@ -2667,48 +2694,14 @@ static int hclge_cfg_mac_speed_dup_hw(struct hclge_dev *hdev, int speed,
26672694
if (duplex)
26682695
hnae3_set_bit(req->speed_dup, HCLGE_CFG_DUPLEX_B, 1);
26692696

2670-
switch (speed) {
2671-
case HCLGE_MAC_SPEED_10M:
2672-
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2673-
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_10M);
2674-
break;
2675-
case HCLGE_MAC_SPEED_100M:
2676-
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2677-
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_100M);
2678-
break;
2679-
case HCLGE_MAC_SPEED_1G:
2680-
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2681-
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_1G);
2682-
break;
2683-
case HCLGE_MAC_SPEED_10G:
2684-
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2685-
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_10G);
2686-
break;
2687-
case HCLGE_MAC_SPEED_25G:
2688-
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2689-
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_25G);
2690-
break;
2691-
case HCLGE_MAC_SPEED_40G:
2692-
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2693-
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_40G);
2694-
break;
2695-
case HCLGE_MAC_SPEED_50G:
2696-
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2697-
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_50G);
2698-
break;
2699-
case HCLGE_MAC_SPEED_100G:
2700-
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2701-
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_100G);
2702-
break;
2703-
case HCLGE_MAC_SPEED_200G:
2704-
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2705-
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_200G);
2706-
break;
2707-
default:
2697+
ret = hclge_convert_to_fw_speed(speed, &speed_fw);
2698+
if (ret) {
27082699
dev_err(&hdev->pdev->dev, "invalid speed (%d)\n", speed);
2709-
return -EINVAL;
2700+
return ret;
27102701
}
27112702

2703+
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, HCLGE_CFG_SPEED_S,
2704+
speed_fw);
27122705
hnae3_set_bit(req->mac_change_fec_en, HCLGE_CFG_MAC_SPEED_CHANGE_EN_B,
27132706
1);
27142707

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,6 +1095,11 @@ struct hclge_speed_bit_map {
10951095
u32 speed_bit;
10961096
};
10971097

1098+
struct hclge_mac_speed_map {
1099+
u32 speed_drv; /* speed defined in driver */
1100+
u32 speed_fw; /* speed defined in firmware */
1101+
};
1102+
10981103
int hclge_set_vport_promisc_mode(struct hclge_vport *vport, bool en_uc_pmc,
10991104
bool en_mc_pmc, bool en_bc_pmc);
11001105
int hclge_add_uc_addr_common(struct hclge_vport *vport,

0 commit comments

Comments
 (0)