OSDN Git Service

net: hns3: split function hclge_init_vlan_config()
authorJian Shen <shenjian15@huawei.com>
Thu, 2 Dec 2021 08:35:57 +0000 (16:35 +0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 2 Dec 2021 11:53:42 +0000 (11:53 +0000)
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>
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

index 1815fcf..81492a9 100644 (file)
@@ -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);
-               if (ret)
-                       return ret;
-       } else {
+       /* 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_V1_B,
-                                                true, 0);
+                                                HCLGE_FILTER_FE_EGRESS, true,
+                                                vport->vport_id);
                if (ret)
                        return ret;
+               vport->cur_vlan_fltr_en = true;
        }
 
-       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;
+       return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT,
+                                         HCLGE_FILTER_FE_INGRESS, true, 0);
+}
 
-       ret = hclge_set_vlan_protocol_type(hdev);
-       if (ret)
-               return ret;
+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;
 
-       for (i = 0; i < hdev->num_alloc_vport; i++) {
-               u16 vlan_tag;
-               u8 qos;
+       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];
-               vlan_tag = vport->port_base_vlan_cfg.vlan_info.vlan_tag;
-               qos = vport->port_base_vlan_cfg.vlan_info.qos;
+               cfg = &vport->port_base_vlan_cfg;
 
-               ret = hclge_vlan_offload_cfg(vport,
-                                            vport->port_base_vlan_cfg.state,
-                                            vlan_tag, qos);
+               ret = hclge_vlan_offload_cfg(vport, cfg->state,
+                                            cfg->vlan_info.vlan_tag,
+                                            cfg->vlan_info.qos);
                if (ret)
                        return ret;
        }
+       return 0;
+}
+
+static int hclge_init_vlan_config(struct hclge_dev *hdev)
+{
+       struct hnae3_handle *handle = &hdev->vport[0].nic;
+       int ret;
+
+       ret = hclge_init_vlan_filter(hdev);
+       if (ret)
+               return ret;
+
+       ret = hclge_init_vlan_type(hdev);
+       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);
 }