net: hns3: Add egress/ingress vlan filter for revision 0x21
In revision 0x21, hw supports both ingress and egress vlan filter. This patch adds support for it. Signed-off-by: Zhongzhu Liu <liuzhongzhu@huawei.com> Signed-off-by: Jian Shen <shenjian15@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									1f6db58973
								
							
						
					
					
						commit
						64d114f0a7
					
				| @ -5523,7 +5523,7 @@ static int hclge_do_ioctl(struct hnae3_handle *handle, struct ifreq *ifr, | ||||
| } | ||||
| 
 | ||||
| static int hclge_set_vlan_filter_ctrl(struct hclge_dev *hdev, u8 vlan_type, | ||||
| 				      bool filter_en) | ||||
| 				      u8 fe_type, bool filter_en) | ||||
| { | ||||
| 	struct hclge_vlan_filter_ctrl_cmd *req; | ||||
| 	struct hclge_desc desc; | ||||
| @ -5533,7 +5533,7 @@ static int hclge_set_vlan_filter_ctrl(struct hclge_dev *hdev, u8 vlan_type, | ||||
| 
 | ||||
| 	req = (struct hclge_vlan_filter_ctrl_cmd *)desc.data; | ||||
| 	req->vlan_type = vlan_type; | ||||
| 	req->vlan_fe = filter_en; | ||||
| 	req->vlan_fe = filter_en ? fe_type : 0; | ||||
| 
 | ||||
| 	ret = hclge_cmd_send(&hdev->hw, &desc, 1); | ||||
| 	if (ret) | ||||
| @ -5545,13 +5545,30 @@ static int hclge_set_vlan_filter_ctrl(struct hclge_dev *hdev, u8 vlan_type, | ||||
| 
 | ||||
| #define HCLGE_FILTER_TYPE_VF		0 | ||||
| #define HCLGE_FILTER_TYPE_PORT		1 | ||||
| #define HCLGE_FILTER_FE_EGRESS_V1_B	BIT(0) | ||||
| #define HCLGE_FILTER_FE_NIC_INGRESS_B	BIT(0) | ||||
| #define HCLGE_FILTER_FE_NIC_EGRESS_B	BIT(1) | ||||
| #define HCLGE_FILTER_FE_ROCE_INGRESS_B	BIT(2) | ||||
| #define HCLGE_FILTER_FE_ROCE_EGRESS_B	BIT(3) | ||||
| #define HCLGE_FILTER_FE_EGRESS		(HCLGE_FILTER_FE_NIC_EGRESS_B \ | ||||
| 					| HCLGE_FILTER_FE_ROCE_EGRESS_B) | ||||
| #define HCLGE_FILTER_FE_INGRESS		(HCLGE_FILTER_FE_NIC_INGRESS_B \ | ||||
| 					| HCLGE_FILTER_FE_ROCE_INGRESS_B) | ||||
| 
 | ||||
| static void hclge_enable_vlan_filter(struct hnae3_handle *handle, bool enable) | ||||
| { | ||||
| 	struct hclge_vport *vport = hclge_get_vport(handle); | ||||
| 	struct hclge_dev *hdev = vport->back; | ||||
| 
 | ||||
| 	hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF, enable); | ||||
| 	if (hdev->pdev->revision >= 0x21) { | ||||
| 		hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF, | ||||
| 					   HCLGE_FILTER_FE_EGRESS, enable); | ||||
| 		hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT, | ||||
| 					   HCLGE_FILTER_FE_INGRESS, enable); | ||||
| 	} else { | ||||
| 		hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF, | ||||
| 					   HCLGE_FILTER_FE_EGRESS_V1_B, enable); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static int hclge_set_vf_vlan_common(struct hclge_dev *hdev, int vfid, | ||||
| @ -5853,13 +5870,23 @@ static int hclge_init_vlan_config(struct hclge_dev *hdev) | ||||
| 	int ret; | ||||
| 	int i; | ||||
| 
 | ||||
| 	ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF, true); | ||||
| 	if (hdev->pdev->revision >= 0x21) { | ||||
| 		ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF, | ||||
| 						 HCLGE_FILTER_FE_EGRESS, true); | ||||
| 		if (ret) | ||||
| 			return ret; | ||||
| 
 | ||||
| 	ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT, true); | ||||
| 		ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT, | ||||
| 						 HCLGE_FILTER_FE_INGRESS, true); | ||||
| 		if (ret) | ||||
| 			return ret; | ||||
| 	} else { | ||||
| 		ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF, | ||||
| 						 HCLGE_FILTER_FE_EGRESS_V1_B, | ||||
| 						 true); | ||||
| 		if (ret) | ||||
| 			return ret; | ||||
| 	} | ||||
| 
 | ||||
| 	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; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user