net: hns3: split function hclge_init_vlan_config()
Currently the function hclge_init_vlan_config() is a bit long. Split it to several small functions, to simplify code and improve code readability. Signed-off-by: Jian Shen <shenjian15@huawei.com> Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a1cfb24d01
commit
b60f9d2ec4
@ -10194,67 +10194,80 @@ static int hclge_set_vlan_protocol_type(struct hclge_dev *hdev)
|
||||
return status;
|
||||
}
|
||||
|
||||
static int hclge_init_vlan_config(struct hclge_dev *hdev)
|
||||
static int hclge_init_vlan_filter(struct hclge_dev *hdev)
|
||||
{
|
||||
#define HCLGE_DEF_VLAN_TYPE 0x8100
|
||||
|
||||
struct hnae3_handle *handle = &hdev->vport[0].nic;
|
||||
struct hclge_vport *vport;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
|
||||
/* for revision 0x21, vf vlan filter is per function */
|
||||
for (i = 0; i < hdev->num_alloc_vport; i++) {
|
||||
vport = &hdev->vport[i];
|
||||
ret = hclge_set_vlan_filter_ctrl(hdev,
|
||||
HCLGE_FILTER_TYPE_VF,
|
||||
HCLGE_FILTER_FE_EGRESS,
|
||||
true,
|
||||
vport->vport_id);
|
||||
if (ret)
|
||||
return ret;
|
||||
vport->cur_vlan_fltr_en = true;
|
||||
}
|
||||
if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
|
||||
return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
|
||||
HCLGE_FILTER_FE_EGRESS_V1_B,
|
||||
true, 0);
|
||||
|
||||
ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT,
|
||||
HCLGE_FILTER_FE_INGRESS, true,
|
||||
0);
|
||||
/* for revision 0x21, vf vlan filter is per function */
|
||||
for (i = 0; i < hdev->num_alloc_vport; i++) {
|
||||
vport = &hdev->vport[i];
|
||||
ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
|
||||
HCLGE_FILTER_FE_EGRESS, true,
|
||||
vport->vport_id);
|
||||
if (ret)
|
||||
return ret;
|
||||
} else {
|
||||
ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
|
||||
HCLGE_FILTER_FE_EGRESS_V1_B,
|
||||
true, 0);
|
||||
vport->cur_vlan_fltr_en = true;
|
||||
}
|
||||
|
||||
return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT,
|
||||
HCLGE_FILTER_FE_INGRESS, true, 0);
|
||||
}
|
||||
|
||||
static int hclge_init_vlan_type(struct hclge_dev *hdev)
|
||||
{
|
||||
hdev->vlan_type_cfg.rx_in_fst_vlan_type = ETH_P_8021Q;
|
||||
hdev->vlan_type_cfg.rx_in_sec_vlan_type = ETH_P_8021Q;
|
||||
hdev->vlan_type_cfg.rx_ot_fst_vlan_type = ETH_P_8021Q;
|
||||
hdev->vlan_type_cfg.rx_ot_sec_vlan_type = ETH_P_8021Q;
|
||||
hdev->vlan_type_cfg.tx_ot_vlan_type = ETH_P_8021Q;
|
||||
hdev->vlan_type_cfg.tx_in_vlan_type = ETH_P_8021Q;
|
||||
|
||||
return hclge_set_vlan_protocol_type(hdev);
|
||||
}
|
||||
|
||||
static int hclge_init_vport_vlan_offload(struct hclge_dev *hdev)
|
||||
{
|
||||
struct hclge_port_base_vlan_config *cfg;
|
||||
struct hclge_vport *vport;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < hdev->num_alloc_vport; i++) {
|
||||
vport = &hdev->vport[i];
|
||||
cfg = &vport->port_base_vlan_cfg;
|
||||
|
||||
ret = hclge_vlan_offload_cfg(vport, cfg->state,
|
||||
cfg->vlan_info.vlan_tag,
|
||||
cfg->vlan_info.qos);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
hdev->vlan_type_cfg.rx_in_fst_vlan_type = HCLGE_DEF_VLAN_TYPE;
|
||||
hdev->vlan_type_cfg.rx_in_sec_vlan_type = HCLGE_DEF_VLAN_TYPE;
|
||||
hdev->vlan_type_cfg.rx_ot_fst_vlan_type = HCLGE_DEF_VLAN_TYPE;
|
||||
hdev->vlan_type_cfg.rx_ot_sec_vlan_type = HCLGE_DEF_VLAN_TYPE;
|
||||
hdev->vlan_type_cfg.tx_ot_vlan_type = HCLGE_DEF_VLAN_TYPE;
|
||||
hdev->vlan_type_cfg.tx_in_vlan_type = HCLGE_DEF_VLAN_TYPE;
|
||||
static int hclge_init_vlan_config(struct hclge_dev *hdev)
|
||||
{
|
||||
struct hnae3_handle *handle = &hdev->vport[0].nic;
|
||||
int ret;
|
||||
|
||||
ret = hclge_set_vlan_protocol_type(hdev);
|
||||
ret = hclge_init_vlan_filter(hdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for (i = 0; i < hdev->num_alloc_vport; i++) {
|
||||
u16 vlan_tag;
|
||||
u8 qos;
|
||||
ret = hclge_init_vlan_type(hdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
vport = &hdev->vport[i];
|
||||
vlan_tag = vport->port_base_vlan_cfg.vlan_info.vlan_tag;
|
||||
qos = vport->port_base_vlan_cfg.vlan_info.qos;
|
||||
|
||||
ret = hclge_vlan_offload_cfg(vport,
|
||||
vport->port_base_vlan_cfg.state,
|
||||
vlan_tag, qos);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
ret = hclge_init_vport_vlan_offload(hdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return hclge_set_vlan_filter(handle, htons(ETH_P_8021Q), 0, false);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user