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 <huangguangbin2@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a4ae2bc0ab
commit
e46da6a3d4
@ -2653,11 +2653,38 @@ static u8 hclge_check_speed_dup(u8 duplex, int speed)
|
|||||||
return duplex;
|
return duplex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct hclge_mac_speed_map hclge_mac_speed_map_to_fw[] = {
|
||||||
|
{HCLGE_MAC_SPEED_10M, HCLGE_FW_MAC_SPEED_10M},
|
||||||
|
{HCLGE_MAC_SPEED_100M, HCLGE_FW_MAC_SPEED_100M},
|
||||||
|
{HCLGE_MAC_SPEED_1G, HCLGE_FW_MAC_SPEED_1G},
|
||||||
|
{HCLGE_MAC_SPEED_10G, HCLGE_FW_MAC_SPEED_10G},
|
||||||
|
{HCLGE_MAC_SPEED_25G, HCLGE_FW_MAC_SPEED_25G},
|
||||||
|
{HCLGE_MAC_SPEED_40G, HCLGE_FW_MAC_SPEED_40G},
|
||||||
|
{HCLGE_MAC_SPEED_50G, HCLGE_FW_MAC_SPEED_50G},
|
||||||
|
{HCLGE_MAC_SPEED_100G, HCLGE_FW_MAC_SPEED_100G},
|
||||||
|
{HCLGE_MAC_SPEED_200G, HCLGE_FW_MAC_SPEED_200G},
|
||||||
|
};
|
||||||
|
|
||||||
|
static int hclge_convert_to_fw_speed(u32 speed_drv, u32 *speed_fw)
|
||||||
|
{
|
||||||
|
u16 i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(hclge_mac_speed_map_to_fw); i++) {
|
||||||
|
if (hclge_mac_speed_map_to_fw[i].speed_drv == speed_drv) {
|
||||||
|
*speed_fw = hclge_mac_speed_map_to_fw[i].speed_fw;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
static int hclge_cfg_mac_speed_dup_hw(struct hclge_dev *hdev, int speed,
|
static int hclge_cfg_mac_speed_dup_hw(struct hclge_dev *hdev, int speed,
|
||||||
u8 duplex)
|
u8 duplex)
|
||||||
{
|
{
|
||||||
struct hclge_config_mac_speed_dup_cmd *req;
|
struct hclge_config_mac_speed_dup_cmd *req;
|
||||||
struct hclge_desc desc;
|
struct hclge_desc desc;
|
||||||
|
u32 speed_fw;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
req = (struct hclge_config_mac_speed_dup_cmd *)desc.data;
|
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,
|
|||||||
if (duplex)
|
if (duplex)
|
||||||
hnae3_set_bit(req->speed_dup, HCLGE_CFG_DUPLEX_B, 1);
|
hnae3_set_bit(req->speed_dup, HCLGE_CFG_DUPLEX_B, 1);
|
||||||
|
|
||||||
switch (speed) {
|
ret = hclge_convert_to_fw_speed(speed, &speed_fw);
|
||||||
case HCLGE_MAC_SPEED_10M:
|
if (ret) {
|
||||||
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
|
|
||||||
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_10M);
|
|
||||||
break;
|
|
||||||
case HCLGE_MAC_SPEED_100M:
|
|
||||||
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
|
|
||||||
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_100M);
|
|
||||||
break;
|
|
||||||
case HCLGE_MAC_SPEED_1G:
|
|
||||||
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
|
|
||||||
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_1G);
|
|
||||||
break;
|
|
||||||
case HCLGE_MAC_SPEED_10G:
|
|
||||||
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
|
|
||||||
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_10G);
|
|
||||||
break;
|
|
||||||
case HCLGE_MAC_SPEED_25G:
|
|
||||||
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
|
|
||||||
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_25G);
|
|
||||||
break;
|
|
||||||
case HCLGE_MAC_SPEED_40G:
|
|
||||||
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
|
|
||||||
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_40G);
|
|
||||||
break;
|
|
||||||
case HCLGE_MAC_SPEED_50G:
|
|
||||||
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
|
|
||||||
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_50G);
|
|
||||||
break;
|
|
||||||
case HCLGE_MAC_SPEED_100G:
|
|
||||||
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
|
|
||||||
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_100G);
|
|
||||||
break;
|
|
||||||
case HCLGE_MAC_SPEED_200G:
|
|
||||||
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
|
|
||||||
HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_200G);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
dev_err(&hdev->pdev->dev, "invalid speed (%d)\n", speed);
|
dev_err(&hdev->pdev->dev, "invalid speed (%d)\n", speed);
|
||||||
return -EINVAL;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, HCLGE_CFG_SPEED_S,
|
||||||
|
speed_fw);
|
||||||
hnae3_set_bit(req->mac_change_fec_en, HCLGE_CFG_MAC_SPEED_CHANGE_EN_B,
|
hnae3_set_bit(req->mac_change_fec_en, HCLGE_CFG_MAC_SPEED_CHANGE_EN_B,
|
||||||
1);
|
1);
|
||||||
|
|
||||||
|
@ -1095,6 +1095,11 @@ struct hclge_speed_bit_map {
|
|||||||
u32 speed_bit;
|
u32 speed_bit;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct hclge_mac_speed_map {
|
||||||
|
u32 speed_drv; /* speed defined in driver */
|
||||||
|
u32 speed_fw; /* speed defined in firmware */
|
||||||
|
};
|
||||||
|
|
||||||
int hclge_set_vport_promisc_mode(struct hclge_vport *vport, bool en_uc_pmc,
|
int hclge_set_vport_promisc_mode(struct hclge_vport *vport, bool en_uc_pmc,
|
||||||
bool en_mc_pmc, bool en_bc_pmc);
|
bool en_mc_pmc, bool en_bc_pmc);
|
||||||
int hclge_add_uc_addr_common(struct hclge_vport *vport,
|
int hclge_add_uc_addr_common(struct hclge_vport *vport,
|
||||||
|
Reference in New Issue
Block a user