1 // SPDX-License-Identifier: GPL-2.0+
2 // Copyright (c) 2016-2017 Hisilicon Limited.
3 
4 #include <linux/acpi.h>
5 #include <linux/device.h>
6 #include <linux/etherdevice.h>
7 #include <linux/init.h>
8 #include <linux/interrupt.h>
9 #include <linux/kernel.h>
10 #include <linux/module.h>
11 #include <linux/netdevice.h>
12 #include <linux/pci.h>
13 #include <linux/platform_device.h>
14 #include <linux/if_vlan.h>
15 #include <linux/crash_dump.h>
16 #include <net/ipv6.h>
17 #include <net/rtnetlink.h>
18 #include "hclge_cmd.h"
19 #include "hclge_dcb.h"
20 #include "hclge_main.h"
21 #include "hclge_mbx.h"
22 #include "hclge_mdio.h"
23 #include "hclge_tm.h"
24 #include "hclge_err.h"
25 #include "hnae3.h"
26 
27 #define HCLGE_NAME			"hclge"
28 #define HCLGE_STATS_READ(p, offset) (*(u64 *)((u8 *)(p) + (offset)))
29 #define HCLGE_MAC_STATS_FIELD_OFF(f) (offsetof(struct hclge_mac_stats, f))
30 
31 #define HCLGE_BUF_SIZE_UNIT	256U
32 #define HCLGE_BUF_MUL_BY	2
33 #define HCLGE_BUF_DIV_BY	2
34 #define NEED_RESERVE_TC_NUM	2
35 #define BUF_MAX_PERCENT		100
36 #define BUF_RESERVE_PERCENT	90
37 
38 #define HCLGE_RESET_MAX_FAIL_CNT	5
39 #define HCLGE_RESET_SYNC_TIME		100
40 #define HCLGE_PF_RESET_SYNC_TIME	20
41 #define HCLGE_PF_RESET_SYNC_CNT		1500
42 
43 /* Get DFX BD number offset */
44 #define HCLGE_DFX_BIOS_BD_OFFSET        1
45 #define HCLGE_DFX_SSU_0_BD_OFFSET       2
46 #define HCLGE_DFX_SSU_1_BD_OFFSET       3
47 #define HCLGE_DFX_IGU_BD_OFFSET         4
48 #define HCLGE_DFX_RPU_0_BD_OFFSET       5
49 #define HCLGE_DFX_RPU_1_BD_OFFSET       6
50 #define HCLGE_DFX_NCSI_BD_OFFSET        7
51 #define HCLGE_DFX_RTC_BD_OFFSET         8
52 #define HCLGE_DFX_PPP_BD_OFFSET         9
53 #define HCLGE_DFX_RCB_BD_OFFSET         10
54 #define HCLGE_DFX_TQP_BD_OFFSET         11
55 #define HCLGE_DFX_SSU_2_BD_OFFSET       12
56 
57 #define HCLGE_LINK_STATUS_MS	10
58 
59 static int hclge_set_mac_mtu(struct hclge_dev *hdev, int new_mps);
60 static int hclge_init_vlan_config(struct hclge_dev *hdev);
61 static void hclge_sync_vlan_filter(struct hclge_dev *hdev);
62 static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev);
63 static bool hclge_get_hw_reset_stat(struct hnae3_handle *handle);
64 static void hclge_rfs_filter_expire(struct hclge_dev *hdev);
65 static void hclge_clear_arfs_rules(struct hnae3_handle *handle);
66 static enum hnae3_reset_type hclge_get_reset_level(struct hnae3_ae_dev *ae_dev,
67 						   unsigned long *addr);
68 static int hclge_set_default_loopback(struct hclge_dev *hdev);
69 
70 static void hclge_sync_mac_table(struct hclge_dev *hdev);
71 static void hclge_restore_hw_table(struct hclge_dev *hdev);
72 static void hclge_sync_promisc_mode(struct hclge_dev *hdev);
73 
74 static struct hnae3_ae_algo ae_algo;
75 
76 static struct workqueue_struct *hclge_wq;
77 
78 static const struct pci_device_id ae_algo_pci_tbl[] = {
79 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_GE), 0},
80 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE), 0},
81 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA), 0},
82 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA_MACSEC), 0},
83 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA), 0},
84 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA_MACSEC), 0},
85 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_100G_RDMA_MACSEC), 0},
86 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_200G_RDMA), 0},
87 	/* required last entry */
88 	{0, }
89 };
90 
91 MODULE_DEVICE_TABLE(pci, ae_algo_pci_tbl);
92 
93 static const u32 cmdq_reg_addr_list[] = {HCLGE_CMDQ_TX_ADDR_L_REG,
94 					 HCLGE_CMDQ_TX_ADDR_H_REG,
95 					 HCLGE_CMDQ_TX_DEPTH_REG,
96 					 HCLGE_CMDQ_TX_TAIL_REG,
97 					 HCLGE_CMDQ_TX_HEAD_REG,
98 					 HCLGE_CMDQ_RX_ADDR_L_REG,
99 					 HCLGE_CMDQ_RX_ADDR_H_REG,
100 					 HCLGE_CMDQ_RX_DEPTH_REG,
101 					 HCLGE_CMDQ_RX_TAIL_REG,
102 					 HCLGE_CMDQ_RX_HEAD_REG,
103 					 HCLGE_VECTOR0_CMDQ_SRC_REG,
104 					 HCLGE_CMDQ_INTR_STS_REG,
105 					 HCLGE_CMDQ_INTR_EN_REG,
106 					 HCLGE_CMDQ_INTR_GEN_REG};
107 
108 static const u32 common_reg_addr_list[] = {HCLGE_MISC_VECTOR_REG_BASE,
109 					   HCLGE_VECTOR0_OTER_EN_REG,
110 					   HCLGE_MISC_RESET_STS_REG,
111 					   HCLGE_MISC_VECTOR_INT_STS,
112 					   HCLGE_GLOBAL_RESET_REG,
113 					   HCLGE_FUN_RST_ING,
114 					   HCLGE_GRO_EN_REG};
115 
116 static const u32 ring_reg_addr_list[] = {HCLGE_RING_RX_ADDR_L_REG,
117 					 HCLGE_RING_RX_ADDR_H_REG,
118 					 HCLGE_RING_RX_BD_NUM_REG,
119 					 HCLGE_RING_RX_BD_LENGTH_REG,
120 					 HCLGE_RING_RX_MERGE_EN_REG,
121 					 HCLGE_RING_RX_TAIL_REG,
122 					 HCLGE_RING_RX_HEAD_REG,
123 					 HCLGE_RING_RX_FBD_NUM_REG,
124 					 HCLGE_RING_RX_OFFSET_REG,
125 					 HCLGE_RING_RX_FBD_OFFSET_REG,
126 					 HCLGE_RING_RX_STASH_REG,
127 					 HCLGE_RING_RX_BD_ERR_REG,
128 					 HCLGE_RING_TX_ADDR_L_REG,
129 					 HCLGE_RING_TX_ADDR_H_REG,
130 					 HCLGE_RING_TX_BD_NUM_REG,
131 					 HCLGE_RING_TX_PRIORITY_REG,
132 					 HCLGE_RING_TX_TC_REG,
133 					 HCLGE_RING_TX_MERGE_EN_REG,
134 					 HCLGE_RING_TX_TAIL_REG,
135 					 HCLGE_RING_TX_HEAD_REG,
136 					 HCLGE_RING_TX_FBD_NUM_REG,
137 					 HCLGE_RING_TX_OFFSET_REG,
138 					 HCLGE_RING_TX_EBD_NUM_REG,
139 					 HCLGE_RING_TX_EBD_OFFSET_REG,
140 					 HCLGE_RING_TX_BD_ERR_REG,
141 					 HCLGE_RING_EN_REG};
142 
143 static const u32 tqp_intr_reg_addr_list[] = {HCLGE_TQP_INTR_CTRL_REG,
144 					     HCLGE_TQP_INTR_GL0_REG,
145 					     HCLGE_TQP_INTR_GL1_REG,
146 					     HCLGE_TQP_INTR_GL2_REG,
147 					     HCLGE_TQP_INTR_RL_REG};
148 
149 static const char hns3_nic_test_strs[][ETH_GSTRING_LEN] = {
150 	"App    Loopback test",
151 	"Serdes serial Loopback test",
152 	"Serdes parallel Loopback test",
153 	"Phy    Loopback test"
154 };
155 
156 static const struct hclge_comm_stats_str g_mac_stats_string[] = {
157 	{"mac_tx_mac_pause_num",
158 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_mac_pause_num)},
159 	{"mac_rx_mac_pause_num",
160 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_mac_pause_num)},
161 	{"mac_tx_control_pkt_num",
162 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_ctrl_pkt_num)},
163 	{"mac_rx_control_pkt_num",
164 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_ctrl_pkt_num)},
165 	{"mac_tx_pfc_pkt_num",
166 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pause_pkt_num)},
167 	{"mac_tx_pfc_pri0_pkt_num",
168 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri0_pkt_num)},
169 	{"mac_tx_pfc_pri1_pkt_num",
170 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri1_pkt_num)},
171 	{"mac_tx_pfc_pri2_pkt_num",
172 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri2_pkt_num)},
173 	{"mac_tx_pfc_pri3_pkt_num",
174 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri3_pkt_num)},
175 	{"mac_tx_pfc_pri4_pkt_num",
176 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri4_pkt_num)},
177 	{"mac_tx_pfc_pri5_pkt_num",
178 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri5_pkt_num)},
179 	{"mac_tx_pfc_pri6_pkt_num",
180 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri6_pkt_num)},
181 	{"mac_tx_pfc_pri7_pkt_num",
182 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri7_pkt_num)},
183 	{"mac_rx_pfc_pkt_num",
184 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pause_pkt_num)},
185 	{"mac_rx_pfc_pri0_pkt_num",
186 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri0_pkt_num)},
187 	{"mac_rx_pfc_pri1_pkt_num",
188 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri1_pkt_num)},
189 	{"mac_rx_pfc_pri2_pkt_num",
190 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri2_pkt_num)},
191 	{"mac_rx_pfc_pri3_pkt_num",
192 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri3_pkt_num)},
193 	{"mac_rx_pfc_pri4_pkt_num",
194 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri4_pkt_num)},
195 	{"mac_rx_pfc_pri5_pkt_num",
196 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri5_pkt_num)},
197 	{"mac_rx_pfc_pri6_pkt_num",
198 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri6_pkt_num)},
199 	{"mac_rx_pfc_pri7_pkt_num",
200 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri7_pkt_num)},
201 	{"mac_tx_total_pkt_num",
202 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_total_pkt_num)},
203 	{"mac_tx_total_oct_num",
204 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_total_oct_num)},
205 	{"mac_tx_good_pkt_num",
206 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_good_pkt_num)},
207 	{"mac_tx_bad_pkt_num",
208 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_bad_pkt_num)},
209 	{"mac_tx_good_oct_num",
210 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_good_oct_num)},
211 	{"mac_tx_bad_oct_num",
212 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_bad_oct_num)},
213 	{"mac_tx_uni_pkt_num",
214 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_uni_pkt_num)},
215 	{"mac_tx_multi_pkt_num",
216 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_multi_pkt_num)},
217 	{"mac_tx_broad_pkt_num",
218 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_broad_pkt_num)},
219 	{"mac_tx_undersize_pkt_num",
220 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_undersize_pkt_num)},
221 	{"mac_tx_oversize_pkt_num",
222 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_oversize_pkt_num)},
223 	{"mac_tx_64_oct_pkt_num",
224 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_64_oct_pkt_num)},
225 	{"mac_tx_65_127_oct_pkt_num",
226 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_65_127_oct_pkt_num)},
227 	{"mac_tx_128_255_oct_pkt_num",
228 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_128_255_oct_pkt_num)},
229 	{"mac_tx_256_511_oct_pkt_num",
230 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_256_511_oct_pkt_num)},
231 	{"mac_tx_512_1023_oct_pkt_num",
232 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_512_1023_oct_pkt_num)},
233 	{"mac_tx_1024_1518_oct_pkt_num",
234 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1024_1518_oct_pkt_num)},
235 	{"mac_tx_1519_2047_oct_pkt_num",
236 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1519_2047_oct_pkt_num)},
237 	{"mac_tx_2048_4095_oct_pkt_num",
238 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_2048_4095_oct_pkt_num)},
239 	{"mac_tx_4096_8191_oct_pkt_num",
240 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_4096_8191_oct_pkt_num)},
241 	{"mac_tx_8192_9216_oct_pkt_num",
242 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_8192_9216_oct_pkt_num)},
243 	{"mac_tx_9217_12287_oct_pkt_num",
244 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_9217_12287_oct_pkt_num)},
245 	{"mac_tx_12288_16383_oct_pkt_num",
246 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_12288_16383_oct_pkt_num)},
247 	{"mac_tx_1519_max_good_pkt_num",
248 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1519_max_good_oct_pkt_num)},
249 	{"mac_tx_1519_max_bad_pkt_num",
250 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1519_max_bad_oct_pkt_num)},
251 	{"mac_rx_total_pkt_num",
252 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_total_pkt_num)},
253 	{"mac_rx_total_oct_num",
254 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_total_oct_num)},
255 	{"mac_rx_good_pkt_num",
256 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_good_pkt_num)},
257 	{"mac_rx_bad_pkt_num",
258 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_bad_pkt_num)},
259 	{"mac_rx_good_oct_num",
260 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_good_oct_num)},
261 	{"mac_rx_bad_oct_num",
262 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_bad_oct_num)},
263 	{"mac_rx_uni_pkt_num",
264 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_uni_pkt_num)},
265 	{"mac_rx_multi_pkt_num",
266 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_multi_pkt_num)},
267 	{"mac_rx_broad_pkt_num",
268 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_broad_pkt_num)},
269 	{"mac_rx_undersize_pkt_num",
270 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_undersize_pkt_num)},
271 	{"mac_rx_oversize_pkt_num",
272 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_oversize_pkt_num)},
273 	{"mac_rx_64_oct_pkt_num",
274 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_64_oct_pkt_num)},
275 	{"mac_rx_65_127_oct_pkt_num",
276 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_65_127_oct_pkt_num)},
277 	{"mac_rx_128_255_oct_pkt_num",
278 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_128_255_oct_pkt_num)},
279 	{"mac_rx_256_511_oct_pkt_num",
280 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_256_511_oct_pkt_num)},
281 	{"mac_rx_512_1023_oct_pkt_num",
282 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_512_1023_oct_pkt_num)},
283 	{"mac_rx_1024_1518_oct_pkt_num",
284 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1024_1518_oct_pkt_num)},
285 	{"mac_rx_1519_2047_oct_pkt_num",
286 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1519_2047_oct_pkt_num)},
287 	{"mac_rx_2048_4095_oct_pkt_num",
288 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_2048_4095_oct_pkt_num)},
289 	{"mac_rx_4096_8191_oct_pkt_num",
290 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_4096_8191_oct_pkt_num)},
291 	{"mac_rx_8192_9216_oct_pkt_num",
292 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_8192_9216_oct_pkt_num)},
293 	{"mac_rx_9217_12287_oct_pkt_num",
294 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_9217_12287_oct_pkt_num)},
295 	{"mac_rx_12288_16383_oct_pkt_num",
296 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_12288_16383_oct_pkt_num)},
297 	{"mac_rx_1519_max_good_pkt_num",
298 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1519_max_good_oct_pkt_num)},
299 	{"mac_rx_1519_max_bad_pkt_num",
300 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1519_max_bad_oct_pkt_num)},
301 
302 	{"mac_tx_fragment_pkt_num",
303 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_fragment_pkt_num)},
304 	{"mac_tx_undermin_pkt_num",
305 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_undermin_pkt_num)},
306 	{"mac_tx_jabber_pkt_num",
307 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_jabber_pkt_num)},
308 	{"mac_tx_err_all_pkt_num",
309 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_err_all_pkt_num)},
310 	{"mac_tx_from_app_good_pkt_num",
311 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_from_app_good_pkt_num)},
312 	{"mac_tx_from_app_bad_pkt_num",
313 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_from_app_bad_pkt_num)},
314 	{"mac_rx_fragment_pkt_num",
315 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_fragment_pkt_num)},
316 	{"mac_rx_undermin_pkt_num",
317 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_undermin_pkt_num)},
318 	{"mac_rx_jabber_pkt_num",
319 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_jabber_pkt_num)},
320 	{"mac_rx_fcs_err_pkt_num",
321 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_fcs_err_pkt_num)},
322 	{"mac_rx_send_app_good_pkt_num",
323 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_send_app_good_pkt_num)},
324 	{"mac_rx_send_app_bad_pkt_num",
325 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_send_app_bad_pkt_num)}
326 };
327 
328 static const struct hclge_mac_mgr_tbl_entry_cmd hclge_mgr_table[] = {
329 	{
330 		.flags = HCLGE_MAC_MGR_MASK_VLAN_B,
331 		.ethter_type = cpu_to_le16(ETH_P_LLDP),
332 		.mac_addr = {0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e},
333 		.i_port_bitmap = 0x1,
334 	},
335 };
336 
337 static const u8 hclge_hash_key[] = {
338 	0x6D, 0x5A, 0x56, 0xDA, 0x25, 0x5B, 0x0E, 0xC2,
339 	0x41, 0x67, 0x25, 0x3D, 0x43, 0xA3, 0x8F, 0xB0,
340 	0xD0, 0xCA, 0x2B, 0xCB, 0xAE, 0x7B, 0x30, 0xB4,
341 	0x77, 0xCB, 0x2D, 0xA3, 0x80, 0x30, 0xF2, 0x0C,
342 	0x6A, 0x42, 0xB7, 0x3B, 0xBE, 0xAC, 0x01, 0xFA
343 };
344 
345 static const u32 hclge_dfx_bd_offset_list[] = {
346 	HCLGE_DFX_BIOS_BD_OFFSET,
347 	HCLGE_DFX_SSU_0_BD_OFFSET,
348 	HCLGE_DFX_SSU_1_BD_OFFSET,
349 	HCLGE_DFX_IGU_BD_OFFSET,
350 	HCLGE_DFX_RPU_0_BD_OFFSET,
351 	HCLGE_DFX_RPU_1_BD_OFFSET,
352 	HCLGE_DFX_NCSI_BD_OFFSET,
353 	HCLGE_DFX_RTC_BD_OFFSET,
354 	HCLGE_DFX_PPP_BD_OFFSET,
355 	HCLGE_DFX_RCB_BD_OFFSET,
356 	HCLGE_DFX_TQP_BD_OFFSET,
357 	HCLGE_DFX_SSU_2_BD_OFFSET
358 };
359 
360 static const enum hclge_opcode_type hclge_dfx_reg_opcode_list[] = {
361 	HCLGE_OPC_DFX_BIOS_COMMON_REG,
362 	HCLGE_OPC_DFX_SSU_REG_0,
363 	HCLGE_OPC_DFX_SSU_REG_1,
364 	HCLGE_OPC_DFX_IGU_EGU_REG,
365 	HCLGE_OPC_DFX_RPU_REG_0,
366 	HCLGE_OPC_DFX_RPU_REG_1,
367 	HCLGE_OPC_DFX_NCSI_REG,
368 	HCLGE_OPC_DFX_RTC_REG,
369 	HCLGE_OPC_DFX_PPP_REG,
370 	HCLGE_OPC_DFX_RCB_REG,
371 	HCLGE_OPC_DFX_TQP_REG,
372 	HCLGE_OPC_DFX_SSU_REG_2
373 };
374 
375 static const struct key_info meta_data_key_info[] = {
376 	{ PACKET_TYPE_ID, 6},
377 	{ IP_FRAGEMENT, 1},
378 	{ ROCE_TYPE, 1},
379 	{ NEXT_KEY, 5},
380 	{ VLAN_NUMBER, 2},
381 	{ SRC_VPORT, 12},
382 	{ DST_VPORT, 12},
383 	{ TUNNEL_PACKET, 1},
384 };
385 
386 static const struct key_info tuple_key_info[] = {
387 	{ OUTER_DST_MAC, 48},
388 	{ OUTER_SRC_MAC, 48},
389 	{ OUTER_VLAN_TAG_FST, 16},
390 	{ OUTER_VLAN_TAG_SEC, 16},
391 	{ OUTER_ETH_TYPE, 16},
392 	{ OUTER_L2_RSV, 16},
393 	{ OUTER_IP_TOS, 8},
394 	{ OUTER_IP_PROTO, 8},
395 	{ OUTER_SRC_IP, 32},
396 	{ OUTER_DST_IP, 32},
397 	{ OUTER_L3_RSV, 16},
398 	{ OUTER_SRC_PORT, 16},
399 	{ OUTER_DST_PORT, 16},
400 	{ OUTER_L4_RSV, 32},
401 	{ OUTER_TUN_VNI, 24},
402 	{ OUTER_TUN_FLOW_ID, 8},
403 	{ INNER_DST_MAC, 48},
404 	{ INNER_SRC_MAC, 48},
405 	{ INNER_VLAN_TAG_FST, 16},
406 	{ INNER_VLAN_TAG_SEC, 16},
407 	{ INNER_ETH_TYPE, 16},
408 	{ INNER_L2_RSV, 16},
409 	{ INNER_IP_TOS, 8},
410 	{ INNER_IP_PROTO, 8},
411 	{ INNER_SRC_IP, 32},
412 	{ INNER_DST_IP, 32},
413 	{ INNER_L3_RSV, 16},
414 	{ INNER_SRC_PORT, 16},
415 	{ INNER_DST_PORT, 16},
416 	{ INNER_L4_RSV, 32},
417 };
418 
419 static int hclge_mac_update_stats_defective(struct hclge_dev *hdev)
420 {
421 #define HCLGE_MAC_CMD_NUM 21
422 
423 	u64 *data = (u64 *)(&hdev->mac_stats);
424 	struct hclge_desc desc[HCLGE_MAC_CMD_NUM];
425 	__le64 *desc_data;
426 	int i, k, n;
427 	int ret;
428 
429 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_STATS_MAC, true);
430 	ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_MAC_CMD_NUM);
431 	if (ret) {
432 		dev_err(&hdev->pdev->dev,
433 			"Get MAC pkt stats fail, status = %d.\n", ret);
434 
435 		return ret;
436 	}
437 
438 	for (i = 0; i < HCLGE_MAC_CMD_NUM; i++) {
439 		/* for special opcode 0032, only the first desc has the head */
440 		if (unlikely(i == 0)) {
441 			desc_data = (__le64 *)(&desc[i].data[0]);
442 			n = HCLGE_RD_FIRST_STATS_NUM;
443 		} else {
444 			desc_data = (__le64 *)(&desc[i]);
445 			n = HCLGE_RD_OTHER_STATS_NUM;
446 		}
447 
448 		for (k = 0; k < n; k++) {
449 			*data += le64_to_cpu(*desc_data);
450 			data++;
451 			desc_data++;
452 		}
453 	}
454 
455 	return 0;
456 }
457 
458 static int hclge_mac_update_stats_complete(struct hclge_dev *hdev, u32 desc_num)
459 {
460 	u64 *data = (u64 *)(&hdev->mac_stats);
461 	struct hclge_desc *desc;
462 	__le64 *desc_data;
463 	u16 i, k, n;
464 	int ret;
465 
466 	/* This may be called inside atomic sections,
467 	 * so GFP_ATOMIC is more suitalbe here
468 	 */
469 	desc = kcalloc(desc_num, sizeof(struct hclge_desc), GFP_ATOMIC);
470 	if (!desc)
471 		return -ENOMEM;
472 
473 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_STATS_MAC_ALL, true);
474 	ret = hclge_cmd_send(&hdev->hw, desc, desc_num);
475 	if (ret) {
476 		kfree(desc);
477 		return ret;
478 	}
479 
480 	for (i = 0; i < desc_num; i++) {
481 		/* for special opcode 0034, only the first desc has the head */
482 		if (i == 0) {
483 			desc_data = (__le64 *)(&desc[i].data[0]);
484 			n = HCLGE_RD_FIRST_STATS_NUM;
485 		} else {
486 			desc_data = (__le64 *)(&desc[i]);
487 			n = HCLGE_RD_OTHER_STATS_NUM;
488 		}
489 
490 		for (k = 0; k < n; k++) {
491 			*data += le64_to_cpu(*desc_data);
492 			data++;
493 			desc_data++;
494 		}
495 	}
496 
497 	kfree(desc);
498 
499 	return 0;
500 }
501 
502 static int hclge_mac_query_reg_num(struct hclge_dev *hdev, u32 *desc_num)
503 {
504 	struct hclge_desc desc;
505 	__le32 *desc_data;
506 	u32 reg_num;
507 	int ret;
508 
509 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_MAC_REG_NUM, true);
510 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
511 	if (ret)
512 		return ret;
513 
514 	desc_data = (__le32 *)(&desc.data[0]);
515 	reg_num = le32_to_cpu(*desc_data);
516 
517 	*desc_num = 1 + ((reg_num - 3) >> 2) +
518 		    (u32)(((reg_num - 3) & 0x3) ? 1 : 0);
519 
520 	return 0;
521 }
522 
523 static int hclge_mac_update_stats(struct hclge_dev *hdev)
524 {
525 	u32 desc_num;
526 	int ret;
527 
528 	ret = hclge_mac_query_reg_num(hdev, &desc_num);
529 
530 	/* The firmware supports the new statistics acquisition method */
531 	if (!ret)
532 		ret = hclge_mac_update_stats_complete(hdev, desc_num);
533 	else if (ret == -EOPNOTSUPP)
534 		ret = hclge_mac_update_stats_defective(hdev);
535 	else
536 		dev_err(&hdev->pdev->dev, "query mac reg num fail!\n");
537 
538 	return ret;
539 }
540 
541 static int hclge_tqps_update_stats(struct hnae3_handle *handle)
542 {
543 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
544 	struct hclge_vport *vport = hclge_get_vport(handle);
545 	struct hclge_dev *hdev = vport->back;
546 	struct hnae3_queue *queue;
547 	struct hclge_desc desc[1];
548 	struct hclge_tqp *tqp;
549 	int ret, i;
550 
551 	for (i = 0; i < kinfo->num_tqps; i++) {
552 		queue = handle->kinfo.tqp[i];
553 		tqp = container_of(queue, struct hclge_tqp, q);
554 		/* command : HCLGE_OPC_QUERY_IGU_STAT */
555 		hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QUERY_RX_STATS,
556 					   true);
557 
558 		desc[0].data[0] = cpu_to_le32(tqp->index);
559 		ret = hclge_cmd_send(&hdev->hw, desc, 1);
560 		if (ret) {
561 			dev_err(&hdev->pdev->dev,
562 				"Query tqp stat fail, status = %d,queue = %d\n",
563 				ret, i);
564 			return ret;
565 		}
566 		tqp->tqp_stats.rcb_rx_ring_pktnum_rcd +=
567 			le32_to_cpu(desc[0].data[1]);
568 	}
569 
570 	for (i = 0; i < kinfo->num_tqps; i++) {
571 		queue = handle->kinfo.tqp[i];
572 		tqp = container_of(queue, struct hclge_tqp, q);
573 		/* command : HCLGE_OPC_QUERY_IGU_STAT */
574 		hclge_cmd_setup_basic_desc(&desc[0],
575 					   HCLGE_OPC_QUERY_TX_STATS,
576 					   true);
577 
578 		desc[0].data[0] = cpu_to_le32(tqp->index);
579 		ret = hclge_cmd_send(&hdev->hw, desc, 1);
580 		if (ret) {
581 			dev_err(&hdev->pdev->dev,
582 				"Query tqp stat fail, status = %d,queue = %d\n",
583 				ret, i);
584 			return ret;
585 		}
586 		tqp->tqp_stats.rcb_tx_ring_pktnum_rcd +=
587 			le32_to_cpu(desc[0].data[1]);
588 	}
589 
590 	return 0;
591 }
592 
593 static u64 *hclge_tqps_get_stats(struct hnae3_handle *handle, u64 *data)
594 {
595 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
596 	struct hclge_tqp *tqp;
597 	u64 *buff = data;
598 	int i;
599 
600 	for (i = 0; i < kinfo->num_tqps; i++) {
601 		tqp = container_of(kinfo->tqp[i], struct hclge_tqp, q);
602 		*buff++ = tqp->tqp_stats.rcb_tx_ring_pktnum_rcd;
603 	}
604 
605 	for (i = 0; i < kinfo->num_tqps; i++) {
606 		tqp = container_of(kinfo->tqp[i], struct hclge_tqp, q);
607 		*buff++ = tqp->tqp_stats.rcb_rx_ring_pktnum_rcd;
608 	}
609 
610 	return buff;
611 }
612 
613 static int hclge_tqps_get_sset_count(struct hnae3_handle *handle, int stringset)
614 {
615 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
616 
617 	/* each tqp has TX & RX two queues */
618 	return kinfo->num_tqps * (2);
619 }
620 
621 static u8 *hclge_tqps_get_strings(struct hnae3_handle *handle, u8 *data)
622 {
623 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
624 	u8 *buff = data;
625 	int i;
626 
627 	for (i = 0; i < kinfo->num_tqps; i++) {
628 		struct hclge_tqp *tqp = container_of(handle->kinfo.tqp[i],
629 			struct hclge_tqp, q);
630 		snprintf(buff, ETH_GSTRING_LEN, "txq%u_pktnum_rcd",
631 			 tqp->index);
632 		buff = buff + ETH_GSTRING_LEN;
633 	}
634 
635 	for (i = 0; i < kinfo->num_tqps; i++) {
636 		struct hclge_tqp *tqp = container_of(kinfo->tqp[i],
637 			struct hclge_tqp, q);
638 		snprintf(buff, ETH_GSTRING_LEN, "rxq%u_pktnum_rcd",
639 			 tqp->index);
640 		buff = buff + ETH_GSTRING_LEN;
641 	}
642 
643 	return buff;
644 }
645 
646 static u64 *hclge_comm_get_stats(const void *comm_stats,
647 				 const struct hclge_comm_stats_str strs[],
648 				 int size, u64 *data)
649 {
650 	u64 *buf = data;
651 	u32 i;
652 
653 	for (i = 0; i < size; i++)
654 		buf[i] = HCLGE_STATS_READ(comm_stats, strs[i].offset);
655 
656 	return buf + size;
657 }
658 
659 static u8 *hclge_comm_get_strings(u32 stringset,
660 				  const struct hclge_comm_stats_str strs[],
661 				  int size, u8 *data)
662 {
663 	char *buff = (char *)data;
664 	u32 i;
665 
666 	if (stringset != ETH_SS_STATS)
667 		return buff;
668 
669 	for (i = 0; i < size; i++) {
670 		snprintf(buff, ETH_GSTRING_LEN, "%s", strs[i].desc);
671 		buff = buff + ETH_GSTRING_LEN;
672 	}
673 
674 	return (u8 *)buff;
675 }
676 
677 static void hclge_update_stats_for_all(struct hclge_dev *hdev)
678 {
679 	struct hnae3_handle *handle;
680 	int status;
681 
682 	handle = &hdev->vport[0].nic;
683 	if (handle->client) {
684 		status = hclge_tqps_update_stats(handle);
685 		if (status) {
686 			dev_err(&hdev->pdev->dev,
687 				"Update TQPS stats fail, status = %d.\n",
688 				status);
689 		}
690 	}
691 
692 	status = hclge_mac_update_stats(hdev);
693 	if (status)
694 		dev_err(&hdev->pdev->dev,
695 			"Update MAC stats fail, status = %d.\n", status);
696 }
697 
698 static void hclge_update_stats(struct hnae3_handle *handle,
699 			       struct net_device_stats *net_stats)
700 {
701 	struct hclge_vport *vport = hclge_get_vport(handle);
702 	struct hclge_dev *hdev = vport->back;
703 	int status;
704 
705 	if (test_and_set_bit(HCLGE_STATE_STATISTICS_UPDATING, &hdev->state))
706 		return;
707 
708 	status = hclge_mac_update_stats(hdev);
709 	if (status)
710 		dev_err(&hdev->pdev->dev,
711 			"Update MAC stats fail, status = %d.\n",
712 			status);
713 
714 	status = hclge_tqps_update_stats(handle);
715 	if (status)
716 		dev_err(&hdev->pdev->dev,
717 			"Update TQPS stats fail, status = %d.\n",
718 			status);
719 
720 	clear_bit(HCLGE_STATE_STATISTICS_UPDATING, &hdev->state);
721 }
722 
723 static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset)
724 {
725 #define HCLGE_LOOPBACK_TEST_FLAGS (HNAE3_SUPPORT_APP_LOOPBACK |\
726 		HNAE3_SUPPORT_PHY_LOOPBACK |\
727 		HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK |\
728 		HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK)
729 
730 	struct hclge_vport *vport = hclge_get_vport(handle);
731 	struct hclge_dev *hdev = vport->back;
732 	int count = 0;
733 
734 	/* Loopback test support rules:
735 	 * mac: only GE mode support
736 	 * serdes: all mac mode will support include GE/XGE/LGE/CGE
737 	 * phy: only support when phy device exist on board
738 	 */
739 	if (stringset == ETH_SS_TEST) {
740 		/* clear loopback bit flags at first */
741 		handle->flags = (handle->flags & (~HCLGE_LOOPBACK_TEST_FLAGS));
742 		if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2 ||
743 		    hdev->hw.mac.speed == HCLGE_MAC_SPEED_10M ||
744 		    hdev->hw.mac.speed == HCLGE_MAC_SPEED_100M ||
745 		    hdev->hw.mac.speed == HCLGE_MAC_SPEED_1G) {
746 			count += 1;
747 			handle->flags |= HNAE3_SUPPORT_APP_LOOPBACK;
748 		}
749 
750 		count += 2;
751 		handle->flags |= HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK;
752 		handle->flags |= HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK;
753 
754 		if (hdev->hw.mac.phydev && hdev->hw.mac.phydev->drv &&
755 		    hdev->hw.mac.phydev->drv->set_loopback) {
756 			count += 1;
757 			handle->flags |= HNAE3_SUPPORT_PHY_LOOPBACK;
758 		}
759 
760 	} else if (stringset == ETH_SS_STATS) {
761 		count = ARRAY_SIZE(g_mac_stats_string) +
762 			hclge_tqps_get_sset_count(handle, stringset);
763 	}
764 
765 	return count;
766 }
767 
768 static void hclge_get_strings(struct hnae3_handle *handle, u32 stringset,
769 			      u8 *data)
770 {
771 	u8 *p = (char *)data;
772 	int size;
773 
774 	if (stringset == ETH_SS_STATS) {
775 		size = ARRAY_SIZE(g_mac_stats_string);
776 		p = hclge_comm_get_strings(stringset, g_mac_stats_string,
777 					   size, p);
778 		p = hclge_tqps_get_strings(handle, p);
779 	} else if (stringset == ETH_SS_TEST) {
780 		if (handle->flags & HNAE3_SUPPORT_APP_LOOPBACK) {
781 			memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_APP],
782 			       ETH_GSTRING_LEN);
783 			p += ETH_GSTRING_LEN;
784 		}
785 		if (handle->flags & HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK) {
786 			memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_SERIAL_SERDES],
787 			       ETH_GSTRING_LEN);
788 			p += ETH_GSTRING_LEN;
789 		}
790 		if (handle->flags & HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK) {
791 			memcpy(p,
792 			       hns3_nic_test_strs[HNAE3_LOOP_PARALLEL_SERDES],
793 			       ETH_GSTRING_LEN);
794 			p += ETH_GSTRING_LEN;
795 		}
796 		if (handle->flags & HNAE3_SUPPORT_PHY_LOOPBACK) {
797 			memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_PHY],
798 			       ETH_GSTRING_LEN);
799 			p += ETH_GSTRING_LEN;
800 		}
801 	}
802 }
803 
804 static void hclge_get_stats(struct hnae3_handle *handle, u64 *data)
805 {
806 	struct hclge_vport *vport = hclge_get_vport(handle);
807 	struct hclge_dev *hdev = vport->back;
808 	u64 *p;
809 
810 	p = hclge_comm_get_stats(&hdev->mac_stats, g_mac_stats_string,
811 				 ARRAY_SIZE(g_mac_stats_string), data);
812 	p = hclge_tqps_get_stats(handle, p);
813 }
814 
815 static void hclge_get_mac_stat(struct hnae3_handle *handle,
816 			       struct hns3_mac_stats *mac_stats)
817 {
818 	struct hclge_vport *vport = hclge_get_vport(handle);
819 	struct hclge_dev *hdev = vport->back;
820 
821 	hclge_update_stats(handle, NULL);
822 
823 	mac_stats->tx_pause_cnt = hdev->mac_stats.mac_tx_mac_pause_num;
824 	mac_stats->rx_pause_cnt = hdev->mac_stats.mac_rx_mac_pause_num;
825 }
826 
827 static int hclge_parse_func_status(struct hclge_dev *hdev,
828 				   struct hclge_func_status_cmd *status)
829 {
830 #define HCLGE_MAC_ID_MASK	0xF
831 
832 	if (!(status->pf_state & HCLGE_PF_STATE_DONE))
833 		return -EINVAL;
834 
835 	/* Set the pf to main pf */
836 	if (status->pf_state & HCLGE_PF_STATE_MAIN)
837 		hdev->flag |= HCLGE_FLAG_MAIN;
838 	else
839 		hdev->flag &= ~HCLGE_FLAG_MAIN;
840 
841 	hdev->hw.mac.mac_id = status->mac_id & HCLGE_MAC_ID_MASK;
842 	return 0;
843 }
844 
845 static int hclge_query_function_status(struct hclge_dev *hdev)
846 {
847 #define HCLGE_QUERY_MAX_CNT	5
848 
849 	struct hclge_func_status_cmd *req;
850 	struct hclge_desc desc;
851 	int timeout = 0;
852 	int ret;
853 
854 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_FUNC_STATUS, true);
855 	req = (struct hclge_func_status_cmd *)desc.data;
856 
857 	do {
858 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
859 		if (ret) {
860 			dev_err(&hdev->pdev->dev,
861 				"query function status failed %d.\n", ret);
862 			return ret;
863 		}
864 
865 		/* Check pf reset is done */
866 		if (req->pf_state)
867 			break;
868 		usleep_range(1000, 2000);
869 	} while (timeout++ < HCLGE_QUERY_MAX_CNT);
870 
871 	return hclge_parse_func_status(hdev, req);
872 }
873 
874 static int hclge_query_pf_resource(struct hclge_dev *hdev)
875 {
876 	struct hclge_pf_res_cmd *req;
877 	struct hclge_desc desc;
878 	int ret;
879 
880 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_PF_RSRC, true);
881 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
882 	if (ret) {
883 		dev_err(&hdev->pdev->dev,
884 			"query pf resource failed %d.\n", ret);
885 		return ret;
886 	}
887 
888 	req = (struct hclge_pf_res_cmd *)desc.data;
889 	hdev->num_tqps = le16_to_cpu(req->tqp_num) +
890 			 le16_to_cpu(req->ext_tqp_num);
891 	hdev->pkt_buf_size = le16_to_cpu(req->buf_size) << HCLGE_BUF_UNIT_S;
892 
893 	if (req->tx_buf_size)
894 		hdev->tx_buf_size =
895 			le16_to_cpu(req->tx_buf_size) << HCLGE_BUF_UNIT_S;
896 	else
897 		hdev->tx_buf_size = HCLGE_DEFAULT_TX_BUF;
898 
899 	hdev->tx_buf_size = roundup(hdev->tx_buf_size, HCLGE_BUF_SIZE_UNIT);
900 
901 	if (req->dv_buf_size)
902 		hdev->dv_buf_size =
903 			le16_to_cpu(req->dv_buf_size) << HCLGE_BUF_UNIT_S;
904 	else
905 		hdev->dv_buf_size = HCLGE_DEFAULT_DV;
906 
907 	hdev->dv_buf_size = roundup(hdev->dv_buf_size, HCLGE_BUF_SIZE_UNIT);
908 
909 	hdev->num_nic_msi = le16_to_cpu(req->msixcap_localid_number_nic);
910 	if (hdev->num_nic_msi < HNAE3_MIN_VECTOR_NUM) {
911 		dev_err(&hdev->pdev->dev,
912 			"only %u msi resources available, not enough for pf(min:2).\n",
913 			hdev->num_nic_msi);
914 		return -EINVAL;
915 	}
916 
917 	if (hnae3_dev_roce_supported(hdev)) {
918 		hdev->num_roce_msi =
919 			le16_to_cpu(req->pf_intr_vector_number_roce);
920 
921 		/* PF should have NIC vectors and Roce vectors,
922 		 * NIC vectors are queued before Roce vectors.
923 		 */
924 		hdev->num_msi = hdev->num_nic_msi + hdev->num_roce_msi;
925 	} else {
926 		hdev->num_msi = hdev->num_nic_msi;
927 	}
928 
929 	return 0;
930 }
931 
932 static int hclge_parse_speed(u8 speed_cmd, u32 *speed)
933 {
934 	switch (speed_cmd) {
935 	case 6:
936 		*speed = HCLGE_MAC_SPEED_10M;
937 		break;
938 	case 7:
939 		*speed = HCLGE_MAC_SPEED_100M;
940 		break;
941 	case 0:
942 		*speed = HCLGE_MAC_SPEED_1G;
943 		break;
944 	case 1:
945 		*speed = HCLGE_MAC_SPEED_10G;
946 		break;
947 	case 2:
948 		*speed = HCLGE_MAC_SPEED_25G;
949 		break;
950 	case 3:
951 		*speed = HCLGE_MAC_SPEED_40G;
952 		break;
953 	case 4:
954 		*speed = HCLGE_MAC_SPEED_50G;
955 		break;
956 	case 5:
957 		*speed = HCLGE_MAC_SPEED_100G;
958 		break;
959 	case 8:
960 		*speed = HCLGE_MAC_SPEED_200G;
961 		break;
962 	default:
963 		return -EINVAL;
964 	}
965 
966 	return 0;
967 }
968 
969 static int hclge_check_port_speed(struct hnae3_handle *handle, u32 speed)
970 {
971 	struct hclge_vport *vport = hclge_get_vport(handle);
972 	struct hclge_dev *hdev = vport->back;
973 	u32 speed_ability = hdev->hw.mac.speed_ability;
974 	u32 speed_bit = 0;
975 
976 	switch (speed) {
977 	case HCLGE_MAC_SPEED_10M:
978 		speed_bit = HCLGE_SUPPORT_10M_BIT;
979 		break;
980 	case HCLGE_MAC_SPEED_100M:
981 		speed_bit = HCLGE_SUPPORT_100M_BIT;
982 		break;
983 	case HCLGE_MAC_SPEED_1G:
984 		speed_bit = HCLGE_SUPPORT_1G_BIT;
985 		break;
986 	case HCLGE_MAC_SPEED_10G:
987 		speed_bit = HCLGE_SUPPORT_10G_BIT;
988 		break;
989 	case HCLGE_MAC_SPEED_25G:
990 		speed_bit = HCLGE_SUPPORT_25G_BIT;
991 		break;
992 	case HCLGE_MAC_SPEED_40G:
993 		speed_bit = HCLGE_SUPPORT_40G_BIT;
994 		break;
995 	case HCLGE_MAC_SPEED_50G:
996 		speed_bit = HCLGE_SUPPORT_50G_BIT;
997 		break;
998 	case HCLGE_MAC_SPEED_100G:
999 		speed_bit = HCLGE_SUPPORT_100G_BIT;
1000 		break;
1001 	case HCLGE_MAC_SPEED_200G:
1002 		speed_bit = HCLGE_SUPPORT_200G_BIT;
1003 		break;
1004 	default:
1005 		return -EINVAL;
1006 	}
1007 
1008 	if (speed_bit & speed_ability)
1009 		return 0;
1010 
1011 	return -EINVAL;
1012 }
1013 
1014 static void hclge_convert_setting_sr(struct hclge_mac *mac, u16 speed_ability)
1015 {
1016 	if (speed_ability & HCLGE_SUPPORT_10G_BIT)
1017 		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseSR_Full_BIT,
1018 				 mac->supported);
1019 	if (speed_ability & HCLGE_SUPPORT_25G_BIT)
1020 		linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseSR_Full_BIT,
1021 				 mac->supported);
1022 	if (speed_ability & HCLGE_SUPPORT_40G_BIT)
1023 		linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT,
1024 				 mac->supported);
1025 	if (speed_ability & HCLGE_SUPPORT_50G_BIT)
1026 		linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT,
1027 				 mac->supported);
1028 	if (speed_ability & HCLGE_SUPPORT_100G_BIT)
1029 		linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT,
1030 				 mac->supported);
1031 	if (speed_ability & HCLGE_SUPPORT_200G_BIT)
1032 		linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT,
1033 				 mac->supported);
1034 }
1035 
1036 static void hclge_convert_setting_lr(struct hclge_mac *mac, u16 speed_ability)
1037 {
1038 	if (speed_ability & HCLGE_SUPPORT_10G_BIT)
1039 		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseLR_Full_BIT,
1040 				 mac->supported);
1041 	if (speed_ability & HCLGE_SUPPORT_25G_BIT)
1042 		linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseSR_Full_BIT,
1043 				 mac->supported);
1044 	if (speed_ability & HCLGE_SUPPORT_50G_BIT)
1045 		linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT,
1046 				 mac->supported);
1047 	if (speed_ability & HCLGE_SUPPORT_40G_BIT)
1048 		linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT,
1049 				 mac->supported);
1050 	if (speed_ability & HCLGE_SUPPORT_100G_BIT)
1051 		linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT,
1052 				 mac->supported);
1053 	if (speed_ability & HCLGE_SUPPORT_200G_BIT)
1054 		linkmode_set_bit(
1055 			ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT,
1056 			mac->supported);
1057 }
1058 
1059 static void hclge_convert_setting_cr(struct hclge_mac *mac, u16 speed_ability)
1060 {
1061 	if (speed_ability & HCLGE_SUPPORT_10G_BIT)
1062 		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseCR_Full_BIT,
1063 				 mac->supported);
1064 	if (speed_ability & HCLGE_SUPPORT_25G_BIT)
1065 		linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseCR_Full_BIT,
1066 				 mac->supported);
1067 	if (speed_ability & HCLGE_SUPPORT_40G_BIT)
1068 		linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT,
1069 				 mac->supported);
1070 	if (speed_ability & HCLGE_SUPPORT_50G_BIT)
1071 		linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT,
1072 				 mac->supported);
1073 	if (speed_ability & HCLGE_SUPPORT_100G_BIT)
1074 		linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT,
1075 				 mac->supported);
1076 	if (speed_ability & HCLGE_SUPPORT_200G_BIT)
1077 		linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT,
1078 				 mac->supported);
1079 }
1080 
1081 static void hclge_convert_setting_kr(struct hclge_mac *mac, u16 speed_ability)
1082 {
1083 	if (speed_ability & HCLGE_SUPPORT_1G_BIT)
1084 		linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
1085 				 mac->supported);
1086 	if (speed_ability & HCLGE_SUPPORT_10G_BIT)
1087 		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
1088 				 mac->supported);
1089 	if (speed_ability & HCLGE_SUPPORT_25G_BIT)
1090 		linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseKR_Full_BIT,
1091 				 mac->supported);
1092 	if (speed_ability & HCLGE_SUPPORT_40G_BIT)
1093 		linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT,
1094 				 mac->supported);
1095 	if (speed_ability & HCLGE_SUPPORT_50G_BIT)
1096 		linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT,
1097 				 mac->supported);
1098 	if (speed_ability & HCLGE_SUPPORT_100G_BIT)
1099 		linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT,
1100 				 mac->supported);
1101 	if (speed_ability & HCLGE_SUPPORT_200G_BIT)
1102 		linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT,
1103 				 mac->supported);
1104 }
1105 
1106 static void hclge_convert_setting_fec(struct hclge_mac *mac)
1107 {
1108 	linkmode_clear_bit(ETHTOOL_LINK_MODE_FEC_BASER_BIT, mac->supported);
1109 	linkmode_clear_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT, mac->supported);
1110 
1111 	switch (mac->speed) {
1112 	case HCLGE_MAC_SPEED_10G:
1113 	case HCLGE_MAC_SPEED_40G:
1114 		linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_BASER_BIT,
1115 				 mac->supported);
1116 		mac->fec_ability =
1117 			BIT(HNAE3_FEC_BASER) | BIT(HNAE3_FEC_AUTO);
1118 		break;
1119 	case HCLGE_MAC_SPEED_25G:
1120 	case HCLGE_MAC_SPEED_50G:
1121 		linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT,
1122 				 mac->supported);
1123 		mac->fec_ability =
1124 			BIT(HNAE3_FEC_BASER) | BIT(HNAE3_FEC_RS) |
1125 			BIT(HNAE3_FEC_AUTO);
1126 		break;
1127 	case HCLGE_MAC_SPEED_100G:
1128 	case HCLGE_MAC_SPEED_200G:
1129 		linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT, mac->supported);
1130 		mac->fec_ability = BIT(HNAE3_FEC_RS) | BIT(HNAE3_FEC_AUTO);
1131 		break;
1132 	default:
1133 		mac->fec_ability = 0;
1134 		break;
1135 	}
1136 }
1137 
1138 static void hclge_parse_fiber_link_mode(struct hclge_dev *hdev,
1139 					u16 speed_ability)
1140 {
1141 	struct hclge_mac *mac = &hdev->hw.mac;
1142 
1143 	if (speed_ability & HCLGE_SUPPORT_1G_BIT)
1144 		linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
1145 				 mac->supported);
1146 
1147 	hclge_convert_setting_sr(mac, speed_ability);
1148 	hclge_convert_setting_lr(mac, speed_ability);
1149 	hclge_convert_setting_cr(mac, speed_ability);
1150 	if (hnae3_dev_fec_supported(hdev))
1151 		hclge_convert_setting_fec(mac);
1152 
1153 	linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, mac->supported);
1154 	linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, mac->supported);
1155 	linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_NONE_BIT, mac->supported);
1156 }
1157 
1158 static void hclge_parse_backplane_link_mode(struct hclge_dev *hdev,
1159 					    u16 speed_ability)
1160 {
1161 	struct hclge_mac *mac = &hdev->hw.mac;
1162 
1163 	hclge_convert_setting_kr(mac, speed_ability);
1164 	if (hnae3_dev_fec_supported(hdev))
1165 		hclge_convert_setting_fec(mac);
1166 	linkmode_set_bit(ETHTOOL_LINK_MODE_Backplane_BIT, mac->supported);
1167 	linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, mac->supported);
1168 	linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_NONE_BIT, mac->supported);
1169 }
1170 
1171 static void hclge_parse_copper_link_mode(struct hclge_dev *hdev,
1172 					 u16 speed_ability)
1173 {
1174 	unsigned long *supported = hdev->hw.mac.supported;
1175 
1176 	/* default to support all speed for GE port */
1177 	if (!speed_ability)
1178 		speed_ability = HCLGE_SUPPORT_GE;
1179 
1180 	if (speed_ability & HCLGE_SUPPORT_1G_BIT)
1181 		linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
1182 				 supported);
1183 
1184 	if (speed_ability & HCLGE_SUPPORT_100M_BIT) {
1185 		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
1186 				 supported);
1187 		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
1188 				 supported);
1189 	}
1190 
1191 	if (speed_ability & HCLGE_SUPPORT_10M_BIT) {
1192 		linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, supported);
1193 		linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, supported);
1194 	}
1195 
1196 	linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, supported);
1197 	linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, supported);
1198 	linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, supported);
1199 	linkmode_set_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, supported);
1200 }
1201 
1202 static void hclge_parse_link_mode(struct hclge_dev *hdev, u16 speed_ability)
1203 {
1204 	u8 media_type = hdev->hw.mac.media_type;
1205 
1206 	if (media_type == HNAE3_MEDIA_TYPE_FIBER)
1207 		hclge_parse_fiber_link_mode(hdev, speed_ability);
1208 	else if (media_type == HNAE3_MEDIA_TYPE_COPPER)
1209 		hclge_parse_copper_link_mode(hdev, speed_ability);
1210 	else if (media_type == HNAE3_MEDIA_TYPE_BACKPLANE)
1211 		hclge_parse_backplane_link_mode(hdev, speed_ability);
1212 }
1213 
1214 static u32 hclge_get_max_speed(u16 speed_ability)
1215 {
1216 	if (speed_ability & HCLGE_SUPPORT_200G_BIT)
1217 		return HCLGE_MAC_SPEED_200G;
1218 
1219 	if (speed_ability & HCLGE_SUPPORT_100G_BIT)
1220 		return HCLGE_MAC_SPEED_100G;
1221 
1222 	if (speed_ability & HCLGE_SUPPORT_50G_BIT)
1223 		return HCLGE_MAC_SPEED_50G;
1224 
1225 	if (speed_ability & HCLGE_SUPPORT_40G_BIT)
1226 		return HCLGE_MAC_SPEED_40G;
1227 
1228 	if (speed_ability & HCLGE_SUPPORT_25G_BIT)
1229 		return HCLGE_MAC_SPEED_25G;
1230 
1231 	if (speed_ability & HCLGE_SUPPORT_10G_BIT)
1232 		return HCLGE_MAC_SPEED_10G;
1233 
1234 	if (speed_ability & HCLGE_SUPPORT_1G_BIT)
1235 		return HCLGE_MAC_SPEED_1G;
1236 
1237 	if (speed_ability & HCLGE_SUPPORT_100M_BIT)
1238 		return HCLGE_MAC_SPEED_100M;
1239 
1240 	if (speed_ability & HCLGE_SUPPORT_10M_BIT)
1241 		return HCLGE_MAC_SPEED_10M;
1242 
1243 	return HCLGE_MAC_SPEED_1G;
1244 }
1245 
1246 static void hclge_parse_cfg(struct hclge_cfg *cfg, struct hclge_desc *desc)
1247 {
1248 #define SPEED_ABILITY_EXT_SHIFT			8
1249 
1250 	struct hclge_cfg_param_cmd *req;
1251 	u64 mac_addr_tmp_high;
1252 	u16 speed_ability_ext;
1253 	u64 mac_addr_tmp;
1254 	unsigned int i;
1255 
1256 	req = (struct hclge_cfg_param_cmd *)desc[0].data;
1257 
1258 	/* get the configuration */
1259 	cfg->vmdq_vport_num = hnae3_get_field(__le32_to_cpu(req->param[0]),
1260 					      HCLGE_CFG_VMDQ_M,
1261 					      HCLGE_CFG_VMDQ_S);
1262 	cfg->tc_num = hnae3_get_field(__le32_to_cpu(req->param[0]),
1263 				      HCLGE_CFG_TC_NUM_M, HCLGE_CFG_TC_NUM_S);
1264 	cfg->tqp_desc_num = hnae3_get_field(__le32_to_cpu(req->param[0]),
1265 					    HCLGE_CFG_TQP_DESC_N_M,
1266 					    HCLGE_CFG_TQP_DESC_N_S);
1267 
1268 	cfg->phy_addr = hnae3_get_field(__le32_to_cpu(req->param[1]),
1269 					HCLGE_CFG_PHY_ADDR_M,
1270 					HCLGE_CFG_PHY_ADDR_S);
1271 	cfg->media_type = hnae3_get_field(__le32_to_cpu(req->param[1]),
1272 					  HCLGE_CFG_MEDIA_TP_M,
1273 					  HCLGE_CFG_MEDIA_TP_S);
1274 	cfg->rx_buf_len = hnae3_get_field(__le32_to_cpu(req->param[1]),
1275 					  HCLGE_CFG_RX_BUF_LEN_M,
1276 					  HCLGE_CFG_RX_BUF_LEN_S);
1277 	/* get mac_address */
1278 	mac_addr_tmp = __le32_to_cpu(req->param[2]);
1279 	mac_addr_tmp_high = hnae3_get_field(__le32_to_cpu(req->param[3]),
1280 					    HCLGE_CFG_MAC_ADDR_H_M,
1281 					    HCLGE_CFG_MAC_ADDR_H_S);
1282 
1283 	mac_addr_tmp |= (mac_addr_tmp_high << 31) << 1;
1284 
1285 	cfg->default_speed = hnae3_get_field(__le32_to_cpu(req->param[3]),
1286 					     HCLGE_CFG_DEFAULT_SPEED_M,
1287 					     HCLGE_CFG_DEFAULT_SPEED_S);
1288 	cfg->vf_rss_size_max = hnae3_get_field(__le32_to_cpu(req->param[3]),
1289 					       HCLGE_CFG_RSS_SIZE_M,
1290 					       HCLGE_CFG_RSS_SIZE_S);
1291 
1292 	for (i = 0; i < ETH_ALEN; i++)
1293 		cfg->mac_addr[i] = (mac_addr_tmp >> (8 * i)) & 0xff;
1294 
1295 	req = (struct hclge_cfg_param_cmd *)desc[1].data;
1296 	cfg->numa_node_map = __le32_to_cpu(req->param[0]);
1297 
1298 	cfg->speed_ability = hnae3_get_field(__le32_to_cpu(req->param[1]),
1299 					     HCLGE_CFG_SPEED_ABILITY_M,
1300 					     HCLGE_CFG_SPEED_ABILITY_S);
1301 	speed_ability_ext = hnae3_get_field(__le32_to_cpu(req->param[1]),
1302 					    HCLGE_CFG_SPEED_ABILITY_EXT_M,
1303 					    HCLGE_CFG_SPEED_ABILITY_EXT_S);
1304 	cfg->speed_ability |= speed_ability_ext << SPEED_ABILITY_EXT_SHIFT;
1305 
1306 	cfg->umv_space = hnae3_get_field(__le32_to_cpu(req->param[1]),
1307 					 HCLGE_CFG_UMV_TBL_SPACE_M,
1308 					 HCLGE_CFG_UMV_TBL_SPACE_S);
1309 	if (!cfg->umv_space)
1310 		cfg->umv_space = HCLGE_DEFAULT_UMV_SPACE_PER_PF;
1311 
1312 	cfg->pf_rss_size_max = hnae3_get_field(__le32_to_cpu(req->param[2]),
1313 					       HCLGE_CFG_PF_RSS_SIZE_M,
1314 					       HCLGE_CFG_PF_RSS_SIZE_S);
1315 
1316 	/* HCLGE_CFG_PF_RSS_SIZE_M is the PF max rss size, which is a
1317 	 * power of 2, instead of reading out directly. This would
1318 	 * be more flexible for future changes and expansions.
1319 	 * When VF max  rss size field is HCLGE_CFG_RSS_SIZE_S,
1320 	 * it does not make sense if PF's field is 0. In this case, PF and VF
1321 	 * has the same max rss size filed: HCLGE_CFG_RSS_SIZE_S.
1322 	 */
1323 	cfg->pf_rss_size_max = cfg->pf_rss_size_max ?
1324 			       1U << cfg->pf_rss_size_max :
1325 			       cfg->vf_rss_size_max;
1326 }
1327 
1328 /* hclge_get_cfg: query the static parameter from flash
1329  * @hdev: pointer to struct hclge_dev
1330  * @hcfg: the config structure to be getted
1331  */
1332 static int hclge_get_cfg(struct hclge_dev *hdev, struct hclge_cfg *hcfg)
1333 {
1334 	struct hclge_desc desc[HCLGE_PF_CFG_DESC_NUM];
1335 	struct hclge_cfg_param_cmd *req;
1336 	unsigned int i;
1337 	int ret;
1338 
1339 	for (i = 0; i < HCLGE_PF_CFG_DESC_NUM; i++) {
1340 		u32 offset = 0;
1341 
1342 		req = (struct hclge_cfg_param_cmd *)desc[i].data;
1343 		hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_GET_CFG_PARAM,
1344 					   true);
1345 		hnae3_set_field(offset, HCLGE_CFG_OFFSET_M,
1346 				HCLGE_CFG_OFFSET_S, i * HCLGE_CFG_RD_LEN_BYTES);
1347 		/* Len should be united by 4 bytes when send to hardware */
1348 		hnae3_set_field(offset, HCLGE_CFG_RD_LEN_M, HCLGE_CFG_RD_LEN_S,
1349 				HCLGE_CFG_RD_LEN_BYTES / HCLGE_CFG_RD_LEN_UNIT);
1350 		req->offset = cpu_to_le32(offset);
1351 	}
1352 
1353 	ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_PF_CFG_DESC_NUM);
1354 	if (ret) {
1355 		dev_err(&hdev->pdev->dev, "get config failed %d.\n", ret);
1356 		return ret;
1357 	}
1358 
1359 	hclge_parse_cfg(hcfg, desc);
1360 
1361 	return 0;
1362 }
1363 
1364 static void hclge_set_default_dev_specs(struct hclge_dev *hdev)
1365 {
1366 #define HCLGE_MAX_NON_TSO_BD_NUM			8U
1367 
1368 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
1369 
1370 	ae_dev->dev_specs.max_non_tso_bd_num = HCLGE_MAX_NON_TSO_BD_NUM;
1371 	ae_dev->dev_specs.rss_ind_tbl_size = HCLGE_RSS_IND_TBL_SIZE;
1372 	ae_dev->dev_specs.rss_key_size = HCLGE_RSS_KEY_SIZE;
1373 	ae_dev->dev_specs.max_tm_rate = HCLGE_ETHER_MAX_RATE;
1374 	ae_dev->dev_specs.max_int_gl = HCLGE_DEF_MAX_INT_GL;
1375 	ae_dev->dev_specs.max_frm_size = HCLGE_MAC_MAX_FRAME;
1376 	ae_dev->dev_specs.max_qset_num = HCLGE_MAX_QSET_NUM;
1377 }
1378 
1379 static void hclge_parse_dev_specs(struct hclge_dev *hdev,
1380 				  struct hclge_desc *desc)
1381 {
1382 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
1383 	struct hclge_dev_specs_0_cmd *req0;
1384 	struct hclge_dev_specs_1_cmd *req1;
1385 
1386 	req0 = (struct hclge_dev_specs_0_cmd *)desc[0].data;
1387 	req1 = (struct hclge_dev_specs_1_cmd *)desc[1].data;
1388 
1389 	ae_dev->dev_specs.max_non_tso_bd_num = req0->max_non_tso_bd_num;
1390 	ae_dev->dev_specs.rss_ind_tbl_size =
1391 		le16_to_cpu(req0->rss_ind_tbl_size);
1392 	ae_dev->dev_specs.int_ql_max = le16_to_cpu(req0->int_ql_max);
1393 	ae_dev->dev_specs.rss_key_size = le16_to_cpu(req0->rss_key_size);
1394 	ae_dev->dev_specs.max_tm_rate = le32_to_cpu(req0->max_tm_rate);
1395 	ae_dev->dev_specs.max_qset_num = le16_to_cpu(req1->max_qset_num);
1396 	ae_dev->dev_specs.max_int_gl = le16_to_cpu(req1->max_int_gl);
1397 	ae_dev->dev_specs.max_frm_size = le16_to_cpu(req1->max_frm_size);
1398 }
1399 
1400 static void hclge_check_dev_specs(struct hclge_dev *hdev)
1401 {
1402 	struct hnae3_dev_specs *dev_specs = &hdev->ae_dev->dev_specs;
1403 
1404 	if (!dev_specs->max_non_tso_bd_num)
1405 		dev_specs->max_non_tso_bd_num = HCLGE_MAX_NON_TSO_BD_NUM;
1406 	if (!dev_specs->rss_ind_tbl_size)
1407 		dev_specs->rss_ind_tbl_size = HCLGE_RSS_IND_TBL_SIZE;
1408 	if (!dev_specs->rss_key_size)
1409 		dev_specs->rss_key_size = HCLGE_RSS_KEY_SIZE;
1410 	if (!dev_specs->max_tm_rate)
1411 		dev_specs->max_tm_rate = HCLGE_ETHER_MAX_RATE;
1412 	if (!dev_specs->max_qset_num)
1413 		dev_specs->max_qset_num = HCLGE_MAX_QSET_NUM;
1414 	if (!dev_specs->max_int_gl)
1415 		dev_specs->max_int_gl = HCLGE_DEF_MAX_INT_GL;
1416 	if (!dev_specs->max_frm_size)
1417 		dev_specs->max_frm_size = HCLGE_MAC_MAX_FRAME;
1418 }
1419 
1420 static int hclge_query_dev_specs(struct hclge_dev *hdev)
1421 {
1422 	struct hclge_desc desc[HCLGE_QUERY_DEV_SPECS_BD_NUM];
1423 	int ret;
1424 	int i;
1425 
1426 	/* set default specifications as devices lower than version V3 do not
1427 	 * support querying specifications from firmware.
1428 	 */
1429 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V3) {
1430 		hclge_set_default_dev_specs(hdev);
1431 		return 0;
1432 	}
1433 
1434 	for (i = 0; i < HCLGE_QUERY_DEV_SPECS_BD_NUM - 1; i++) {
1435 		hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_QUERY_DEV_SPECS,
1436 					   true);
1437 		desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
1438 	}
1439 	hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_QUERY_DEV_SPECS, true);
1440 
1441 	ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_QUERY_DEV_SPECS_BD_NUM);
1442 	if (ret)
1443 		return ret;
1444 
1445 	hclge_parse_dev_specs(hdev, desc);
1446 	hclge_check_dev_specs(hdev);
1447 
1448 	return 0;
1449 }
1450 
1451 static int hclge_get_cap(struct hclge_dev *hdev)
1452 {
1453 	int ret;
1454 
1455 	ret = hclge_query_function_status(hdev);
1456 	if (ret) {
1457 		dev_err(&hdev->pdev->dev,
1458 			"query function status error %d.\n", ret);
1459 		return ret;
1460 	}
1461 
1462 	/* get pf resource */
1463 	return hclge_query_pf_resource(hdev);
1464 }
1465 
1466 static void hclge_init_kdump_kernel_config(struct hclge_dev *hdev)
1467 {
1468 #define HCLGE_MIN_TX_DESC	64
1469 #define HCLGE_MIN_RX_DESC	64
1470 
1471 	if (!is_kdump_kernel())
1472 		return;
1473 
1474 	dev_info(&hdev->pdev->dev,
1475 		 "Running kdump kernel. Using minimal resources\n");
1476 
1477 	/* minimal queue pairs equals to the number of vports */
1478 	hdev->num_tqps = hdev->num_vmdq_vport + hdev->num_req_vfs + 1;
1479 	hdev->num_tx_desc = HCLGE_MIN_TX_DESC;
1480 	hdev->num_rx_desc = HCLGE_MIN_RX_DESC;
1481 }
1482 
1483 static int hclge_configure(struct hclge_dev *hdev)
1484 {
1485 	struct hclge_cfg cfg;
1486 	unsigned int i;
1487 	int ret;
1488 
1489 	ret = hclge_get_cfg(hdev, &cfg);
1490 	if (ret)
1491 		return ret;
1492 
1493 	hdev->num_vmdq_vport = cfg.vmdq_vport_num;
1494 	hdev->base_tqp_pid = 0;
1495 	hdev->vf_rss_size_max = cfg.vf_rss_size_max;
1496 	hdev->pf_rss_size_max = cfg.pf_rss_size_max;
1497 	hdev->rx_buf_len = cfg.rx_buf_len;
1498 	ether_addr_copy(hdev->hw.mac.mac_addr, cfg.mac_addr);
1499 	hdev->hw.mac.media_type = cfg.media_type;
1500 	hdev->hw.mac.phy_addr = cfg.phy_addr;
1501 	hdev->num_tx_desc = cfg.tqp_desc_num;
1502 	hdev->num_rx_desc = cfg.tqp_desc_num;
1503 	hdev->tm_info.num_pg = 1;
1504 	hdev->tc_max = cfg.tc_num;
1505 	hdev->tm_info.hw_pfc_map = 0;
1506 	hdev->wanted_umv_size = cfg.umv_space;
1507 
1508 	if (hnae3_dev_fd_supported(hdev)) {
1509 		hdev->fd_en = true;
1510 		hdev->fd_active_type = HCLGE_FD_RULE_NONE;
1511 	}
1512 
1513 	ret = hclge_parse_speed(cfg.default_speed, &hdev->hw.mac.speed);
1514 	if (ret) {
1515 		dev_err(&hdev->pdev->dev, "failed to parse speed %u, ret = %d\n",
1516 			cfg.default_speed, ret);
1517 		return ret;
1518 	}
1519 
1520 	hclge_parse_link_mode(hdev, cfg.speed_ability);
1521 
1522 	hdev->hw.mac.max_speed = hclge_get_max_speed(cfg.speed_ability);
1523 
1524 	if ((hdev->tc_max > HNAE3_MAX_TC) ||
1525 	    (hdev->tc_max < 1)) {
1526 		dev_warn(&hdev->pdev->dev, "TC num = %u.\n",
1527 			 hdev->tc_max);
1528 		hdev->tc_max = 1;
1529 	}
1530 
1531 	/* Dev does not support DCB */
1532 	if (!hnae3_dev_dcb_supported(hdev)) {
1533 		hdev->tc_max = 1;
1534 		hdev->pfc_max = 0;
1535 	} else {
1536 		hdev->pfc_max = hdev->tc_max;
1537 	}
1538 
1539 	hdev->tm_info.num_tc = 1;
1540 
1541 	/* Currently not support uncontiuous tc */
1542 	for (i = 0; i < hdev->tm_info.num_tc; i++)
1543 		hnae3_set_bit(hdev->hw_tc_map, i, 1);
1544 
1545 	hdev->tx_sch_mode = HCLGE_FLAG_TC_BASE_SCH_MODE;
1546 
1547 	hclge_init_kdump_kernel_config(hdev);
1548 
1549 	/* Set the init affinity based on pci func number */
1550 	i = cpumask_weight(cpumask_of_node(dev_to_node(&hdev->pdev->dev)));
1551 	i = i ? PCI_FUNC(hdev->pdev->devfn) % i : 0;
1552 	cpumask_set_cpu(cpumask_local_spread(i, dev_to_node(&hdev->pdev->dev)),
1553 			&hdev->affinity_mask);
1554 
1555 	return ret;
1556 }
1557 
1558 static int hclge_config_tso(struct hclge_dev *hdev, u16 tso_mss_min,
1559 			    u16 tso_mss_max)
1560 {
1561 	struct hclge_cfg_tso_status_cmd *req;
1562 	struct hclge_desc desc;
1563 
1564 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_TSO_GENERIC_CONFIG, false);
1565 
1566 	req = (struct hclge_cfg_tso_status_cmd *)desc.data;
1567 	req->tso_mss_min = cpu_to_le16(tso_mss_min);
1568 	req->tso_mss_max = cpu_to_le16(tso_mss_max);
1569 
1570 	return hclge_cmd_send(&hdev->hw, &desc, 1);
1571 }
1572 
1573 static int hclge_config_gro(struct hclge_dev *hdev, bool en)
1574 {
1575 	struct hclge_cfg_gro_status_cmd *req;
1576 	struct hclge_desc desc;
1577 	int ret;
1578 
1579 	if (!hnae3_dev_gro_supported(hdev))
1580 		return 0;
1581 
1582 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GRO_GENERIC_CONFIG, false);
1583 	req = (struct hclge_cfg_gro_status_cmd *)desc.data;
1584 
1585 	req->gro_en = en ? 1 : 0;
1586 
1587 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
1588 	if (ret)
1589 		dev_err(&hdev->pdev->dev,
1590 			"GRO hardware config cmd failed, ret = %d\n", ret);
1591 
1592 	return ret;
1593 }
1594 
1595 static int hclge_alloc_tqps(struct hclge_dev *hdev)
1596 {
1597 	struct hclge_tqp *tqp;
1598 	int i;
1599 
1600 	hdev->htqp = devm_kcalloc(&hdev->pdev->dev, hdev->num_tqps,
1601 				  sizeof(struct hclge_tqp), GFP_KERNEL);
1602 	if (!hdev->htqp)
1603 		return -ENOMEM;
1604 
1605 	tqp = hdev->htqp;
1606 
1607 	for (i = 0; i < hdev->num_tqps; i++) {
1608 		tqp->dev = &hdev->pdev->dev;
1609 		tqp->index = i;
1610 
1611 		tqp->q.ae_algo = &ae_algo;
1612 		tqp->q.buf_size = hdev->rx_buf_len;
1613 		tqp->q.tx_desc_num = hdev->num_tx_desc;
1614 		tqp->q.rx_desc_num = hdev->num_rx_desc;
1615 
1616 		/* need an extended offset to configure queues >=
1617 		 * HCLGE_TQP_MAX_SIZE_DEV_V2
1618 		 */
1619 		if (i < HCLGE_TQP_MAX_SIZE_DEV_V2)
1620 			tqp->q.io_base = hdev->hw.io_base +
1621 					 HCLGE_TQP_REG_OFFSET +
1622 					 i * HCLGE_TQP_REG_SIZE;
1623 		else
1624 			tqp->q.io_base = hdev->hw.io_base +
1625 					 HCLGE_TQP_REG_OFFSET +
1626 					 HCLGE_TQP_EXT_REG_OFFSET +
1627 					 (i - HCLGE_TQP_MAX_SIZE_DEV_V2) *
1628 					 HCLGE_TQP_REG_SIZE;
1629 
1630 		tqp++;
1631 	}
1632 
1633 	return 0;
1634 }
1635 
1636 static int hclge_map_tqps_to_func(struct hclge_dev *hdev, u16 func_id,
1637 				  u16 tqp_pid, u16 tqp_vid, bool is_pf)
1638 {
1639 	struct hclge_tqp_map_cmd *req;
1640 	struct hclge_desc desc;
1641 	int ret;
1642 
1643 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_SET_TQP_MAP, false);
1644 
1645 	req = (struct hclge_tqp_map_cmd *)desc.data;
1646 	req->tqp_id = cpu_to_le16(tqp_pid);
1647 	req->tqp_vf = func_id;
1648 	req->tqp_flag = 1U << HCLGE_TQP_MAP_EN_B;
1649 	if (!is_pf)
1650 		req->tqp_flag |= 1U << HCLGE_TQP_MAP_TYPE_B;
1651 	req->tqp_vid = cpu_to_le16(tqp_vid);
1652 
1653 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
1654 	if (ret)
1655 		dev_err(&hdev->pdev->dev, "TQP map failed %d.\n", ret);
1656 
1657 	return ret;
1658 }
1659 
1660 static int  hclge_assign_tqp(struct hclge_vport *vport, u16 num_tqps)
1661 {
1662 	struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
1663 	struct hclge_dev *hdev = vport->back;
1664 	int i, alloced;
1665 
1666 	for (i = 0, alloced = 0; i < hdev->num_tqps &&
1667 	     alloced < num_tqps; i++) {
1668 		if (!hdev->htqp[i].alloced) {
1669 			hdev->htqp[i].q.handle = &vport->nic;
1670 			hdev->htqp[i].q.tqp_index = alloced;
1671 			hdev->htqp[i].q.tx_desc_num = kinfo->num_tx_desc;
1672 			hdev->htqp[i].q.rx_desc_num = kinfo->num_rx_desc;
1673 			kinfo->tqp[alloced] = &hdev->htqp[i].q;
1674 			hdev->htqp[i].alloced = true;
1675 			alloced++;
1676 		}
1677 	}
1678 	vport->alloc_tqps = alloced;
1679 	kinfo->rss_size = min_t(u16, hdev->pf_rss_size_max,
1680 				vport->alloc_tqps / hdev->tm_info.num_tc);
1681 
1682 	/* ensure one to one mapping between irq and queue at default */
1683 	kinfo->rss_size = min_t(u16, kinfo->rss_size,
1684 				(hdev->num_nic_msi - 1) / hdev->tm_info.num_tc);
1685 
1686 	return 0;
1687 }
1688 
1689 static int hclge_knic_setup(struct hclge_vport *vport, u16 num_tqps,
1690 			    u16 num_tx_desc, u16 num_rx_desc)
1691 
1692 {
1693 	struct hnae3_handle *nic = &vport->nic;
1694 	struct hnae3_knic_private_info *kinfo = &nic->kinfo;
1695 	struct hclge_dev *hdev = vport->back;
1696 	int ret;
1697 
1698 	kinfo->num_tx_desc = num_tx_desc;
1699 	kinfo->num_rx_desc = num_rx_desc;
1700 
1701 	kinfo->rx_buf_len = hdev->rx_buf_len;
1702 
1703 	kinfo->tqp = devm_kcalloc(&hdev->pdev->dev, num_tqps,
1704 				  sizeof(struct hnae3_queue *), GFP_KERNEL);
1705 	if (!kinfo->tqp)
1706 		return -ENOMEM;
1707 
1708 	ret = hclge_assign_tqp(vport, num_tqps);
1709 	if (ret)
1710 		dev_err(&hdev->pdev->dev, "fail to assign TQPs %d.\n", ret);
1711 
1712 	return ret;
1713 }
1714 
1715 static int hclge_map_tqp_to_vport(struct hclge_dev *hdev,
1716 				  struct hclge_vport *vport)
1717 {
1718 	struct hnae3_handle *nic = &vport->nic;
1719 	struct hnae3_knic_private_info *kinfo;
1720 	u16 i;
1721 
1722 	kinfo = &nic->kinfo;
1723 	for (i = 0; i < vport->alloc_tqps; i++) {
1724 		struct hclge_tqp *q =
1725 			container_of(kinfo->tqp[i], struct hclge_tqp, q);
1726 		bool is_pf;
1727 		int ret;
1728 
1729 		is_pf = !(vport->vport_id);
1730 		ret = hclge_map_tqps_to_func(hdev, vport->vport_id, q->index,
1731 					     i, is_pf);
1732 		if (ret)
1733 			return ret;
1734 	}
1735 
1736 	return 0;
1737 }
1738 
1739 static int hclge_map_tqp(struct hclge_dev *hdev)
1740 {
1741 	struct hclge_vport *vport = hdev->vport;
1742 	u16 i, num_vport;
1743 
1744 	num_vport = hdev->num_vmdq_vport + hdev->num_req_vfs + 1;
1745 	for (i = 0; i < num_vport; i++)	{
1746 		int ret;
1747 
1748 		ret = hclge_map_tqp_to_vport(hdev, vport);
1749 		if (ret)
1750 			return ret;
1751 
1752 		vport++;
1753 	}
1754 
1755 	return 0;
1756 }
1757 
1758 static int hclge_vport_setup(struct hclge_vport *vport, u16 num_tqps)
1759 {
1760 	struct hnae3_handle *nic = &vport->nic;
1761 	struct hclge_dev *hdev = vport->back;
1762 	int ret;
1763 
1764 	nic->pdev = hdev->pdev;
1765 	nic->ae_algo = &ae_algo;
1766 	nic->numa_node_mask = hdev->numa_node_mask;
1767 
1768 	ret = hclge_knic_setup(vport, num_tqps,
1769 			       hdev->num_tx_desc, hdev->num_rx_desc);
1770 	if (ret)
1771 		dev_err(&hdev->pdev->dev, "knic setup failed %d\n", ret);
1772 
1773 	return ret;
1774 }
1775 
1776 static int hclge_alloc_vport(struct hclge_dev *hdev)
1777 {
1778 	struct pci_dev *pdev = hdev->pdev;
1779 	struct hclge_vport *vport;
1780 	u32 tqp_main_vport;
1781 	u32 tqp_per_vport;
1782 	int num_vport, i;
1783 	int ret;
1784 
1785 	/* We need to alloc a vport for main NIC of PF */
1786 	num_vport = hdev->num_vmdq_vport + hdev->num_req_vfs + 1;
1787 
1788 	if (hdev->num_tqps < num_vport) {
1789 		dev_err(&hdev->pdev->dev, "tqps(%u) is less than vports(%d)",
1790 			hdev->num_tqps, num_vport);
1791 		return -EINVAL;
1792 	}
1793 
1794 	/* Alloc the same number of TQPs for every vport */
1795 	tqp_per_vport = hdev->num_tqps / num_vport;
1796 	tqp_main_vport = tqp_per_vport + hdev->num_tqps % num_vport;
1797 
1798 	vport = devm_kcalloc(&pdev->dev, num_vport, sizeof(struct hclge_vport),
1799 			     GFP_KERNEL);
1800 	if (!vport)
1801 		return -ENOMEM;
1802 
1803 	hdev->vport = vport;
1804 	hdev->num_alloc_vport = num_vport;
1805 
1806 	if (IS_ENABLED(CONFIG_PCI_IOV))
1807 		hdev->num_alloc_vfs = hdev->num_req_vfs;
1808 
1809 	for (i = 0; i < num_vport; i++) {
1810 		vport->back = hdev;
1811 		vport->vport_id = i;
1812 		vport->vf_info.link_state = IFLA_VF_LINK_STATE_AUTO;
1813 		vport->mps = HCLGE_MAC_DEFAULT_FRAME;
1814 		vport->port_base_vlan_cfg.state = HNAE3_PORT_BASE_VLAN_DISABLE;
1815 		vport->rxvlan_cfg.rx_vlan_offload_en = true;
1816 		INIT_LIST_HEAD(&vport->vlan_list);
1817 		INIT_LIST_HEAD(&vport->uc_mac_list);
1818 		INIT_LIST_HEAD(&vport->mc_mac_list);
1819 		spin_lock_init(&vport->mac_list_lock);
1820 
1821 		if (i == 0)
1822 			ret = hclge_vport_setup(vport, tqp_main_vport);
1823 		else
1824 			ret = hclge_vport_setup(vport, tqp_per_vport);
1825 		if (ret) {
1826 			dev_err(&pdev->dev,
1827 				"vport setup failed for vport %d, %d\n",
1828 				i, ret);
1829 			return ret;
1830 		}
1831 
1832 		vport++;
1833 	}
1834 
1835 	return 0;
1836 }
1837 
1838 static int  hclge_cmd_alloc_tx_buff(struct hclge_dev *hdev,
1839 				    struct hclge_pkt_buf_alloc *buf_alloc)
1840 {
1841 /* TX buffer size is unit by 128 byte */
1842 #define HCLGE_BUF_SIZE_UNIT_SHIFT	7
1843 #define HCLGE_BUF_SIZE_UPDATE_EN_MSK	BIT(15)
1844 	struct hclge_tx_buff_alloc_cmd *req;
1845 	struct hclge_desc desc;
1846 	int ret;
1847 	u8 i;
1848 
1849 	req = (struct hclge_tx_buff_alloc_cmd *)desc.data;
1850 
1851 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_TX_BUFF_ALLOC, 0);
1852 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
1853 		u32 buf_size = buf_alloc->priv_buf[i].tx_buf_size;
1854 
1855 		req->tx_pkt_buff[i] =
1856 			cpu_to_le16((buf_size >> HCLGE_BUF_SIZE_UNIT_SHIFT) |
1857 				     HCLGE_BUF_SIZE_UPDATE_EN_MSK);
1858 	}
1859 
1860 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
1861 	if (ret)
1862 		dev_err(&hdev->pdev->dev, "tx buffer alloc cmd failed %d.\n",
1863 			ret);
1864 
1865 	return ret;
1866 }
1867 
1868 static int hclge_tx_buffer_alloc(struct hclge_dev *hdev,
1869 				 struct hclge_pkt_buf_alloc *buf_alloc)
1870 {
1871 	int ret = hclge_cmd_alloc_tx_buff(hdev, buf_alloc);
1872 
1873 	if (ret)
1874 		dev_err(&hdev->pdev->dev, "tx buffer alloc failed %d\n", ret);
1875 
1876 	return ret;
1877 }
1878 
1879 static u32 hclge_get_tc_num(struct hclge_dev *hdev)
1880 {
1881 	unsigned int i;
1882 	u32 cnt = 0;
1883 
1884 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++)
1885 		if (hdev->hw_tc_map & BIT(i))
1886 			cnt++;
1887 	return cnt;
1888 }
1889 
1890 /* Get the number of pfc enabled TCs, which have private buffer */
1891 static int hclge_get_pfc_priv_num(struct hclge_dev *hdev,
1892 				  struct hclge_pkt_buf_alloc *buf_alloc)
1893 {
1894 	struct hclge_priv_buf *priv;
1895 	unsigned int i;
1896 	int cnt = 0;
1897 
1898 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
1899 		priv = &buf_alloc->priv_buf[i];
1900 		if ((hdev->tm_info.hw_pfc_map & BIT(i)) &&
1901 		    priv->enable)
1902 			cnt++;
1903 	}
1904 
1905 	return cnt;
1906 }
1907 
1908 /* Get the number of pfc disabled TCs, which have private buffer */
1909 static int hclge_get_no_pfc_priv_num(struct hclge_dev *hdev,
1910 				     struct hclge_pkt_buf_alloc *buf_alloc)
1911 {
1912 	struct hclge_priv_buf *priv;
1913 	unsigned int i;
1914 	int cnt = 0;
1915 
1916 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
1917 		priv = &buf_alloc->priv_buf[i];
1918 		if (hdev->hw_tc_map & BIT(i) &&
1919 		    !(hdev->tm_info.hw_pfc_map & BIT(i)) &&
1920 		    priv->enable)
1921 			cnt++;
1922 	}
1923 
1924 	return cnt;
1925 }
1926 
1927 static u32 hclge_get_rx_priv_buff_alloced(struct hclge_pkt_buf_alloc *buf_alloc)
1928 {
1929 	struct hclge_priv_buf *priv;
1930 	u32 rx_priv = 0;
1931 	int i;
1932 
1933 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
1934 		priv = &buf_alloc->priv_buf[i];
1935 		if (priv->enable)
1936 			rx_priv += priv->buf_size;
1937 	}
1938 	return rx_priv;
1939 }
1940 
1941 static u32 hclge_get_tx_buff_alloced(struct hclge_pkt_buf_alloc *buf_alloc)
1942 {
1943 	u32 i, total_tx_size = 0;
1944 
1945 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++)
1946 		total_tx_size += buf_alloc->priv_buf[i].tx_buf_size;
1947 
1948 	return total_tx_size;
1949 }
1950 
1951 static bool  hclge_is_rx_buf_ok(struct hclge_dev *hdev,
1952 				struct hclge_pkt_buf_alloc *buf_alloc,
1953 				u32 rx_all)
1954 {
1955 	u32 shared_buf_min, shared_buf_tc, shared_std, hi_thrd, lo_thrd;
1956 	u32 tc_num = hclge_get_tc_num(hdev);
1957 	u32 shared_buf, aligned_mps;
1958 	u32 rx_priv;
1959 	int i;
1960 
1961 	aligned_mps = roundup(hdev->mps, HCLGE_BUF_SIZE_UNIT);
1962 
1963 	if (hnae3_dev_dcb_supported(hdev))
1964 		shared_buf_min = HCLGE_BUF_MUL_BY * aligned_mps +
1965 					hdev->dv_buf_size;
1966 	else
1967 		shared_buf_min = aligned_mps + HCLGE_NON_DCB_ADDITIONAL_BUF
1968 					+ hdev->dv_buf_size;
1969 
1970 	shared_buf_tc = tc_num * aligned_mps + aligned_mps;
1971 	shared_std = roundup(max_t(u32, shared_buf_min, shared_buf_tc),
1972 			     HCLGE_BUF_SIZE_UNIT);
1973 
1974 	rx_priv = hclge_get_rx_priv_buff_alloced(buf_alloc);
1975 	if (rx_all < rx_priv + shared_std)
1976 		return false;
1977 
1978 	shared_buf = rounddown(rx_all - rx_priv, HCLGE_BUF_SIZE_UNIT);
1979 	buf_alloc->s_buf.buf_size = shared_buf;
1980 	if (hnae3_dev_dcb_supported(hdev)) {
1981 		buf_alloc->s_buf.self.high = shared_buf - hdev->dv_buf_size;
1982 		buf_alloc->s_buf.self.low = buf_alloc->s_buf.self.high
1983 			- roundup(aligned_mps / HCLGE_BUF_DIV_BY,
1984 				  HCLGE_BUF_SIZE_UNIT);
1985 	} else {
1986 		buf_alloc->s_buf.self.high = aligned_mps +
1987 						HCLGE_NON_DCB_ADDITIONAL_BUF;
1988 		buf_alloc->s_buf.self.low = aligned_mps;
1989 	}
1990 
1991 	if (hnae3_dev_dcb_supported(hdev)) {
1992 		hi_thrd = shared_buf - hdev->dv_buf_size;
1993 
1994 		if (tc_num <= NEED_RESERVE_TC_NUM)
1995 			hi_thrd = hi_thrd * BUF_RESERVE_PERCENT
1996 					/ BUF_MAX_PERCENT;
1997 
1998 		if (tc_num)
1999 			hi_thrd = hi_thrd / tc_num;
2000 
2001 		hi_thrd = max_t(u32, hi_thrd, HCLGE_BUF_MUL_BY * aligned_mps);
2002 		hi_thrd = rounddown(hi_thrd, HCLGE_BUF_SIZE_UNIT);
2003 		lo_thrd = hi_thrd - aligned_mps / HCLGE_BUF_DIV_BY;
2004 	} else {
2005 		hi_thrd = aligned_mps + HCLGE_NON_DCB_ADDITIONAL_BUF;
2006 		lo_thrd = aligned_mps;
2007 	}
2008 
2009 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2010 		buf_alloc->s_buf.tc_thrd[i].low = lo_thrd;
2011 		buf_alloc->s_buf.tc_thrd[i].high = hi_thrd;
2012 	}
2013 
2014 	return true;
2015 }
2016 
2017 static int hclge_tx_buffer_calc(struct hclge_dev *hdev,
2018 				struct hclge_pkt_buf_alloc *buf_alloc)
2019 {
2020 	u32 i, total_size;
2021 
2022 	total_size = hdev->pkt_buf_size;
2023 
2024 	/* alloc tx buffer for all enabled tc */
2025 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2026 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2027 
2028 		if (hdev->hw_tc_map & BIT(i)) {
2029 			if (total_size < hdev->tx_buf_size)
2030 				return -ENOMEM;
2031 
2032 			priv->tx_buf_size = hdev->tx_buf_size;
2033 		} else {
2034 			priv->tx_buf_size = 0;
2035 		}
2036 
2037 		total_size -= priv->tx_buf_size;
2038 	}
2039 
2040 	return 0;
2041 }
2042 
2043 static bool hclge_rx_buf_calc_all(struct hclge_dev *hdev, bool max,
2044 				  struct hclge_pkt_buf_alloc *buf_alloc)
2045 {
2046 	u32 rx_all = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc);
2047 	u32 aligned_mps = round_up(hdev->mps, HCLGE_BUF_SIZE_UNIT);
2048 	unsigned int i;
2049 
2050 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2051 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2052 
2053 		priv->enable = 0;
2054 		priv->wl.low = 0;
2055 		priv->wl.high = 0;
2056 		priv->buf_size = 0;
2057 
2058 		if (!(hdev->hw_tc_map & BIT(i)))
2059 			continue;
2060 
2061 		priv->enable = 1;
2062 
2063 		if (hdev->tm_info.hw_pfc_map & BIT(i)) {
2064 			priv->wl.low = max ? aligned_mps : HCLGE_BUF_SIZE_UNIT;
2065 			priv->wl.high = roundup(priv->wl.low + aligned_mps,
2066 						HCLGE_BUF_SIZE_UNIT);
2067 		} else {
2068 			priv->wl.low = 0;
2069 			priv->wl.high = max ? (aligned_mps * HCLGE_BUF_MUL_BY) :
2070 					aligned_mps;
2071 		}
2072 
2073 		priv->buf_size = priv->wl.high + hdev->dv_buf_size;
2074 	}
2075 
2076 	return hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all);
2077 }
2078 
2079 static bool hclge_drop_nopfc_buf_till_fit(struct hclge_dev *hdev,
2080 					  struct hclge_pkt_buf_alloc *buf_alloc)
2081 {
2082 	u32 rx_all = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc);
2083 	int no_pfc_priv_num = hclge_get_no_pfc_priv_num(hdev, buf_alloc);
2084 	int i;
2085 
2086 	/* let the last to be cleared first */
2087 	for (i = HCLGE_MAX_TC_NUM - 1; i >= 0; i--) {
2088 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2089 		unsigned int mask = BIT((unsigned int)i);
2090 
2091 		if (hdev->hw_tc_map & mask &&
2092 		    !(hdev->tm_info.hw_pfc_map & mask)) {
2093 			/* Clear the no pfc TC private buffer */
2094 			priv->wl.low = 0;
2095 			priv->wl.high = 0;
2096 			priv->buf_size = 0;
2097 			priv->enable = 0;
2098 			no_pfc_priv_num--;
2099 		}
2100 
2101 		if (hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all) ||
2102 		    no_pfc_priv_num == 0)
2103 			break;
2104 	}
2105 
2106 	return hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all);
2107 }
2108 
2109 static bool hclge_drop_pfc_buf_till_fit(struct hclge_dev *hdev,
2110 					struct hclge_pkt_buf_alloc *buf_alloc)
2111 {
2112 	u32 rx_all = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc);
2113 	int pfc_priv_num = hclge_get_pfc_priv_num(hdev, buf_alloc);
2114 	int i;
2115 
2116 	/* let the last to be cleared first */
2117 	for (i = HCLGE_MAX_TC_NUM - 1; i >= 0; i--) {
2118 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2119 		unsigned int mask = BIT((unsigned int)i);
2120 
2121 		if (hdev->hw_tc_map & mask &&
2122 		    hdev->tm_info.hw_pfc_map & mask) {
2123 			/* Reduce the number of pfc TC with private buffer */
2124 			priv->wl.low = 0;
2125 			priv->enable = 0;
2126 			priv->wl.high = 0;
2127 			priv->buf_size = 0;
2128 			pfc_priv_num--;
2129 		}
2130 
2131 		if (hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all) ||
2132 		    pfc_priv_num == 0)
2133 			break;
2134 	}
2135 
2136 	return hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all);
2137 }
2138 
2139 static int hclge_only_alloc_priv_buff(struct hclge_dev *hdev,
2140 				      struct hclge_pkt_buf_alloc *buf_alloc)
2141 {
2142 #define COMPENSATE_BUFFER	0x3C00
2143 #define COMPENSATE_HALF_MPS_NUM	5
2144 #define PRIV_WL_GAP		0x1800
2145 
2146 	u32 rx_priv = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc);
2147 	u32 tc_num = hclge_get_tc_num(hdev);
2148 	u32 half_mps = hdev->mps >> 1;
2149 	u32 min_rx_priv;
2150 	unsigned int i;
2151 
2152 	if (tc_num)
2153 		rx_priv = rx_priv / tc_num;
2154 
2155 	if (tc_num <= NEED_RESERVE_TC_NUM)
2156 		rx_priv = rx_priv * BUF_RESERVE_PERCENT / BUF_MAX_PERCENT;
2157 
2158 	min_rx_priv = hdev->dv_buf_size + COMPENSATE_BUFFER +
2159 			COMPENSATE_HALF_MPS_NUM * half_mps;
2160 	min_rx_priv = round_up(min_rx_priv, HCLGE_BUF_SIZE_UNIT);
2161 	rx_priv = round_down(rx_priv, HCLGE_BUF_SIZE_UNIT);
2162 
2163 	if (rx_priv < min_rx_priv)
2164 		return false;
2165 
2166 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2167 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2168 
2169 		priv->enable = 0;
2170 		priv->wl.low = 0;
2171 		priv->wl.high = 0;
2172 		priv->buf_size = 0;
2173 
2174 		if (!(hdev->hw_tc_map & BIT(i)))
2175 			continue;
2176 
2177 		priv->enable = 1;
2178 		priv->buf_size = rx_priv;
2179 		priv->wl.high = rx_priv - hdev->dv_buf_size;
2180 		priv->wl.low = priv->wl.high - PRIV_WL_GAP;
2181 	}
2182 
2183 	buf_alloc->s_buf.buf_size = 0;
2184 
2185 	return true;
2186 }
2187 
2188 /* hclge_rx_buffer_calc: calculate the rx private buffer size for all TCs
2189  * @hdev: pointer to struct hclge_dev
2190  * @buf_alloc: pointer to buffer calculation data
2191  * @return: 0: calculate sucessful, negative: fail
2192  */
2193 static int hclge_rx_buffer_calc(struct hclge_dev *hdev,
2194 				struct hclge_pkt_buf_alloc *buf_alloc)
2195 {
2196 	/* When DCB is not supported, rx private buffer is not allocated. */
2197 	if (!hnae3_dev_dcb_supported(hdev)) {
2198 		u32 rx_all = hdev->pkt_buf_size;
2199 
2200 		rx_all -= hclge_get_tx_buff_alloced(buf_alloc);
2201 		if (!hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all))
2202 			return -ENOMEM;
2203 
2204 		return 0;
2205 	}
2206 
2207 	if (hclge_only_alloc_priv_buff(hdev, buf_alloc))
2208 		return 0;
2209 
2210 	if (hclge_rx_buf_calc_all(hdev, true, buf_alloc))
2211 		return 0;
2212 
2213 	/* try to decrease the buffer size */
2214 	if (hclge_rx_buf_calc_all(hdev, false, buf_alloc))
2215 		return 0;
2216 
2217 	if (hclge_drop_nopfc_buf_till_fit(hdev, buf_alloc))
2218 		return 0;
2219 
2220 	if (hclge_drop_pfc_buf_till_fit(hdev, buf_alloc))
2221 		return 0;
2222 
2223 	return -ENOMEM;
2224 }
2225 
2226 static int hclge_rx_priv_buf_alloc(struct hclge_dev *hdev,
2227 				   struct hclge_pkt_buf_alloc *buf_alloc)
2228 {
2229 	struct hclge_rx_priv_buff_cmd *req;
2230 	struct hclge_desc desc;
2231 	int ret;
2232 	int i;
2233 
2234 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RX_PRIV_BUFF_ALLOC, false);
2235 	req = (struct hclge_rx_priv_buff_cmd *)desc.data;
2236 
2237 	/* Alloc private buffer TCs */
2238 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2239 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2240 
2241 		req->buf_num[i] =
2242 			cpu_to_le16(priv->buf_size >> HCLGE_BUF_UNIT_S);
2243 		req->buf_num[i] |=
2244 			cpu_to_le16(1 << HCLGE_TC0_PRI_BUF_EN_B);
2245 	}
2246 
2247 	req->shared_buf =
2248 		cpu_to_le16((buf_alloc->s_buf.buf_size >> HCLGE_BUF_UNIT_S) |
2249 			    (1 << HCLGE_TC0_PRI_BUF_EN_B));
2250 
2251 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2252 	if (ret)
2253 		dev_err(&hdev->pdev->dev,
2254 			"rx private buffer alloc cmd failed %d\n", ret);
2255 
2256 	return ret;
2257 }
2258 
2259 static int hclge_rx_priv_wl_config(struct hclge_dev *hdev,
2260 				   struct hclge_pkt_buf_alloc *buf_alloc)
2261 {
2262 	struct hclge_rx_priv_wl_buf *req;
2263 	struct hclge_priv_buf *priv;
2264 	struct hclge_desc desc[2];
2265 	int i, j;
2266 	int ret;
2267 
2268 	for (i = 0; i < 2; i++) {
2269 		hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_RX_PRIV_WL_ALLOC,
2270 					   false);
2271 		req = (struct hclge_rx_priv_wl_buf *)desc[i].data;
2272 
2273 		/* The first descriptor set the NEXT bit to 1 */
2274 		if (i == 0)
2275 			desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2276 		else
2277 			desc[i].flag &= ~cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2278 
2279 		for (j = 0; j < HCLGE_TC_NUM_ONE_DESC; j++) {
2280 			u32 idx = i * HCLGE_TC_NUM_ONE_DESC + j;
2281 
2282 			priv = &buf_alloc->priv_buf[idx];
2283 			req->tc_wl[j].high =
2284 				cpu_to_le16(priv->wl.high >> HCLGE_BUF_UNIT_S);
2285 			req->tc_wl[j].high |=
2286 				cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2287 			req->tc_wl[j].low =
2288 				cpu_to_le16(priv->wl.low >> HCLGE_BUF_UNIT_S);
2289 			req->tc_wl[j].low |=
2290 				 cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2291 		}
2292 	}
2293 
2294 	/* Send 2 descriptor at one time */
2295 	ret = hclge_cmd_send(&hdev->hw, desc, 2);
2296 	if (ret)
2297 		dev_err(&hdev->pdev->dev,
2298 			"rx private waterline config cmd failed %d\n",
2299 			ret);
2300 	return ret;
2301 }
2302 
2303 static int hclge_common_thrd_config(struct hclge_dev *hdev,
2304 				    struct hclge_pkt_buf_alloc *buf_alloc)
2305 {
2306 	struct hclge_shared_buf *s_buf = &buf_alloc->s_buf;
2307 	struct hclge_rx_com_thrd *req;
2308 	struct hclge_desc desc[2];
2309 	struct hclge_tc_thrd *tc;
2310 	int i, j;
2311 	int ret;
2312 
2313 	for (i = 0; i < 2; i++) {
2314 		hclge_cmd_setup_basic_desc(&desc[i],
2315 					   HCLGE_OPC_RX_COM_THRD_ALLOC, false);
2316 		req = (struct hclge_rx_com_thrd *)&desc[i].data;
2317 
2318 		/* The first descriptor set the NEXT bit to 1 */
2319 		if (i == 0)
2320 			desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2321 		else
2322 			desc[i].flag &= ~cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2323 
2324 		for (j = 0; j < HCLGE_TC_NUM_ONE_DESC; j++) {
2325 			tc = &s_buf->tc_thrd[i * HCLGE_TC_NUM_ONE_DESC + j];
2326 
2327 			req->com_thrd[j].high =
2328 				cpu_to_le16(tc->high >> HCLGE_BUF_UNIT_S);
2329 			req->com_thrd[j].high |=
2330 				 cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2331 			req->com_thrd[j].low =
2332 				cpu_to_le16(tc->low >> HCLGE_BUF_UNIT_S);
2333 			req->com_thrd[j].low |=
2334 				 cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2335 		}
2336 	}
2337 
2338 	/* Send 2 descriptors at one time */
2339 	ret = hclge_cmd_send(&hdev->hw, desc, 2);
2340 	if (ret)
2341 		dev_err(&hdev->pdev->dev,
2342 			"common threshold config cmd failed %d\n", ret);
2343 	return ret;
2344 }
2345 
2346 static int hclge_common_wl_config(struct hclge_dev *hdev,
2347 				  struct hclge_pkt_buf_alloc *buf_alloc)
2348 {
2349 	struct hclge_shared_buf *buf = &buf_alloc->s_buf;
2350 	struct hclge_rx_com_wl *req;
2351 	struct hclge_desc desc;
2352 	int ret;
2353 
2354 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RX_COM_WL_ALLOC, false);
2355 
2356 	req = (struct hclge_rx_com_wl *)desc.data;
2357 	req->com_wl.high = cpu_to_le16(buf->self.high >> HCLGE_BUF_UNIT_S);
2358 	req->com_wl.high |=  cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2359 
2360 	req->com_wl.low = cpu_to_le16(buf->self.low >> HCLGE_BUF_UNIT_S);
2361 	req->com_wl.low |=  cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2362 
2363 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2364 	if (ret)
2365 		dev_err(&hdev->pdev->dev,
2366 			"common waterline config cmd failed %d\n", ret);
2367 
2368 	return ret;
2369 }
2370 
2371 int hclge_buffer_alloc(struct hclge_dev *hdev)
2372 {
2373 	struct hclge_pkt_buf_alloc *pkt_buf;
2374 	int ret;
2375 
2376 	pkt_buf = kzalloc(sizeof(*pkt_buf), GFP_KERNEL);
2377 	if (!pkt_buf)
2378 		return -ENOMEM;
2379 
2380 	ret = hclge_tx_buffer_calc(hdev, pkt_buf);
2381 	if (ret) {
2382 		dev_err(&hdev->pdev->dev,
2383 			"could not calc tx buffer size for all TCs %d\n", ret);
2384 		goto out;
2385 	}
2386 
2387 	ret = hclge_tx_buffer_alloc(hdev, pkt_buf);
2388 	if (ret) {
2389 		dev_err(&hdev->pdev->dev,
2390 			"could not alloc tx buffers %d\n", ret);
2391 		goto out;
2392 	}
2393 
2394 	ret = hclge_rx_buffer_calc(hdev, pkt_buf);
2395 	if (ret) {
2396 		dev_err(&hdev->pdev->dev,
2397 			"could not calc rx priv buffer size for all TCs %d\n",
2398 			ret);
2399 		goto out;
2400 	}
2401 
2402 	ret = hclge_rx_priv_buf_alloc(hdev, pkt_buf);
2403 	if (ret) {
2404 		dev_err(&hdev->pdev->dev, "could not alloc rx priv buffer %d\n",
2405 			ret);
2406 		goto out;
2407 	}
2408 
2409 	if (hnae3_dev_dcb_supported(hdev)) {
2410 		ret = hclge_rx_priv_wl_config(hdev, pkt_buf);
2411 		if (ret) {
2412 			dev_err(&hdev->pdev->dev,
2413 				"could not configure rx private waterline %d\n",
2414 				ret);
2415 			goto out;
2416 		}
2417 
2418 		ret = hclge_common_thrd_config(hdev, pkt_buf);
2419 		if (ret) {
2420 			dev_err(&hdev->pdev->dev,
2421 				"could not configure common threshold %d\n",
2422 				ret);
2423 			goto out;
2424 		}
2425 	}
2426 
2427 	ret = hclge_common_wl_config(hdev, pkt_buf);
2428 	if (ret)
2429 		dev_err(&hdev->pdev->dev,
2430 			"could not configure common waterline %d\n", ret);
2431 
2432 out:
2433 	kfree(pkt_buf);
2434 	return ret;
2435 }
2436 
2437 static int hclge_init_roce_base_info(struct hclge_vport *vport)
2438 {
2439 	struct hnae3_handle *roce = &vport->roce;
2440 	struct hnae3_handle *nic = &vport->nic;
2441 	struct hclge_dev *hdev = vport->back;
2442 
2443 	roce->rinfo.num_vectors = vport->back->num_roce_msi;
2444 
2445 	if (hdev->num_msi < hdev->num_nic_msi + hdev->num_roce_msi)
2446 		return -EINVAL;
2447 
2448 	roce->rinfo.base_vector = hdev->roce_base_vector;
2449 
2450 	roce->rinfo.netdev = nic->kinfo.netdev;
2451 	roce->rinfo.roce_io_base = hdev->hw.io_base;
2452 	roce->rinfo.roce_mem_base = hdev->hw.mem_base;
2453 
2454 	roce->pdev = nic->pdev;
2455 	roce->ae_algo = nic->ae_algo;
2456 	roce->numa_node_mask = nic->numa_node_mask;
2457 
2458 	return 0;
2459 }
2460 
2461 static int hclge_init_msi(struct hclge_dev *hdev)
2462 {
2463 	struct pci_dev *pdev = hdev->pdev;
2464 	int vectors;
2465 	int i;
2466 
2467 	vectors = pci_alloc_irq_vectors(pdev, HNAE3_MIN_VECTOR_NUM,
2468 					hdev->num_msi,
2469 					PCI_IRQ_MSI | PCI_IRQ_MSIX);
2470 	if (vectors < 0) {
2471 		dev_err(&pdev->dev,
2472 			"failed(%d) to allocate MSI/MSI-X vectors\n",
2473 			vectors);
2474 		return vectors;
2475 	}
2476 	if (vectors < hdev->num_msi)
2477 		dev_warn(&hdev->pdev->dev,
2478 			 "requested %u MSI/MSI-X, but allocated %d MSI/MSI-X\n",
2479 			 hdev->num_msi, vectors);
2480 
2481 	hdev->num_msi = vectors;
2482 	hdev->num_msi_left = vectors;
2483 
2484 	hdev->base_msi_vector = pdev->irq;
2485 	hdev->roce_base_vector = hdev->base_msi_vector +
2486 				hdev->num_nic_msi;
2487 
2488 	hdev->vector_status = devm_kcalloc(&pdev->dev, hdev->num_msi,
2489 					   sizeof(u16), GFP_KERNEL);
2490 	if (!hdev->vector_status) {
2491 		pci_free_irq_vectors(pdev);
2492 		return -ENOMEM;
2493 	}
2494 
2495 	for (i = 0; i < hdev->num_msi; i++)
2496 		hdev->vector_status[i] = HCLGE_INVALID_VPORT;
2497 
2498 	hdev->vector_irq = devm_kcalloc(&pdev->dev, hdev->num_msi,
2499 					sizeof(int), GFP_KERNEL);
2500 	if (!hdev->vector_irq) {
2501 		pci_free_irq_vectors(pdev);
2502 		return -ENOMEM;
2503 	}
2504 
2505 	return 0;
2506 }
2507 
2508 static u8 hclge_check_speed_dup(u8 duplex, int speed)
2509 {
2510 	if (!(speed == HCLGE_MAC_SPEED_10M || speed == HCLGE_MAC_SPEED_100M))
2511 		duplex = HCLGE_MAC_FULL;
2512 
2513 	return duplex;
2514 }
2515 
2516 static int hclge_cfg_mac_speed_dup_hw(struct hclge_dev *hdev, int speed,
2517 				      u8 duplex)
2518 {
2519 	struct hclge_config_mac_speed_dup_cmd *req;
2520 	struct hclge_desc desc;
2521 	int ret;
2522 
2523 	req = (struct hclge_config_mac_speed_dup_cmd *)desc.data;
2524 
2525 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_SPEED_DUP, false);
2526 
2527 	if (duplex)
2528 		hnae3_set_bit(req->speed_dup, HCLGE_CFG_DUPLEX_B, 1);
2529 
2530 	switch (speed) {
2531 	case HCLGE_MAC_SPEED_10M:
2532 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2533 				HCLGE_CFG_SPEED_S, 6);
2534 		break;
2535 	case HCLGE_MAC_SPEED_100M:
2536 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2537 				HCLGE_CFG_SPEED_S, 7);
2538 		break;
2539 	case HCLGE_MAC_SPEED_1G:
2540 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2541 				HCLGE_CFG_SPEED_S, 0);
2542 		break;
2543 	case HCLGE_MAC_SPEED_10G:
2544 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2545 				HCLGE_CFG_SPEED_S, 1);
2546 		break;
2547 	case HCLGE_MAC_SPEED_25G:
2548 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2549 				HCLGE_CFG_SPEED_S, 2);
2550 		break;
2551 	case HCLGE_MAC_SPEED_40G:
2552 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2553 				HCLGE_CFG_SPEED_S, 3);
2554 		break;
2555 	case HCLGE_MAC_SPEED_50G:
2556 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2557 				HCLGE_CFG_SPEED_S, 4);
2558 		break;
2559 	case HCLGE_MAC_SPEED_100G:
2560 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2561 				HCLGE_CFG_SPEED_S, 5);
2562 		break;
2563 	case HCLGE_MAC_SPEED_200G:
2564 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2565 				HCLGE_CFG_SPEED_S, 8);
2566 		break;
2567 	default:
2568 		dev_err(&hdev->pdev->dev, "invalid speed (%d)\n", speed);
2569 		return -EINVAL;
2570 	}
2571 
2572 	hnae3_set_bit(req->mac_change_fec_en, HCLGE_CFG_MAC_SPEED_CHANGE_EN_B,
2573 		      1);
2574 
2575 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2576 	if (ret) {
2577 		dev_err(&hdev->pdev->dev,
2578 			"mac speed/duplex config cmd failed %d.\n", ret);
2579 		return ret;
2580 	}
2581 
2582 	return 0;
2583 }
2584 
2585 int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex)
2586 {
2587 	struct hclge_mac *mac = &hdev->hw.mac;
2588 	int ret;
2589 
2590 	duplex = hclge_check_speed_dup(duplex, speed);
2591 	if (!mac->support_autoneg && mac->speed == speed &&
2592 	    mac->duplex == duplex)
2593 		return 0;
2594 
2595 	ret = hclge_cfg_mac_speed_dup_hw(hdev, speed, duplex);
2596 	if (ret)
2597 		return ret;
2598 
2599 	hdev->hw.mac.speed = speed;
2600 	hdev->hw.mac.duplex = duplex;
2601 
2602 	return 0;
2603 }
2604 
2605 static int hclge_cfg_mac_speed_dup_h(struct hnae3_handle *handle, int speed,
2606 				     u8 duplex)
2607 {
2608 	struct hclge_vport *vport = hclge_get_vport(handle);
2609 	struct hclge_dev *hdev = vport->back;
2610 
2611 	return hclge_cfg_mac_speed_dup(hdev, speed, duplex);
2612 }
2613 
2614 static int hclge_set_autoneg_en(struct hclge_dev *hdev, bool enable)
2615 {
2616 	struct hclge_config_auto_neg_cmd *req;
2617 	struct hclge_desc desc;
2618 	u32 flag = 0;
2619 	int ret;
2620 
2621 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_AN_MODE, false);
2622 
2623 	req = (struct hclge_config_auto_neg_cmd *)desc.data;
2624 	if (enable)
2625 		hnae3_set_bit(flag, HCLGE_MAC_CFG_AN_EN_B, 1U);
2626 	req->cfg_an_cmd_flag = cpu_to_le32(flag);
2627 
2628 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2629 	if (ret)
2630 		dev_err(&hdev->pdev->dev, "auto neg set cmd failed %d.\n",
2631 			ret);
2632 
2633 	return ret;
2634 }
2635 
2636 static int hclge_set_autoneg(struct hnae3_handle *handle, bool enable)
2637 {
2638 	struct hclge_vport *vport = hclge_get_vport(handle);
2639 	struct hclge_dev *hdev = vport->back;
2640 
2641 	if (!hdev->hw.mac.support_autoneg) {
2642 		if (enable) {
2643 			dev_err(&hdev->pdev->dev,
2644 				"autoneg is not supported by current port\n");
2645 			return -EOPNOTSUPP;
2646 		} else {
2647 			return 0;
2648 		}
2649 	}
2650 
2651 	return hclge_set_autoneg_en(hdev, enable);
2652 }
2653 
2654 static int hclge_get_autoneg(struct hnae3_handle *handle)
2655 {
2656 	struct hclge_vport *vport = hclge_get_vport(handle);
2657 	struct hclge_dev *hdev = vport->back;
2658 	struct phy_device *phydev = hdev->hw.mac.phydev;
2659 
2660 	if (phydev)
2661 		return phydev->autoneg;
2662 
2663 	return hdev->hw.mac.autoneg;
2664 }
2665 
2666 static int hclge_restart_autoneg(struct hnae3_handle *handle)
2667 {
2668 	struct hclge_vport *vport = hclge_get_vport(handle);
2669 	struct hclge_dev *hdev = vport->back;
2670 	int ret;
2671 
2672 	dev_dbg(&hdev->pdev->dev, "restart autoneg\n");
2673 
2674 	ret = hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
2675 	if (ret)
2676 		return ret;
2677 	return hclge_notify_client(hdev, HNAE3_UP_CLIENT);
2678 }
2679 
2680 static int hclge_halt_autoneg(struct hnae3_handle *handle, bool halt)
2681 {
2682 	struct hclge_vport *vport = hclge_get_vport(handle);
2683 	struct hclge_dev *hdev = vport->back;
2684 
2685 	if (hdev->hw.mac.support_autoneg && hdev->hw.mac.autoneg)
2686 		return hclge_set_autoneg_en(hdev, !halt);
2687 
2688 	return 0;
2689 }
2690 
2691 static int hclge_set_fec_hw(struct hclge_dev *hdev, u32 fec_mode)
2692 {
2693 	struct hclge_config_fec_cmd *req;
2694 	struct hclge_desc desc;
2695 	int ret;
2696 
2697 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_FEC_MODE, false);
2698 
2699 	req = (struct hclge_config_fec_cmd *)desc.data;
2700 	if (fec_mode & BIT(HNAE3_FEC_AUTO))
2701 		hnae3_set_bit(req->fec_mode, HCLGE_MAC_CFG_FEC_AUTO_EN_B, 1);
2702 	if (fec_mode & BIT(HNAE3_FEC_RS))
2703 		hnae3_set_field(req->fec_mode, HCLGE_MAC_CFG_FEC_MODE_M,
2704 				HCLGE_MAC_CFG_FEC_MODE_S, HCLGE_MAC_FEC_RS);
2705 	if (fec_mode & BIT(HNAE3_FEC_BASER))
2706 		hnae3_set_field(req->fec_mode, HCLGE_MAC_CFG_FEC_MODE_M,
2707 				HCLGE_MAC_CFG_FEC_MODE_S, HCLGE_MAC_FEC_BASER);
2708 
2709 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2710 	if (ret)
2711 		dev_err(&hdev->pdev->dev, "set fec mode failed %d.\n", ret);
2712 
2713 	return ret;
2714 }
2715 
2716 static int hclge_set_fec(struct hnae3_handle *handle, u32 fec_mode)
2717 {
2718 	struct hclge_vport *vport = hclge_get_vport(handle);
2719 	struct hclge_dev *hdev = vport->back;
2720 	struct hclge_mac *mac = &hdev->hw.mac;
2721 	int ret;
2722 
2723 	if (fec_mode && !(mac->fec_ability & fec_mode)) {
2724 		dev_err(&hdev->pdev->dev, "unsupported fec mode\n");
2725 		return -EINVAL;
2726 	}
2727 
2728 	ret = hclge_set_fec_hw(hdev, fec_mode);
2729 	if (ret)
2730 		return ret;
2731 
2732 	mac->user_fec_mode = fec_mode | BIT(HNAE3_FEC_USER_DEF);
2733 	return 0;
2734 }
2735 
2736 static void hclge_get_fec(struct hnae3_handle *handle, u8 *fec_ability,
2737 			  u8 *fec_mode)
2738 {
2739 	struct hclge_vport *vport = hclge_get_vport(handle);
2740 	struct hclge_dev *hdev = vport->back;
2741 	struct hclge_mac *mac = &hdev->hw.mac;
2742 
2743 	if (fec_ability)
2744 		*fec_ability = mac->fec_ability;
2745 	if (fec_mode)
2746 		*fec_mode = mac->fec_mode;
2747 }
2748 
2749 static int hclge_mac_init(struct hclge_dev *hdev)
2750 {
2751 	struct hclge_mac *mac = &hdev->hw.mac;
2752 	int ret;
2753 
2754 	hdev->support_sfp_query = true;
2755 	hdev->hw.mac.duplex = HCLGE_MAC_FULL;
2756 	ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.speed,
2757 					 hdev->hw.mac.duplex);
2758 	if (ret)
2759 		return ret;
2760 
2761 	if (hdev->hw.mac.support_autoneg) {
2762 		ret = hclge_set_autoneg_en(hdev, hdev->hw.mac.autoneg);
2763 		if (ret)
2764 			return ret;
2765 	}
2766 
2767 	mac->link = 0;
2768 
2769 	if (mac->user_fec_mode & BIT(HNAE3_FEC_USER_DEF)) {
2770 		ret = hclge_set_fec_hw(hdev, mac->user_fec_mode);
2771 		if (ret)
2772 			return ret;
2773 	}
2774 
2775 	ret = hclge_set_mac_mtu(hdev, hdev->mps);
2776 	if (ret) {
2777 		dev_err(&hdev->pdev->dev, "set mtu failed ret=%d\n", ret);
2778 		return ret;
2779 	}
2780 
2781 	ret = hclge_set_default_loopback(hdev);
2782 	if (ret)
2783 		return ret;
2784 
2785 	ret = hclge_buffer_alloc(hdev);
2786 	if (ret)
2787 		dev_err(&hdev->pdev->dev,
2788 			"allocate buffer fail, ret=%d\n", ret);
2789 
2790 	return ret;
2791 }
2792 
2793 static void hclge_mbx_task_schedule(struct hclge_dev *hdev)
2794 {
2795 	if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) &&
2796 	    !test_and_set_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state))
2797 		mod_delayed_work_on(cpumask_first(&hdev->affinity_mask),
2798 				    hclge_wq, &hdev->service_task, 0);
2799 }
2800 
2801 static void hclge_reset_task_schedule(struct hclge_dev *hdev)
2802 {
2803 	if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) &&
2804 	    !test_and_set_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state))
2805 		mod_delayed_work_on(cpumask_first(&hdev->affinity_mask),
2806 				    hclge_wq, &hdev->service_task, 0);
2807 }
2808 
2809 void hclge_task_schedule(struct hclge_dev *hdev, unsigned long delay_time)
2810 {
2811 	if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) &&
2812 	    !test_bit(HCLGE_STATE_RST_FAIL, &hdev->state))
2813 		mod_delayed_work_on(cpumask_first(&hdev->affinity_mask),
2814 				    hclge_wq, &hdev->service_task,
2815 				    delay_time);
2816 }
2817 
2818 static int hclge_get_mac_link_status(struct hclge_dev *hdev, int *link_status)
2819 {
2820 	struct hclge_link_status_cmd *req;
2821 	struct hclge_desc desc;
2822 	int ret;
2823 
2824 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_LINK_STATUS, true);
2825 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2826 	if (ret) {
2827 		dev_err(&hdev->pdev->dev, "get link status cmd failed %d\n",
2828 			ret);
2829 		return ret;
2830 	}
2831 
2832 	req = (struct hclge_link_status_cmd *)desc.data;
2833 	*link_status = (req->status & HCLGE_LINK_STATUS_UP_M) > 0 ?
2834 		HCLGE_LINK_STATUS_UP : HCLGE_LINK_STATUS_DOWN;
2835 
2836 	return 0;
2837 }
2838 
2839 static int hclge_get_mac_phy_link(struct hclge_dev *hdev, int *link_status)
2840 {
2841 	struct phy_device *phydev = hdev->hw.mac.phydev;
2842 
2843 	*link_status = HCLGE_LINK_STATUS_DOWN;
2844 
2845 	if (test_bit(HCLGE_STATE_DOWN, &hdev->state))
2846 		return 0;
2847 
2848 	if (phydev && (phydev->state != PHY_RUNNING || !phydev->link))
2849 		return 0;
2850 
2851 	return hclge_get_mac_link_status(hdev, link_status);
2852 }
2853 
2854 static void hclge_update_link_status(struct hclge_dev *hdev)
2855 {
2856 	struct hnae3_client *rclient = hdev->roce_client;
2857 	struct hnae3_client *client = hdev->nic_client;
2858 	struct hnae3_handle *rhandle;
2859 	struct hnae3_handle *handle;
2860 	int state;
2861 	int ret;
2862 	int i;
2863 
2864 	if (!client)
2865 		return;
2866 
2867 	if (test_and_set_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state))
2868 		return;
2869 
2870 	ret = hclge_get_mac_phy_link(hdev, &state);
2871 	if (ret) {
2872 		clear_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state);
2873 		return;
2874 	}
2875 
2876 	if (state != hdev->hw.mac.link) {
2877 		for (i = 0; i < hdev->num_vmdq_vport + 1; i++) {
2878 			handle = &hdev->vport[i].nic;
2879 			client->ops->link_status_change(handle, state);
2880 			hclge_config_mac_tnl_int(hdev, state);
2881 			rhandle = &hdev->vport[i].roce;
2882 			if (rclient && rclient->ops->link_status_change)
2883 				rclient->ops->link_status_change(rhandle,
2884 								 state);
2885 		}
2886 		hdev->hw.mac.link = state;
2887 	}
2888 
2889 	clear_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state);
2890 }
2891 
2892 static void hclge_update_port_capability(struct hclge_mac *mac)
2893 {
2894 	/* update fec ability by speed */
2895 	hclge_convert_setting_fec(mac);
2896 
2897 	/* firmware can not identify back plane type, the media type
2898 	 * read from configuration can help deal it
2899 	 */
2900 	if (mac->media_type == HNAE3_MEDIA_TYPE_BACKPLANE &&
2901 	    mac->module_type == HNAE3_MODULE_TYPE_UNKNOWN)
2902 		mac->module_type = HNAE3_MODULE_TYPE_KR;
2903 	else if (mac->media_type == HNAE3_MEDIA_TYPE_COPPER)
2904 		mac->module_type = HNAE3_MODULE_TYPE_TP;
2905 
2906 	if (mac->support_autoneg) {
2907 		linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, mac->supported);
2908 		linkmode_copy(mac->advertising, mac->supported);
2909 	} else {
2910 		linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
2911 				   mac->supported);
2912 		linkmode_zero(mac->advertising);
2913 	}
2914 }
2915 
2916 static int hclge_get_sfp_speed(struct hclge_dev *hdev, u32 *speed)
2917 {
2918 	struct hclge_sfp_info_cmd *resp;
2919 	struct hclge_desc desc;
2920 	int ret;
2921 
2922 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GET_SFP_INFO, true);
2923 	resp = (struct hclge_sfp_info_cmd *)desc.data;
2924 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2925 	if (ret == -EOPNOTSUPP) {
2926 		dev_warn(&hdev->pdev->dev,
2927 			 "IMP do not support get SFP speed %d\n", ret);
2928 		return ret;
2929 	} else if (ret) {
2930 		dev_err(&hdev->pdev->dev, "get sfp speed failed %d\n", ret);
2931 		return ret;
2932 	}
2933 
2934 	*speed = le32_to_cpu(resp->speed);
2935 
2936 	return 0;
2937 }
2938 
2939 static int hclge_get_sfp_info(struct hclge_dev *hdev, struct hclge_mac *mac)
2940 {
2941 	struct hclge_sfp_info_cmd *resp;
2942 	struct hclge_desc desc;
2943 	int ret;
2944 
2945 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GET_SFP_INFO, true);
2946 	resp = (struct hclge_sfp_info_cmd *)desc.data;
2947 
2948 	resp->query_type = QUERY_ACTIVE_SPEED;
2949 
2950 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2951 	if (ret == -EOPNOTSUPP) {
2952 		dev_warn(&hdev->pdev->dev,
2953 			 "IMP does not support get SFP info %d\n", ret);
2954 		return ret;
2955 	} else if (ret) {
2956 		dev_err(&hdev->pdev->dev, "get sfp info failed %d\n", ret);
2957 		return ret;
2958 	}
2959 
2960 	/* In some case, mac speed get from IMP may be 0, it shouldn't be
2961 	 * set to mac->speed.
2962 	 */
2963 	if (!le32_to_cpu(resp->speed))
2964 		return 0;
2965 
2966 	mac->speed = le32_to_cpu(resp->speed);
2967 	/* if resp->speed_ability is 0, it means it's an old version
2968 	 * firmware, do not update these params
2969 	 */
2970 	if (resp->speed_ability) {
2971 		mac->module_type = le32_to_cpu(resp->module_type);
2972 		mac->speed_ability = le32_to_cpu(resp->speed_ability);
2973 		mac->autoneg = resp->autoneg;
2974 		mac->support_autoneg = resp->autoneg_ability;
2975 		mac->speed_type = QUERY_ACTIVE_SPEED;
2976 		if (!resp->active_fec)
2977 			mac->fec_mode = 0;
2978 		else
2979 			mac->fec_mode = BIT(resp->active_fec);
2980 	} else {
2981 		mac->speed_type = QUERY_SFP_SPEED;
2982 	}
2983 
2984 	return 0;
2985 }
2986 
2987 static int hclge_update_port_info(struct hclge_dev *hdev)
2988 {
2989 	struct hclge_mac *mac = &hdev->hw.mac;
2990 	int speed = HCLGE_MAC_SPEED_UNKNOWN;
2991 	int ret;
2992 
2993 	/* get the port info from SFP cmd if not copper port */
2994 	if (mac->media_type == HNAE3_MEDIA_TYPE_COPPER)
2995 		return 0;
2996 
2997 	/* if IMP does not support get SFP/qSFP info, return directly */
2998 	if (!hdev->support_sfp_query)
2999 		return 0;
3000 
3001 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2)
3002 		ret = hclge_get_sfp_info(hdev, mac);
3003 	else
3004 		ret = hclge_get_sfp_speed(hdev, &speed);
3005 
3006 	if (ret == -EOPNOTSUPP) {
3007 		hdev->support_sfp_query = false;
3008 		return ret;
3009 	} else if (ret) {
3010 		return ret;
3011 	}
3012 
3013 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
3014 		if (mac->speed_type == QUERY_ACTIVE_SPEED) {
3015 			hclge_update_port_capability(mac);
3016 			return 0;
3017 		}
3018 		return hclge_cfg_mac_speed_dup(hdev, mac->speed,
3019 					       HCLGE_MAC_FULL);
3020 	} else {
3021 		if (speed == HCLGE_MAC_SPEED_UNKNOWN)
3022 			return 0; /* do nothing if no SFP */
3023 
3024 		/* must config full duplex for SFP */
3025 		return hclge_cfg_mac_speed_dup(hdev, speed, HCLGE_MAC_FULL);
3026 	}
3027 }
3028 
3029 static int hclge_get_status(struct hnae3_handle *handle)
3030 {
3031 	struct hclge_vport *vport = hclge_get_vport(handle);
3032 	struct hclge_dev *hdev = vport->back;
3033 
3034 	hclge_update_link_status(hdev);
3035 
3036 	return hdev->hw.mac.link;
3037 }
3038 
3039 static struct hclge_vport *hclge_get_vf_vport(struct hclge_dev *hdev, int vf)
3040 {
3041 	if (!pci_num_vf(hdev->pdev)) {
3042 		dev_err(&hdev->pdev->dev,
3043 			"SRIOV is disabled, can not get vport(%d) info.\n", vf);
3044 		return NULL;
3045 	}
3046 
3047 	if (vf < 0 || vf >= pci_num_vf(hdev->pdev)) {
3048 		dev_err(&hdev->pdev->dev,
3049 			"vf id(%d) is out of range(0 <= vfid < %d)\n",
3050 			vf, pci_num_vf(hdev->pdev));
3051 		return NULL;
3052 	}
3053 
3054 	/* VF start from 1 in vport */
3055 	vf += HCLGE_VF_VPORT_START_NUM;
3056 	return &hdev->vport[vf];
3057 }
3058 
3059 static int hclge_get_vf_config(struct hnae3_handle *handle, int vf,
3060 			       struct ifla_vf_info *ivf)
3061 {
3062 	struct hclge_vport *vport = hclge_get_vport(handle);
3063 	struct hclge_dev *hdev = vport->back;
3064 
3065 	vport = hclge_get_vf_vport(hdev, vf);
3066 	if (!vport)
3067 		return -EINVAL;
3068 
3069 	ivf->vf = vf;
3070 	ivf->linkstate = vport->vf_info.link_state;
3071 	ivf->spoofchk = vport->vf_info.spoofchk;
3072 	ivf->trusted = vport->vf_info.trusted;
3073 	ivf->min_tx_rate = 0;
3074 	ivf->max_tx_rate = vport->vf_info.max_tx_rate;
3075 	ivf->vlan = vport->port_base_vlan_cfg.vlan_info.vlan_tag;
3076 	ivf->vlan_proto = htons(vport->port_base_vlan_cfg.vlan_info.vlan_proto);
3077 	ivf->qos = vport->port_base_vlan_cfg.vlan_info.qos;
3078 	ether_addr_copy(ivf->mac, vport->vf_info.mac);
3079 
3080 	return 0;
3081 }
3082 
3083 static int hclge_set_vf_link_state(struct hnae3_handle *handle, int vf,
3084 				   int link_state)
3085 {
3086 	struct hclge_vport *vport = hclge_get_vport(handle);
3087 	struct hclge_dev *hdev = vport->back;
3088 
3089 	vport = hclge_get_vf_vport(hdev, vf);
3090 	if (!vport)
3091 		return -EINVAL;
3092 
3093 	vport->vf_info.link_state = link_state;
3094 
3095 	return 0;
3096 }
3097 
3098 static u32 hclge_check_event_cause(struct hclge_dev *hdev, u32 *clearval)
3099 {
3100 	u32 cmdq_src_reg, msix_src_reg;
3101 
3102 	/* fetch the events from their corresponding regs */
3103 	cmdq_src_reg = hclge_read_dev(&hdev->hw, HCLGE_VECTOR0_CMDQ_SRC_REG);
3104 	msix_src_reg = hclge_read_dev(&hdev->hw, HCLGE_MISC_VECTOR_INT_STS);
3105 
3106 	/* Assumption: If by any chance reset and mailbox events are reported
3107 	 * together then we will only process reset event in this go and will
3108 	 * defer the processing of the mailbox events. Since, we would have not
3109 	 * cleared RX CMDQ event this time we would receive again another
3110 	 * interrupt from H/W just for the mailbox.
3111 	 *
3112 	 * check for vector0 reset event sources
3113 	 */
3114 	if (BIT(HCLGE_VECTOR0_IMPRESET_INT_B) & msix_src_reg) {
3115 		dev_info(&hdev->pdev->dev, "IMP reset interrupt\n");
3116 		set_bit(HNAE3_IMP_RESET, &hdev->reset_pending);
3117 		set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state);
3118 		*clearval = BIT(HCLGE_VECTOR0_IMPRESET_INT_B);
3119 		hdev->rst_stats.imp_rst_cnt++;
3120 		return HCLGE_VECTOR0_EVENT_RST;
3121 	}
3122 
3123 	if (BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B) & msix_src_reg) {
3124 		dev_info(&hdev->pdev->dev, "global reset interrupt\n");
3125 		set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state);
3126 		set_bit(HNAE3_GLOBAL_RESET, &hdev->reset_pending);
3127 		*clearval = BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B);
3128 		hdev->rst_stats.global_rst_cnt++;
3129 		return HCLGE_VECTOR0_EVENT_RST;
3130 	}
3131 
3132 	/* check for vector0 msix event source */
3133 	if (msix_src_reg & HCLGE_VECTOR0_REG_MSIX_MASK) {
3134 		*clearval = msix_src_reg;
3135 		return HCLGE_VECTOR0_EVENT_ERR;
3136 	}
3137 
3138 	/* check for vector0 mailbox(=CMDQ RX) event source */
3139 	if (BIT(HCLGE_VECTOR0_RX_CMDQ_INT_B) & cmdq_src_reg) {
3140 		cmdq_src_reg &= ~BIT(HCLGE_VECTOR0_RX_CMDQ_INT_B);
3141 		*clearval = cmdq_src_reg;
3142 		return HCLGE_VECTOR0_EVENT_MBX;
3143 	}
3144 
3145 	/* print other vector0 event source */
3146 	dev_info(&hdev->pdev->dev,
3147 		 "CMDQ INT status:0x%x, other INT status:0x%x\n",
3148 		 cmdq_src_reg, msix_src_reg);
3149 	*clearval = msix_src_reg;
3150 
3151 	return HCLGE_VECTOR0_EVENT_OTHER;
3152 }
3153 
3154 static void hclge_clear_event_cause(struct hclge_dev *hdev, u32 event_type,
3155 				    u32 regclr)
3156 {
3157 	switch (event_type) {
3158 	case HCLGE_VECTOR0_EVENT_RST:
3159 		hclge_write_dev(&hdev->hw, HCLGE_MISC_RESET_STS_REG, regclr);
3160 		break;
3161 	case HCLGE_VECTOR0_EVENT_MBX:
3162 		hclge_write_dev(&hdev->hw, HCLGE_VECTOR0_CMDQ_SRC_REG, regclr);
3163 		break;
3164 	default:
3165 		break;
3166 	}
3167 }
3168 
3169 static void hclge_clear_all_event_cause(struct hclge_dev *hdev)
3170 {
3171 	hclge_clear_event_cause(hdev, HCLGE_VECTOR0_EVENT_RST,
3172 				BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B) |
3173 				BIT(HCLGE_VECTOR0_CORERESET_INT_B) |
3174 				BIT(HCLGE_VECTOR0_IMPRESET_INT_B));
3175 	hclge_clear_event_cause(hdev, HCLGE_VECTOR0_EVENT_MBX, 0);
3176 }
3177 
3178 static void hclge_enable_vector(struct hclge_misc_vector *vector, bool enable)
3179 {
3180 	writel(enable ? 1 : 0, vector->addr);
3181 }
3182 
3183 static irqreturn_t hclge_misc_irq_handle(int irq, void *data)
3184 {
3185 	struct hclge_dev *hdev = data;
3186 	u32 clearval = 0;
3187 	u32 event_cause;
3188 
3189 	hclge_enable_vector(&hdev->misc_vector, false);
3190 	event_cause = hclge_check_event_cause(hdev, &clearval);
3191 
3192 	/* vector 0 interrupt is shared with reset and mailbox source events.*/
3193 	switch (event_cause) {
3194 	case HCLGE_VECTOR0_EVENT_ERR:
3195 		/* we do not know what type of reset is required now. This could
3196 		 * only be decided after we fetch the type of errors which
3197 		 * caused this event. Therefore, we will do below for now:
3198 		 * 1. Assert HNAE3_UNKNOWN_RESET type of reset. This means we
3199 		 *    have defered type of reset to be used.
3200 		 * 2. Schedule the reset serivce task.
3201 		 * 3. When service task receives  HNAE3_UNKNOWN_RESET type it
3202 		 *    will fetch the correct type of reset.  This would be done
3203 		 *    by first decoding the types of errors.
3204 		 */
3205 		set_bit(HNAE3_UNKNOWN_RESET, &hdev->reset_request);
3206 		fallthrough;
3207 	case HCLGE_VECTOR0_EVENT_RST:
3208 		hclge_reset_task_schedule(hdev);
3209 		break;
3210 	case HCLGE_VECTOR0_EVENT_MBX:
3211 		/* If we are here then,
3212 		 * 1. Either we are not handling any mbx task and we are not
3213 		 *    scheduled as well
3214 		 *                        OR
3215 		 * 2. We could be handling a mbx task but nothing more is
3216 		 *    scheduled.
3217 		 * In both cases, we should schedule mbx task as there are more
3218 		 * mbx messages reported by this interrupt.
3219 		 */
3220 		hclge_mbx_task_schedule(hdev);
3221 		break;
3222 	default:
3223 		dev_warn(&hdev->pdev->dev,
3224 			 "received unknown or unhandled event of vector0\n");
3225 		break;
3226 	}
3227 
3228 	hclge_clear_event_cause(hdev, event_cause, clearval);
3229 
3230 	/* Enable interrupt if it is not cause by reset. And when
3231 	 * clearval equal to 0, it means interrupt status may be
3232 	 * cleared by hardware before driver reads status register.
3233 	 * For this case, vector0 interrupt also should be enabled.
3234 	 */
3235 	if (!clearval ||
3236 	    event_cause == HCLGE_VECTOR0_EVENT_MBX) {
3237 		hclge_enable_vector(&hdev->misc_vector, true);
3238 	}
3239 
3240 	return IRQ_HANDLED;
3241 }
3242 
3243 static void hclge_free_vector(struct hclge_dev *hdev, int vector_id)
3244 {
3245 	if (hdev->vector_status[vector_id] == HCLGE_INVALID_VPORT) {
3246 		dev_warn(&hdev->pdev->dev,
3247 			 "vector(vector_id %d) has been freed.\n", vector_id);
3248 		return;
3249 	}
3250 
3251 	hdev->vector_status[vector_id] = HCLGE_INVALID_VPORT;
3252 	hdev->num_msi_left += 1;
3253 	hdev->num_msi_used -= 1;
3254 }
3255 
3256 static void hclge_get_misc_vector(struct hclge_dev *hdev)
3257 {
3258 	struct hclge_misc_vector *vector = &hdev->misc_vector;
3259 
3260 	vector->vector_irq = pci_irq_vector(hdev->pdev, 0);
3261 
3262 	vector->addr = hdev->hw.io_base + HCLGE_MISC_VECTOR_REG_BASE;
3263 	hdev->vector_status[0] = 0;
3264 
3265 	hdev->num_msi_left -= 1;
3266 	hdev->num_msi_used += 1;
3267 }
3268 
3269 static void hclge_irq_affinity_notify(struct irq_affinity_notify *notify,
3270 				      const cpumask_t *mask)
3271 {
3272 	struct hclge_dev *hdev = container_of(notify, struct hclge_dev,
3273 					      affinity_notify);
3274 
3275 	cpumask_copy(&hdev->affinity_mask, mask);
3276 }
3277 
3278 static void hclge_irq_affinity_release(struct kref *ref)
3279 {
3280 }
3281 
3282 static void hclge_misc_affinity_setup(struct hclge_dev *hdev)
3283 {
3284 	irq_set_affinity_hint(hdev->misc_vector.vector_irq,
3285 			      &hdev->affinity_mask);
3286 
3287 	hdev->affinity_notify.notify = hclge_irq_affinity_notify;
3288 	hdev->affinity_notify.release = hclge_irq_affinity_release;
3289 	irq_set_affinity_notifier(hdev->misc_vector.vector_irq,
3290 				  &hdev->affinity_notify);
3291 }
3292 
3293 static void hclge_misc_affinity_teardown(struct hclge_dev *hdev)
3294 {
3295 	irq_set_affinity_notifier(hdev->misc_vector.vector_irq, NULL);
3296 	irq_set_affinity_hint(hdev->misc_vector.vector_irq, NULL);
3297 }
3298 
3299 static int hclge_misc_irq_init(struct hclge_dev *hdev)
3300 {
3301 	int ret;
3302 
3303 	hclge_get_misc_vector(hdev);
3304 
3305 	/* this would be explicitly freed in the end */
3306 	snprintf(hdev->misc_vector.name, HNAE3_INT_NAME_LEN, "%s-misc-%s",
3307 		 HCLGE_NAME, pci_name(hdev->pdev));
3308 	ret = request_irq(hdev->misc_vector.vector_irq, hclge_misc_irq_handle,
3309 			  0, hdev->misc_vector.name, hdev);
3310 	if (ret) {
3311 		hclge_free_vector(hdev, 0);
3312 		dev_err(&hdev->pdev->dev, "request misc irq(%d) fail\n",
3313 			hdev->misc_vector.vector_irq);
3314 	}
3315 
3316 	return ret;
3317 }
3318 
3319 static void hclge_misc_irq_uninit(struct hclge_dev *hdev)
3320 {
3321 	free_irq(hdev->misc_vector.vector_irq, hdev);
3322 	hclge_free_vector(hdev, 0);
3323 }
3324 
3325 int hclge_notify_client(struct hclge_dev *hdev,
3326 			enum hnae3_reset_notify_type type)
3327 {
3328 	struct hnae3_client *client = hdev->nic_client;
3329 	u16 i;
3330 
3331 	if (!test_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state) || !client)
3332 		return 0;
3333 
3334 	if (!client->ops->reset_notify)
3335 		return -EOPNOTSUPP;
3336 
3337 	for (i = 0; i < hdev->num_vmdq_vport + 1; i++) {
3338 		struct hnae3_handle *handle = &hdev->vport[i].nic;
3339 		int ret;
3340 
3341 		ret = client->ops->reset_notify(handle, type);
3342 		if (ret) {
3343 			dev_err(&hdev->pdev->dev,
3344 				"notify nic client failed %d(%d)\n", type, ret);
3345 			return ret;
3346 		}
3347 	}
3348 
3349 	return 0;
3350 }
3351 
3352 static int hclge_notify_roce_client(struct hclge_dev *hdev,
3353 				    enum hnae3_reset_notify_type type)
3354 {
3355 	struct hnae3_client *client = hdev->roce_client;
3356 	int ret;
3357 	u16 i;
3358 
3359 	if (!test_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state) || !client)
3360 		return 0;
3361 
3362 	if (!client->ops->reset_notify)
3363 		return -EOPNOTSUPP;
3364 
3365 	for (i = 0; i < hdev->num_vmdq_vport + 1; i++) {
3366 		struct hnae3_handle *handle = &hdev->vport[i].roce;
3367 
3368 		ret = client->ops->reset_notify(handle, type);
3369 		if (ret) {
3370 			dev_err(&hdev->pdev->dev,
3371 				"notify roce client failed %d(%d)",
3372 				type, ret);
3373 			return ret;
3374 		}
3375 	}
3376 
3377 	return ret;
3378 }
3379 
3380 static int hclge_reset_wait(struct hclge_dev *hdev)
3381 {
3382 #define HCLGE_RESET_WATI_MS	100
3383 #define HCLGE_RESET_WAIT_CNT	350
3384 
3385 	u32 val, reg, reg_bit;
3386 	u32 cnt = 0;
3387 
3388 	switch (hdev->reset_type) {
3389 	case HNAE3_IMP_RESET:
3390 		reg = HCLGE_GLOBAL_RESET_REG;
3391 		reg_bit = HCLGE_IMP_RESET_BIT;
3392 		break;
3393 	case HNAE3_GLOBAL_RESET:
3394 		reg = HCLGE_GLOBAL_RESET_REG;
3395 		reg_bit = HCLGE_GLOBAL_RESET_BIT;
3396 		break;
3397 	case HNAE3_FUNC_RESET:
3398 		reg = HCLGE_FUN_RST_ING;
3399 		reg_bit = HCLGE_FUN_RST_ING_B;
3400 		break;
3401 	default:
3402 		dev_err(&hdev->pdev->dev,
3403 			"Wait for unsupported reset type: %d\n",
3404 			hdev->reset_type);
3405 		return -EINVAL;
3406 	}
3407 
3408 	val = hclge_read_dev(&hdev->hw, reg);
3409 	while (hnae3_get_bit(val, reg_bit) && cnt < HCLGE_RESET_WAIT_CNT) {
3410 		msleep(HCLGE_RESET_WATI_MS);
3411 		val = hclge_read_dev(&hdev->hw, reg);
3412 		cnt++;
3413 	}
3414 
3415 	if (cnt >= HCLGE_RESET_WAIT_CNT) {
3416 		dev_warn(&hdev->pdev->dev,
3417 			 "Wait for reset timeout: %d\n", hdev->reset_type);
3418 		return -EBUSY;
3419 	}
3420 
3421 	return 0;
3422 }
3423 
3424 static int hclge_set_vf_rst(struct hclge_dev *hdev, int func_id, bool reset)
3425 {
3426 	struct hclge_vf_rst_cmd *req;
3427 	struct hclge_desc desc;
3428 
3429 	req = (struct hclge_vf_rst_cmd *)desc.data;
3430 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GBL_RST_STATUS, false);
3431 	req->dest_vfid = func_id;
3432 
3433 	if (reset)
3434 		req->vf_rst = 0x1;
3435 
3436 	return hclge_cmd_send(&hdev->hw, &desc, 1);
3437 }
3438 
3439 static int hclge_set_all_vf_rst(struct hclge_dev *hdev, bool reset)
3440 {
3441 	int i;
3442 
3443 	for (i = hdev->num_vmdq_vport + 1; i < hdev->num_alloc_vport; i++) {
3444 		struct hclge_vport *vport = &hdev->vport[i];
3445 		int ret;
3446 
3447 		/* Send cmd to set/clear VF's FUNC_RST_ING */
3448 		ret = hclge_set_vf_rst(hdev, vport->vport_id, reset);
3449 		if (ret) {
3450 			dev_err(&hdev->pdev->dev,
3451 				"set vf(%u) rst failed %d!\n",
3452 				vport->vport_id, ret);
3453 			return ret;
3454 		}
3455 
3456 		if (!reset || !test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state))
3457 			continue;
3458 
3459 		/* Inform VF to process the reset.
3460 		 * hclge_inform_reset_assert_to_vf may fail if VF
3461 		 * driver is not loaded.
3462 		 */
3463 		ret = hclge_inform_reset_assert_to_vf(vport);
3464 		if (ret)
3465 			dev_warn(&hdev->pdev->dev,
3466 				 "inform reset to vf(%u) failed %d!\n",
3467 				 vport->vport_id, ret);
3468 	}
3469 
3470 	return 0;
3471 }
3472 
3473 static void hclge_mailbox_service_task(struct hclge_dev *hdev)
3474 {
3475 	if (!test_and_clear_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state) ||
3476 	    test_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state) ||
3477 	    test_and_set_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state))
3478 		return;
3479 
3480 	hclge_mbx_handler(hdev);
3481 
3482 	clear_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state);
3483 }
3484 
3485 static void hclge_func_reset_sync_vf(struct hclge_dev *hdev)
3486 {
3487 	struct hclge_pf_rst_sync_cmd *req;
3488 	struct hclge_desc desc;
3489 	int cnt = 0;
3490 	int ret;
3491 
3492 	req = (struct hclge_pf_rst_sync_cmd *)desc.data;
3493 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_VF_RST_RDY, true);
3494 
3495 	do {
3496 		/* vf need to down netdev by mbx during PF or FLR reset */
3497 		hclge_mailbox_service_task(hdev);
3498 
3499 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
3500 		/* for compatible with old firmware, wait
3501 		 * 100 ms for VF to stop IO
3502 		 */
3503 		if (ret == -EOPNOTSUPP) {
3504 			msleep(HCLGE_RESET_SYNC_TIME);
3505 			return;
3506 		} else if (ret) {
3507 			dev_warn(&hdev->pdev->dev, "sync with VF fail %d!\n",
3508 				 ret);
3509 			return;
3510 		} else if (req->all_vf_ready) {
3511 			return;
3512 		}
3513 		msleep(HCLGE_PF_RESET_SYNC_TIME);
3514 		hclge_cmd_reuse_desc(&desc, true);
3515 	} while (cnt++ < HCLGE_PF_RESET_SYNC_CNT);
3516 
3517 	dev_warn(&hdev->pdev->dev, "sync with VF timeout!\n");
3518 }
3519 
3520 void hclge_report_hw_error(struct hclge_dev *hdev,
3521 			   enum hnae3_hw_error_type type)
3522 {
3523 	struct hnae3_client *client = hdev->nic_client;
3524 	u16 i;
3525 
3526 	if (!client || !client->ops->process_hw_error ||
3527 	    !test_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state))
3528 		return;
3529 
3530 	for (i = 0; i < hdev->num_vmdq_vport + 1; i++)
3531 		client->ops->process_hw_error(&hdev->vport[i].nic, type);
3532 }
3533 
3534 static void hclge_handle_imp_error(struct hclge_dev *hdev)
3535 {
3536 	u32 reg_val;
3537 
3538 	reg_val = hclge_read_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG);
3539 	if (reg_val & BIT(HCLGE_VECTOR0_IMP_RD_POISON_B)) {
3540 		hclge_report_hw_error(hdev, HNAE3_IMP_RD_POISON_ERROR);
3541 		reg_val &= ~BIT(HCLGE_VECTOR0_IMP_RD_POISON_B);
3542 		hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, reg_val);
3543 	}
3544 
3545 	if (reg_val & BIT(HCLGE_VECTOR0_IMP_CMDQ_ERR_B)) {
3546 		hclge_report_hw_error(hdev, HNAE3_CMDQ_ECC_ERROR);
3547 		reg_val &= ~BIT(HCLGE_VECTOR0_IMP_CMDQ_ERR_B);
3548 		hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, reg_val);
3549 	}
3550 }
3551 
3552 int hclge_func_reset_cmd(struct hclge_dev *hdev, int func_id)
3553 {
3554 	struct hclge_desc desc;
3555 	struct hclge_reset_cmd *req = (struct hclge_reset_cmd *)desc.data;
3556 	int ret;
3557 
3558 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_RST_TRIGGER, false);
3559 	hnae3_set_bit(req->mac_func_reset, HCLGE_CFG_RESET_FUNC_B, 1);
3560 	req->fun_reset_vfid = func_id;
3561 
3562 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
3563 	if (ret)
3564 		dev_err(&hdev->pdev->dev,
3565 			"send function reset cmd fail, status =%d\n", ret);
3566 
3567 	return ret;
3568 }
3569 
3570 static void hclge_do_reset(struct hclge_dev *hdev)
3571 {
3572 	struct hnae3_handle *handle = &hdev->vport[0].nic;
3573 	struct pci_dev *pdev = hdev->pdev;
3574 	u32 val;
3575 
3576 	if (hclge_get_hw_reset_stat(handle)) {
3577 		dev_info(&pdev->dev, "hardware reset not finish\n");
3578 		dev_info(&pdev->dev, "func_rst_reg:0x%x, global_rst_reg:0x%x\n",
3579 			 hclge_read_dev(&hdev->hw, HCLGE_FUN_RST_ING),
3580 			 hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG));
3581 		return;
3582 	}
3583 
3584 	switch (hdev->reset_type) {
3585 	case HNAE3_GLOBAL_RESET:
3586 		dev_info(&pdev->dev, "global reset requested\n");
3587 		val = hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG);
3588 		hnae3_set_bit(val, HCLGE_GLOBAL_RESET_BIT, 1);
3589 		hclge_write_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG, val);
3590 		break;
3591 	case HNAE3_FUNC_RESET:
3592 		dev_info(&pdev->dev, "PF reset requested\n");
3593 		/* schedule again to check later */
3594 		set_bit(HNAE3_FUNC_RESET, &hdev->reset_pending);
3595 		hclge_reset_task_schedule(hdev);
3596 		break;
3597 	default:
3598 		dev_warn(&pdev->dev,
3599 			 "unsupported reset type: %d\n", hdev->reset_type);
3600 		break;
3601 	}
3602 }
3603 
3604 static enum hnae3_reset_type hclge_get_reset_level(struct hnae3_ae_dev *ae_dev,
3605 						   unsigned long *addr)
3606 {
3607 	enum hnae3_reset_type rst_level = HNAE3_NONE_RESET;
3608 	struct hclge_dev *hdev = ae_dev->priv;
3609 
3610 	/* first, resolve any unknown reset type to the known type(s) */
3611 	if (test_bit(HNAE3_UNKNOWN_RESET, addr)) {
3612 		u32 msix_sts_reg = hclge_read_dev(&hdev->hw,
3613 					HCLGE_MISC_VECTOR_INT_STS);
3614 		/* we will intentionally ignore any errors from this function
3615 		 *  as we will end up in *some* reset request in any case
3616 		 */
3617 		if (hclge_handle_hw_msix_error(hdev, addr))
3618 			dev_info(&hdev->pdev->dev, "received msix interrupt 0x%x\n",
3619 				 msix_sts_reg);
3620 
3621 		clear_bit(HNAE3_UNKNOWN_RESET, addr);
3622 		/* We defered the clearing of the error event which caused
3623 		 * interrupt since it was not posssible to do that in
3624 		 * interrupt context (and this is the reason we introduced
3625 		 * new UNKNOWN reset type). Now, the errors have been
3626 		 * handled and cleared in hardware we can safely enable
3627 		 * interrupts. This is an exception to the norm.
3628 		 */
3629 		hclge_enable_vector(&hdev->misc_vector, true);
3630 	}
3631 
3632 	/* return the highest priority reset level amongst all */
3633 	if (test_bit(HNAE3_IMP_RESET, addr)) {
3634 		rst_level = HNAE3_IMP_RESET;
3635 		clear_bit(HNAE3_IMP_RESET, addr);
3636 		clear_bit(HNAE3_GLOBAL_RESET, addr);
3637 		clear_bit(HNAE3_FUNC_RESET, addr);
3638 	} else if (test_bit(HNAE3_GLOBAL_RESET, addr)) {
3639 		rst_level = HNAE3_GLOBAL_RESET;
3640 		clear_bit(HNAE3_GLOBAL_RESET, addr);
3641 		clear_bit(HNAE3_FUNC_RESET, addr);
3642 	} else if (test_bit(HNAE3_FUNC_RESET, addr)) {
3643 		rst_level = HNAE3_FUNC_RESET;
3644 		clear_bit(HNAE3_FUNC_RESET, addr);
3645 	} else if (test_bit(HNAE3_FLR_RESET, addr)) {
3646 		rst_level = HNAE3_FLR_RESET;
3647 		clear_bit(HNAE3_FLR_RESET, addr);
3648 	}
3649 
3650 	if (hdev->reset_type != HNAE3_NONE_RESET &&
3651 	    rst_level < hdev->reset_type)
3652 		return HNAE3_NONE_RESET;
3653 
3654 	return rst_level;
3655 }
3656 
3657 static void hclge_clear_reset_cause(struct hclge_dev *hdev)
3658 {
3659 	u32 clearval = 0;
3660 
3661 	switch (hdev->reset_type) {
3662 	case HNAE3_IMP_RESET:
3663 		clearval = BIT(HCLGE_VECTOR0_IMPRESET_INT_B);
3664 		break;
3665 	case HNAE3_GLOBAL_RESET:
3666 		clearval = BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B);
3667 		break;
3668 	default:
3669 		break;
3670 	}
3671 
3672 	if (!clearval)
3673 		return;
3674 
3675 	/* For revision 0x20, the reset interrupt source
3676 	 * can only be cleared after hardware reset done
3677 	 */
3678 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
3679 		hclge_write_dev(&hdev->hw, HCLGE_MISC_RESET_STS_REG,
3680 				clearval);
3681 
3682 	hclge_enable_vector(&hdev->misc_vector, true);
3683 }
3684 
3685 static void hclge_reset_handshake(struct hclge_dev *hdev, bool enable)
3686 {
3687 	u32 reg_val;
3688 
3689 	reg_val = hclge_read_dev(&hdev->hw, HCLGE_NIC_CSQ_DEPTH_REG);
3690 	if (enable)
3691 		reg_val |= HCLGE_NIC_SW_RST_RDY;
3692 	else
3693 		reg_val &= ~HCLGE_NIC_SW_RST_RDY;
3694 
3695 	hclge_write_dev(&hdev->hw, HCLGE_NIC_CSQ_DEPTH_REG, reg_val);
3696 }
3697 
3698 static int hclge_func_reset_notify_vf(struct hclge_dev *hdev)
3699 {
3700 	int ret;
3701 
3702 	ret = hclge_set_all_vf_rst(hdev, true);
3703 	if (ret)
3704 		return ret;
3705 
3706 	hclge_func_reset_sync_vf(hdev);
3707 
3708 	return 0;
3709 }
3710 
3711 static int hclge_reset_prepare_wait(struct hclge_dev *hdev)
3712 {
3713 	u32 reg_val;
3714 	int ret = 0;
3715 
3716 	switch (hdev->reset_type) {
3717 	case HNAE3_FUNC_RESET:
3718 		ret = hclge_func_reset_notify_vf(hdev);
3719 		if (ret)
3720 			return ret;
3721 
3722 		ret = hclge_func_reset_cmd(hdev, 0);
3723 		if (ret) {
3724 			dev_err(&hdev->pdev->dev,
3725 				"asserting function reset fail %d!\n", ret);
3726 			return ret;
3727 		}
3728 
3729 		/* After performaning pf reset, it is not necessary to do the
3730 		 * mailbox handling or send any command to firmware, because
3731 		 * any mailbox handling or command to firmware is only valid
3732 		 * after hclge_cmd_init is called.
3733 		 */
3734 		set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state);
3735 		hdev->rst_stats.pf_rst_cnt++;
3736 		break;
3737 	case HNAE3_FLR_RESET:
3738 		ret = hclge_func_reset_notify_vf(hdev);
3739 		if (ret)
3740 			return ret;
3741 		break;
3742 	case HNAE3_IMP_RESET:
3743 		hclge_handle_imp_error(hdev);
3744 		reg_val = hclge_read_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG);
3745 		hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG,
3746 				BIT(HCLGE_VECTOR0_IMP_RESET_INT_B) | reg_val);
3747 		break;
3748 	default:
3749 		break;
3750 	}
3751 
3752 	/* inform hardware that preparatory work is done */
3753 	msleep(HCLGE_RESET_SYNC_TIME);
3754 	hclge_reset_handshake(hdev, true);
3755 	dev_info(&hdev->pdev->dev, "prepare wait ok\n");
3756 
3757 	return ret;
3758 }
3759 
3760 static bool hclge_reset_err_handle(struct hclge_dev *hdev)
3761 {
3762 #define MAX_RESET_FAIL_CNT 5
3763 
3764 	if (hdev->reset_pending) {
3765 		dev_info(&hdev->pdev->dev, "Reset pending %lu\n",
3766 			 hdev->reset_pending);
3767 		return true;
3768 	} else if (hclge_read_dev(&hdev->hw, HCLGE_MISC_VECTOR_INT_STS) &
3769 		   HCLGE_RESET_INT_M) {
3770 		dev_info(&hdev->pdev->dev,
3771 			 "reset failed because new reset interrupt\n");
3772 		hclge_clear_reset_cause(hdev);
3773 		return false;
3774 	} else if (hdev->rst_stats.reset_fail_cnt < MAX_RESET_FAIL_CNT) {
3775 		hdev->rst_stats.reset_fail_cnt++;
3776 		set_bit(hdev->reset_type, &hdev->reset_pending);
3777 		dev_info(&hdev->pdev->dev,
3778 			 "re-schedule reset task(%u)\n",
3779 			 hdev->rst_stats.reset_fail_cnt);
3780 		return true;
3781 	}
3782 
3783 	hclge_clear_reset_cause(hdev);
3784 
3785 	/* recover the handshake status when reset fail */
3786 	hclge_reset_handshake(hdev, true);
3787 
3788 	dev_err(&hdev->pdev->dev, "Reset fail!\n");
3789 
3790 	hclge_dbg_dump_rst_info(hdev);
3791 
3792 	set_bit(HCLGE_STATE_RST_FAIL, &hdev->state);
3793 
3794 	return false;
3795 }
3796 
3797 static int hclge_set_rst_done(struct hclge_dev *hdev)
3798 {
3799 	struct hclge_pf_rst_done_cmd *req;
3800 	struct hclge_desc desc;
3801 	int ret;
3802 
3803 	req = (struct hclge_pf_rst_done_cmd *)desc.data;
3804 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_PF_RST_DONE, false);
3805 	req->pf_rst_done |= HCLGE_PF_RESET_DONE_BIT;
3806 
3807 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
3808 	/* To be compatible with the old firmware, which does not support
3809 	 * command HCLGE_OPC_PF_RST_DONE, just print a warning and
3810 	 * return success
3811 	 */
3812 	if (ret == -EOPNOTSUPP) {
3813 		dev_warn(&hdev->pdev->dev,
3814 			 "current firmware does not support command(0x%x)!\n",
3815 			 HCLGE_OPC_PF_RST_DONE);
3816 		return 0;
3817 	} else if (ret) {
3818 		dev_err(&hdev->pdev->dev, "assert PF reset done fail %d!\n",
3819 			ret);
3820 	}
3821 
3822 	return ret;
3823 }
3824 
3825 static int hclge_reset_prepare_up(struct hclge_dev *hdev)
3826 {
3827 	int ret = 0;
3828 
3829 	switch (hdev->reset_type) {
3830 	case HNAE3_FUNC_RESET:
3831 	case HNAE3_FLR_RESET:
3832 		ret = hclge_set_all_vf_rst(hdev, false);
3833 		break;
3834 	case HNAE3_GLOBAL_RESET:
3835 	case HNAE3_IMP_RESET:
3836 		ret = hclge_set_rst_done(hdev);
3837 		break;
3838 	default:
3839 		break;
3840 	}
3841 
3842 	/* clear up the handshake status after re-initialize done */
3843 	hclge_reset_handshake(hdev, false);
3844 
3845 	return ret;
3846 }
3847 
3848 static int hclge_reset_stack(struct hclge_dev *hdev)
3849 {
3850 	int ret;
3851 
3852 	ret = hclge_notify_client(hdev, HNAE3_UNINIT_CLIENT);
3853 	if (ret)
3854 		return ret;
3855 
3856 	ret = hclge_reset_ae_dev(hdev->ae_dev);
3857 	if (ret)
3858 		return ret;
3859 
3860 	return hclge_notify_client(hdev, HNAE3_INIT_CLIENT);
3861 }
3862 
3863 static int hclge_reset_prepare(struct hclge_dev *hdev)
3864 {
3865 	int ret;
3866 
3867 	hdev->rst_stats.reset_cnt++;
3868 	/* perform reset of the stack & ae device for a client */
3869 	ret = hclge_notify_roce_client(hdev, HNAE3_DOWN_CLIENT);
3870 	if (ret)
3871 		return ret;
3872 
3873 	rtnl_lock();
3874 	ret = hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
3875 	rtnl_unlock();
3876 	if (ret)
3877 		return ret;
3878 
3879 	return hclge_reset_prepare_wait(hdev);
3880 }
3881 
3882 static int hclge_reset_rebuild(struct hclge_dev *hdev)
3883 {
3884 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
3885 	enum hnae3_reset_type reset_level;
3886 	int ret;
3887 
3888 	hdev->rst_stats.hw_reset_done_cnt++;
3889 
3890 	ret = hclge_notify_roce_client(hdev, HNAE3_UNINIT_CLIENT);
3891 	if (ret)
3892 		return ret;
3893 
3894 	rtnl_lock();
3895 	ret = hclge_reset_stack(hdev);
3896 	rtnl_unlock();
3897 	if (ret)
3898 		return ret;
3899 
3900 	hclge_clear_reset_cause(hdev);
3901 
3902 	ret = hclge_notify_roce_client(hdev, HNAE3_INIT_CLIENT);
3903 	/* ignore RoCE notify error if it fails HCLGE_RESET_MAX_FAIL_CNT - 1
3904 	 * times
3905 	 */
3906 	if (ret &&
3907 	    hdev->rst_stats.reset_fail_cnt < HCLGE_RESET_MAX_FAIL_CNT - 1)
3908 		return ret;
3909 
3910 	ret = hclge_reset_prepare_up(hdev);
3911 	if (ret)
3912 		return ret;
3913 
3914 	rtnl_lock();
3915 	ret = hclge_notify_client(hdev, HNAE3_UP_CLIENT);
3916 	rtnl_unlock();
3917 	if (ret)
3918 		return ret;
3919 
3920 	ret = hclge_notify_roce_client(hdev, HNAE3_UP_CLIENT);
3921 	if (ret)
3922 		return ret;
3923 
3924 	hdev->last_reset_time = jiffies;
3925 	hdev->rst_stats.reset_fail_cnt = 0;
3926 	hdev->rst_stats.reset_done_cnt++;
3927 	clear_bit(HCLGE_STATE_RST_FAIL, &hdev->state);
3928 
3929 	/* if default_reset_request has a higher level reset request,
3930 	 * it should be handled as soon as possible. since some errors
3931 	 * need this kind of reset to fix.
3932 	 */
3933 	reset_level = hclge_get_reset_level(ae_dev,
3934 					    &hdev->default_reset_request);
3935 	if (reset_level != HNAE3_NONE_RESET)
3936 		set_bit(reset_level, &hdev->reset_request);
3937 
3938 	return 0;
3939 }
3940 
3941 static void hclge_reset(struct hclge_dev *hdev)
3942 {
3943 	if (hclge_reset_prepare(hdev))
3944 		goto err_reset;
3945 
3946 	if (hclge_reset_wait(hdev))
3947 		goto err_reset;
3948 
3949 	if (hclge_reset_rebuild(hdev))
3950 		goto err_reset;
3951 
3952 	return;
3953 
3954 err_reset:
3955 	if (hclge_reset_err_handle(hdev))
3956 		hclge_reset_task_schedule(hdev);
3957 }
3958 
3959 static void hclge_reset_event(struct pci_dev *pdev, struct hnae3_handle *handle)
3960 {
3961 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(pdev);
3962 	struct hclge_dev *hdev = ae_dev->priv;
3963 
3964 	/* We might end up getting called broadly because of 2 below cases:
3965 	 * 1. Recoverable error was conveyed through APEI and only way to bring
3966 	 *    normalcy is to reset.
3967 	 * 2. A new reset request from the stack due to timeout
3968 	 *
3969 	 * For the first case,error event might not have ae handle available.
3970 	 * check if this is a new reset request and we are not here just because
3971 	 * last reset attempt did not succeed and watchdog hit us again. We will
3972 	 * know this if last reset request did not occur very recently (watchdog
3973 	 * timer = 5*HZ, let us check after sufficiently large time, say 4*5*Hz)
3974 	 * In case of new request we reset the "reset level" to PF reset.
3975 	 * And if it is a repeat reset request of the most recent one then we
3976 	 * want to make sure we throttle the reset request. Therefore, we will
3977 	 * not allow it again before 3*HZ times.
3978 	 */
3979 	if (!handle)
3980 		handle = &hdev->vport[0].nic;
3981 
3982 	if (time_before(jiffies, (hdev->last_reset_time +
3983 				  HCLGE_RESET_INTERVAL))) {
3984 		mod_timer(&hdev->reset_timer, jiffies + HCLGE_RESET_INTERVAL);
3985 		return;
3986 	} else if (hdev->default_reset_request) {
3987 		hdev->reset_level =
3988 			hclge_get_reset_level(ae_dev,
3989 					      &hdev->default_reset_request);
3990 	} else if (time_after(jiffies, (hdev->last_reset_time + 4 * 5 * HZ))) {
3991 		hdev->reset_level = HNAE3_FUNC_RESET;
3992 	}
3993 
3994 	dev_info(&hdev->pdev->dev, "received reset event, reset type is %d\n",
3995 		 hdev->reset_level);
3996 
3997 	/* request reset & schedule reset task */
3998 	set_bit(hdev->reset_level, &hdev->reset_request);
3999 	hclge_reset_task_schedule(hdev);
4000 
4001 	if (hdev->reset_level < HNAE3_GLOBAL_RESET)
4002 		hdev->reset_level++;
4003 }
4004 
4005 static void hclge_set_def_reset_request(struct hnae3_ae_dev *ae_dev,
4006 					enum hnae3_reset_type rst_type)
4007 {
4008 	struct hclge_dev *hdev = ae_dev->priv;
4009 
4010 	set_bit(rst_type, &hdev->default_reset_request);
4011 }
4012 
4013 static void hclge_reset_timer(struct timer_list *t)
4014 {
4015 	struct hclge_dev *hdev = from_timer(hdev, t, reset_timer);
4016 
4017 	/* if default_reset_request has no value, it means that this reset
4018 	 * request has already be handled, so just return here
4019 	 */
4020 	if (!hdev->default_reset_request)
4021 		return;
4022 
4023 	dev_info(&hdev->pdev->dev,
4024 		 "triggering reset in reset timer\n");
4025 	hclge_reset_event(hdev->pdev, NULL);
4026 }
4027 
4028 static void hclge_reset_subtask(struct hclge_dev *hdev)
4029 {
4030 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
4031 
4032 	/* check if there is any ongoing reset in the hardware. This status can
4033 	 * be checked from reset_pending. If there is then, we need to wait for
4034 	 * hardware to complete reset.
4035 	 *    a. If we are able to figure out in reasonable time that hardware
4036 	 *       has fully resetted then, we can proceed with driver, client
4037 	 *       reset.
4038 	 *    b. else, we can come back later to check this status so re-sched
4039 	 *       now.
4040 	 */
4041 	hdev->last_reset_time = jiffies;
4042 	hdev->reset_type = hclge_get_reset_level(ae_dev, &hdev->reset_pending);
4043 	if (hdev->reset_type != HNAE3_NONE_RESET)
4044 		hclge_reset(hdev);
4045 
4046 	/* check if we got any *new* reset requests to be honored */
4047 	hdev->reset_type = hclge_get_reset_level(ae_dev, &hdev->reset_request);
4048 	if (hdev->reset_type != HNAE3_NONE_RESET)
4049 		hclge_do_reset(hdev);
4050 
4051 	hdev->reset_type = HNAE3_NONE_RESET;
4052 }
4053 
4054 static void hclge_reset_service_task(struct hclge_dev *hdev)
4055 {
4056 	if (!test_and_clear_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state))
4057 		return;
4058 
4059 	down(&hdev->reset_sem);
4060 	set_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
4061 
4062 	hclge_reset_subtask(hdev);
4063 
4064 	clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
4065 	up(&hdev->reset_sem);
4066 }
4067 
4068 static void hclge_update_vport_alive(struct hclge_dev *hdev)
4069 {
4070 	int i;
4071 
4072 	/* start from vport 1 for PF is always alive */
4073 	for (i = 1; i < hdev->num_alloc_vport; i++) {
4074 		struct hclge_vport *vport = &hdev->vport[i];
4075 
4076 		if (time_after(jiffies, vport->last_active_jiffies + 8 * HZ))
4077 			clear_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state);
4078 
4079 		/* If vf is not alive, set to default value */
4080 		if (!test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state))
4081 			vport->mps = HCLGE_MAC_DEFAULT_FRAME;
4082 	}
4083 }
4084 
4085 static void hclge_periodic_service_task(struct hclge_dev *hdev)
4086 {
4087 	unsigned long delta = round_jiffies_relative(HZ);
4088 
4089 	if (test_bit(HCLGE_STATE_RST_FAIL, &hdev->state))
4090 		return;
4091 
4092 	/* Always handle the link updating to make sure link state is
4093 	 * updated when it is triggered by mbx.
4094 	 */
4095 	hclge_update_link_status(hdev);
4096 	hclge_sync_mac_table(hdev);
4097 	hclge_sync_promisc_mode(hdev);
4098 
4099 	if (time_is_after_jiffies(hdev->last_serv_processed + HZ)) {
4100 		delta = jiffies - hdev->last_serv_processed;
4101 
4102 		if (delta < round_jiffies_relative(HZ)) {
4103 			delta = round_jiffies_relative(HZ) - delta;
4104 			goto out;
4105 		}
4106 	}
4107 
4108 	hdev->serv_processed_cnt++;
4109 	hclge_update_vport_alive(hdev);
4110 
4111 	if (test_bit(HCLGE_STATE_DOWN, &hdev->state)) {
4112 		hdev->last_serv_processed = jiffies;
4113 		goto out;
4114 	}
4115 
4116 	if (!(hdev->serv_processed_cnt % HCLGE_STATS_TIMER_INTERVAL))
4117 		hclge_update_stats_for_all(hdev);
4118 
4119 	hclge_update_port_info(hdev);
4120 	hclge_sync_vlan_filter(hdev);
4121 
4122 	if (!(hdev->serv_processed_cnt % HCLGE_ARFS_EXPIRE_INTERVAL))
4123 		hclge_rfs_filter_expire(hdev);
4124 
4125 	hdev->last_serv_processed = jiffies;
4126 
4127 out:
4128 	hclge_task_schedule(hdev, delta);
4129 }
4130 
4131 static void hclge_service_task(struct work_struct *work)
4132 {
4133 	struct hclge_dev *hdev =
4134 		container_of(work, struct hclge_dev, service_task.work);
4135 
4136 	hclge_reset_service_task(hdev);
4137 	hclge_mailbox_service_task(hdev);
4138 	hclge_periodic_service_task(hdev);
4139 
4140 	/* Handle reset and mbx again in case periodical task delays the
4141 	 * handling by calling hclge_task_schedule() in
4142 	 * hclge_periodic_service_task().
4143 	 */
4144 	hclge_reset_service_task(hdev);
4145 	hclge_mailbox_service_task(hdev);
4146 }
4147 
4148 struct hclge_vport *hclge_get_vport(struct hnae3_handle *handle)
4149 {
4150 	/* VF handle has no client */
4151 	if (!handle->client)
4152 		return container_of(handle, struct hclge_vport, nic);
4153 	else if (handle->client->type == HNAE3_CLIENT_ROCE)
4154 		return container_of(handle, struct hclge_vport, roce);
4155 	else
4156 		return container_of(handle, struct hclge_vport, nic);
4157 }
4158 
4159 static void hclge_get_vector_info(struct hclge_dev *hdev, u16 idx,
4160 				  struct hnae3_vector_info *vector_info)
4161 {
4162 #define HCLGE_PF_MAX_VECTOR_NUM_DEV_V2	64
4163 
4164 	vector_info->vector = pci_irq_vector(hdev->pdev, idx);
4165 
4166 	/* need an extend offset to config vector >= 64 */
4167 	if (idx - 1 < HCLGE_PF_MAX_VECTOR_NUM_DEV_V2)
4168 		vector_info->io_addr = hdev->hw.io_base +
4169 				HCLGE_VECTOR_REG_BASE +
4170 				(idx - 1) * HCLGE_VECTOR_REG_OFFSET;
4171 	else
4172 		vector_info->io_addr = hdev->hw.io_base +
4173 				HCLGE_VECTOR_EXT_REG_BASE +
4174 				(idx - 1) / HCLGE_PF_MAX_VECTOR_NUM_DEV_V2 *
4175 				HCLGE_VECTOR_REG_OFFSET_H +
4176 				(idx - 1) % HCLGE_PF_MAX_VECTOR_NUM_DEV_V2 *
4177 				HCLGE_VECTOR_REG_OFFSET;
4178 
4179 	hdev->vector_status[idx] = hdev->vport[0].vport_id;
4180 	hdev->vector_irq[idx] = vector_info->vector;
4181 }
4182 
4183 static int hclge_get_vector(struct hnae3_handle *handle, u16 vector_num,
4184 			    struct hnae3_vector_info *vector_info)
4185 {
4186 	struct hclge_vport *vport = hclge_get_vport(handle);
4187 	struct hnae3_vector_info *vector = vector_info;
4188 	struct hclge_dev *hdev = vport->back;
4189 	int alloc = 0;
4190 	u16 i = 0;
4191 	u16 j;
4192 
4193 	vector_num = min_t(u16, hdev->num_nic_msi - 1, vector_num);
4194 	vector_num = min(hdev->num_msi_left, vector_num);
4195 
4196 	for (j = 0; j < vector_num; j++) {
4197 		while (++i < hdev->num_nic_msi) {
4198 			if (hdev->vector_status[i] == HCLGE_INVALID_VPORT) {
4199 				hclge_get_vector_info(hdev, i, vector);
4200 				vector++;
4201 				alloc++;
4202 
4203 				break;
4204 			}
4205 		}
4206 	}
4207 	hdev->num_msi_left -= alloc;
4208 	hdev->num_msi_used += alloc;
4209 
4210 	return alloc;
4211 }
4212 
4213 static int hclge_get_vector_index(struct hclge_dev *hdev, int vector)
4214 {
4215 	int i;
4216 
4217 	for (i = 0; i < hdev->num_msi; i++)
4218 		if (vector == hdev->vector_irq[i])
4219 			return i;
4220 
4221 	return -EINVAL;
4222 }
4223 
4224 static int hclge_put_vector(struct hnae3_handle *handle, int vector)
4225 {
4226 	struct hclge_vport *vport = hclge_get_vport(handle);
4227 	struct hclge_dev *hdev = vport->back;
4228 	int vector_id;
4229 
4230 	vector_id = hclge_get_vector_index(hdev, vector);
4231 	if (vector_id < 0) {
4232 		dev_err(&hdev->pdev->dev,
4233 			"Get vector index fail. vector = %d\n", vector);
4234 		return vector_id;
4235 	}
4236 
4237 	hclge_free_vector(hdev, vector_id);
4238 
4239 	return 0;
4240 }
4241 
4242 static u32 hclge_get_rss_key_size(struct hnae3_handle *handle)
4243 {
4244 	return HCLGE_RSS_KEY_SIZE;
4245 }
4246 
4247 static int hclge_set_rss_algo_key(struct hclge_dev *hdev,
4248 				  const u8 hfunc, const u8 *key)
4249 {
4250 	struct hclge_rss_config_cmd *req;
4251 	unsigned int key_offset = 0;
4252 	struct hclge_desc desc;
4253 	int key_counts;
4254 	int key_size;
4255 	int ret;
4256 
4257 	key_counts = HCLGE_RSS_KEY_SIZE;
4258 	req = (struct hclge_rss_config_cmd *)desc.data;
4259 
4260 	while (key_counts) {
4261 		hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_GENERIC_CONFIG,
4262 					   false);
4263 
4264 		req->hash_config |= (hfunc & HCLGE_RSS_HASH_ALGO_MASK);
4265 		req->hash_config |= (key_offset << HCLGE_RSS_HASH_KEY_OFFSET_B);
4266 
4267 		key_size = min(HCLGE_RSS_HASH_KEY_NUM, key_counts);
4268 		memcpy(req->hash_key,
4269 		       key + key_offset * HCLGE_RSS_HASH_KEY_NUM, key_size);
4270 
4271 		key_counts -= key_size;
4272 		key_offset++;
4273 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4274 		if (ret) {
4275 			dev_err(&hdev->pdev->dev,
4276 				"Configure RSS config fail, status = %d\n",
4277 				ret);
4278 			return ret;
4279 		}
4280 	}
4281 	return 0;
4282 }
4283 
4284 static int hclge_set_rss_indir_table(struct hclge_dev *hdev, const u16 *indir)
4285 {
4286 	struct hclge_rss_indirection_table_cmd *req;
4287 	struct hclge_desc desc;
4288 	int rss_cfg_tbl_num;
4289 	u8 rss_msb_oft;
4290 	u8 rss_msb_val;
4291 	int ret;
4292 	u16 qid;
4293 	int i;
4294 	u32 j;
4295 
4296 	req = (struct hclge_rss_indirection_table_cmd *)desc.data;
4297 	rss_cfg_tbl_num = hdev->ae_dev->dev_specs.rss_ind_tbl_size /
4298 			  HCLGE_RSS_CFG_TBL_SIZE;
4299 
4300 	for (i = 0; i < rss_cfg_tbl_num; i++) {
4301 		hclge_cmd_setup_basic_desc
4302 			(&desc, HCLGE_OPC_RSS_INDIR_TABLE, false);
4303 
4304 		req->start_table_index =
4305 			cpu_to_le16(i * HCLGE_RSS_CFG_TBL_SIZE);
4306 		req->rss_set_bitmap = cpu_to_le16(HCLGE_RSS_SET_BITMAP_MSK);
4307 		for (j = 0; j < HCLGE_RSS_CFG_TBL_SIZE; j++) {
4308 			qid = indir[i * HCLGE_RSS_CFG_TBL_SIZE + j];
4309 			req->rss_qid_l[j] = qid & 0xff;
4310 			rss_msb_oft =
4311 				j * HCLGE_RSS_CFG_TBL_BW_H / BITS_PER_BYTE;
4312 			rss_msb_val = (qid >> HCLGE_RSS_CFG_TBL_BW_L & 0x1) <<
4313 				(j * HCLGE_RSS_CFG_TBL_BW_H % BITS_PER_BYTE);
4314 			req->rss_qid_h[rss_msb_oft] |= rss_msb_val;
4315 		}
4316 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4317 		if (ret) {
4318 			dev_err(&hdev->pdev->dev,
4319 				"Configure rss indir table fail,status = %d\n",
4320 				ret);
4321 			return ret;
4322 		}
4323 	}
4324 	return 0;
4325 }
4326 
4327 static int hclge_set_rss_tc_mode(struct hclge_dev *hdev, u16 *tc_valid,
4328 				 u16 *tc_size, u16 *tc_offset)
4329 {
4330 	struct hclge_rss_tc_mode_cmd *req;
4331 	struct hclge_desc desc;
4332 	int ret;
4333 	int i;
4334 
4335 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_TC_MODE, false);
4336 	req = (struct hclge_rss_tc_mode_cmd *)desc.data;
4337 
4338 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
4339 		u16 mode = 0;
4340 
4341 		hnae3_set_bit(mode, HCLGE_RSS_TC_VALID_B, (tc_valid[i] & 0x1));
4342 		hnae3_set_field(mode, HCLGE_RSS_TC_SIZE_M,
4343 				HCLGE_RSS_TC_SIZE_S, tc_size[i]);
4344 		hnae3_set_bit(mode, HCLGE_RSS_TC_SIZE_MSB_B,
4345 			      tc_size[i] >> HCLGE_RSS_TC_SIZE_MSB_OFFSET & 0x1);
4346 		hnae3_set_field(mode, HCLGE_RSS_TC_OFFSET_M,
4347 				HCLGE_RSS_TC_OFFSET_S, tc_offset[i]);
4348 
4349 		req->rss_tc_mode[i] = cpu_to_le16(mode);
4350 	}
4351 
4352 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4353 	if (ret)
4354 		dev_err(&hdev->pdev->dev,
4355 			"Configure rss tc mode fail, status = %d\n", ret);
4356 
4357 	return ret;
4358 }
4359 
4360 static void hclge_get_rss_type(struct hclge_vport *vport)
4361 {
4362 	if (vport->rss_tuple_sets.ipv4_tcp_en ||
4363 	    vport->rss_tuple_sets.ipv4_udp_en ||
4364 	    vport->rss_tuple_sets.ipv4_sctp_en ||
4365 	    vport->rss_tuple_sets.ipv6_tcp_en ||
4366 	    vport->rss_tuple_sets.ipv6_udp_en ||
4367 	    vport->rss_tuple_sets.ipv6_sctp_en)
4368 		vport->nic.kinfo.rss_type = PKT_HASH_TYPE_L4;
4369 	else if (vport->rss_tuple_sets.ipv4_fragment_en ||
4370 		 vport->rss_tuple_sets.ipv6_fragment_en)
4371 		vport->nic.kinfo.rss_type = PKT_HASH_TYPE_L3;
4372 	else
4373 		vport->nic.kinfo.rss_type = PKT_HASH_TYPE_NONE;
4374 }
4375 
4376 static int hclge_set_rss_input_tuple(struct hclge_dev *hdev)
4377 {
4378 	struct hclge_rss_input_tuple_cmd *req;
4379 	struct hclge_desc desc;
4380 	int ret;
4381 
4382 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_INPUT_TUPLE, false);
4383 
4384 	req = (struct hclge_rss_input_tuple_cmd *)desc.data;
4385 
4386 	/* Get the tuple cfg from pf */
4387 	req->ipv4_tcp_en = hdev->vport[0].rss_tuple_sets.ipv4_tcp_en;
4388 	req->ipv4_udp_en = hdev->vport[0].rss_tuple_sets.ipv4_udp_en;
4389 	req->ipv4_sctp_en = hdev->vport[0].rss_tuple_sets.ipv4_sctp_en;
4390 	req->ipv4_fragment_en = hdev->vport[0].rss_tuple_sets.ipv4_fragment_en;
4391 	req->ipv6_tcp_en = hdev->vport[0].rss_tuple_sets.ipv6_tcp_en;
4392 	req->ipv6_udp_en = hdev->vport[0].rss_tuple_sets.ipv6_udp_en;
4393 	req->ipv6_sctp_en = hdev->vport[0].rss_tuple_sets.ipv6_sctp_en;
4394 	req->ipv6_fragment_en = hdev->vport[0].rss_tuple_sets.ipv6_fragment_en;
4395 	hclge_get_rss_type(&hdev->vport[0]);
4396 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4397 	if (ret)
4398 		dev_err(&hdev->pdev->dev,
4399 			"Configure rss input fail, status = %d\n", ret);
4400 	return ret;
4401 }
4402 
4403 static int hclge_get_rss(struct hnae3_handle *handle, u32 *indir,
4404 			 u8 *key, u8 *hfunc)
4405 {
4406 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev);
4407 	struct hclge_vport *vport = hclge_get_vport(handle);
4408 	int i;
4409 
4410 	/* Get hash algorithm */
4411 	if (hfunc) {
4412 		switch (vport->rss_algo) {
4413 		case HCLGE_RSS_HASH_ALGO_TOEPLITZ:
4414 			*hfunc = ETH_RSS_HASH_TOP;
4415 			break;
4416 		case HCLGE_RSS_HASH_ALGO_SIMPLE:
4417 			*hfunc = ETH_RSS_HASH_XOR;
4418 			break;
4419 		default:
4420 			*hfunc = ETH_RSS_HASH_UNKNOWN;
4421 			break;
4422 		}
4423 	}
4424 
4425 	/* Get the RSS Key required by the user */
4426 	if (key)
4427 		memcpy(key, vport->rss_hash_key, HCLGE_RSS_KEY_SIZE);
4428 
4429 	/* Get indirect table */
4430 	if (indir)
4431 		for (i = 0; i < ae_dev->dev_specs.rss_ind_tbl_size; i++)
4432 			indir[i] =  vport->rss_indirection_tbl[i];
4433 
4434 	return 0;
4435 }
4436 
4437 static int hclge_set_rss(struct hnae3_handle *handle, const u32 *indir,
4438 			 const  u8 *key, const  u8 hfunc)
4439 {
4440 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev);
4441 	struct hclge_vport *vport = hclge_get_vport(handle);
4442 	struct hclge_dev *hdev = vport->back;
4443 	u8 hash_algo;
4444 	int ret, i;
4445 
4446 	/* Set the RSS Hash Key if specififed by the user */
4447 	if (key) {
4448 		switch (hfunc) {
4449 		case ETH_RSS_HASH_TOP:
4450 			hash_algo = HCLGE_RSS_HASH_ALGO_TOEPLITZ;
4451 			break;
4452 		case ETH_RSS_HASH_XOR:
4453 			hash_algo = HCLGE_RSS_HASH_ALGO_SIMPLE;
4454 			break;
4455 		case ETH_RSS_HASH_NO_CHANGE:
4456 			hash_algo = vport->rss_algo;
4457 			break;
4458 		default:
4459 			return -EINVAL;
4460 		}
4461 
4462 		ret = hclge_set_rss_algo_key(hdev, hash_algo, key);
4463 		if (ret)
4464 			return ret;
4465 
4466 		/* Update the shadow RSS key with user specified qids */
4467 		memcpy(vport->rss_hash_key, key, HCLGE_RSS_KEY_SIZE);
4468 		vport->rss_algo = hash_algo;
4469 	}
4470 
4471 	/* Update the shadow RSS table with user specified qids */
4472 	for (i = 0; i < ae_dev->dev_specs.rss_ind_tbl_size; i++)
4473 		vport->rss_indirection_tbl[i] = indir[i];
4474 
4475 	/* Update the hardware */
4476 	return hclge_set_rss_indir_table(hdev, vport->rss_indirection_tbl);
4477 }
4478 
4479 static u8 hclge_get_rss_hash_bits(struct ethtool_rxnfc *nfc)
4480 {
4481 	u8 hash_sets = nfc->data & RXH_L4_B_0_1 ? HCLGE_S_PORT_BIT : 0;
4482 
4483 	if (nfc->data & RXH_L4_B_2_3)
4484 		hash_sets |= HCLGE_D_PORT_BIT;
4485 	else
4486 		hash_sets &= ~HCLGE_D_PORT_BIT;
4487 
4488 	if (nfc->data & RXH_IP_SRC)
4489 		hash_sets |= HCLGE_S_IP_BIT;
4490 	else
4491 		hash_sets &= ~HCLGE_S_IP_BIT;
4492 
4493 	if (nfc->data & RXH_IP_DST)
4494 		hash_sets |= HCLGE_D_IP_BIT;
4495 	else
4496 		hash_sets &= ~HCLGE_D_IP_BIT;
4497 
4498 	if (nfc->flow_type == SCTP_V4_FLOW || nfc->flow_type == SCTP_V6_FLOW)
4499 		hash_sets |= HCLGE_V_TAG_BIT;
4500 
4501 	return hash_sets;
4502 }
4503 
4504 static int hclge_init_rss_tuple_cmd(struct hclge_vport *vport,
4505 				    struct ethtool_rxnfc *nfc,
4506 				    struct hclge_rss_input_tuple_cmd *req)
4507 {
4508 	struct hclge_dev *hdev = vport->back;
4509 	u8 tuple_sets;
4510 
4511 	req->ipv4_tcp_en = vport->rss_tuple_sets.ipv4_tcp_en;
4512 	req->ipv4_udp_en = vport->rss_tuple_sets.ipv4_udp_en;
4513 	req->ipv4_sctp_en = vport->rss_tuple_sets.ipv4_sctp_en;
4514 	req->ipv4_fragment_en = vport->rss_tuple_sets.ipv4_fragment_en;
4515 	req->ipv6_tcp_en = vport->rss_tuple_sets.ipv6_tcp_en;
4516 	req->ipv6_udp_en = vport->rss_tuple_sets.ipv6_udp_en;
4517 	req->ipv6_sctp_en = vport->rss_tuple_sets.ipv6_sctp_en;
4518 	req->ipv6_fragment_en = vport->rss_tuple_sets.ipv6_fragment_en;
4519 
4520 	tuple_sets = hclge_get_rss_hash_bits(nfc);
4521 	switch (nfc->flow_type) {
4522 	case TCP_V4_FLOW:
4523 		req->ipv4_tcp_en = tuple_sets;
4524 		break;
4525 	case TCP_V6_FLOW:
4526 		req->ipv6_tcp_en = tuple_sets;
4527 		break;
4528 	case UDP_V4_FLOW:
4529 		req->ipv4_udp_en = tuple_sets;
4530 		break;
4531 	case UDP_V6_FLOW:
4532 		req->ipv6_udp_en = tuple_sets;
4533 		break;
4534 	case SCTP_V4_FLOW:
4535 		req->ipv4_sctp_en = tuple_sets;
4536 		break;
4537 	case SCTP_V6_FLOW:
4538 		if (hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 &&
4539 		    (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)))
4540 			return -EINVAL;
4541 
4542 		req->ipv6_sctp_en = tuple_sets;
4543 		break;
4544 	case IPV4_FLOW:
4545 		req->ipv4_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER;
4546 		break;
4547 	case IPV6_FLOW:
4548 		req->ipv6_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER;
4549 		break;
4550 	default:
4551 		return -EINVAL;
4552 	}
4553 
4554 	return 0;
4555 }
4556 
4557 static int hclge_set_rss_tuple(struct hnae3_handle *handle,
4558 			       struct ethtool_rxnfc *nfc)
4559 {
4560 	struct hclge_vport *vport = hclge_get_vport(handle);
4561 	struct hclge_dev *hdev = vport->back;
4562 	struct hclge_rss_input_tuple_cmd *req;
4563 	struct hclge_desc desc;
4564 	int ret;
4565 
4566 	if (nfc->data & ~(RXH_IP_SRC | RXH_IP_DST |
4567 			  RXH_L4_B_0_1 | RXH_L4_B_2_3))
4568 		return -EINVAL;
4569 
4570 	req = (struct hclge_rss_input_tuple_cmd *)desc.data;
4571 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_INPUT_TUPLE, false);
4572 
4573 	ret = hclge_init_rss_tuple_cmd(vport, nfc, req);
4574 	if (ret) {
4575 		dev_err(&hdev->pdev->dev,
4576 			"failed to init rss tuple cmd, ret = %d\n", ret);
4577 		return ret;
4578 	}
4579 
4580 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4581 	if (ret) {
4582 		dev_err(&hdev->pdev->dev,
4583 			"Set rss tuple fail, status = %d\n", ret);
4584 		return ret;
4585 	}
4586 
4587 	vport->rss_tuple_sets.ipv4_tcp_en = req->ipv4_tcp_en;
4588 	vport->rss_tuple_sets.ipv4_udp_en = req->ipv4_udp_en;
4589 	vport->rss_tuple_sets.ipv4_sctp_en = req->ipv4_sctp_en;
4590 	vport->rss_tuple_sets.ipv4_fragment_en = req->ipv4_fragment_en;
4591 	vport->rss_tuple_sets.ipv6_tcp_en = req->ipv6_tcp_en;
4592 	vport->rss_tuple_sets.ipv6_udp_en = req->ipv6_udp_en;
4593 	vport->rss_tuple_sets.ipv6_sctp_en = req->ipv6_sctp_en;
4594 	vport->rss_tuple_sets.ipv6_fragment_en = req->ipv6_fragment_en;
4595 	hclge_get_rss_type(vport);
4596 	return 0;
4597 }
4598 
4599 static int hclge_get_vport_rss_tuple(struct hclge_vport *vport, int flow_type,
4600 				     u8 *tuple_sets)
4601 {
4602 	switch (flow_type) {
4603 	case TCP_V4_FLOW:
4604 		*tuple_sets = vport->rss_tuple_sets.ipv4_tcp_en;
4605 		break;
4606 	case UDP_V4_FLOW:
4607 		*tuple_sets = vport->rss_tuple_sets.ipv4_udp_en;
4608 		break;
4609 	case TCP_V6_FLOW:
4610 		*tuple_sets = vport->rss_tuple_sets.ipv6_tcp_en;
4611 		break;
4612 	case UDP_V6_FLOW:
4613 		*tuple_sets = vport->rss_tuple_sets.ipv6_udp_en;
4614 		break;
4615 	case SCTP_V4_FLOW:
4616 		*tuple_sets = vport->rss_tuple_sets.ipv4_sctp_en;
4617 		break;
4618 	case SCTP_V6_FLOW:
4619 		*tuple_sets = vport->rss_tuple_sets.ipv6_sctp_en;
4620 		break;
4621 	case IPV4_FLOW:
4622 	case IPV6_FLOW:
4623 		*tuple_sets = HCLGE_S_IP_BIT | HCLGE_D_IP_BIT;
4624 		break;
4625 	default:
4626 		return -EINVAL;
4627 	}
4628 
4629 	return 0;
4630 }
4631 
4632 static u64 hclge_convert_rss_tuple(u8 tuple_sets)
4633 {
4634 	u64 tuple_data = 0;
4635 
4636 	if (tuple_sets & HCLGE_D_PORT_BIT)
4637 		tuple_data |= RXH_L4_B_2_3;
4638 	if (tuple_sets & HCLGE_S_PORT_BIT)
4639 		tuple_data |= RXH_L4_B_0_1;
4640 	if (tuple_sets & HCLGE_D_IP_BIT)
4641 		tuple_data |= RXH_IP_DST;
4642 	if (tuple_sets & HCLGE_S_IP_BIT)
4643 		tuple_data |= RXH_IP_SRC;
4644 
4645 	return tuple_data;
4646 }
4647 
4648 static int hclge_get_rss_tuple(struct hnae3_handle *handle,
4649 			       struct ethtool_rxnfc *nfc)
4650 {
4651 	struct hclge_vport *vport = hclge_get_vport(handle);
4652 	u8 tuple_sets;
4653 	int ret;
4654 
4655 	nfc->data = 0;
4656 
4657 	ret = hclge_get_vport_rss_tuple(vport, nfc->flow_type, &tuple_sets);
4658 	if (ret || !tuple_sets)
4659 		return ret;
4660 
4661 	nfc->data = hclge_convert_rss_tuple(tuple_sets);
4662 
4663 	return 0;
4664 }
4665 
4666 static int hclge_get_tc_size(struct hnae3_handle *handle)
4667 {
4668 	struct hclge_vport *vport = hclge_get_vport(handle);
4669 	struct hclge_dev *hdev = vport->back;
4670 
4671 	return hdev->pf_rss_size_max;
4672 }
4673 
4674 static int hclge_init_rss_tc_mode(struct hclge_dev *hdev)
4675 {
4676 	struct hnae3_ae_dev *ae_dev = hdev->ae_dev;
4677 	struct hclge_vport *vport = hdev->vport;
4678 	u16 tc_offset[HCLGE_MAX_TC_NUM] = {0};
4679 	u16 tc_valid[HCLGE_MAX_TC_NUM] = {0};
4680 	u16 tc_size[HCLGE_MAX_TC_NUM] = {0};
4681 	struct hnae3_tc_info *tc_info;
4682 	u16 roundup_size;
4683 	u16 rss_size;
4684 	int i;
4685 
4686 	tc_info = &vport->nic.kinfo.tc_info;
4687 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
4688 		rss_size = tc_info->tqp_count[i];
4689 		tc_valid[i] = 0;
4690 
4691 		if (!(hdev->hw_tc_map & BIT(i)))
4692 			continue;
4693 
4694 		/* tc_size set to hardware is the log2 of roundup power of two
4695 		 * of rss_size, the acutal queue size is limited by indirection
4696 		 * table.
4697 		 */
4698 		if (rss_size > ae_dev->dev_specs.rss_ind_tbl_size ||
4699 		    rss_size == 0) {
4700 			dev_err(&hdev->pdev->dev,
4701 				"Configure rss tc size failed, invalid TC_SIZE = %u\n",
4702 				rss_size);
4703 			return -EINVAL;
4704 		}
4705 
4706 		roundup_size = roundup_pow_of_two(rss_size);
4707 		roundup_size = ilog2(roundup_size);
4708 
4709 		tc_valid[i] = 1;
4710 		tc_size[i] = roundup_size;
4711 		tc_offset[i] = tc_info->tqp_offset[i];
4712 	}
4713 
4714 	return hclge_set_rss_tc_mode(hdev, tc_valid, tc_size, tc_offset);
4715 }
4716 
4717 int hclge_rss_init_hw(struct hclge_dev *hdev)
4718 {
4719 	struct hclge_vport *vport = hdev->vport;
4720 	u16 *rss_indir = vport[0].rss_indirection_tbl;
4721 	u8 *key = vport[0].rss_hash_key;
4722 	u8 hfunc = vport[0].rss_algo;
4723 	int ret;
4724 
4725 	ret = hclge_set_rss_indir_table(hdev, rss_indir);
4726 	if (ret)
4727 		return ret;
4728 
4729 	ret = hclge_set_rss_algo_key(hdev, hfunc, key);
4730 	if (ret)
4731 		return ret;
4732 
4733 	ret = hclge_set_rss_input_tuple(hdev);
4734 	if (ret)
4735 		return ret;
4736 
4737 	return hclge_init_rss_tc_mode(hdev);
4738 }
4739 
4740 void hclge_rss_indir_init_cfg(struct hclge_dev *hdev)
4741 {
4742 	struct hclge_vport *vport = hdev->vport;
4743 	int i, j;
4744 
4745 	for (j = 0; j < hdev->num_vmdq_vport + 1; j++) {
4746 		for (i = 0; i < hdev->ae_dev->dev_specs.rss_ind_tbl_size; i++)
4747 			vport[j].rss_indirection_tbl[i] =
4748 				i % vport[j].alloc_rss_size;
4749 	}
4750 }
4751 
4752 static int hclge_rss_init_cfg(struct hclge_dev *hdev)
4753 {
4754 	u16 rss_ind_tbl_size = hdev->ae_dev->dev_specs.rss_ind_tbl_size;
4755 	int i, rss_algo = HCLGE_RSS_HASH_ALGO_TOEPLITZ;
4756 	struct hclge_vport *vport = hdev->vport;
4757 
4758 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2)
4759 		rss_algo = HCLGE_RSS_HASH_ALGO_SIMPLE;
4760 
4761 	for (i = 0; i < hdev->num_vmdq_vport + 1; i++) {
4762 		u16 *rss_ind_tbl;
4763 
4764 		vport[i].rss_tuple_sets.ipv4_tcp_en =
4765 			HCLGE_RSS_INPUT_TUPLE_OTHER;
4766 		vport[i].rss_tuple_sets.ipv4_udp_en =
4767 			HCLGE_RSS_INPUT_TUPLE_OTHER;
4768 		vport[i].rss_tuple_sets.ipv4_sctp_en =
4769 			HCLGE_RSS_INPUT_TUPLE_SCTP;
4770 		vport[i].rss_tuple_sets.ipv4_fragment_en =
4771 			HCLGE_RSS_INPUT_TUPLE_OTHER;
4772 		vport[i].rss_tuple_sets.ipv6_tcp_en =
4773 			HCLGE_RSS_INPUT_TUPLE_OTHER;
4774 		vport[i].rss_tuple_sets.ipv6_udp_en =
4775 			HCLGE_RSS_INPUT_TUPLE_OTHER;
4776 		vport[i].rss_tuple_sets.ipv6_sctp_en =
4777 			hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 ?
4778 			HCLGE_RSS_INPUT_TUPLE_SCTP_NO_PORT :
4779 			HCLGE_RSS_INPUT_TUPLE_SCTP;
4780 		vport[i].rss_tuple_sets.ipv6_fragment_en =
4781 			HCLGE_RSS_INPUT_TUPLE_OTHER;
4782 
4783 		vport[i].rss_algo = rss_algo;
4784 
4785 		rss_ind_tbl = devm_kcalloc(&hdev->pdev->dev, rss_ind_tbl_size,
4786 					   sizeof(*rss_ind_tbl), GFP_KERNEL);
4787 		if (!rss_ind_tbl)
4788 			return -ENOMEM;
4789 
4790 		vport[i].rss_indirection_tbl = rss_ind_tbl;
4791 		memcpy(vport[i].rss_hash_key, hclge_hash_key,
4792 		       HCLGE_RSS_KEY_SIZE);
4793 	}
4794 
4795 	hclge_rss_indir_init_cfg(hdev);
4796 
4797 	return 0;
4798 }
4799 
4800 int hclge_bind_ring_with_vector(struct hclge_vport *vport,
4801 				int vector_id, bool en,
4802 				struct hnae3_ring_chain_node *ring_chain)
4803 {
4804 	struct hclge_dev *hdev = vport->back;
4805 	struct hnae3_ring_chain_node *node;
4806 	struct hclge_desc desc;
4807 	struct hclge_ctrl_vector_chain_cmd *req =
4808 		(struct hclge_ctrl_vector_chain_cmd *)desc.data;
4809 	enum hclge_cmd_status status;
4810 	enum hclge_opcode_type op;
4811 	u16 tqp_type_and_id;
4812 	int i;
4813 
4814 	op = en ? HCLGE_OPC_ADD_RING_TO_VECTOR : HCLGE_OPC_DEL_RING_TO_VECTOR;
4815 	hclge_cmd_setup_basic_desc(&desc, op, false);
4816 	req->int_vector_id_l = hnae3_get_field(vector_id,
4817 					       HCLGE_VECTOR_ID_L_M,
4818 					       HCLGE_VECTOR_ID_L_S);
4819 	req->int_vector_id_h = hnae3_get_field(vector_id,
4820 					       HCLGE_VECTOR_ID_H_M,
4821 					       HCLGE_VECTOR_ID_H_S);
4822 
4823 	i = 0;
4824 	for (node = ring_chain; node; node = node->next) {
4825 		tqp_type_and_id = le16_to_cpu(req->tqp_type_and_id[i]);
4826 		hnae3_set_field(tqp_type_and_id,  HCLGE_INT_TYPE_M,
4827 				HCLGE_INT_TYPE_S,
4828 				hnae3_get_bit(node->flag, HNAE3_RING_TYPE_B));
4829 		hnae3_set_field(tqp_type_and_id, HCLGE_TQP_ID_M,
4830 				HCLGE_TQP_ID_S, node->tqp_index);
4831 		hnae3_set_field(tqp_type_and_id, HCLGE_INT_GL_IDX_M,
4832 				HCLGE_INT_GL_IDX_S,
4833 				hnae3_get_field(node->int_gl_idx,
4834 						HNAE3_RING_GL_IDX_M,
4835 						HNAE3_RING_GL_IDX_S));
4836 		req->tqp_type_and_id[i] = cpu_to_le16(tqp_type_and_id);
4837 		if (++i >= HCLGE_VECTOR_ELEMENTS_PER_CMD) {
4838 			req->int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD;
4839 			req->vfid = vport->vport_id;
4840 
4841 			status = hclge_cmd_send(&hdev->hw, &desc, 1);
4842 			if (status) {
4843 				dev_err(&hdev->pdev->dev,
4844 					"Map TQP fail, status is %d.\n",
4845 					status);
4846 				return -EIO;
4847 			}
4848 			i = 0;
4849 
4850 			hclge_cmd_setup_basic_desc(&desc,
4851 						   op,
4852 						   false);
4853 			req->int_vector_id_l =
4854 				hnae3_get_field(vector_id,
4855 						HCLGE_VECTOR_ID_L_M,
4856 						HCLGE_VECTOR_ID_L_S);
4857 			req->int_vector_id_h =
4858 				hnae3_get_field(vector_id,
4859 						HCLGE_VECTOR_ID_H_M,
4860 						HCLGE_VECTOR_ID_H_S);
4861 		}
4862 	}
4863 
4864 	if (i > 0) {
4865 		req->int_cause_num = i;
4866 		req->vfid = vport->vport_id;
4867 		status = hclge_cmd_send(&hdev->hw, &desc, 1);
4868 		if (status) {
4869 			dev_err(&hdev->pdev->dev,
4870 				"Map TQP fail, status is %d.\n", status);
4871 			return -EIO;
4872 		}
4873 	}
4874 
4875 	return 0;
4876 }
4877 
4878 static int hclge_map_ring_to_vector(struct hnae3_handle *handle, int vector,
4879 				    struct hnae3_ring_chain_node *ring_chain)
4880 {
4881 	struct hclge_vport *vport = hclge_get_vport(handle);
4882 	struct hclge_dev *hdev = vport->back;
4883 	int vector_id;
4884 
4885 	vector_id = hclge_get_vector_index(hdev, vector);
4886 	if (vector_id < 0) {
4887 		dev_err(&hdev->pdev->dev,
4888 			"failed to get vector index. vector=%d\n", vector);
4889 		return vector_id;
4890 	}
4891 
4892 	return hclge_bind_ring_with_vector(vport, vector_id, true, ring_chain);
4893 }
4894 
4895 static int hclge_unmap_ring_frm_vector(struct hnae3_handle *handle, int vector,
4896 				       struct hnae3_ring_chain_node *ring_chain)
4897 {
4898 	struct hclge_vport *vport = hclge_get_vport(handle);
4899 	struct hclge_dev *hdev = vport->back;
4900 	int vector_id, ret;
4901 
4902 	if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
4903 		return 0;
4904 
4905 	vector_id = hclge_get_vector_index(hdev, vector);
4906 	if (vector_id < 0) {
4907 		dev_err(&handle->pdev->dev,
4908 			"Get vector index fail. ret =%d\n", vector_id);
4909 		return vector_id;
4910 	}
4911 
4912 	ret = hclge_bind_ring_with_vector(vport, vector_id, false, ring_chain);
4913 	if (ret)
4914 		dev_err(&handle->pdev->dev,
4915 			"Unmap ring from vector fail. vectorid=%d, ret =%d\n",
4916 			vector_id, ret);
4917 
4918 	return ret;
4919 }
4920 
4921 static int hclge_cmd_set_promisc_mode(struct hclge_dev *hdev, u8 vf_id,
4922 				      bool en_uc, bool en_mc, bool en_bc)
4923 {
4924 	struct hclge_vport *vport = &hdev->vport[vf_id];
4925 	struct hnae3_handle *handle = &vport->nic;
4926 	struct hclge_promisc_cfg_cmd *req;
4927 	struct hclge_desc desc;
4928 	bool uc_tx_en = en_uc;
4929 	u8 promisc_cfg = 0;
4930 	int ret;
4931 
4932 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_PROMISC_MODE, false);
4933 
4934 	req = (struct hclge_promisc_cfg_cmd *)desc.data;
4935 	req->vf_id = vf_id;
4936 
4937 	if (test_bit(HNAE3_PFLAG_LIMIT_PROMISC, &handle->priv_flags))
4938 		uc_tx_en = false;
4939 
4940 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_UC_RX_EN, en_uc ? 1 : 0);
4941 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_MC_RX_EN, en_mc ? 1 : 0);
4942 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_BC_RX_EN, en_bc ? 1 : 0);
4943 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_UC_TX_EN, uc_tx_en ? 1 : 0);
4944 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_MC_TX_EN, en_mc ? 1 : 0);
4945 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_BC_TX_EN, en_bc ? 1 : 0);
4946 	req->extend_promisc = promisc_cfg;
4947 
4948 	/* to be compatible with DEVICE_VERSION_V1/2 */
4949 	promisc_cfg = 0;
4950 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_EN_UC, en_uc ? 1 : 0);
4951 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_EN_MC, en_mc ? 1 : 0);
4952 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_EN_BC, en_bc ? 1 : 0);
4953 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_TX_EN, 1);
4954 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_RX_EN, 1);
4955 	req->promisc = promisc_cfg;
4956 
4957 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4958 	if (ret)
4959 		dev_err(&hdev->pdev->dev,
4960 			"failed to set vport %u promisc mode, ret = %d.\n",
4961 			vf_id, ret);
4962 
4963 	return ret;
4964 }
4965 
4966 int hclge_set_vport_promisc_mode(struct hclge_vport *vport, bool en_uc_pmc,
4967 				 bool en_mc_pmc, bool en_bc_pmc)
4968 {
4969 	return hclge_cmd_set_promisc_mode(vport->back, vport->vport_id,
4970 					  en_uc_pmc, en_mc_pmc, en_bc_pmc);
4971 }
4972 
4973 static int hclge_set_promisc_mode(struct hnae3_handle *handle, bool en_uc_pmc,
4974 				  bool en_mc_pmc)
4975 {
4976 	struct hclge_vport *vport = hclge_get_vport(handle);
4977 	struct hclge_dev *hdev = vport->back;
4978 	bool en_bc_pmc = true;
4979 
4980 	/* For device whose version below V2, if broadcast promisc enabled,
4981 	 * vlan filter is always bypassed. So broadcast promisc should be
4982 	 * disabled until user enable promisc mode
4983 	 */
4984 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
4985 		en_bc_pmc = handle->netdev_flags & HNAE3_BPE ? true : false;
4986 
4987 	return hclge_set_vport_promisc_mode(vport, en_uc_pmc, en_mc_pmc,
4988 					    en_bc_pmc);
4989 }
4990 
4991 static void hclge_request_update_promisc_mode(struct hnae3_handle *handle)
4992 {
4993 	struct hclge_vport *vport = hclge_get_vport(handle);
4994 	struct hclge_dev *hdev = vport->back;
4995 
4996 	set_bit(HCLGE_STATE_PROMISC_CHANGED, &hdev->state);
4997 }
4998 
4999 static int hclge_get_fd_mode(struct hclge_dev *hdev, u8 *fd_mode)
5000 {
5001 	struct hclge_get_fd_mode_cmd *req;
5002 	struct hclge_desc desc;
5003 	int ret;
5004 
5005 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_MODE_CTRL, true);
5006 
5007 	req = (struct hclge_get_fd_mode_cmd *)desc.data;
5008 
5009 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
5010 	if (ret) {
5011 		dev_err(&hdev->pdev->dev, "get fd mode fail, ret=%d\n", ret);
5012 		return ret;
5013 	}
5014 
5015 	*fd_mode = req->mode;
5016 
5017 	return ret;
5018 }
5019 
5020 static int hclge_get_fd_allocation(struct hclge_dev *hdev,
5021 				   u32 *stage1_entry_num,
5022 				   u32 *stage2_entry_num,
5023 				   u16 *stage1_counter_num,
5024 				   u16 *stage2_counter_num)
5025 {
5026 	struct hclge_get_fd_allocation_cmd *req;
5027 	struct hclge_desc desc;
5028 	int ret;
5029 
5030 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_GET_ALLOCATION, true);
5031 
5032 	req = (struct hclge_get_fd_allocation_cmd *)desc.data;
5033 
5034 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
5035 	if (ret) {
5036 		dev_err(&hdev->pdev->dev, "query fd allocation fail, ret=%d\n",
5037 			ret);
5038 		return ret;
5039 	}
5040 
5041 	*stage1_entry_num = le32_to_cpu(req->stage1_entry_num);
5042 	*stage2_entry_num = le32_to_cpu(req->stage2_entry_num);
5043 	*stage1_counter_num = le16_to_cpu(req->stage1_counter_num);
5044 	*stage2_counter_num = le16_to_cpu(req->stage2_counter_num);
5045 
5046 	return ret;
5047 }
5048 
5049 static int hclge_set_fd_key_config(struct hclge_dev *hdev,
5050 				   enum HCLGE_FD_STAGE stage_num)
5051 {
5052 	struct hclge_set_fd_key_config_cmd *req;
5053 	struct hclge_fd_key_cfg *stage;
5054 	struct hclge_desc desc;
5055 	int ret;
5056 
5057 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_KEY_CONFIG, false);
5058 
5059 	req = (struct hclge_set_fd_key_config_cmd *)desc.data;
5060 	stage = &hdev->fd_cfg.key_cfg[stage_num];
5061 	req->stage = stage_num;
5062 	req->key_select = stage->key_sel;
5063 	req->inner_sipv6_word_en = stage->inner_sipv6_word_en;
5064 	req->inner_dipv6_word_en = stage->inner_dipv6_word_en;
5065 	req->outer_sipv6_word_en = stage->outer_sipv6_word_en;
5066 	req->outer_dipv6_word_en = stage->outer_dipv6_word_en;
5067 	req->tuple_mask = cpu_to_le32(~stage->tuple_active);
5068 	req->meta_data_mask = cpu_to_le32(~stage->meta_data_active);
5069 
5070 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
5071 	if (ret)
5072 		dev_err(&hdev->pdev->dev, "set fd key fail, ret=%d\n", ret);
5073 
5074 	return ret;
5075 }
5076 
5077 static int hclge_init_fd_config(struct hclge_dev *hdev)
5078 {
5079 #define LOW_2_WORDS		0x03
5080 	struct hclge_fd_key_cfg *key_cfg;
5081 	int ret;
5082 
5083 	if (!hnae3_dev_fd_supported(hdev))
5084 		return 0;
5085 
5086 	ret = hclge_get_fd_mode(hdev, &hdev->fd_cfg.fd_mode);
5087 	if (ret)
5088 		return ret;
5089 
5090 	switch (hdev->fd_cfg.fd_mode) {
5091 	case HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1:
5092 		hdev->fd_cfg.max_key_length = MAX_KEY_LENGTH;
5093 		break;
5094 	case HCLGE_FD_MODE_DEPTH_4K_WIDTH_200B_STAGE_1:
5095 		hdev->fd_cfg.max_key_length = MAX_KEY_LENGTH / 2;
5096 		break;
5097 	default:
5098 		dev_err(&hdev->pdev->dev,
5099 			"Unsupported flow director mode %u\n",
5100 			hdev->fd_cfg.fd_mode);
5101 		return -EOPNOTSUPP;
5102 	}
5103 
5104 	key_cfg = &hdev->fd_cfg.key_cfg[HCLGE_FD_STAGE_1];
5105 	key_cfg->key_sel = HCLGE_FD_KEY_BASE_ON_TUPLE;
5106 	key_cfg->inner_sipv6_word_en = LOW_2_WORDS;
5107 	key_cfg->inner_dipv6_word_en = LOW_2_WORDS;
5108 	key_cfg->outer_sipv6_word_en = 0;
5109 	key_cfg->outer_dipv6_word_en = 0;
5110 
5111 	key_cfg->tuple_active = BIT(INNER_VLAN_TAG_FST) | BIT(INNER_ETH_TYPE) |
5112 				BIT(INNER_IP_PROTO) | BIT(INNER_IP_TOS) |
5113 				BIT(INNER_SRC_IP) | BIT(INNER_DST_IP) |
5114 				BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT);
5115 
5116 	/* If use max 400bit key, we can support tuples for ether type */
5117 	if (hdev->fd_cfg.fd_mode == HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1)
5118 		key_cfg->tuple_active |=
5119 				BIT(INNER_DST_MAC) | BIT(INNER_SRC_MAC);
5120 
5121 	/* roce_type is used to filter roce frames
5122 	 * dst_vport is used to specify the rule
5123 	 */
5124 	key_cfg->meta_data_active = BIT(ROCE_TYPE) | BIT(DST_VPORT);
5125 
5126 	ret = hclge_get_fd_allocation(hdev,
5127 				      &hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1],
5128 				      &hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_2],
5129 				      &hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1],
5130 				      &hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_2]);
5131 	if (ret)
5132 		return ret;
5133 
5134 	return hclge_set_fd_key_config(hdev, HCLGE_FD_STAGE_1);
5135 }
5136 
5137 static int hclge_fd_tcam_config(struct hclge_dev *hdev, u8 stage, bool sel_x,
5138 				int loc, u8 *key, bool is_add)
5139 {
5140 	struct hclge_fd_tcam_config_1_cmd *req1;
5141 	struct hclge_fd_tcam_config_2_cmd *req2;
5142 	struct hclge_fd_tcam_config_3_cmd *req3;
5143 	struct hclge_desc desc[3];
5144 	int ret;
5145 
5146 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_FD_TCAM_OP, false);
5147 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
5148 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_FD_TCAM_OP, false);
5149 	desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
5150 	hclge_cmd_setup_basic_desc(&desc[2], HCLGE_OPC_FD_TCAM_OP, false);
5151 
5152 	req1 = (struct hclge_fd_tcam_config_1_cmd *)desc[0].data;
5153 	req2 = (struct hclge_fd_tcam_config_2_cmd *)desc[1].data;
5154 	req3 = (struct hclge_fd_tcam_config_3_cmd *)desc[2].data;
5155 
5156 	req1->stage = stage;
5157 	req1->xy_sel = sel_x ? 1 : 0;
5158 	hnae3_set_bit(req1->port_info, HCLGE_FD_EPORT_SW_EN_B, 0);
5159 	req1->index = cpu_to_le32(loc);
5160 	req1->entry_vld = sel_x ? is_add : 0;
5161 
5162 	if (key) {
5163 		memcpy(req1->tcam_data, &key[0], sizeof(req1->tcam_data));
5164 		memcpy(req2->tcam_data, &key[sizeof(req1->tcam_data)],
5165 		       sizeof(req2->tcam_data));
5166 		memcpy(req3->tcam_data, &key[sizeof(req1->tcam_data) +
5167 		       sizeof(req2->tcam_data)], sizeof(req3->tcam_data));
5168 	}
5169 
5170 	ret = hclge_cmd_send(&hdev->hw, desc, 3);
5171 	if (ret)
5172 		dev_err(&hdev->pdev->dev,
5173 			"config tcam key fail, ret=%d\n",
5174 			ret);
5175 
5176 	return ret;
5177 }
5178 
5179 static int hclge_fd_ad_config(struct hclge_dev *hdev, u8 stage, int loc,
5180 			      struct hclge_fd_ad_data *action)
5181 {
5182 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
5183 	struct hclge_fd_ad_config_cmd *req;
5184 	struct hclge_desc desc;
5185 	u64 ad_data = 0;
5186 	int ret;
5187 
5188 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_AD_OP, false);
5189 
5190 	req = (struct hclge_fd_ad_config_cmd *)desc.data;
5191 	req->index = cpu_to_le32(loc);
5192 	req->stage = stage;
5193 
5194 	hnae3_set_bit(ad_data, HCLGE_FD_AD_WR_RULE_ID_B,
5195 		      action->write_rule_id_to_bd);
5196 	hnae3_set_field(ad_data, HCLGE_FD_AD_RULE_ID_M, HCLGE_FD_AD_RULE_ID_S,
5197 			action->rule_id);
5198 	if (test_bit(HNAE3_DEV_SUPPORT_FD_FORWARD_TC_B, ae_dev->caps)) {
5199 		hnae3_set_bit(ad_data, HCLGE_FD_AD_TC_OVRD_B,
5200 			      action->override_tc);
5201 		hnae3_set_field(ad_data, HCLGE_FD_AD_TC_SIZE_M,
5202 				HCLGE_FD_AD_TC_SIZE_S, (u32)action->tc_size);
5203 	}
5204 	ad_data <<= 32;
5205 	hnae3_set_bit(ad_data, HCLGE_FD_AD_DROP_B, action->drop_packet);
5206 	hnae3_set_bit(ad_data, HCLGE_FD_AD_DIRECT_QID_B,
5207 		      action->forward_to_direct_queue);
5208 	hnae3_set_field(ad_data, HCLGE_FD_AD_QID_M, HCLGE_FD_AD_QID_S,
5209 			action->queue_id);
5210 	hnae3_set_bit(ad_data, HCLGE_FD_AD_USE_COUNTER_B, action->use_counter);
5211 	hnae3_set_field(ad_data, HCLGE_FD_AD_COUNTER_NUM_M,
5212 			HCLGE_FD_AD_COUNTER_NUM_S, action->counter_id);
5213 	hnae3_set_bit(ad_data, HCLGE_FD_AD_NXT_STEP_B, action->use_next_stage);
5214 	hnae3_set_field(ad_data, HCLGE_FD_AD_NXT_KEY_M, HCLGE_FD_AD_NXT_KEY_S,
5215 			action->counter_id);
5216 
5217 	req->ad_data = cpu_to_le64(ad_data);
5218 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
5219 	if (ret)
5220 		dev_err(&hdev->pdev->dev, "fd ad config fail, ret=%d\n", ret);
5221 
5222 	return ret;
5223 }
5224 
5225 static bool hclge_fd_convert_tuple(u32 tuple_bit, u8 *key_x, u8 *key_y,
5226 				   struct hclge_fd_rule *rule)
5227 {
5228 	u16 tmp_x_s, tmp_y_s;
5229 	u32 tmp_x_l, tmp_y_l;
5230 	int i;
5231 
5232 	if (rule->unused_tuple & tuple_bit)
5233 		return true;
5234 
5235 	switch (tuple_bit) {
5236 	case BIT(INNER_DST_MAC):
5237 		for (i = 0; i < ETH_ALEN; i++) {
5238 			calc_x(key_x[ETH_ALEN - 1 - i], rule->tuples.dst_mac[i],
5239 			       rule->tuples_mask.dst_mac[i]);
5240 			calc_y(key_y[ETH_ALEN - 1 - i], rule->tuples.dst_mac[i],
5241 			       rule->tuples_mask.dst_mac[i]);
5242 		}
5243 
5244 		return true;
5245 	case BIT(INNER_SRC_MAC):
5246 		for (i = 0; i < ETH_ALEN; i++) {
5247 			calc_x(key_x[ETH_ALEN - 1 - i], rule->tuples.src_mac[i],
5248 			       rule->tuples.src_mac[i]);
5249 			calc_y(key_y[ETH_ALEN - 1 - i], rule->tuples.src_mac[i],
5250 			       rule->tuples.src_mac[i]);
5251 		}
5252 
5253 		return true;
5254 	case BIT(INNER_VLAN_TAG_FST):
5255 		calc_x(tmp_x_s, rule->tuples.vlan_tag1,
5256 		       rule->tuples_mask.vlan_tag1);
5257 		calc_y(tmp_y_s, rule->tuples.vlan_tag1,
5258 		       rule->tuples_mask.vlan_tag1);
5259 		*(__le16 *)key_x = cpu_to_le16(tmp_x_s);
5260 		*(__le16 *)key_y = cpu_to_le16(tmp_y_s);
5261 
5262 		return true;
5263 	case BIT(INNER_ETH_TYPE):
5264 		calc_x(tmp_x_s, rule->tuples.ether_proto,
5265 		       rule->tuples_mask.ether_proto);
5266 		calc_y(tmp_y_s, rule->tuples.ether_proto,
5267 		       rule->tuples_mask.ether_proto);
5268 		*(__le16 *)key_x = cpu_to_le16(tmp_x_s);
5269 		*(__le16 *)key_y = cpu_to_le16(tmp_y_s);
5270 
5271 		return true;
5272 	case BIT(INNER_IP_TOS):
5273 		calc_x(*key_x, rule->tuples.ip_tos, rule->tuples_mask.ip_tos);
5274 		calc_y(*key_y, rule->tuples.ip_tos, rule->tuples_mask.ip_tos);
5275 
5276 		return true;
5277 	case BIT(INNER_IP_PROTO):
5278 		calc_x(*key_x, rule->tuples.ip_proto,
5279 		       rule->tuples_mask.ip_proto);
5280 		calc_y(*key_y, rule->tuples.ip_proto,
5281 		       rule->tuples_mask.ip_proto);
5282 
5283 		return true;
5284 	case BIT(INNER_SRC_IP):
5285 		calc_x(tmp_x_l, rule->tuples.src_ip[IPV4_INDEX],
5286 		       rule->tuples_mask.src_ip[IPV4_INDEX]);
5287 		calc_y(tmp_y_l, rule->tuples.src_ip[IPV4_INDEX],
5288 		       rule->tuples_mask.src_ip[IPV4_INDEX]);
5289 		*(__le32 *)key_x = cpu_to_le32(tmp_x_l);
5290 		*(__le32 *)key_y = cpu_to_le32(tmp_y_l);
5291 
5292 		return true;
5293 	case BIT(INNER_DST_IP):
5294 		calc_x(tmp_x_l, rule->tuples.dst_ip[IPV4_INDEX],
5295 		       rule->tuples_mask.dst_ip[IPV4_INDEX]);
5296 		calc_y(tmp_y_l, rule->tuples.dst_ip[IPV4_INDEX],
5297 		       rule->tuples_mask.dst_ip[IPV4_INDEX]);
5298 		*(__le32 *)key_x = cpu_to_le32(tmp_x_l);
5299 		*(__le32 *)key_y = cpu_to_le32(tmp_y_l);
5300 
5301 		return true;
5302 	case BIT(INNER_SRC_PORT):
5303 		calc_x(tmp_x_s, rule->tuples.src_port,
5304 		       rule->tuples_mask.src_port);
5305 		calc_y(tmp_y_s, rule->tuples.src_port,
5306 		       rule->tuples_mask.src_port);
5307 		*(__le16 *)key_x = cpu_to_le16(tmp_x_s);
5308 		*(__le16 *)key_y = cpu_to_le16(tmp_y_s);
5309 
5310 		return true;
5311 	case BIT(INNER_DST_PORT):
5312 		calc_x(tmp_x_s, rule->tuples.dst_port,
5313 		       rule->tuples_mask.dst_port);
5314 		calc_y(tmp_y_s, rule->tuples.dst_port,
5315 		       rule->tuples_mask.dst_port);
5316 		*(__le16 *)key_x = cpu_to_le16(tmp_x_s);
5317 		*(__le16 *)key_y = cpu_to_le16(tmp_y_s);
5318 
5319 		return true;
5320 	default:
5321 		return false;
5322 	}
5323 }
5324 
5325 static u32 hclge_get_port_number(enum HLCGE_PORT_TYPE port_type, u8 pf_id,
5326 				 u8 vf_id, u8 network_port_id)
5327 {
5328 	u32 port_number = 0;
5329 
5330 	if (port_type == HOST_PORT) {
5331 		hnae3_set_field(port_number, HCLGE_PF_ID_M, HCLGE_PF_ID_S,
5332 				pf_id);
5333 		hnae3_set_field(port_number, HCLGE_VF_ID_M, HCLGE_VF_ID_S,
5334 				vf_id);
5335 		hnae3_set_bit(port_number, HCLGE_PORT_TYPE_B, HOST_PORT);
5336 	} else {
5337 		hnae3_set_field(port_number, HCLGE_NETWORK_PORT_ID_M,
5338 				HCLGE_NETWORK_PORT_ID_S, network_port_id);
5339 		hnae3_set_bit(port_number, HCLGE_PORT_TYPE_B, NETWORK_PORT);
5340 	}
5341 
5342 	return port_number;
5343 }
5344 
5345 static void hclge_fd_convert_meta_data(struct hclge_fd_key_cfg *key_cfg,
5346 				       __le32 *key_x, __le32 *key_y,
5347 				       struct hclge_fd_rule *rule)
5348 {
5349 	u32 tuple_bit, meta_data = 0, tmp_x, tmp_y, port_number;
5350 	u8 cur_pos = 0, tuple_size, shift_bits;
5351 	unsigned int i;
5352 
5353 	for (i = 0; i < MAX_META_DATA; i++) {
5354 		tuple_size = meta_data_key_info[i].key_length;
5355 		tuple_bit = key_cfg->meta_data_active & BIT(i);
5356 
5357 		switch (tuple_bit) {
5358 		case BIT(ROCE_TYPE):
5359 			hnae3_set_bit(meta_data, cur_pos, NIC_PACKET);
5360 			cur_pos += tuple_size;
5361 			break;
5362 		case BIT(DST_VPORT):
5363 			port_number = hclge_get_port_number(HOST_PORT, 0,
5364 							    rule->vf_id, 0);
5365 			hnae3_set_field(meta_data,
5366 					GENMASK(cur_pos + tuple_size, cur_pos),
5367 					cur_pos, port_number);
5368 			cur_pos += tuple_size;
5369 			break;
5370 		default:
5371 			break;
5372 		}
5373 	}
5374 
5375 	calc_x(tmp_x, meta_data, 0xFFFFFFFF);
5376 	calc_y(tmp_y, meta_data, 0xFFFFFFFF);
5377 	shift_bits = sizeof(meta_data) * 8 - cur_pos;
5378 
5379 	*key_x = cpu_to_le32(tmp_x << shift_bits);
5380 	*key_y = cpu_to_le32(tmp_y << shift_bits);
5381 }
5382 
5383 /* A complete key is combined with meta data key and tuple key.
5384  * Meta data key is stored at the MSB region, and tuple key is stored at
5385  * the LSB region, unused bits will be filled 0.
5386  */
5387 static int hclge_config_key(struct hclge_dev *hdev, u8 stage,
5388 			    struct hclge_fd_rule *rule)
5389 {
5390 	struct hclge_fd_key_cfg *key_cfg = &hdev->fd_cfg.key_cfg[stage];
5391 	u8 key_x[MAX_KEY_BYTES], key_y[MAX_KEY_BYTES];
5392 	u8 *cur_key_x, *cur_key_y;
5393 	u8 meta_data_region;
5394 	u8 tuple_size;
5395 	int ret;
5396 	u32 i;
5397 
5398 	memset(key_x, 0, sizeof(key_x));
5399 	memset(key_y, 0, sizeof(key_y));
5400 	cur_key_x = key_x;
5401 	cur_key_y = key_y;
5402 
5403 	for (i = 0 ; i < MAX_TUPLE; i++) {
5404 		bool tuple_valid;
5405 		u32 check_tuple;
5406 
5407 		tuple_size = tuple_key_info[i].key_length / 8;
5408 		check_tuple = key_cfg->tuple_active & BIT(i);
5409 
5410 		tuple_valid = hclge_fd_convert_tuple(check_tuple, cur_key_x,
5411 						     cur_key_y, rule);
5412 		if (tuple_valid) {
5413 			cur_key_x += tuple_size;
5414 			cur_key_y += tuple_size;
5415 		}
5416 	}
5417 
5418 	meta_data_region = hdev->fd_cfg.max_key_length / 8 -
5419 			MAX_META_DATA_LENGTH / 8;
5420 
5421 	hclge_fd_convert_meta_data(key_cfg,
5422 				   (__le32 *)(key_x + meta_data_region),
5423 				   (__le32 *)(key_y + meta_data_region),
5424 				   rule);
5425 
5426 	ret = hclge_fd_tcam_config(hdev, stage, false, rule->location, key_y,
5427 				   true);
5428 	if (ret) {
5429 		dev_err(&hdev->pdev->dev,
5430 			"fd key_y config fail, loc=%u, ret=%d\n",
5431 			rule->queue_id, ret);
5432 		return ret;
5433 	}
5434 
5435 	ret = hclge_fd_tcam_config(hdev, stage, true, rule->location, key_x,
5436 				   true);
5437 	if (ret)
5438 		dev_err(&hdev->pdev->dev,
5439 			"fd key_x config fail, loc=%u, ret=%d\n",
5440 			rule->queue_id, ret);
5441 	return ret;
5442 }
5443 
5444 static int hclge_config_action(struct hclge_dev *hdev, u8 stage,
5445 			       struct hclge_fd_rule *rule)
5446 {
5447 	struct hclge_vport *vport = hdev->vport;
5448 	struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
5449 	struct hclge_fd_ad_data ad_data;
5450 
5451 	memset(&ad_data, 0, sizeof(struct hclge_fd_ad_data));
5452 	ad_data.ad_id = rule->location;
5453 
5454 	if (rule->action == HCLGE_FD_ACTION_DROP_PACKET) {
5455 		ad_data.drop_packet = true;
5456 	} else if (rule->action == HCLGE_FD_ACTION_SELECT_TC) {
5457 		ad_data.override_tc = true;
5458 		ad_data.queue_id =
5459 			kinfo->tc_info.tqp_offset[rule->cls_flower.tc];
5460 		ad_data.tc_size =
5461 			ilog2(kinfo->tc_info.tqp_count[rule->cls_flower.tc]);
5462 	} else {
5463 		ad_data.forward_to_direct_queue = true;
5464 		ad_data.queue_id = rule->queue_id;
5465 	}
5466 
5467 	ad_data.use_counter = false;
5468 	ad_data.counter_id = 0;
5469 
5470 	ad_data.use_next_stage = false;
5471 	ad_data.next_input_key = 0;
5472 
5473 	ad_data.write_rule_id_to_bd = true;
5474 	ad_data.rule_id = rule->location;
5475 
5476 	return hclge_fd_ad_config(hdev, stage, ad_data.ad_id, &ad_data);
5477 }
5478 
5479 static int hclge_fd_check_tcpip4_tuple(struct ethtool_tcpip4_spec *spec,
5480 				       u32 *unused_tuple)
5481 {
5482 	if (!spec || !unused_tuple)
5483 		return -EINVAL;
5484 
5485 	*unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC);
5486 
5487 	if (!spec->ip4src)
5488 		*unused_tuple |= BIT(INNER_SRC_IP);
5489 
5490 	if (!spec->ip4dst)
5491 		*unused_tuple |= BIT(INNER_DST_IP);
5492 
5493 	if (!spec->psrc)
5494 		*unused_tuple |= BIT(INNER_SRC_PORT);
5495 
5496 	if (!spec->pdst)
5497 		*unused_tuple |= BIT(INNER_DST_PORT);
5498 
5499 	if (!spec->tos)
5500 		*unused_tuple |= BIT(INNER_IP_TOS);
5501 
5502 	return 0;
5503 }
5504 
5505 static int hclge_fd_check_ip4_tuple(struct ethtool_usrip4_spec *spec,
5506 				    u32 *unused_tuple)
5507 {
5508 	if (!spec || !unused_tuple)
5509 		return -EINVAL;
5510 
5511 	*unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC) |
5512 		BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT);
5513 
5514 	if (!spec->ip4src)
5515 		*unused_tuple |= BIT(INNER_SRC_IP);
5516 
5517 	if (!spec->ip4dst)
5518 		*unused_tuple |= BIT(INNER_DST_IP);
5519 
5520 	if (!spec->tos)
5521 		*unused_tuple |= BIT(INNER_IP_TOS);
5522 
5523 	if (!spec->proto)
5524 		*unused_tuple |= BIT(INNER_IP_PROTO);
5525 
5526 	if (spec->l4_4_bytes)
5527 		return -EOPNOTSUPP;
5528 
5529 	if (spec->ip_ver != ETH_RX_NFC_IP4)
5530 		return -EOPNOTSUPP;
5531 
5532 	return 0;
5533 }
5534 
5535 static int hclge_fd_check_tcpip6_tuple(struct ethtool_tcpip6_spec *spec,
5536 				       u32 *unused_tuple)
5537 {
5538 	if (!spec || !unused_tuple)
5539 		return -EINVAL;
5540 
5541 	*unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC) |
5542 		BIT(INNER_IP_TOS);
5543 
5544 	/* check whether src/dst ip address used */
5545 	if (ipv6_addr_any((struct in6_addr *)spec->ip6src))
5546 		*unused_tuple |= BIT(INNER_SRC_IP);
5547 
5548 	if (ipv6_addr_any((struct in6_addr *)spec->ip6dst))
5549 		*unused_tuple |= BIT(INNER_DST_IP);
5550 
5551 	if (!spec->psrc)
5552 		*unused_tuple |= BIT(INNER_SRC_PORT);
5553 
5554 	if (!spec->pdst)
5555 		*unused_tuple |= BIT(INNER_DST_PORT);
5556 
5557 	if (spec->tclass)
5558 		return -EOPNOTSUPP;
5559 
5560 	return 0;
5561 }
5562 
5563 static int hclge_fd_check_ip6_tuple(struct ethtool_usrip6_spec *spec,
5564 				    u32 *unused_tuple)
5565 {
5566 	if (!spec || !unused_tuple)
5567 		return -EINVAL;
5568 
5569 	*unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC) |
5570 		BIT(INNER_IP_TOS) | BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT);
5571 
5572 	/* check whether src/dst ip address used */
5573 	if (ipv6_addr_any((struct in6_addr *)spec->ip6src))
5574 		*unused_tuple |= BIT(INNER_SRC_IP);
5575 
5576 	if (ipv6_addr_any((struct in6_addr *)spec->ip6dst))
5577 		*unused_tuple |= BIT(INNER_DST_IP);
5578 
5579 	if (!spec->l4_proto)
5580 		*unused_tuple |= BIT(INNER_IP_PROTO);
5581 
5582 	if (spec->tclass)
5583 		return -EOPNOTSUPP;
5584 
5585 	if (spec->l4_4_bytes)
5586 		return -EOPNOTSUPP;
5587 
5588 	return 0;
5589 }
5590 
5591 static int hclge_fd_check_ether_tuple(struct ethhdr *spec, u32 *unused_tuple)
5592 {
5593 	if (!spec || !unused_tuple)
5594 		return -EINVAL;
5595 
5596 	*unused_tuple |= BIT(INNER_SRC_IP) | BIT(INNER_DST_IP) |
5597 		BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT) |
5598 		BIT(INNER_IP_TOS) | BIT(INNER_IP_PROTO);
5599 
5600 	if (is_zero_ether_addr(spec->h_source))
5601 		*unused_tuple |= BIT(INNER_SRC_MAC);
5602 
5603 	if (is_zero_ether_addr(spec->h_dest))
5604 		*unused_tuple |= BIT(INNER_DST_MAC);
5605 
5606 	if (!spec->h_proto)
5607 		*unused_tuple |= BIT(INNER_ETH_TYPE);
5608 
5609 	return 0;
5610 }
5611 
5612 static int hclge_fd_check_ext_tuple(struct hclge_dev *hdev,
5613 				    struct ethtool_rx_flow_spec *fs,
5614 				    u32 *unused_tuple)
5615 {
5616 	if (fs->flow_type & FLOW_EXT) {
5617 		if (fs->h_ext.vlan_etype) {
5618 			dev_err(&hdev->pdev->dev, "vlan-etype is not supported!\n");
5619 			return -EOPNOTSUPP;
5620 		}
5621 
5622 		if (!fs->h_ext.vlan_tci)
5623 			*unused_tuple |= BIT(INNER_VLAN_TAG_FST);
5624 
5625 		if (fs->m_ext.vlan_tci &&
5626 		    be16_to_cpu(fs->h_ext.vlan_tci) >= VLAN_N_VID) {
5627 			dev_err(&hdev->pdev->dev,
5628 				"failed to config vlan_tci, invalid vlan_tci: %u, max is %d.\n",
5629 				ntohs(fs->h_ext.vlan_tci), VLAN_N_VID - 1);
5630 			return -EINVAL;
5631 		}
5632 	} else {
5633 		*unused_tuple |= BIT(INNER_VLAN_TAG_FST);
5634 	}
5635 
5636 	if (fs->flow_type & FLOW_MAC_EXT) {
5637 		if (hdev->fd_cfg.fd_mode !=
5638 		    HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1) {
5639 			dev_err(&hdev->pdev->dev,
5640 				"FLOW_MAC_EXT is not supported in current fd mode!\n");
5641 			return -EOPNOTSUPP;
5642 		}
5643 
5644 		if (is_zero_ether_addr(fs->h_ext.h_dest))
5645 			*unused_tuple |= BIT(INNER_DST_MAC);
5646 		else
5647 			*unused_tuple &= ~BIT(INNER_DST_MAC);
5648 	}
5649 
5650 	return 0;
5651 }
5652 
5653 static int hclge_fd_check_spec(struct hclge_dev *hdev,
5654 			       struct ethtool_rx_flow_spec *fs,
5655 			       u32 *unused_tuple)
5656 {
5657 	u32 flow_type;
5658 	int ret;
5659 
5660 	if (fs->location >= hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) {
5661 		dev_err(&hdev->pdev->dev,
5662 			"failed to config fd rules, invalid rule location: %u, max is %u\n.",
5663 			fs->location,
5664 			hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1] - 1);
5665 		return -EINVAL;
5666 	}
5667 
5668 	if ((fs->flow_type & FLOW_EXT) &&
5669 	    (fs->h_ext.data[0] != 0 || fs->h_ext.data[1] != 0)) {
5670 		dev_err(&hdev->pdev->dev, "user-def bytes are not supported\n");
5671 		return -EOPNOTSUPP;
5672 	}
5673 
5674 	flow_type = fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT);
5675 	switch (flow_type) {
5676 	case SCTP_V4_FLOW:
5677 	case TCP_V4_FLOW:
5678 	case UDP_V4_FLOW:
5679 		ret = hclge_fd_check_tcpip4_tuple(&fs->h_u.tcp_ip4_spec,
5680 						  unused_tuple);
5681 		break;
5682 	case IP_USER_FLOW:
5683 		ret = hclge_fd_check_ip4_tuple(&fs->h_u.usr_ip4_spec,
5684 					       unused_tuple);
5685 		break;
5686 	case SCTP_V6_FLOW:
5687 	case TCP_V6_FLOW:
5688 	case UDP_V6_FLOW:
5689 		ret = hclge_fd_check_tcpip6_tuple(&fs->h_u.tcp_ip6_spec,
5690 						  unused_tuple);
5691 		break;
5692 	case IPV6_USER_FLOW:
5693 		ret = hclge_fd_check_ip6_tuple(&fs->h_u.usr_ip6_spec,
5694 					       unused_tuple);
5695 		break;
5696 	case ETHER_FLOW:
5697 		if (hdev->fd_cfg.fd_mode !=
5698 			HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1) {
5699 			dev_err(&hdev->pdev->dev,
5700 				"ETHER_FLOW is not supported in current fd mode!\n");
5701 			return -EOPNOTSUPP;
5702 		}
5703 
5704 		ret = hclge_fd_check_ether_tuple(&fs->h_u.ether_spec,
5705 						 unused_tuple);
5706 		break;
5707 	default:
5708 		dev_err(&hdev->pdev->dev,
5709 			"unsupported protocol type, protocol type = %#x\n",
5710 			flow_type);
5711 		return -EOPNOTSUPP;
5712 	}
5713 
5714 	if (ret) {
5715 		dev_err(&hdev->pdev->dev,
5716 			"failed to check flow union tuple, ret = %d\n",
5717 			ret);
5718 		return ret;
5719 	}
5720 
5721 	return hclge_fd_check_ext_tuple(hdev, fs, unused_tuple);
5722 }
5723 
5724 static bool hclge_fd_rule_exist(struct hclge_dev *hdev, u16 location)
5725 {
5726 	struct hclge_fd_rule *rule = NULL;
5727 	struct hlist_node *node2;
5728 
5729 	spin_lock_bh(&hdev->fd_rule_lock);
5730 	hlist_for_each_entry_safe(rule, node2, &hdev->fd_rule_list, rule_node) {
5731 		if (rule->location >= location)
5732 			break;
5733 	}
5734 
5735 	spin_unlock_bh(&hdev->fd_rule_lock);
5736 
5737 	return  rule && rule->location == location;
5738 }
5739 
5740 /* make sure being called after lock up with fd_rule_lock */
5741 static int hclge_fd_update_rule_list(struct hclge_dev *hdev,
5742 				     struct hclge_fd_rule *new_rule,
5743 				     u16 location,
5744 				     bool is_add)
5745 {
5746 	struct hclge_fd_rule *rule = NULL, *parent = NULL;
5747 	struct hlist_node *node2;
5748 
5749 	if (is_add && !new_rule)
5750 		return -EINVAL;
5751 
5752 	hlist_for_each_entry_safe(rule, node2,
5753 				  &hdev->fd_rule_list, rule_node) {
5754 		if (rule->location >= location)
5755 			break;
5756 		parent = rule;
5757 	}
5758 
5759 	if (rule && rule->location == location) {
5760 		hlist_del(&rule->rule_node);
5761 		kfree(rule);
5762 		hdev->hclge_fd_rule_num--;
5763 
5764 		if (!is_add) {
5765 			if (!hdev->hclge_fd_rule_num)
5766 				hdev->fd_active_type = HCLGE_FD_RULE_NONE;
5767 			clear_bit(location, hdev->fd_bmap);
5768 
5769 			return 0;
5770 		}
5771 	} else if (!is_add) {
5772 		dev_err(&hdev->pdev->dev,
5773 			"delete fail, rule %u is inexistent\n",
5774 			location);
5775 		return -EINVAL;
5776 	}
5777 
5778 	INIT_HLIST_NODE(&new_rule->rule_node);
5779 
5780 	if (parent)
5781 		hlist_add_behind(&new_rule->rule_node, &parent->rule_node);
5782 	else
5783 		hlist_add_head(&new_rule->rule_node, &hdev->fd_rule_list);
5784 
5785 	set_bit(location, hdev->fd_bmap);
5786 	hdev->hclge_fd_rule_num++;
5787 	hdev->fd_active_type = new_rule->rule_type;
5788 
5789 	return 0;
5790 }
5791 
5792 static int hclge_fd_get_tuple(struct hclge_dev *hdev,
5793 			      struct ethtool_rx_flow_spec *fs,
5794 			      struct hclge_fd_rule *rule)
5795 {
5796 	u32 flow_type = fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT);
5797 
5798 	switch (flow_type) {
5799 	case SCTP_V4_FLOW:
5800 	case TCP_V4_FLOW:
5801 	case UDP_V4_FLOW:
5802 		rule->tuples.src_ip[IPV4_INDEX] =
5803 				be32_to_cpu(fs->h_u.tcp_ip4_spec.ip4src);
5804 		rule->tuples_mask.src_ip[IPV4_INDEX] =
5805 				be32_to_cpu(fs->m_u.tcp_ip4_spec.ip4src);
5806 
5807 		rule->tuples.dst_ip[IPV4_INDEX] =
5808 				be32_to_cpu(fs->h_u.tcp_ip4_spec.ip4dst);
5809 		rule->tuples_mask.dst_ip[IPV4_INDEX] =
5810 				be32_to_cpu(fs->m_u.tcp_ip4_spec.ip4dst);
5811 
5812 		rule->tuples.src_port = be16_to_cpu(fs->h_u.tcp_ip4_spec.psrc);
5813 		rule->tuples_mask.src_port =
5814 				be16_to_cpu(fs->m_u.tcp_ip4_spec.psrc);
5815 
5816 		rule->tuples.dst_port = be16_to_cpu(fs->h_u.tcp_ip4_spec.pdst);
5817 		rule->tuples_mask.dst_port =
5818 				be16_to_cpu(fs->m_u.tcp_ip4_spec.pdst);
5819 
5820 		rule->tuples.ip_tos = fs->h_u.tcp_ip4_spec.tos;
5821 		rule->tuples_mask.ip_tos = fs->m_u.tcp_ip4_spec.tos;
5822 
5823 		rule->tuples.ether_proto = ETH_P_IP;
5824 		rule->tuples_mask.ether_proto = 0xFFFF;
5825 
5826 		break;
5827 	case IP_USER_FLOW:
5828 		rule->tuples.src_ip[IPV4_INDEX] =
5829 				be32_to_cpu(fs->h_u.usr_ip4_spec.ip4src);
5830 		rule->tuples_mask.src_ip[IPV4_INDEX] =
5831 				be32_to_cpu(fs->m_u.usr_ip4_spec.ip4src);
5832 
5833 		rule->tuples.dst_ip[IPV4_INDEX] =
5834 				be32_to_cpu(fs->h_u.usr_ip4_spec.ip4dst);
5835 		rule->tuples_mask.dst_ip[IPV4_INDEX] =
5836 				be32_to_cpu(fs->m_u.usr_ip4_spec.ip4dst);
5837 
5838 		rule->tuples.ip_tos = fs->h_u.usr_ip4_spec.tos;
5839 		rule->tuples_mask.ip_tos = fs->m_u.usr_ip4_spec.tos;
5840 
5841 		rule->tuples.ip_proto = fs->h_u.usr_ip4_spec.proto;
5842 		rule->tuples_mask.ip_proto = fs->m_u.usr_ip4_spec.proto;
5843 
5844 		rule->tuples.ether_proto = ETH_P_IP;
5845 		rule->tuples_mask.ether_proto = 0xFFFF;
5846 
5847 		break;
5848 	case SCTP_V6_FLOW:
5849 	case TCP_V6_FLOW:
5850 	case UDP_V6_FLOW:
5851 		be32_to_cpu_array(rule->tuples.src_ip,
5852 				  fs->h_u.tcp_ip6_spec.ip6src, IPV6_SIZE);
5853 		be32_to_cpu_array(rule->tuples_mask.src_ip,
5854 				  fs->m_u.tcp_ip6_spec.ip6src, IPV6_SIZE);
5855 
5856 		be32_to_cpu_array(rule->tuples.dst_ip,
5857 				  fs->h_u.tcp_ip6_spec.ip6dst, IPV6_SIZE);
5858 		be32_to_cpu_array(rule->tuples_mask.dst_ip,
5859 				  fs->m_u.tcp_ip6_spec.ip6dst, IPV6_SIZE);
5860 
5861 		rule->tuples.src_port = be16_to_cpu(fs->h_u.tcp_ip6_spec.psrc);
5862 		rule->tuples_mask.src_port =
5863 				be16_to_cpu(fs->m_u.tcp_ip6_spec.psrc);
5864 
5865 		rule->tuples.dst_port = be16_to_cpu(fs->h_u.tcp_ip6_spec.pdst);
5866 		rule->tuples_mask.dst_port =
5867 				be16_to_cpu(fs->m_u.tcp_ip6_spec.pdst);
5868 
5869 		rule->tuples.ether_proto = ETH_P_IPV6;
5870 		rule->tuples_mask.ether_proto = 0xFFFF;
5871 
5872 		break;
5873 	case IPV6_USER_FLOW:
5874 		be32_to_cpu_array(rule->tuples.src_ip,
5875 				  fs->h_u.usr_ip6_spec.ip6src, IPV6_SIZE);
5876 		be32_to_cpu_array(rule->tuples_mask.src_ip,
5877 				  fs->m_u.usr_ip6_spec.ip6src, IPV6_SIZE);
5878 
5879 		be32_to_cpu_array(rule->tuples.dst_ip,
5880 				  fs->h_u.usr_ip6_spec.ip6dst, IPV6_SIZE);
5881 		be32_to_cpu_array(rule->tuples_mask.dst_ip,
5882 				  fs->m_u.usr_ip6_spec.ip6dst, IPV6_SIZE);
5883 
5884 		rule->tuples.ip_proto = fs->h_u.usr_ip6_spec.l4_proto;
5885 		rule->tuples_mask.ip_proto = fs->m_u.usr_ip6_spec.l4_proto;
5886 
5887 		rule->tuples.ether_proto = ETH_P_IPV6;
5888 		rule->tuples_mask.ether_proto = 0xFFFF;
5889 
5890 		break;
5891 	case ETHER_FLOW:
5892 		ether_addr_copy(rule->tuples.src_mac,
5893 				fs->h_u.ether_spec.h_source);
5894 		ether_addr_copy(rule->tuples_mask.src_mac,
5895 				fs->m_u.ether_spec.h_source);
5896 
5897 		ether_addr_copy(rule->tuples.dst_mac,
5898 				fs->h_u.ether_spec.h_dest);
5899 		ether_addr_copy(rule->tuples_mask.dst_mac,
5900 				fs->m_u.ether_spec.h_dest);
5901 
5902 		rule->tuples.ether_proto =
5903 				be16_to_cpu(fs->h_u.ether_spec.h_proto);
5904 		rule->tuples_mask.ether_proto =
5905 				be16_to_cpu(fs->m_u.ether_spec.h_proto);
5906 
5907 		break;
5908 	default:
5909 		return -EOPNOTSUPP;
5910 	}
5911 
5912 	switch (flow_type) {
5913 	case SCTP_V4_FLOW:
5914 	case SCTP_V6_FLOW:
5915 		rule->tuples.ip_proto = IPPROTO_SCTP;
5916 		rule->tuples_mask.ip_proto = 0xFF;
5917 		break;
5918 	case TCP_V4_FLOW:
5919 	case TCP_V6_FLOW:
5920 		rule->tuples.ip_proto = IPPROTO_TCP;
5921 		rule->tuples_mask.ip_proto = 0xFF;
5922 		break;
5923 	case UDP_V4_FLOW:
5924 	case UDP_V6_FLOW:
5925 		rule->tuples.ip_proto = IPPROTO_UDP;
5926 		rule->tuples_mask.ip_proto = 0xFF;
5927 		break;
5928 	default:
5929 		break;
5930 	}
5931 
5932 	if (fs->flow_type & FLOW_EXT) {
5933 		rule->tuples.vlan_tag1 = be16_to_cpu(fs->h_ext.vlan_tci);
5934 		rule->tuples_mask.vlan_tag1 = be16_to_cpu(fs->m_ext.vlan_tci);
5935 	}
5936 
5937 	if (fs->flow_type & FLOW_MAC_EXT) {
5938 		ether_addr_copy(rule->tuples.dst_mac, fs->h_ext.h_dest);
5939 		ether_addr_copy(rule->tuples_mask.dst_mac, fs->m_ext.h_dest);
5940 	}
5941 
5942 	return 0;
5943 }
5944 
5945 /* make sure being called after lock up with fd_rule_lock */
5946 static int hclge_fd_config_rule(struct hclge_dev *hdev,
5947 				struct hclge_fd_rule *rule)
5948 {
5949 	int ret;
5950 
5951 	if (!rule) {
5952 		dev_err(&hdev->pdev->dev,
5953 			"The flow director rule is NULL\n");
5954 		return -EINVAL;
5955 	}
5956 
5957 	/* it will never fail here, so needn't to check return value */
5958 	hclge_fd_update_rule_list(hdev, rule, rule->location, true);
5959 
5960 	ret = hclge_config_action(hdev, HCLGE_FD_STAGE_1, rule);
5961 	if (ret)
5962 		goto clear_rule;
5963 
5964 	ret = hclge_config_key(hdev, HCLGE_FD_STAGE_1, rule);
5965 	if (ret)
5966 		goto clear_rule;
5967 
5968 	return 0;
5969 
5970 clear_rule:
5971 	hclge_fd_update_rule_list(hdev, rule, rule->location, false);
5972 	return ret;
5973 }
5974 
5975 static bool hclge_is_cls_flower_active(struct hnae3_handle *handle)
5976 {
5977 	struct hclge_vport *vport = hclge_get_vport(handle);
5978 	struct hclge_dev *hdev = vport->back;
5979 
5980 	return hdev->fd_active_type == HCLGE_FD_TC_FLOWER_ACTIVE;
5981 }
5982 
5983 static int hclge_add_fd_entry(struct hnae3_handle *handle,
5984 			      struct ethtool_rxnfc *cmd)
5985 {
5986 	struct hclge_vport *vport = hclge_get_vport(handle);
5987 	struct hclge_dev *hdev = vport->back;
5988 	u16 dst_vport_id = 0, q_index = 0;
5989 	struct ethtool_rx_flow_spec *fs;
5990 	struct hclge_fd_rule *rule;
5991 	u32 unused = 0;
5992 	u8 action;
5993 	int ret;
5994 
5995 	if (!hnae3_dev_fd_supported(hdev)) {
5996 		dev_err(&hdev->pdev->dev,
5997 			"flow table director is not supported\n");
5998 		return -EOPNOTSUPP;
5999 	}
6000 
6001 	if (!hdev->fd_en) {
6002 		dev_err(&hdev->pdev->dev,
6003 			"please enable flow director first\n");
6004 		return -EOPNOTSUPP;
6005 	}
6006 
6007 	if (hclge_is_cls_flower_active(handle)) {
6008 		dev_err(&hdev->pdev->dev,
6009 			"please delete all exist cls flower rules first\n");
6010 		return -EINVAL;
6011 	}
6012 
6013 	fs = (struct ethtool_rx_flow_spec *)&cmd->fs;
6014 
6015 	ret = hclge_fd_check_spec(hdev, fs, &unused);
6016 	if (ret)
6017 		return ret;
6018 
6019 	if (fs->ring_cookie == RX_CLS_FLOW_DISC) {
6020 		action = HCLGE_FD_ACTION_DROP_PACKET;
6021 	} else {
6022 		u32 ring = ethtool_get_flow_spec_ring(fs->ring_cookie);
6023 		u8 vf = ethtool_get_flow_spec_ring_vf(fs->ring_cookie);
6024 		u16 tqps;
6025 
6026 		if (vf > hdev->num_req_vfs) {
6027 			dev_err(&hdev->pdev->dev,
6028 				"Error: vf id (%u) > max vf num (%u)\n",
6029 				vf, hdev->num_req_vfs);
6030 			return -EINVAL;
6031 		}
6032 
6033 		dst_vport_id = vf ? hdev->vport[vf].vport_id : vport->vport_id;
6034 		tqps = vf ? hdev->vport[vf].alloc_tqps : vport->alloc_tqps;
6035 
6036 		if (ring >= tqps) {
6037 			dev_err(&hdev->pdev->dev,
6038 				"Error: queue id (%u) > max tqp num (%u)\n",
6039 				ring, tqps - 1);
6040 			return -EINVAL;
6041 		}
6042 
6043 		action = HCLGE_FD_ACTION_SELECT_QUEUE;
6044 		q_index = ring;
6045 	}
6046 
6047 	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
6048 	if (!rule)
6049 		return -ENOMEM;
6050 
6051 	ret = hclge_fd_get_tuple(hdev, fs, rule);
6052 	if (ret) {
6053 		kfree(rule);
6054 		return ret;
6055 	}
6056 
6057 	rule->flow_type = fs->flow_type;
6058 	rule->location = fs->location;
6059 	rule->unused_tuple = unused;
6060 	rule->vf_id = dst_vport_id;
6061 	rule->queue_id = q_index;
6062 	rule->action = action;
6063 	rule->rule_type = HCLGE_FD_EP_ACTIVE;
6064 
6065 	/* to avoid rule conflict, when user configure rule by ethtool,
6066 	 * we need to clear all arfs rules
6067 	 */
6068 	spin_lock_bh(&hdev->fd_rule_lock);
6069 	hclge_clear_arfs_rules(handle);
6070 
6071 	ret = hclge_fd_config_rule(hdev, rule);
6072 
6073 	spin_unlock_bh(&hdev->fd_rule_lock);
6074 
6075 	return ret;
6076 }
6077 
6078 static int hclge_del_fd_entry(struct hnae3_handle *handle,
6079 			      struct ethtool_rxnfc *cmd)
6080 {
6081 	struct hclge_vport *vport = hclge_get_vport(handle);
6082 	struct hclge_dev *hdev = vport->back;
6083 	struct ethtool_rx_flow_spec *fs;
6084 	int ret;
6085 
6086 	if (!hnae3_dev_fd_supported(hdev))
6087 		return -EOPNOTSUPP;
6088 
6089 	fs = (struct ethtool_rx_flow_spec *)&cmd->fs;
6090 
6091 	if (fs->location >= hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1])
6092 		return -EINVAL;
6093 
6094 	if (hclge_is_cls_flower_active(handle) || !hdev->hclge_fd_rule_num ||
6095 	    !hclge_fd_rule_exist(hdev, fs->location)) {
6096 		dev_err(&hdev->pdev->dev,
6097 			"Delete fail, rule %u is inexistent\n", fs->location);
6098 		return -ENOENT;
6099 	}
6100 
6101 	ret = hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, fs->location,
6102 				   NULL, false);
6103 	if (ret)
6104 		return ret;
6105 
6106 	spin_lock_bh(&hdev->fd_rule_lock);
6107 	ret = hclge_fd_update_rule_list(hdev, NULL, fs->location, false);
6108 
6109 	spin_unlock_bh(&hdev->fd_rule_lock);
6110 
6111 	return ret;
6112 }
6113 
6114 /* make sure being called after lock up with fd_rule_lock */
6115 static void hclge_del_all_fd_entries(struct hnae3_handle *handle,
6116 				     bool clear_list)
6117 {
6118 	struct hclge_vport *vport = hclge_get_vport(handle);
6119 	struct hclge_dev *hdev = vport->back;
6120 	struct hclge_fd_rule *rule;
6121 	struct hlist_node *node;
6122 	u16 location;
6123 
6124 	if (!hnae3_dev_fd_supported(hdev))
6125 		return;
6126 
6127 	for_each_set_bit(location, hdev->fd_bmap,
6128 			 hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1])
6129 		hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, location,
6130 				     NULL, false);
6131 
6132 	if (clear_list) {
6133 		hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list,
6134 					  rule_node) {
6135 			hlist_del(&rule->rule_node);
6136 			kfree(rule);
6137 		}
6138 		hdev->fd_active_type = HCLGE_FD_RULE_NONE;
6139 		hdev->hclge_fd_rule_num = 0;
6140 		bitmap_zero(hdev->fd_bmap,
6141 			    hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]);
6142 	}
6143 }
6144 
6145 static int hclge_restore_fd_entries(struct hnae3_handle *handle)
6146 {
6147 	struct hclge_vport *vport = hclge_get_vport(handle);
6148 	struct hclge_dev *hdev = vport->back;
6149 	struct hclge_fd_rule *rule;
6150 	struct hlist_node *node;
6151 	int ret;
6152 
6153 	/* Return ok here, because reset error handling will check this
6154 	 * return value. If error is returned here, the reset process will
6155 	 * fail.
6156 	 */
6157 	if (!hnae3_dev_fd_supported(hdev))
6158 		return 0;
6159 
6160 	/* if fd is disabled, should not restore it when reset */
6161 	if (!hdev->fd_en)
6162 		return 0;
6163 
6164 	spin_lock_bh(&hdev->fd_rule_lock);
6165 	hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) {
6166 		ret = hclge_config_action(hdev, HCLGE_FD_STAGE_1, rule);
6167 		if (!ret)
6168 			ret = hclge_config_key(hdev, HCLGE_FD_STAGE_1, rule);
6169 
6170 		if (ret) {
6171 			dev_warn(&hdev->pdev->dev,
6172 				 "Restore rule %u failed, remove it\n",
6173 				 rule->location);
6174 			clear_bit(rule->location, hdev->fd_bmap);
6175 			hlist_del(&rule->rule_node);
6176 			kfree(rule);
6177 			hdev->hclge_fd_rule_num--;
6178 		}
6179 	}
6180 
6181 	if (hdev->hclge_fd_rule_num)
6182 		hdev->fd_active_type = HCLGE_FD_EP_ACTIVE;
6183 
6184 	spin_unlock_bh(&hdev->fd_rule_lock);
6185 
6186 	return 0;
6187 }
6188 
6189 static int hclge_get_fd_rule_cnt(struct hnae3_handle *handle,
6190 				 struct ethtool_rxnfc *cmd)
6191 {
6192 	struct hclge_vport *vport = hclge_get_vport(handle);
6193 	struct hclge_dev *hdev = vport->back;
6194 
6195 	if (!hnae3_dev_fd_supported(hdev) || hclge_is_cls_flower_active(handle))
6196 		return -EOPNOTSUPP;
6197 
6198 	cmd->rule_cnt = hdev->hclge_fd_rule_num;
6199 	cmd->data = hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1];
6200 
6201 	return 0;
6202 }
6203 
6204 static void hclge_fd_get_tcpip4_info(struct hclge_fd_rule *rule,
6205 				     struct ethtool_tcpip4_spec *spec,
6206 				     struct ethtool_tcpip4_spec *spec_mask)
6207 {
6208 	spec->ip4src = cpu_to_be32(rule->tuples.src_ip[IPV4_INDEX]);
6209 	spec_mask->ip4src = rule->unused_tuple & BIT(INNER_SRC_IP) ?
6210 			0 : cpu_to_be32(rule->tuples_mask.src_ip[IPV4_INDEX]);
6211 
6212 	spec->ip4dst = cpu_to_be32(rule->tuples.dst_ip[IPV4_INDEX]);
6213 	spec_mask->ip4dst = rule->unused_tuple & BIT(INNER_DST_IP) ?
6214 			0 : cpu_to_be32(rule->tuples_mask.dst_ip[IPV4_INDEX]);
6215 
6216 	spec->psrc = cpu_to_be16(rule->tuples.src_port);
6217 	spec_mask->psrc = rule->unused_tuple & BIT(INNER_SRC_PORT) ?
6218 			0 : cpu_to_be16(rule->tuples_mask.src_port);
6219 
6220 	spec->pdst = cpu_to_be16(rule->tuples.dst_port);
6221 	spec_mask->pdst = rule->unused_tuple & BIT(INNER_DST_PORT) ?
6222 			0 : cpu_to_be16(rule->tuples_mask.dst_port);
6223 
6224 	spec->tos = rule->tuples.ip_tos;
6225 	spec_mask->tos = rule->unused_tuple & BIT(INNER_IP_TOS) ?
6226 			0 : rule->tuples_mask.ip_tos;
6227 }
6228 
6229 static void hclge_fd_get_ip4_info(struct hclge_fd_rule *rule,
6230 				  struct ethtool_usrip4_spec *spec,
6231 				  struct ethtool_usrip4_spec *spec_mask)
6232 {
6233 	spec->ip4src = cpu_to_be32(rule->tuples.src_ip[IPV4_INDEX]);
6234 	spec_mask->ip4src = rule->unused_tuple & BIT(INNER_SRC_IP) ?
6235 			0 : cpu_to_be32(rule->tuples_mask.src_ip[IPV4_INDEX]);
6236 
6237 	spec->ip4dst = cpu_to_be32(rule->tuples.dst_ip[IPV4_INDEX]);
6238 	spec_mask->ip4dst = rule->unused_tuple & BIT(INNER_DST_IP) ?
6239 			0 : cpu_to_be32(rule->tuples_mask.dst_ip[IPV4_INDEX]);
6240 
6241 	spec->tos = rule->tuples.ip_tos;
6242 	spec_mask->tos = rule->unused_tuple & BIT(INNER_IP_TOS) ?
6243 			0 : rule->tuples_mask.ip_tos;
6244 
6245 	spec->proto = rule->tuples.ip_proto;
6246 	spec_mask->proto = rule->unused_tuple & BIT(INNER_IP_PROTO) ?
6247 			0 : rule->tuples_mask.ip_proto;
6248 
6249 	spec->ip_ver = ETH_RX_NFC_IP4;
6250 }
6251 
6252 static void hclge_fd_get_tcpip6_info(struct hclge_fd_rule *rule,
6253 				     struct ethtool_tcpip6_spec *spec,
6254 				     struct ethtool_tcpip6_spec *spec_mask)
6255 {
6256 	cpu_to_be32_array(spec->ip6src,
6257 			  rule->tuples.src_ip, IPV6_SIZE);
6258 	cpu_to_be32_array(spec->ip6dst,
6259 			  rule->tuples.dst_ip, IPV6_SIZE);
6260 	if (rule->unused_tuple & BIT(INNER_SRC_IP))
6261 		memset(spec_mask->ip6src, 0, sizeof(spec_mask->ip6src));
6262 	else
6263 		cpu_to_be32_array(spec_mask->ip6src, rule->tuples_mask.src_ip,
6264 				  IPV6_SIZE);
6265 
6266 	if (rule->unused_tuple & BIT(INNER_DST_IP))
6267 		memset(spec_mask->ip6dst, 0, sizeof(spec_mask->ip6dst));
6268 	else
6269 		cpu_to_be32_array(spec_mask->ip6dst, rule->tuples_mask.dst_ip,
6270 				  IPV6_SIZE);
6271 
6272 	spec->psrc = cpu_to_be16(rule->tuples.src_port);
6273 	spec_mask->psrc = rule->unused_tuple & BIT(INNER_SRC_PORT) ?
6274 			0 : cpu_to_be16(rule->tuples_mask.src_port);
6275 
6276 	spec->pdst = cpu_to_be16(rule->tuples.dst_port);
6277 	spec_mask->pdst = rule->unused_tuple & BIT(INNER_DST_PORT) ?
6278 			0 : cpu_to_be16(rule->tuples_mask.dst_port);
6279 }
6280 
6281 static void hclge_fd_get_ip6_info(struct hclge_fd_rule *rule,
6282 				  struct ethtool_usrip6_spec *spec,
6283 				  struct ethtool_usrip6_spec *spec_mask)
6284 {
6285 	cpu_to_be32_array(spec->ip6src, rule->tuples.src_ip, IPV6_SIZE);
6286 	cpu_to_be32_array(spec->ip6dst, rule->tuples.dst_ip, IPV6_SIZE);
6287 	if (rule->unused_tuple & BIT(INNER_SRC_IP))
6288 		memset(spec_mask->ip6src, 0, sizeof(spec_mask->ip6src));
6289 	else
6290 		cpu_to_be32_array(spec_mask->ip6src,
6291 				  rule->tuples_mask.src_ip, IPV6_SIZE);
6292 
6293 	if (rule->unused_tuple & BIT(INNER_DST_IP))
6294 		memset(spec_mask->ip6dst, 0, sizeof(spec_mask->ip6dst));
6295 	else
6296 		cpu_to_be32_array(spec_mask->ip6dst,
6297 				  rule->tuples_mask.dst_ip, IPV6_SIZE);
6298 
6299 	spec->l4_proto = rule->tuples.ip_proto;
6300 	spec_mask->l4_proto = rule->unused_tuple & BIT(INNER_IP_PROTO) ?
6301 			0 : rule->tuples_mask.ip_proto;
6302 }
6303 
6304 static void hclge_fd_get_ether_info(struct hclge_fd_rule *rule,
6305 				    struct ethhdr *spec,
6306 				    struct ethhdr *spec_mask)
6307 {
6308 	ether_addr_copy(spec->h_source, rule->tuples.src_mac);
6309 	ether_addr_copy(spec->h_dest, rule->tuples.dst_mac);
6310 
6311 	if (rule->unused_tuple & BIT(INNER_SRC_MAC))
6312 		eth_zero_addr(spec_mask->h_source);
6313 	else
6314 		ether_addr_copy(spec_mask->h_source, rule->tuples_mask.src_mac);
6315 
6316 	if (rule->unused_tuple & BIT(INNER_DST_MAC))
6317 		eth_zero_addr(spec_mask->h_dest);
6318 	else
6319 		ether_addr_copy(spec_mask->h_dest, rule->tuples_mask.dst_mac);
6320 
6321 	spec->h_proto = cpu_to_be16(rule->tuples.ether_proto);
6322 	spec_mask->h_proto = rule->unused_tuple & BIT(INNER_ETH_TYPE) ?
6323 			0 : cpu_to_be16(rule->tuples_mask.ether_proto);
6324 }
6325 
6326 static void hclge_fd_get_ext_info(struct ethtool_rx_flow_spec *fs,
6327 				  struct hclge_fd_rule *rule)
6328 {
6329 	if (fs->flow_type & FLOW_EXT) {
6330 		fs->h_ext.vlan_tci = cpu_to_be16(rule->tuples.vlan_tag1);
6331 		fs->m_ext.vlan_tci =
6332 				rule->unused_tuple & BIT(INNER_VLAN_TAG_FST) ?
6333 				cpu_to_be16(VLAN_VID_MASK) :
6334 				cpu_to_be16(rule->tuples_mask.vlan_tag1);
6335 	}
6336 
6337 	if (fs->flow_type & FLOW_MAC_EXT) {
6338 		ether_addr_copy(fs->h_ext.h_dest, rule->tuples.dst_mac);
6339 		if (rule->unused_tuple & BIT(INNER_DST_MAC))
6340 			eth_zero_addr(fs->m_u.ether_spec.h_dest);
6341 		else
6342 			ether_addr_copy(fs->m_u.ether_spec.h_dest,
6343 					rule->tuples_mask.dst_mac);
6344 	}
6345 }
6346 
6347 static int hclge_get_fd_rule_info(struct hnae3_handle *handle,
6348 				  struct ethtool_rxnfc *cmd)
6349 {
6350 	struct hclge_vport *vport = hclge_get_vport(handle);
6351 	struct hclge_fd_rule *rule = NULL;
6352 	struct hclge_dev *hdev = vport->back;
6353 	struct ethtool_rx_flow_spec *fs;
6354 	struct hlist_node *node2;
6355 
6356 	if (!hnae3_dev_fd_supported(hdev))
6357 		return -EOPNOTSUPP;
6358 
6359 	fs = (struct ethtool_rx_flow_spec *)&cmd->fs;
6360 
6361 	spin_lock_bh(&hdev->fd_rule_lock);
6362 
6363 	hlist_for_each_entry_safe(rule, node2, &hdev->fd_rule_list, rule_node) {
6364 		if (rule->location >= fs->location)
6365 			break;
6366 	}
6367 
6368 	if (!rule || fs->location != rule->location) {
6369 		spin_unlock_bh(&hdev->fd_rule_lock);
6370 
6371 		return -ENOENT;
6372 	}
6373 
6374 	fs->flow_type = rule->flow_type;
6375 	switch (fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) {
6376 	case SCTP_V4_FLOW:
6377 	case TCP_V4_FLOW:
6378 	case UDP_V4_FLOW:
6379 		hclge_fd_get_tcpip4_info(rule, &fs->h_u.tcp_ip4_spec,
6380 					 &fs->m_u.tcp_ip4_spec);
6381 		break;
6382 	case IP_USER_FLOW:
6383 		hclge_fd_get_ip4_info(rule, &fs->h_u.usr_ip4_spec,
6384 				      &fs->m_u.usr_ip4_spec);
6385 		break;
6386 	case SCTP_V6_FLOW:
6387 	case TCP_V6_FLOW:
6388 	case UDP_V6_FLOW:
6389 		hclge_fd_get_tcpip6_info(rule, &fs->h_u.tcp_ip6_spec,
6390 					 &fs->m_u.tcp_ip6_spec);
6391 		break;
6392 	case IPV6_USER_FLOW:
6393 		hclge_fd_get_ip6_info(rule, &fs->h_u.usr_ip6_spec,
6394 				      &fs->m_u.usr_ip6_spec);
6395 		break;
6396 	/* The flow type of fd rule has been checked before adding in to rule
6397 	 * list. As other flow types have been handled, it must be ETHER_FLOW
6398 	 * for the default case
6399 	 */
6400 	default:
6401 		hclge_fd_get_ether_info(rule, &fs->h_u.ether_spec,
6402 					&fs->m_u.ether_spec);
6403 		break;
6404 	}
6405 
6406 	hclge_fd_get_ext_info(fs, rule);
6407 
6408 	if (rule->action == HCLGE_FD_ACTION_DROP_PACKET) {
6409 		fs->ring_cookie = RX_CLS_FLOW_DISC;
6410 	} else {
6411 		u64 vf_id;
6412 
6413 		fs->ring_cookie = rule->queue_id;
6414 		vf_id = rule->vf_id;
6415 		vf_id <<= ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF;
6416 		fs->ring_cookie |= vf_id;
6417 	}
6418 
6419 	spin_unlock_bh(&hdev->fd_rule_lock);
6420 
6421 	return 0;
6422 }
6423 
6424 static int hclge_get_all_rules(struct hnae3_handle *handle,
6425 			       struct ethtool_rxnfc *cmd, u32 *rule_locs)
6426 {
6427 	struct hclge_vport *vport = hclge_get_vport(handle);
6428 	struct hclge_dev *hdev = vport->back;
6429 	struct hclge_fd_rule *rule;
6430 	struct hlist_node *node2;
6431 	int cnt = 0;
6432 
6433 	if (!hnae3_dev_fd_supported(hdev))
6434 		return -EOPNOTSUPP;
6435 
6436 	cmd->data = hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1];
6437 
6438 	spin_lock_bh(&hdev->fd_rule_lock);
6439 	hlist_for_each_entry_safe(rule, node2,
6440 				  &hdev->fd_rule_list, rule_node) {
6441 		if (cnt == cmd->rule_cnt) {
6442 			spin_unlock_bh(&hdev->fd_rule_lock);
6443 			return -EMSGSIZE;
6444 		}
6445 
6446 		rule_locs[cnt] = rule->location;
6447 		cnt++;
6448 	}
6449 
6450 	spin_unlock_bh(&hdev->fd_rule_lock);
6451 
6452 	cmd->rule_cnt = cnt;
6453 
6454 	return 0;
6455 }
6456 
6457 static void hclge_fd_get_flow_tuples(const struct flow_keys *fkeys,
6458 				     struct hclge_fd_rule_tuples *tuples)
6459 {
6460 #define flow_ip6_src fkeys->addrs.v6addrs.src.in6_u.u6_addr32
6461 #define flow_ip6_dst fkeys->addrs.v6addrs.dst.in6_u.u6_addr32
6462 
6463 	tuples->ether_proto = be16_to_cpu(fkeys->basic.n_proto);
6464 	tuples->ip_proto = fkeys->basic.ip_proto;
6465 	tuples->dst_port = be16_to_cpu(fkeys->ports.dst);
6466 
6467 	if (fkeys->basic.n_proto == htons(ETH_P_IP)) {
6468 		tuples->src_ip[3] = be32_to_cpu(fkeys->addrs.v4addrs.src);
6469 		tuples->dst_ip[3] = be32_to_cpu(fkeys->addrs.v4addrs.dst);
6470 	} else {
6471 		int i;
6472 
6473 		for (i = 0; i < IPV6_SIZE; i++) {
6474 			tuples->src_ip[i] = be32_to_cpu(flow_ip6_src[i]);
6475 			tuples->dst_ip[i] = be32_to_cpu(flow_ip6_dst[i]);
6476 		}
6477 	}
6478 }
6479 
6480 /* traverse all rules, check whether an existed rule has the same tuples */
6481 static struct hclge_fd_rule *
6482 hclge_fd_search_flow_keys(struct hclge_dev *hdev,
6483 			  const struct hclge_fd_rule_tuples *tuples)
6484 {
6485 	struct hclge_fd_rule *rule = NULL;
6486 	struct hlist_node *node;
6487 
6488 	hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) {
6489 		if (!memcmp(tuples, &rule->tuples, sizeof(*tuples)))
6490 			return rule;
6491 	}
6492 
6493 	return NULL;
6494 }
6495 
6496 static void hclge_fd_build_arfs_rule(const struct hclge_fd_rule_tuples *tuples,
6497 				     struct hclge_fd_rule *rule)
6498 {
6499 	rule->unused_tuple = BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC) |
6500 			     BIT(INNER_VLAN_TAG_FST) | BIT(INNER_IP_TOS) |
6501 			     BIT(INNER_SRC_PORT);
6502 	rule->action = 0;
6503 	rule->vf_id = 0;
6504 	rule->rule_type = HCLGE_FD_ARFS_ACTIVE;
6505 	if (tuples->ether_proto == ETH_P_IP) {
6506 		if (tuples->ip_proto == IPPROTO_TCP)
6507 			rule->flow_type = TCP_V4_FLOW;
6508 		else
6509 			rule->flow_type = UDP_V4_FLOW;
6510 	} else {
6511 		if (tuples->ip_proto == IPPROTO_TCP)
6512 			rule->flow_type = TCP_V6_FLOW;
6513 		else
6514 			rule->flow_type = UDP_V6_FLOW;
6515 	}
6516 	memcpy(&rule->tuples, tuples, sizeof(rule->tuples));
6517 	memset(&rule->tuples_mask, 0xFF, sizeof(rule->tuples_mask));
6518 }
6519 
6520 static int hclge_add_fd_entry_by_arfs(struct hnae3_handle *handle, u16 queue_id,
6521 				      u16 flow_id, struct flow_keys *fkeys)
6522 {
6523 	struct hclge_vport *vport = hclge_get_vport(handle);
6524 	struct hclge_fd_rule_tuples new_tuples = {};
6525 	struct hclge_dev *hdev = vport->back;
6526 	struct hclge_fd_rule *rule;
6527 	u16 tmp_queue_id;
6528 	u16 bit_id;
6529 	int ret;
6530 
6531 	if (!hnae3_dev_fd_supported(hdev))
6532 		return -EOPNOTSUPP;
6533 
6534 	/* when there is already fd rule existed add by user,
6535 	 * arfs should not work
6536 	 */
6537 	spin_lock_bh(&hdev->fd_rule_lock);
6538 	if (hdev->fd_active_type != HCLGE_FD_ARFS_ACTIVE &&
6539 	    hdev->fd_active_type != HCLGE_FD_RULE_NONE) {
6540 		spin_unlock_bh(&hdev->fd_rule_lock);
6541 		return -EOPNOTSUPP;
6542 	}
6543 
6544 	hclge_fd_get_flow_tuples(fkeys, &new_tuples);
6545 
6546 	/* check is there flow director filter existed for this flow,
6547 	 * if not, create a new filter for it;
6548 	 * if filter exist with different queue id, modify the filter;
6549 	 * if filter exist with same queue id, do nothing
6550 	 */
6551 	rule = hclge_fd_search_flow_keys(hdev, &new_tuples);
6552 	if (!rule) {
6553 		bit_id = find_first_zero_bit(hdev->fd_bmap, MAX_FD_FILTER_NUM);
6554 		if (bit_id >= hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) {
6555 			spin_unlock_bh(&hdev->fd_rule_lock);
6556 			return -ENOSPC;
6557 		}
6558 
6559 		rule = kzalloc(sizeof(*rule), GFP_ATOMIC);
6560 		if (!rule) {
6561 			spin_unlock_bh(&hdev->fd_rule_lock);
6562 			return -ENOMEM;
6563 		}
6564 
6565 		set_bit(bit_id, hdev->fd_bmap);
6566 		rule->location = bit_id;
6567 		rule->arfs.flow_id = flow_id;
6568 		rule->queue_id = queue_id;
6569 		hclge_fd_build_arfs_rule(&new_tuples, rule);
6570 		ret = hclge_fd_config_rule(hdev, rule);
6571 
6572 		spin_unlock_bh(&hdev->fd_rule_lock);
6573 
6574 		if (ret)
6575 			return ret;
6576 
6577 		return rule->location;
6578 	}
6579 
6580 	spin_unlock_bh(&hdev->fd_rule_lock);
6581 
6582 	if (rule->queue_id == queue_id)
6583 		return rule->location;
6584 
6585 	tmp_queue_id = rule->queue_id;
6586 	rule->queue_id = queue_id;
6587 	ret = hclge_config_action(hdev, HCLGE_FD_STAGE_1, rule);
6588 	if (ret) {
6589 		rule->queue_id = tmp_queue_id;
6590 		return ret;
6591 	}
6592 
6593 	return rule->location;
6594 }
6595 
6596 static void hclge_rfs_filter_expire(struct hclge_dev *hdev)
6597 {
6598 #ifdef CONFIG_RFS_ACCEL
6599 	struct hnae3_handle *handle = &hdev->vport[0].nic;
6600 	struct hclge_fd_rule *rule;
6601 	struct hlist_node *node;
6602 	HLIST_HEAD(del_list);
6603 
6604 	spin_lock_bh(&hdev->fd_rule_lock);
6605 	if (hdev->fd_active_type != HCLGE_FD_ARFS_ACTIVE) {
6606 		spin_unlock_bh(&hdev->fd_rule_lock);
6607 		return;
6608 	}
6609 	hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) {
6610 		if (rps_may_expire_flow(handle->netdev, rule->queue_id,
6611 					rule->arfs.flow_id, rule->location)) {
6612 			hlist_del_init(&rule->rule_node);
6613 			hlist_add_head(&rule->rule_node, &del_list);
6614 			hdev->hclge_fd_rule_num--;
6615 			clear_bit(rule->location, hdev->fd_bmap);
6616 		}
6617 	}
6618 	spin_unlock_bh(&hdev->fd_rule_lock);
6619 
6620 	hlist_for_each_entry_safe(rule, node, &del_list, rule_node) {
6621 		hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true,
6622 				     rule->location, NULL, false);
6623 		kfree(rule);
6624 	}
6625 #endif
6626 }
6627 
6628 /* make sure being called after lock up with fd_rule_lock */
6629 static void hclge_clear_arfs_rules(struct hnae3_handle *handle)
6630 {
6631 #ifdef CONFIG_RFS_ACCEL
6632 	struct hclge_vport *vport = hclge_get_vport(handle);
6633 	struct hclge_dev *hdev = vport->back;
6634 
6635 	if (hdev->fd_active_type == HCLGE_FD_ARFS_ACTIVE)
6636 		hclge_del_all_fd_entries(handle, true);
6637 #endif
6638 }
6639 
6640 static void hclge_get_cls_key_basic(const struct flow_rule *flow,
6641 				    struct hclge_fd_rule *rule)
6642 {
6643 	if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_BASIC)) {
6644 		struct flow_match_basic match;
6645 		u16 ethtype_key, ethtype_mask;
6646 
6647 		flow_rule_match_basic(flow, &match);
6648 		ethtype_key = ntohs(match.key->n_proto);
6649 		ethtype_mask = ntohs(match.mask->n_proto);
6650 
6651 		if (ethtype_key == ETH_P_ALL) {
6652 			ethtype_key = 0;
6653 			ethtype_mask = 0;
6654 		}
6655 		rule->tuples.ether_proto = ethtype_key;
6656 		rule->tuples_mask.ether_proto = ethtype_mask;
6657 		rule->tuples.ip_proto = match.key->ip_proto;
6658 		rule->tuples_mask.ip_proto = match.mask->ip_proto;
6659 	} else {
6660 		rule->unused_tuple |= BIT(INNER_IP_PROTO);
6661 		rule->unused_tuple |= BIT(INNER_ETH_TYPE);
6662 	}
6663 }
6664 
6665 static void hclge_get_cls_key_mac(const struct flow_rule *flow,
6666 				  struct hclge_fd_rule *rule)
6667 {
6668 	if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_ETH_ADDRS)) {
6669 		struct flow_match_eth_addrs match;
6670 
6671 		flow_rule_match_eth_addrs(flow, &match);
6672 		ether_addr_copy(rule->tuples.dst_mac, match.key->dst);
6673 		ether_addr_copy(rule->tuples_mask.dst_mac, match.mask->dst);
6674 		ether_addr_copy(rule->tuples.src_mac, match.key->src);
6675 		ether_addr_copy(rule->tuples_mask.src_mac, match.mask->src);
6676 	} else {
6677 		rule->unused_tuple |= BIT(INNER_DST_MAC);
6678 		rule->unused_tuple |= BIT(INNER_SRC_MAC);
6679 	}
6680 }
6681 
6682 static void hclge_get_cls_key_vlan(const struct flow_rule *flow,
6683 				   struct hclge_fd_rule *rule)
6684 {
6685 	if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_VLAN)) {
6686 		struct flow_match_vlan match;
6687 
6688 		flow_rule_match_vlan(flow, &match);
6689 		rule->tuples.vlan_tag1 = match.key->vlan_id |
6690 				(match.key->vlan_priority << VLAN_PRIO_SHIFT);
6691 		rule->tuples_mask.vlan_tag1 = match.mask->vlan_id |
6692 				(match.mask->vlan_priority << VLAN_PRIO_SHIFT);
6693 	} else {
6694 		rule->unused_tuple |= BIT(INNER_VLAN_TAG_FST);
6695 	}
6696 }
6697 
6698 static void hclge_get_cls_key_ip(const struct flow_rule *flow,
6699 				 struct hclge_fd_rule *rule)
6700 {
6701 	u16 addr_type = 0;
6702 
6703 	if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_CONTROL)) {
6704 		struct flow_match_control match;
6705 
6706 		flow_rule_match_control(flow, &match);
6707 		addr_type = match.key->addr_type;
6708 	}
6709 
6710 	if (addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS) {
6711 		struct flow_match_ipv4_addrs match;
6712 
6713 		flow_rule_match_ipv4_addrs(flow, &match);
6714 		rule->tuples.src_ip[IPV4_INDEX] = be32_to_cpu(match.key->src);
6715 		rule->tuples_mask.src_ip[IPV4_INDEX] =
6716 						be32_to_cpu(match.mask->src);
6717 		rule->tuples.dst_ip[IPV4_INDEX] = be32_to_cpu(match.key->dst);
6718 		rule->tuples_mask.dst_ip[IPV4_INDEX] =
6719 						be32_to_cpu(match.mask->dst);
6720 	} else if (addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
6721 		struct flow_match_ipv6_addrs match;
6722 
6723 		flow_rule_match_ipv6_addrs(flow, &match);
6724 		be32_to_cpu_array(rule->tuples.src_ip, match.key->src.s6_addr32,
6725 				  IPV6_SIZE);
6726 		be32_to_cpu_array(rule->tuples_mask.src_ip,
6727 				  match.mask->src.s6_addr32, IPV6_SIZE);
6728 		be32_to_cpu_array(rule->tuples.dst_ip, match.key->dst.s6_addr32,
6729 				  IPV6_SIZE);
6730 		be32_to_cpu_array(rule->tuples_mask.dst_ip,
6731 				  match.mask->dst.s6_addr32, IPV6_SIZE);
6732 	} else {
6733 		rule->unused_tuple |= BIT(INNER_SRC_IP);
6734 		rule->unused_tuple |= BIT(INNER_DST_IP);
6735 	}
6736 }
6737 
6738 static void hclge_get_cls_key_port(const struct flow_rule *flow,
6739 				   struct hclge_fd_rule *rule)
6740 {
6741 	if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_PORTS)) {
6742 		struct flow_match_ports match;
6743 
6744 		flow_rule_match_ports(flow, &match);
6745 
6746 		rule->tuples.src_port = be16_to_cpu(match.key->src);
6747 		rule->tuples_mask.src_port = be16_to_cpu(match.mask->src);
6748 		rule->tuples.dst_port = be16_to_cpu(match.key->dst);
6749 		rule->tuples_mask.dst_port = be16_to_cpu(match.mask->dst);
6750 	} else {
6751 		rule->unused_tuple |= BIT(INNER_SRC_PORT);
6752 		rule->unused_tuple |= BIT(INNER_DST_PORT);
6753 	}
6754 }
6755 
6756 static int hclge_parse_cls_flower(struct hclge_dev *hdev,
6757 				  struct flow_cls_offload *cls_flower,
6758 				  struct hclge_fd_rule *rule)
6759 {
6760 	struct flow_rule *flow = flow_cls_offload_flow_rule(cls_flower);
6761 	struct flow_dissector *dissector = flow->match.dissector;
6762 
6763 	if (dissector->used_keys &
6764 	    ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
6765 	      BIT(FLOW_DISSECTOR_KEY_BASIC) |
6766 	      BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
6767 	      BIT(FLOW_DISSECTOR_KEY_VLAN) |
6768 	      BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
6769 	      BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
6770 	      BIT(FLOW_DISSECTOR_KEY_PORTS))) {
6771 		dev_err(&hdev->pdev->dev, "unsupported key set: %#x\n",
6772 			dissector->used_keys);
6773 		return -EOPNOTSUPP;
6774 	}
6775 
6776 	hclge_get_cls_key_basic(flow, rule);
6777 	hclge_get_cls_key_mac(flow, rule);
6778 	hclge_get_cls_key_vlan(flow, rule);
6779 	hclge_get_cls_key_ip(flow, rule);
6780 	hclge_get_cls_key_port(flow, rule);
6781 
6782 	return 0;
6783 }
6784 
6785 static int hclge_check_cls_flower(struct hclge_dev *hdev,
6786 				  struct flow_cls_offload *cls_flower, int tc)
6787 {
6788 	u32 prio = cls_flower->common.prio;
6789 
6790 	if (tc < 0 || tc > hdev->tc_max) {
6791 		dev_err(&hdev->pdev->dev, "invalid traffic class\n");
6792 		return -EINVAL;
6793 	}
6794 
6795 	if (prio == 0 ||
6796 	    prio > hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) {
6797 		dev_err(&hdev->pdev->dev,
6798 			"prio %u should be in range[1, %u]\n",
6799 			prio, hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]);
6800 		return -EINVAL;
6801 	}
6802 
6803 	if (test_bit(prio - 1, hdev->fd_bmap)) {
6804 		dev_err(&hdev->pdev->dev, "prio %u is already used\n", prio);
6805 		return -EINVAL;
6806 	}
6807 	return 0;
6808 }
6809 
6810 static int hclge_add_cls_flower(struct hnae3_handle *handle,
6811 				struct flow_cls_offload *cls_flower,
6812 				int tc)
6813 {
6814 	struct hclge_vport *vport = hclge_get_vport(handle);
6815 	struct hclge_dev *hdev = vport->back;
6816 	struct hclge_fd_rule *rule;
6817 	int ret;
6818 
6819 	if (hdev->fd_active_type == HCLGE_FD_EP_ACTIVE) {
6820 		dev_err(&hdev->pdev->dev,
6821 			"please remove all exist fd rules via ethtool first\n");
6822 		return -EINVAL;
6823 	}
6824 
6825 	ret = hclge_check_cls_flower(hdev, cls_flower, tc);
6826 	if (ret) {
6827 		dev_err(&hdev->pdev->dev,
6828 			"failed to check cls flower params, ret = %d\n", ret);
6829 		return ret;
6830 	}
6831 
6832 	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
6833 	if (!rule)
6834 		return -ENOMEM;
6835 
6836 	ret = hclge_parse_cls_flower(hdev, cls_flower, rule);
6837 	if (ret)
6838 		goto err;
6839 
6840 	rule->action = HCLGE_FD_ACTION_SELECT_TC;
6841 	rule->cls_flower.tc = tc;
6842 	rule->location = cls_flower->common.prio - 1;
6843 	rule->vf_id = 0;
6844 	rule->cls_flower.cookie = cls_flower->cookie;
6845 	rule->rule_type = HCLGE_FD_TC_FLOWER_ACTIVE;
6846 
6847 	spin_lock_bh(&hdev->fd_rule_lock);
6848 	hclge_clear_arfs_rules(handle);
6849 
6850 	ret = hclge_fd_config_rule(hdev, rule);
6851 
6852 	spin_unlock_bh(&hdev->fd_rule_lock);
6853 
6854 	if (ret) {
6855 		dev_err(&hdev->pdev->dev,
6856 			"failed to add cls flower rule, ret = %d\n", ret);
6857 		goto err;
6858 	}
6859 
6860 	return 0;
6861 err:
6862 	kfree(rule);
6863 	return ret;
6864 }
6865 
6866 static struct hclge_fd_rule *hclge_find_cls_flower(struct hclge_dev *hdev,
6867 						   unsigned long cookie)
6868 {
6869 	struct hclge_fd_rule *rule;
6870 	struct hlist_node *node;
6871 
6872 	hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) {
6873 		if (rule->cls_flower.cookie == cookie)
6874 			return rule;
6875 	}
6876 
6877 	return NULL;
6878 }
6879 
6880 static int hclge_del_cls_flower(struct hnae3_handle *handle,
6881 				struct flow_cls_offload *cls_flower)
6882 {
6883 	struct hclge_vport *vport = hclge_get_vport(handle);
6884 	struct hclge_dev *hdev = vport->back;
6885 	struct hclge_fd_rule *rule;
6886 	int ret;
6887 
6888 	spin_lock_bh(&hdev->fd_rule_lock);
6889 
6890 	rule = hclge_find_cls_flower(hdev, cls_flower->cookie);
6891 	if (!rule) {
6892 		spin_unlock_bh(&hdev->fd_rule_lock);
6893 		return -EINVAL;
6894 	}
6895 
6896 	ret = hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, rule->location,
6897 				   NULL, false);
6898 	if (ret) {
6899 		dev_err(&hdev->pdev->dev,
6900 			"failed to delete cls flower rule %u, ret = %d\n",
6901 			rule->location, ret);
6902 		spin_unlock_bh(&hdev->fd_rule_lock);
6903 		return ret;
6904 	}
6905 
6906 	ret = hclge_fd_update_rule_list(hdev, NULL, rule->location, false);
6907 	if (ret) {
6908 		dev_err(&hdev->pdev->dev,
6909 			"failed to delete cls flower rule %u in list, ret = %d\n",
6910 			rule->location, ret);
6911 		spin_unlock_bh(&hdev->fd_rule_lock);
6912 		return ret;
6913 	}
6914 
6915 	spin_unlock_bh(&hdev->fd_rule_lock);
6916 
6917 	return 0;
6918 }
6919 
6920 static bool hclge_get_hw_reset_stat(struct hnae3_handle *handle)
6921 {
6922 	struct hclge_vport *vport = hclge_get_vport(handle);
6923 	struct hclge_dev *hdev = vport->back;
6924 
6925 	return hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG) ||
6926 	       hclge_read_dev(&hdev->hw, HCLGE_FUN_RST_ING);
6927 }
6928 
6929 static bool hclge_get_cmdq_stat(struct hnae3_handle *handle)
6930 {
6931 	struct hclge_vport *vport = hclge_get_vport(handle);
6932 	struct hclge_dev *hdev = vport->back;
6933 
6934 	return test_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state);
6935 }
6936 
6937 static bool hclge_ae_dev_resetting(struct hnae3_handle *handle)
6938 {
6939 	struct hclge_vport *vport = hclge_get_vport(handle);
6940 	struct hclge_dev *hdev = vport->back;
6941 
6942 	return test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
6943 }
6944 
6945 static unsigned long hclge_ae_dev_reset_cnt(struct hnae3_handle *handle)
6946 {
6947 	struct hclge_vport *vport = hclge_get_vport(handle);
6948 	struct hclge_dev *hdev = vport->back;
6949 
6950 	return hdev->rst_stats.hw_reset_done_cnt;
6951 }
6952 
6953 static void hclge_enable_fd(struct hnae3_handle *handle, bool enable)
6954 {
6955 	struct hclge_vport *vport = hclge_get_vport(handle);
6956 	struct hclge_dev *hdev = vport->back;
6957 	bool clear;
6958 
6959 	hdev->fd_en = enable;
6960 	clear = hdev->fd_active_type == HCLGE_FD_ARFS_ACTIVE;
6961 
6962 	if (!enable) {
6963 		spin_lock_bh(&hdev->fd_rule_lock);
6964 		hclge_del_all_fd_entries(handle, clear);
6965 		spin_unlock_bh(&hdev->fd_rule_lock);
6966 	} else {
6967 		hclge_restore_fd_entries(handle);
6968 	}
6969 }
6970 
6971 static void hclge_cfg_mac_mode(struct hclge_dev *hdev, bool enable)
6972 {
6973 	struct hclge_desc desc;
6974 	struct hclge_config_mac_mode_cmd *req =
6975 		(struct hclge_config_mac_mode_cmd *)desc.data;
6976 	u32 loop_en = 0;
6977 	int ret;
6978 
6979 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_MAC_MODE, false);
6980 
6981 	if (enable) {
6982 		hnae3_set_bit(loop_en, HCLGE_MAC_TX_EN_B, 1U);
6983 		hnae3_set_bit(loop_en, HCLGE_MAC_RX_EN_B, 1U);
6984 		hnae3_set_bit(loop_en, HCLGE_MAC_PAD_TX_B, 1U);
6985 		hnae3_set_bit(loop_en, HCLGE_MAC_PAD_RX_B, 1U);
6986 		hnae3_set_bit(loop_en, HCLGE_MAC_FCS_TX_B, 1U);
6987 		hnae3_set_bit(loop_en, HCLGE_MAC_RX_FCS_B, 1U);
6988 		hnae3_set_bit(loop_en, HCLGE_MAC_RX_FCS_STRIP_B, 1U);
6989 		hnae3_set_bit(loop_en, HCLGE_MAC_TX_OVERSIZE_TRUNCATE_B, 1U);
6990 		hnae3_set_bit(loop_en, HCLGE_MAC_RX_OVERSIZE_TRUNCATE_B, 1U);
6991 		hnae3_set_bit(loop_en, HCLGE_MAC_TX_UNDER_MIN_ERR_B, 1U);
6992 	}
6993 
6994 	req->txrx_pad_fcs_loop_en = cpu_to_le32(loop_en);
6995 
6996 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
6997 	if (ret)
6998 		dev_err(&hdev->pdev->dev,
6999 			"mac enable fail, ret =%d.\n", ret);
7000 }
7001 
7002 static int hclge_config_switch_param(struct hclge_dev *hdev, int vfid,
7003 				     u8 switch_param, u8 param_mask)
7004 {
7005 	struct hclge_mac_vlan_switch_cmd *req;
7006 	struct hclge_desc desc;
7007 	u32 func_id;
7008 	int ret;
7009 
7010 	func_id = hclge_get_port_number(HOST_PORT, 0, vfid, 0);
7011 	req = (struct hclge_mac_vlan_switch_cmd *)desc.data;
7012 
7013 	/* read current config parameter */
7014 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_SWITCH_PARAM,
7015 				   true);
7016 	req->roce_sel = HCLGE_MAC_VLAN_NIC_SEL;
7017 	req->func_id = cpu_to_le32(func_id);
7018 
7019 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7020 	if (ret) {
7021 		dev_err(&hdev->pdev->dev,
7022 			"read mac vlan switch parameter fail, ret = %d\n", ret);
7023 		return ret;
7024 	}
7025 
7026 	/* modify and write new config parameter */
7027 	hclge_cmd_reuse_desc(&desc, false);
7028 	req->switch_param = (req->switch_param & param_mask) | switch_param;
7029 	req->param_mask = param_mask;
7030 
7031 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7032 	if (ret)
7033 		dev_err(&hdev->pdev->dev,
7034 			"set mac vlan switch parameter fail, ret = %d\n", ret);
7035 	return ret;
7036 }
7037 
7038 static void hclge_phy_link_status_wait(struct hclge_dev *hdev,
7039 				       int link_ret)
7040 {
7041 #define HCLGE_PHY_LINK_STATUS_NUM  200
7042 
7043 	struct phy_device *phydev = hdev->hw.mac.phydev;
7044 	int i = 0;
7045 	int ret;
7046 
7047 	do {
7048 		ret = phy_read_status(phydev);
7049 		if (ret) {
7050 			dev_err(&hdev->pdev->dev,
7051 				"phy update link status fail, ret = %d\n", ret);
7052 			return;
7053 		}
7054 
7055 		if (phydev->link == link_ret)
7056 			break;
7057 
7058 		msleep(HCLGE_LINK_STATUS_MS);
7059 	} while (++i < HCLGE_PHY_LINK_STATUS_NUM);
7060 }
7061 
7062 static int hclge_mac_link_status_wait(struct hclge_dev *hdev, int link_ret)
7063 {
7064 #define HCLGE_MAC_LINK_STATUS_NUM  100
7065 
7066 	int link_status;
7067 	int i = 0;
7068 	int ret;
7069 
7070 	do {
7071 		ret = hclge_get_mac_link_status(hdev, &link_status);
7072 		if (ret)
7073 			return ret;
7074 		if (link_status == link_ret)
7075 			return 0;
7076 
7077 		msleep(HCLGE_LINK_STATUS_MS);
7078 	} while (++i < HCLGE_MAC_LINK_STATUS_NUM);
7079 	return -EBUSY;
7080 }
7081 
7082 static int hclge_mac_phy_link_status_wait(struct hclge_dev *hdev, bool en,
7083 					  bool is_phy)
7084 {
7085 	int link_ret;
7086 
7087 	link_ret = en ? HCLGE_LINK_STATUS_UP : HCLGE_LINK_STATUS_DOWN;
7088 
7089 	if (is_phy)
7090 		hclge_phy_link_status_wait(hdev, link_ret);
7091 
7092 	return hclge_mac_link_status_wait(hdev, link_ret);
7093 }
7094 
7095 static int hclge_set_app_loopback(struct hclge_dev *hdev, bool en)
7096 {
7097 	struct hclge_config_mac_mode_cmd *req;
7098 	struct hclge_desc desc;
7099 	u32 loop_en;
7100 	int ret;
7101 
7102 	req = (struct hclge_config_mac_mode_cmd *)&desc.data[0];
7103 	/* 1 Read out the MAC mode config at first */
7104 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_MAC_MODE, true);
7105 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7106 	if (ret) {
7107 		dev_err(&hdev->pdev->dev,
7108 			"mac loopback get fail, ret =%d.\n", ret);
7109 		return ret;
7110 	}
7111 
7112 	/* 2 Then setup the loopback flag */
7113 	loop_en = le32_to_cpu(req->txrx_pad_fcs_loop_en);
7114 	hnae3_set_bit(loop_en, HCLGE_MAC_APP_LP_B, en ? 1 : 0);
7115 
7116 	req->txrx_pad_fcs_loop_en = cpu_to_le32(loop_en);
7117 
7118 	/* 3 Config mac work mode with loopback flag
7119 	 * and its original configure parameters
7120 	 */
7121 	hclge_cmd_reuse_desc(&desc, false);
7122 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7123 	if (ret)
7124 		dev_err(&hdev->pdev->dev,
7125 			"mac loopback set fail, ret =%d.\n", ret);
7126 	return ret;
7127 }
7128 
7129 static int hclge_cfg_serdes_loopback(struct hclge_dev *hdev, bool en,
7130 				     enum hnae3_loop loop_mode)
7131 {
7132 #define HCLGE_SERDES_RETRY_MS	10
7133 #define HCLGE_SERDES_RETRY_NUM	100
7134 
7135 	struct hclge_serdes_lb_cmd *req;
7136 	struct hclge_desc desc;
7137 	int ret, i = 0;
7138 	u8 loop_mode_b;
7139 
7140 	req = (struct hclge_serdes_lb_cmd *)desc.data;
7141 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_SERDES_LOOPBACK, false);
7142 
7143 	switch (loop_mode) {
7144 	case HNAE3_LOOP_SERIAL_SERDES:
7145 		loop_mode_b = HCLGE_CMD_SERDES_SERIAL_INNER_LOOP_B;
7146 		break;
7147 	case HNAE3_LOOP_PARALLEL_SERDES:
7148 		loop_mode_b = HCLGE_CMD_SERDES_PARALLEL_INNER_LOOP_B;
7149 		break;
7150 	default:
7151 		dev_err(&hdev->pdev->dev,
7152 			"unsupported serdes loopback mode %d\n", loop_mode);
7153 		return -ENOTSUPP;
7154 	}
7155 
7156 	if (en) {
7157 		req->enable = loop_mode_b;
7158 		req->mask = loop_mode_b;
7159 	} else {
7160 		req->mask = loop_mode_b;
7161 	}
7162 
7163 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7164 	if (ret) {
7165 		dev_err(&hdev->pdev->dev,
7166 			"serdes loopback set fail, ret = %d\n", ret);
7167 		return ret;
7168 	}
7169 
7170 	do {
7171 		msleep(HCLGE_SERDES_RETRY_MS);
7172 		hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_SERDES_LOOPBACK,
7173 					   true);
7174 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7175 		if (ret) {
7176 			dev_err(&hdev->pdev->dev,
7177 				"serdes loopback get, ret = %d\n", ret);
7178 			return ret;
7179 		}
7180 	} while (++i < HCLGE_SERDES_RETRY_NUM &&
7181 		 !(req->result & HCLGE_CMD_SERDES_DONE_B));
7182 
7183 	if (!(req->result & HCLGE_CMD_SERDES_DONE_B)) {
7184 		dev_err(&hdev->pdev->dev, "serdes loopback set timeout\n");
7185 		return -EBUSY;
7186 	} else if (!(req->result & HCLGE_CMD_SERDES_SUCCESS_B)) {
7187 		dev_err(&hdev->pdev->dev, "serdes loopback set failed in fw\n");
7188 		return -EIO;
7189 	}
7190 	return ret;
7191 }
7192 
7193 static int hclge_set_serdes_loopback(struct hclge_dev *hdev, bool en,
7194 				     enum hnae3_loop loop_mode)
7195 {
7196 	int ret;
7197 
7198 	ret = hclge_cfg_serdes_loopback(hdev, en, loop_mode);
7199 	if (ret)
7200 		return ret;
7201 
7202 	hclge_cfg_mac_mode(hdev, en);
7203 
7204 	ret = hclge_mac_phy_link_status_wait(hdev, en, false);
7205 	if (ret)
7206 		dev_err(&hdev->pdev->dev,
7207 			"serdes loopback config mac mode timeout\n");
7208 
7209 	return ret;
7210 }
7211 
7212 static int hclge_enable_phy_loopback(struct hclge_dev *hdev,
7213 				     struct phy_device *phydev)
7214 {
7215 	int ret;
7216 
7217 	if (!phydev->suspended) {
7218 		ret = phy_suspend(phydev);
7219 		if (ret)
7220 			return ret;
7221 	}
7222 
7223 	ret = phy_resume(phydev);
7224 	if (ret)
7225 		return ret;
7226 
7227 	return phy_loopback(phydev, true);
7228 }
7229 
7230 static int hclge_disable_phy_loopback(struct hclge_dev *hdev,
7231 				      struct phy_device *phydev)
7232 {
7233 	int ret;
7234 
7235 	ret = phy_loopback(phydev, false);
7236 	if (ret)
7237 		return ret;
7238 
7239 	return phy_suspend(phydev);
7240 }
7241 
7242 static int hclge_set_phy_loopback(struct hclge_dev *hdev, bool en)
7243 {
7244 	struct phy_device *phydev = hdev->hw.mac.phydev;
7245 	int ret;
7246 
7247 	if (!phydev)
7248 		return -ENOTSUPP;
7249 
7250 	if (en)
7251 		ret = hclge_enable_phy_loopback(hdev, phydev);
7252 	else
7253 		ret = hclge_disable_phy_loopback(hdev, phydev);
7254 	if (ret) {
7255 		dev_err(&hdev->pdev->dev,
7256 			"set phy loopback fail, ret = %d\n", ret);
7257 		return ret;
7258 	}
7259 
7260 	hclge_cfg_mac_mode(hdev, en);
7261 
7262 	ret = hclge_mac_phy_link_status_wait(hdev, en, true);
7263 	if (ret)
7264 		dev_err(&hdev->pdev->dev,
7265 			"phy loopback config mac mode timeout\n");
7266 
7267 	return ret;
7268 }
7269 
7270 static int hclge_tqp_enable(struct hclge_dev *hdev, unsigned int tqp_id,
7271 			    int stream_id, bool enable)
7272 {
7273 	struct hclge_desc desc;
7274 	struct hclge_cfg_com_tqp_queue_cmd *req =
7275 		(struct hclge_cfg_com_tqp_queue_cmd *)desc.data;
7276 	int ret;
7277 
7278 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_COM_TQP_QUEUE, false);
7279 	req->tqp_id = cpu_to_le16(tqp_id);
7280 	req->stream_id = cpu_to_le16(stream_id);
7281 	if (enable)
7282 		req->enable |= 1U << HCLGE_TQP_ENABLE_B;
7283 
7284 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7285 	if (ret)
7286 		dev_err(&hdev->pdev->dev,
7287 			"Tqp enable fail, status =%d.\n", ret);
7288 	return ret;
7289 }
7290 
7291 static int hclge_set_loopback(struct hnae3_handle *handle,
7292 			      enum hnae3_loop loop_mode, bool en)
7293 {
7294 	struct hclge_vport *vport = hclge_get_vport(handle);
7295 	struct hnae3_knic_private_info *kinfo;
7296 	struct hclge_dev *hdev = vport->back;
7297 	int i, ret;
7298 
7299 	/* Loopback can be enabled in three places: SSU, MAC, and serdes. By
7300 	 * default, SSU loopback is enabled, so if the SMAC and the DMAC are
7301 	 * the same, the packets are looped back in the SSU. If SSU loopback
7302 	 * is disabled, packets can reach MAC even if SMAC is the same as DMAC.
7303 	 */
7304 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
7305 		u8 switch_param = en ? 0 : BIT(HCLGE_SWITCH_ALW_LPBK_B);
7306 
7307 		ret = hclge_config_switch_param(hdev, PF_VPORT_ID, switch_param,
7308 						HCLGE_SWITCH_ALW_LPBK_MASK);
7309 		if (ret)
7310 			return ret;
7311 	}
7312 
7313 	switch (loop_mode) {
7314 	case HNAE3_LOOP_APP:
7315 		ret = hclge_set_app_loopback(hdev, en);
7316 		break;
7317 	case HNAE3_LOOP_SERIAL_SERDES:
7318 	case HNAE3_LOOP_PARALLEL_SERDES:
7319 		ret = hclge_set_serdes_loopback(hdev, en, loop_mode);
7320 		break;
7321 	case HNAE3_LOOP_PHY:
7322 		ret = hclge_set_phy_loopback(hdev, en);
7323 		break;
7324 	default:
7325 		ret = -ENOTSUPP;
7326 		dev_err(&hdev->pdev->dev,
7327 			"loop_mode %d is not supported\n", loop_mode);
7328 		break;
7329 	}
7330 
7331 	if (ret)
7332 		return ret;
7333 
7334 	kinfo = &vport->nic.kinfo;
7335 	for (i = 0; i < kinfo->num_tqps; i++) {
7336 		ret = hclge_tqp_enable(hdev, i, 0, en);
7337 		if (ret)
7338 			return ret;
7339 	}
7340 
7341 	return 0;
7342 }
7343 
7344 static int hclge_set_default_loopback(struct hclge_dev *hdev)
7345 {
7346 	int ret;
7347 
7348 	ret = hclge_set_app_loopback(hdev, false);
7349 	if (ret)
7350 		return ret;
7351 
7352 	ret = hclge_cfg_serdes_loopback(hdev, false, HNAE3_LOOP_SERIAL_SERDES);
7353 	if (ret)
7354 		return ret;
7355 
7356 	return hclge_cfg_serdes_loopback(hdev, false,
7357 					 HNAE3_LOOP_PARALLEL_SERDES);
7358 }
7359 
7360 static void hclge_reset_tqp_stats(struct hnae3_handle *handle)
7361 {
7362 	struct hclge_vport *vport = hclge_get_vport(handle);
7363 	struct hnae3_knic_private_info *kinfo;
7364 	struct hnae3_queue *queue;
7365 	struct hclge_tqp *tqp;
7366 	int i;
7367 
7368 	kinfo = &vport->nic.kinfo;
7369 	for (i = 0; i < kinfo->num_tqps; i++) {
7370 		queue = handle->kinfo.tqp[i];
7371 		tqp = container_of(queue, struct hclge_tqp, q);
7372 		memset(&tqp->tqp_stats, 0, sizeof(tqp->tqp_stats));
7373 	}
7374 }
7375 
7376 static void hclge_flush_link_update(struct hclge_dev *hdev)
7377 {
7378 #define HCLGE_FLUSH_LINK_TIMEOUT	100000
7379 
7380 	unsigned long last = hdev->serv_processed_cnt;
7381 	int i = 0;
7382 
7383 	while (test_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state) &&
7384 	       i++ < HCLGE_FLUSH_LINK_TIMEOUT &&
7385 	       last == hdev->serv_processed_cnt)
7386 		usleep_range(1, 1);
7387 }
7388 
7389 static void hclge_set_timer_task(struct hnae3_handle *handle, bool enable)
7390 {
7391 	struct hclge_vport *vport = hclge_get_vport(handle);
7392 	struct hclge_dev *hdev = vport->back;
7393 
7394 	if (enable) {
7395 		hclge_task_schedule(hdev, 0);
7396 	} else {
7397 		/* Set the DOWN flag here to disable link updating */
7398 		set_bit(HCLGE_STATE_DOWN, &hdev->state);
7399 
7400 		/* flush memory to make sure DOWN is seen by service task */
7401 		smp_mb__before_atomic();
7402 		hclge_flush_link_update(hdev);
7403 	}
7404 }
7405 
7406 static int hclge_ae_start(struct hnae3_handle *handle)
7407 {
7408 	struct hclge_vport *vport = hclge_get_vport(handle);
7409 	struct hclge_dev *hdev = vport->back;
7410 
7411 	/* mac enable */
7412 	hclge_cfg_mac_mode(hdev, true);
7413 	clear_bit(HCLGE_STATE_DOWN, &hdev->state);
7414 	hdev->hw.mac.link = 0;
7415 
7416 	/* reset tqp stats */
7417 	hclge_reset_tqp_stats(handle);
7418 
7419 	hclge_mac_start_phy(hdev);
7420 
7421 	return 0;
7422 }
7423 
7424 static void hclge_ae_stop(struct hnae3_handle *handle)
7425 {
7426 	struct hclge_vport *vport = hclge_get_vport(handle);
7427 	struct hclge_dev *hdev = vport->back;
7428 	int i;
7429 
7430 	set_bit(HCLGE_STATE_DOWN, &hdev->state);
7431 	spin_lock_bh(&hdev->fd_rule_lock);
7432 	hclge_clear_arfs_rules(handle);
7433 	spin_unlock_bh(&hdev->fd_rule_lock);
7434 
7435 	/* If it is not PF reset, the firmware will disable the MAC,
7436 	 * so it only need to stop phy here.
7437 	 */
7438 	if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) &&
7439 	    hdev->reset_type != HNAE3_FUNC_RESET) {
7440 		hclge_mac_stop_phy(hdev);
7441 		hclge_update_link_status(hdev);
7442 		return;
7443 	}
7444 
7445 	for (i = 0; i < handle->kinfo.num_tqps; i++)
7446 		hclge_reset_tqp(handle, i);
7447 
7448 	hclge_config_mac_tnl_int(hdev, false);
7449 
7450 	/* Mac disable */
7451 	hclge_cfg_mac_mode(hdev, false);
7452 
7453 	hclge_mac_stop_phy(hdev);
7454 
7455 	/* reset tqp stats */
7456 	hclge_reset_tqp_stats(handle);
7457 	hclge_update_link_status(hdev);
7458 }
7459 
7460 int hclge_vport_start(struct hclge_vport *vport)
7461 {
7462 	struct hclge_dev *hdev = vport->back;
7463 
7464 	set_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state);
7465 	vport->last_active_jiffies = jiffies;
7466 
7467 	if (test_bit(vport->vport_id, hdev->vport_config_block)) {
7468 		if (vport->vport_id) {
7469 			hclge_restore_mac_table_common(vport);
7470 			hclge_restore_vport_vlan_table(vport);
7471 		} else {
7472 			hclge_restore_hw_table(hdev);
7473 		}
7474 	}
7475 
7476 	clear_bit(vport->vport_id, hdev->vport_config_block);
7477 
7478 	return 0;
7479 }
7480 
7481 void hclge_vport_stop(struct hclge_vport *vport)
7482 {
7483 	clear_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state);
7484 }
7485 
7486 static int hclge_client_start(struct hnae3_handle *handle)
7487 {
7488 	struct hclge_vport *vport = hclge_get_vport(handle);
7489 
7490 	return hclge_vport_start(vport);
7491 }
7492 
7493 static void hclge_client_stop(struct hnae3_handle *handle)
7494 {
7495 	struct hclge_vport *vport = hclge_get_vport(handle);
7496 
7497 	hclge_vport_stop(vport);
7498 }
7499 
7500 static int hclge_get_mac_vlan_cmd_status(struct hclge_vport *vport,
7501 					 u16 cmdq_resp, u8  resp_code,
7502 					 enum hclge_mac_vlan_tbl_opcode op)
7503 {
7504 	struct hclge_dev *hdev = vport->back;
7505 
7506 	if (cmdq_resp) {
7507 		dev_err(&hdev->pdev->dev,
7508 			"cmdq execute failed for get_mac_vlan_cmd_status,status=%u.\n",
7509 			cmdq_resp);
7510 		return -EIO;
7511 	}
7512 
7513 	if (op == HCLGE_MAC_VLAN_ADD) {
7514 		if (!resp_code || resp_code == 1)
7515 			return 0;
7516 		else if (resp_code == HCLGE_ADD_UC_OVERFLOW ||
7517 			 resp_code == HCLGE_ADD_MC_OVERFLOW)
7518 			return -ENOSPC;
7519 
7520 		dev_err(&hdev->pdev->dev,
7521 			"add mac addr failed for undefined, code=%u.\n",
7522 			resp_code);
7523 		return -EIO;
7524 	} else if (op == HCLGE_MAC_VLAN_REMOVE) {
7525 		if (!resp_code) {
7526 			return 0;
7527 		} else if (resp_code == 1) {
7528 			dev_dbg(&hdev->pdev->dev,
7529 				"remove mac addr failed for miss.\n");
7530 			return -ENOENT;
7531 		}
7532 
7533 		dev_err(&hdev->pdev->dev,
7534 			"remove mac addr failed for undefined, code=%u.\n",
7535 			resp_code);
7536 		return -EIO;
7537 	} else if (op == HCLGE_MAC_VLAN_LKUP) {
7538 		if (!resp_code) {
7539 			return 0;
7540 		} else if (resp_code == 1) {
7541 			dev_dbg(&hdev->pdev->dev,
7542 				"lookup mac addr failed for miss.\n");
7543 			return -ENOENT;
7544 		}
7545 
7546 		dev_err(&hdev->pdev->dev,
7547 			"lookup mac addr failed for undefined, code=%u.\n",
7548 			resp_code);
7549 		return -EIO;
7550 	}
7551 
7552 	dev_err(&hdev->pdev->dev,
7553 		"unknown opcode for get_mac_vlan_cmd_status, opcode=%d.\n", op);
7554 
7555 	return -EINVAL;
7556 }
7557 
7558 static int hclge_update_desc_vfid(struct hclge_desc *desc, int vfid, bool clr)
7559 {
7560 #define HCLGE_VF_NUM_IN_FIRST_DESC 192
7561 
7562 	unsigned int word_num;
7563 	unsigned int bit_num;
7564 
7565 	if (vfid > 255 || vfid < 0)
7566 		return -EIO;
7567 
7568 	if (vfid >= 0 && vfid < HCLGE_VF_NUM_IN_FIRST_DESC) {
7569 		word_num = vfid / 32;
7570 		bit_num  = vfid % 32;
7571 		if (clr)
7572 			desc[1].data[word_num] &= cpu_to_le32(~(1 << bit_num));
7573 		else
7574 			desc[1].data[word_num] |= cpu_to_le32(1 << bit_num);
7575 	} else {
7576 		word_num = (vfid - HCLGE_VF_NUM_IN_FIRST_DESC) / 32;
7577 		bit_num  = vfid % 32;
7578 		if (clr)
7579 			desc[2].data[word_num] &= cpu_to_le32(~(1 << bit_num));
7580 		else
7581 			desc[2].data[word_num] |= cpu_to_le32(1 << bit_num);
7582 	}
7583 
7584 	return 0;
7585 }
7586 
7587 static bool hclge_is_all_function_id_zero(struct hclge_desc *desc)
7588 {
7589 #define HCLGE_DESC_NUMBER 3
7590 #define HCLGE_FUNC_NUMBER_PER_DESC 6
7591 	int i, j;
7592 
7593 	for (i = 1; i < HCLGE_DESC_NUMBER; i++)
7594 		for (j = 0; j < HCLGE_FUNC_NUMBER_PER_DESC; j++)
7595 			if (desc[i].data[j])
7596 				return false;
7597 
7598 	return true;
7599 }
7600 
7601 static void hclge_prepare_mac_addr(struct hclge_mac_vlan_tbl_entry_cmd *new_req,
7602 				   const u8 *addr, bool is_mc)
7603 {
7604 	const unsigned char *mac_addr = addr;
7605 	u32 high_val = mac_addr[2] << 16 | (mac_addr[3] << 24) |
7606 		       (mac_addr[0]) | (mac_addr[1] << 8);
7607 	u32 low_val  = mac_addr[4] | (mac_addr[5] << 8);
7608 
7609 	hnae3_set_bit(new_req->flags, HCLGE_MAC_VLAN_BIT0_EN_B, 1);
7610 	if (is_mc) {
7611 		hnae3_set_bit(new_req->entry_type, HCLGE_MAC_VLAN_BIT1_EN_B, 1);
7612 		hnae3_set_bit(new_req->mc_mac_en, HCLGE_MAC_VLAN_BIT0_EN_B, 1);
7613 	}
7614 
7615 	new_req->mac_addr_hi32 = cpu_to_le32(high_val);
7616 	new_req->mac_addr_lo16 = cpu_to_le16(low_val & 0xffff);
7617 }
7618 
7619 static int hclge_remove_mac_vlan_tbl(struct hclge_vport *vport,
7620 				     struct hclge_mac_vlan_tbl_entry_cmd *req)
7621 {
7622 	struct hclge_dev *hdev = vport->back;
7623 	struct hclge_desc desc;
7624 	u8 resp_code;
7625 	u16 retval;
7626 	int ret;
7627 
7628 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_REMOVE, false);
7629 
7630 	memcpy(desc.data, req, sizeof(struct hclge_mac_vlan_tbl_entry_cmd));
7631 
7632 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7633 	if (ret) {
7634 		dev_err(&hdev->pdev->dev,
7635 			"del mac addr failed for cmd_send, ret =%d.\n",
7636 			ret);
7637 		return ret;
7638 	}
7639 	resp_code = (le32_to_cpu(desc.data[0]) >> 8) & 0xff;
7640 	retval = le16_to_cpu(desc.retval);
7641 
7642 	return hclge_get_mac_vlan_cmd_status(vport, retval, resp_code,
7643 					     HCLGE_MAC_VLAN_REMOVE);
7644 }
7645 
7646 static int hclge_lookup_mac_vlan_tbl(struct hclge_vport *vport,
7647 				     struct hclge_mac_vlan_tbl_entry_cmd *req,
7648 				     struct hclge_desc *desc,
7649 				     bool is_mc)
7650 {
7651 	struct hclge_dev *hdev = vport->back;
7652 	u8 resp_code;
7653 	u16 retval;
7654 	int ret;
7655 
7656 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_MAC_VLAN_ADD, true);
7657 	if (is_mc) {
7658 		desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
7659 		memcpy(desc[0].data,
7660 		       req,
7661 		       sizeof(struct hclge_mac_vlan_tbl_entry_cmd));
7662 		hclge_cmd_setup_basic_desc(&desc[1],
7663 					   HCLGE_OPC_MAC_VLAN_ADD,
7664 					   true);
7665 		desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
7666 		hclge_cmd_setup_basic_desc(&desc[2],
7667 					   HCLGE_OPC_MAC_VLAN_ADD,
7668 					   true);
7669 		ret = hclge_cmd_send(&hdev->hw, desc, 3);
7670 	} else {
7671 		memcpy(desc[0].data,
7672 		       req,
7673 		       sizeof(struct hclge_mac_vlan_tbl_entry_cmd));
7674 		ret = hclge_cmd_send(&hdev->hw, desc, 1);
7675 	}
7676 	if (ret) {
7677 		dev_err(&hdev->pdev->dev,
7678 			"lookup mac addr failed for cmd_send, ret =%d.\n",
7679 			ret);
7680 		return ret;
7681 	}
7682 	resp_code = (le32_to_cpu(desc[0].data[0]) >> 8) & 0xff;
7683 	retval = le16_to_cpu(desc[0].retval);
7684 
7685 	return hclge_get_mac_vlan_cmd_status(vport, retval, resp_code,
7686 					     HCLGE_MAC_VLAN_LKUP);
7687 }
7688 
7689 static int hclge_add_mac_vlan_tbl(struct hclge_vport *vport,
7690 				  struct hclge_mac_vlan_tbl_entry_cmd *req,
7691 				  struct hclge_desc *mc_desc)
7692 {
7693 	struct hclge_dev *hdev = vport->back;
7694 	int cfg_status;
7695 	u8 resp_code;
7696 	u16 retval;
7697 	int ret;
7698 
7699 	if (!mc_desc) {
7700 		struct hclge_desc desc;
7701 
7702 		hclge_cmd_setup_basic_desc(&desc,
7703 					   HCLGE_OPC_MAC_VLAN_ADD,
7704 					   false);
7705 		memcpy(desc.data, req,
7706 		       sizeof(struct hclge_mac_vlan_tbl_entry_cmd));
7707 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7708 		resp_code = (le32_to_cpu(desc.data[0]) >> 8) & 0xff;
7709 		retval = le16_to_cpu(desc.retval);
7710 
7711 		cfg_status = hclge_get_mac_vlan_cmd_status(vport, retval,
7712 							   resp_code,
7713 							   HCLGE_MAC_VLAN_ADD);
7714 	} else {
7715 		hclge_cmd_reuse_desc(&mc_desc[0], false);
7716 		mc_desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
7717 		hclge_cmd_reuse_desc(&mc_desc[1], false);
7718 		mc_desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
7719 		hclge_cmd_reuse_desc(&mc_desc[2], false);
7720 		mc_desc[2].flag &= cpu_to_le16(~HCLGE_CMD_FLAG_NEXT);
7721 		memcpy(mc_desc[0].data, req,
7722 		       sizeof(struct hclge_mac_vlan_tbl_entry_cmd));
7723 		ret = hclge_cmd_send(&hdev->hw, mc_desc, 3);
7724 		resp_code = (le32_to_cpu(mc_desc[0].data[0]) >> 8) & 0xff;
7725 		retval = le16_to_cpu(mc_desc[0].retval);
7726 
7727 		cfg_status = hclge_get_mac_vlan_cmd_status(vport, retval,
7728 							   resp_code,
7729 							   HCLGE_MAC_VLAN_ADD);
7730 	}
7731 
7732 	if (ret) {
7733 		dev_err(&hdev->pdev->dev,
7734 			"add mac addr failed for cmd_send, ret =%d.\n",
7735 			ret);
7736 		return ret;
7737 	}
7738 
7739 	return cfg_status;
7740 }
7741 
7742 static int hclge_set_umv_space(struct hclge_dev *hdev, u16 space_size,
7743 			       u16 *allocated_size)
7744 {
7745 	struct hclge_umv_spc_alc_cmd *req;
7746 	struct hclge_desc desc;
7747 	int ret;
7748 
7749 	req = (struct hclge_umv_spc_alc_cmd *)desc.data;
7750 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_ALLOCATE, false);
7751 
7752 	req->space_size = cpu_to_le32(space_size);
7753 
7754 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7755 	if (ret) {
7756 		dev_err(&hdev->pdev->dev, "failed to set umv space, ret = %d\n",
7757 			ret);
7758 		return ret;
7759 	}
7760 
7761 	*allocated_size = le32_to_cpu(desc.data[1]);
7762 
7763 	return 0;
7764 }
7765 
7766 static int hclge_init_umv_space(struct hclge_dev *hdev)
7767 {
7768 	u16 allocated_size = 0;
7769 	int ret;
7770 
7771 	ret = hclge_set_umv_space(hdev, hdev->wanted_umv_size, &allocated_size);
7772 	if (ret)
7773 		return ret;
7774 
7775 	if (allocated_size < hdev->wanted_umv_size)
7776 		dev_warn(&hdev->pdev->dev,
7777 			 "failed to alloc umv space, want %u, get %u\n",
7778 			 hdev->wanted_umv_size, allocated_size);
7779 
7780 	hdev->max_umv_size = allocated_size;
7781 	hdev->priv_umv_size = hdev->max_umv_size / (hdev->num_alloc_vport + 1);
7782 	hdev->share_umv_size = hdev->priv_umv_size +
7783 			hdev->max_umv_size % (hdev->num_alloc_vport + 1);
7784 
7785 	return 0;
7786 }
7787 
7788 static void hclge_reset_umv_space(struct hclge_dev *hdev)
7789 {
7790 	struct hclge_vport *vport;
7791 	int i;
7792 
7793 	for (i = 0; i < hdev->num_alloc_vport; i++) {
7794 		vport = &hdev->vport[i];
7795 		vport->used_umv_num = 0;
7796 	}
7797 
7798 	mutex_lock(&hdev->vport_lock);
7799 	hdev->share_umv_size = hdev->priv_umv_size +
7800 			hdev->max_umv_size % (hdev->num_alloc_vport + 1);
7801 	mutex_unlock(&hdev->vport_lock);
7802 }
7803 
7804 static bool hclge_is_umv_space_full(struct hclge_vport *vport, bool need_lock)
7805 {
7806 	struct hclge_dev *hdev = vport->back;
7807 	bool is_full;
7808 
7809 	if (need_lock)
7810 		mutex_lock(&hdev->vport_lock);
7811 
7812 	is_full = (vport->used_umv_num >= hdev->priv_umv_size &&
7813 		   hdev->share_umv_size == 0);
7814 
7815 	if (need_lock)
7816 		mutex_unlock(&hdev->vport_lock);
7817 
7818 	return is_full;
7819 }
7820 
7821 static void hclge_update_umv_space(struct hclge_vport *vport, bool is_free)
7822 {
7823 	struct hclge_dev *hdev = vport->back;
7824 
7825 	if (is_free) {
7826 		if (vport->used_umv_num > hdev->priv_umv_size)
7827 			hdev->share_umv_size++;
7828 
7829 		if (vport->used_umv_num > 0)
7830 			vport->used_umv_num--;
7831 	} else {
7832 		if (vport->used_umv_num >= hdev->priv_umv_size &&
7833 		    hdev->share_umv_size > 0)
7834 			hdev->share_umv_size--;
7835 		vport->used_umv_num++;
7836 	}
7837 }
7838 
7839 static struct hclge_mac_node *hclge_find_mac_node(struct list_head *list,
7840 						  const u8 *mac_addr)
7841 {
7842 	struct hclge_mac_node *mac_node, *tmp;
7843 
7844 	list_for_each_entry_safe(mac_node, tmp, list, node)
7845 		if (ether_addr_equal(mac_addr, mac_node->mac_addr))
7846 			return mac_node;
7847 
7848 	return NULL;
7849 }
7850 
7851 static void hclge_update_mac_node(struct hclge_mac_node *mac_node,
7852 				  enum HCLGE_MAC_NODE_STATE state)
7853 {
7854 	switch (state) {
7855 	/* from set_rx_mode or tmp_add_list */
7856 	case HCLGE_MAC_TO_ADD:
7857 		if (mac_node->state == HCLGE_MAC_TO_DEL)
7858 			mac_node->state = HCLGE_MAC_ACTIVE;
7859 		break;
7860 	/* only from set_rx_mode */
7861 	case HCLGE_MAC_TO_DEL:
7862 		if (mac_node->state == HCLGE_MAC_TO_ADD) {
7863 			list_del(&mac_node->node);
7864 			kfree(mac_node);
7865 		} else {
7866 			mac_node->state = HCLGE_MAC_TO_DEL;
7867 		}
7868 		break;
7869 	/* only from tmp_add_list, the mac_node->state won't be
7870 	 * ACTIVE.
7871 	 */
7872 	case HCLGE_MAC_ACTIVE:
7873 		if (mac_node->state == HCLGE_MAC_TO_ADD)
7874 			mac_node->state = HCLGE_MAC_ACTIVE;
7875 
7876 		break;
7877 	}
7878 }
7879 
7880 int hclge_update_mac_list(struct hclge_vport *vport,
7881 			  enum HCLGE_MAC_NODE_STATE state,
7882 			  enum HCLGE_MAC_ADDR_TYPE mac_type,
7883 			  const unsigned char *addr)
7884 {
7885 	struct hclge_dev *hdev = vport->back;
7886 	struct hclge_mac_node *mac_node;
7887 	struct list_head *list;
7888 
7889 	list = (mac_type == HCLGE_MAC_ADDR_UC) ?
7890 		&vport->uc_mac_list : &vport->mc_mac_list;
7891 
7892 	spin_lock_bh(&vport->mac_list_lock);
7893 
7894 	/* if the mac addr is already in the mac list, no need to add a new
7895 	 * one into it, just check the mac addr state, convert it to a new
7896 	 * new state, or just remove it, or do nothing.
7897 	 */
7898 	mac_node = hclge_find_mac_node(list, addr);
7899 	if (mac_node) {
7900 		hclge_update_mac_node(mac_node, state);
7901 		spin_unlock_bh(&vport->mac_list_lock);
7902 		set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state);
7903 		return 0;
7904 	}
7905 
7906 	/* if this address is never added, unnecessary to delete */
7907 	if (state == HCLGE_MAC_TO_DEL) {
7908 		spin_unlock_bh(&vport->mac_list_lock);
7909 		dev_err(&hdev->pdev->dev,
7910 			"failed to delete address %pM from mac list\n",
7911 			addr);
7912 		return -ENOENT;
7913 	}
7914 
7915 	mac_node = kzalloc(sizeof(*mac_node), GFP_ATOMIC);
7916 	if (!mac_node) {
7917 		spin_unlock_bh(&vport->mac_list_lock);
7918 		return -ENOMEM;
7919 	}
7920 
7921 	set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state);
7922 
7923 	mac_node->state = state;
7924 	ether_addr_copy(mac_node->mac_addr, addr);
7925 	list_add_tail(&mac_node->node, list);
7926 
7927 	spin_unlock_bh(&vport->mac_list_lock);
7928 
7929 	return 0;
7930 }
7931 
7932 static int hclge_add_uc_addr(struct hnae3_handle *handle,
7933 			     const unsigned char *addr)
7934 {
7935 	struct hclge_vport *vport = hclge_get_vport(handle);
7936 
7937 	return hclge_update_mac_list(vport, HCLGE_MAC_TO_ADD, HCLGE_MAC_ADDR_UC,
7938 				     addr);
7939 }
7940 
7941 int hclge_add_uc_addr_common(struct hclge_vport *vport,
7942 			     const unsigned char *addr)
7943 {
7944 	struct hclge_dev *hdev = vport->back;
7945 	struct hclge_mac_vlan_tbl_entry_cmd req;
7946 	struct hclge_desc desc;
7947 	u16 egress_port = 0;
7948 	int ret;
7949 
7950 	/* mac addr check */
7951 	if (is_zero_ether_addr(addr) ||
7952 	    is_broadcast_ether_addr(addr) ||
7953 	    is_multicast_ether_addr(addr)) {
7954 		dev_err(&hdev->pdev->dev,
7955 			"Set_uc mac err! invalid mac:%pM. is_zero:%d,is_br=%d,is_mul=%d\n",
7956 			 addr, is_zero_ether_addr(addr),
7957 			 is_broadcast_ether_addr(addr),
7958 			 is_multicast_ether_addr(addr));
7959 		return -EINVAL;
7960 	}
7961 
7962 	memset(&req, 0, sizeof(req));
7963 
7964 	hnae3_set_field(egress_port, HCLGE_MAC_EPORT_VFID_M,
7965 			HCLGE_MAC_EPORT_VFID_S, vport->vport_id);
7966 
7967 	req.egress_port = cpu_to_le16(egress_port);
7968 
7969 	hclge_prepare_mac_addr(&req, addr, false);
7970 
7971 	/* Lookup the mac address in the mac_vlan table, and add
7972 	 * it if the entry is inexistent. Repeated unicast entry
7973 	 * is not allowed in the mac vlan table.
7974 	 */
7975 	ret = hclge_lookup_mac_vlan_tbl(vport, &req, &desc, false);
7976 	if (ret == -ENOENT) {
7977 		mutex_lock(&hdev->vport_lock);
7978 		if (!hclge_is_umv_space_full(vport, false)) {
7979 			ret = hclge_add_mac_vlan_tbl(vport, &req, NULL);
7980 			if (!ret)
7981 				hclge_update_umv_space(vport, false);
7982 			mutex_unlock(&hdev->vport_lock);
7983 			return ret;
7984 		}
7985 		mutex_unlock(&hdev->vport_lock);
7986 
7987 		if (!(vport->overflow_promisc_flags & HNAE3_OVERFLOW_UPE))
7988 			dev_err(&hdev->pdev->dev, "UC MAC table full(%u)\n",
7989 				hdev->priv_umv_size);
7990 
7991 		return -ENOSPC;
7992 	}
7993 
7994 	/* check if we just hit the duplicate */
7995 	if (!ret) {
7996 		dev_warn(&hdev->pdev->dev, "VF %u mac(%pM) exists\n",
7997 			 vport->vport_id, addr);
7998 		return 0;
7999 	}
8000 
8001 	dev_err(&hdev->pdev->dev,
8002 		"PF failed to add unicast entry(%pM) in the MAC table\n",
8003 		addr);
8004 
8005 	return ret;
8006 }
8007 
8008 static int hclge_rm_uc_addr(struct hnae3_handle *handle,
8009 			    const unsigned char *addr)
8010 {
8011 	struct hclge_vport *vport = hclge_get_vport(handle);
8012 
8013 	return hclge_update_mac_list(vport, HCLGE_MAC_TO_DEL, HCLGE_MAC_ADDR_UC,
8014 				     addr);
8015 }
8016 
8017 int hclge_rm_uc_addr_common(struct hclge_vport *vport,
8018 			    const unsigned char *addr)
8019 {
8020 	struct hclge_dev *hdev = vport->back;
8021 	struct hclge_mac_vlan_tbl_entry_cmd req;
8022 	int ret;
8023 
8024 	/* mac addr check */
8025 	if (is_zero_ether_addr(addr) ||
8026 	    is_broadcast_ether_addr(addr) ||
8027 	    is_multicast_ether_addr(addr)) {
8028 		dev_dbg(&hdev->pdev->dev, "Remove mac err! invalid mac:%pM.\n",
8029 			addr);
8030 		return -EINVAL;
8031 	}
8032 
8033 	memset(&req, 0, sizeof(req));
8034 	hnae3_set_bit(req.entry_type, HCLGE_MAC_VLAN_BIT0_EN_B, 0);
8035 	hclge_prepare_mac_addr(&req, addr, false);
8036 	ret = hclge_remove_mac_vlan_tbl(vport, &req);
8037 	if (!ret) {
8038 		mutex_lock(&hdev->vport_lock);
8039 		hclge_update_umv_space(vport, true);
8040 		mutex_unlock(&hdev->vport_lock);
8041 	} else if (ret == -ENOENT) {
8042 		ret = 0;
8043 	}
8044 
8045 	return ret;
8046 }
8047 
8048 static int hclge_add_mc_addr(struct hnae3_handle *handle,
8049 			     const unsigned char *addr)
8050 {
8051 	struct hclge_vport *vport = hclge_get_vport(handle);
8052 
8053 	return hclge_update_mac_list(vport, HCLGE_MAC_TO_ADD, HCLGE_MAC_ADDR_MC,
8054 				     addr);
8055 }
8056 
8057 int hclge_add_mc_addr_common(struct hclge_vport *vport,
8058 			     const unsigned char *addr)
8059 {
8060 	struct hclge_dev *hdev = vport->back;
8061 	struct hclge_mac_vlan_tbl_entry_cmd req;
8062 	struct hclge_desc desc[3];
8063 	int status;
8064 
8065 	/* mac addr check */
8066 	if (!is_multicast_ether_addr(addr)) {
8067 		dev_err(&hdev->pdev->dev,
8068 			"Add mc mac err! invalid mac:%pM.\n",
8069 			 addr);
8070 		return -EINVAL;
8071 	}
8072 	memset(&req, 0, sizeof(req));
8073 	hclge_prepare_mac_addr(&req, addr, true);
8074 	status = hclge_lookup_mac_vlan_tbl(vport, &req, desc, true);
8075 	if (status) {
8076 		/* This mac addr do not exist, add new entry for it */
8077 		memset(desc[0].data, 0, sizeof(desc[0].data));
8078 		memset(desc[1].data, 0, sizeof(desc[0].data));
8079 		memset(desc[2].data, 0, sizeof(desc[0].data));
8080 	}
8081 	status = hclge_update_desc_vfid(desc, vport->vport_id, false);
8082 	if (status)
8083 		return status;
8084 	status = hclge_add_mac_vlan_tbl(vport, &req, desc);
8085 
8086 	/* if already overflow, not to print each time */
8087 	if (status == -ENOSPC &&
8088 	    !(vport->overflow_promisc_flags & HNAE3_OVERFLOW_MPE))
8089 		dev_err(&hdev->pdev->dev, "mc mac vlan table is full\n");
8090 
8091 	return status;
8092 }
8093 
8094 static int hclge_rm_mc_addr(struct hnae3_handle *handle,
8095 			    const unsigned char *addr)
8096 {
8097 	struct hclge_vport *vport = hclge_get_vport(handle);
8098 
8099 	return hclge_update_mac_list(vport, HCLGE_MAC_TO_DEL, HCLGE_MAC_ADDR_MC,
8100 				     addr);
8101 }
8102 
8103 int hclge_rm_mc_addr_common(struct hclge_vport *vport,
8104 			    const unsigned char *addr)
8105 {
8106 	struct hclge_dev *hdev = vport->back;
8107 	struct hclge_mac_vlan_tbl_entry_cmd req;
8108 	enum hclge_cmd_status status;
8109 	struct hclge_desc desc[3];
8110 
8111 	/* mac addr check */
8112 	if (!is_multicast_ether_addr(addr)) {
8113 		dev_dbg(&hdev->pdev->dev,
8114 			"Remove mc mac err! invalid mac:%pM.\n",
8115 			 addr);
8116 		return -EINVAL;
8117 	}
8118 
8119 	memset(&req, 0, sizeof(req));
8120 	hclge_prepare_mac_addr(&req, addr, true);
8121 	status = hclge_lookup_mac_vlan_tbl(vport, &req, desc, true);
8122 	if (!status) {
8123 		/* This mac addr exist, remove this handle's VFID for it */
8124 		status = hclge_update_desc_vfid(desc, vport->vport_id, true);
8125 		if (status)
8126 			return status;
8127 
8128 		if (hclge_is_all_function_id_zero(desc))
8129 			/* All the vfid is zero, so need to delete this entry */
8130 			status = hclge_remove_mac_vlan_tbl(vport, &req);
8131 		else
8132 			/* Not all the vfid is zero, update the vfid */
8133 			status = hclge_add_mac_vlan_tbl(vport, &req, desc);
8134 
8135 	} else if (status == -ENOENT) {
8136 		status = 0;
8137 	}
8138 
8139 	return status;
8140 }
8141 
8142 static void hclge_sync_vport_mac_list(struct hclge_vport *vport,
8143 				      struct list_head *list,
8144 				      int (*sync)(struct hclge_vport *,
8145 						  const unsigned char *))
8146 {
8147 	struct hclge_mac_node *mac_node, *tmp;
8148 	int ret;
8149 
8150 	list_for_each_entry_safe(mac_node, tmp, list, node) {
8151 		ret = sync(vport, mac_node->mac_addr);
8152 		if (!ret) {
8153 			mac_node->state = HCLGE_MAC_ACTIVE;
8154 		} else {
8155 			set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE,
8156 				&vport->state);
8157 			break;
8158 		}
8159 	}
8160 }
8161 
8162 static void hclge_unsync_vport_mac_list(struct hclge_vport *vport,
8163 					struct list_head *list,
8164 					int (*unsync)(struct hclge_vport *,
8165 						      const unsigned char *))
8166 {
8167 	struct hclge_mac_node *mac_node, *tmp;
8168 	int ret;
8169 
8170 	list_for_each_entry_safe(mac_node, tmp, list, node) {
8171 		ret = unsync(vport, mac_node->mac_addr);
8172 		if (!ret || ret == -ENOENT) {
8173 			list_del(&mac_node->node);
8174 			kfree(mac_node);
8175 		} else {
8176 			set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE,
8177 				&vport->state);
8178 			break;
8179 		}
8180 	}
8181 }
8182 
8183 static bool hclge_sync_from_add_list(struct list_head *add_list,
8184 				     struct list_head *mac_list)
8185 {
8186 	struct hclge_mac_node *mac_node, *tmp, *new_node;
8187 	bool all_added = true;
8188 
8189 	list_for_each_entry_safe(mac_node, tmp, add_list, node) {
8190 		if (mac_node->state == HCLGE_MAC_TO_ADD)
8191 			all_added = false;
8192 
8193 		/* if the mac address from tmp_add_list is not in the
8194 		 * uc/mc_mac_list, it means have received a TO_DEL request
8195 		 * during the time window of adding the mac address into mac
8196 		 * table. if mac_node state is ACTIVE, then change it to TO_DEL,
8197 		 * then it will be removed at next time. else it must be TO_ADD,
8198 		 * this address hasn't been added into mac table,
8199 		 * so just remove the mac node.
8200 		 */
8201 		new_node = hclge_find_mac_node(mac_list, mac_node->mac_addr);
8202 		if (new_node) {
8203 			hclge_update_mac_node(new_node, mac_node->state);
8204 			list_del(&mac_node->node);
8205 			kfree(mac_node);
8206 		} else if (mac_node->state == HCLGE_MAC_ACTIVE) {
8207 			mac_node->state = HCLGE_MAC_TO_DEL;
8208 			list_del(&mac_node->node);
8209 			list_add_tail(&mac_node->node, mac_list);
8210 		} else {
8211 			list_del(&mac_node->node);
8212 			kfree(mac_node);
8213 		}
8214 	}
8215 
8216 	return all_added;
8217 }
8218 
8219 static void hclge_sync_from_del_list(struct list_head *del_list,
8220 				     struct list_head *mac_list)
8221 {
8222 	struct hclge_mac_node *mac_node, *tmp, *new_node;
8223 
8224 	list_for_each_entry_safe(mac_node, tmp, del_list, node) {
8225 		new_node = hclge_find_mac_node(mac_list, mac_node->mac_addr);
8226 		if (new_node) {
8227 			/* If the mac addr exists in the mac list, it means
8228 			 * received a new TO_ADD request during the time window
8229 			 * of configuring the mac address. For the mac node
8230 			 * state is TO_ADD, and the address is already in the
8231 			 * in the hardware(due to delete fail), so we just need
8232 			 * to change the mac node state to ACTIVE.
8233 			 */
8234 			new_node->state = HCLGE_MAC_ACTIVE;
8235 			list_del(&mac_node->node);
8236 			kfree(mac_node);
8237 		} else {
8238 			list_del(&mac_node->node);
8239 			list_add_tail(&mac_node->node, mac_list);
8240 		}
8241 	}
8242 }
8243 
8244 static void hclge_update_overflow_flags(struct hclge_vport *vport,
8245 					enum HCLGE_MAC_ADDR_TYPE mac_type,
8246 					bool is_all_added)
8247 {
8248 	if (mac_type == HCLGE_MAC_ADDR_UC) {
8249 		if (is_all_added)
8250 			vport->overflow_promisc_flags &= ~HNAE3_OVERFLOW_UPE;
8251 		else
8252 			vport->overflow_promisc_flags |= HNAE3_OVERFLOW_UPE;
8253 	} else {
8254 		if (is_all_added)
8255 			vport->overflow_promisc_flags &= ~HNAE3_OVERFLOW_MPE;
8256 		else
8257 			vport->overflow_promisc_flags |= HNAE3_OVERFLOW_MPE;
8258 	}
8259 }
8260 
8261 static void hclge_sync_vport_mac_table(struct hclge_vport *vport,
8262 				       enum HCLGE_MAC_ADDR_TYPE mac_type)
8263 {
8264 	struct hclge_mac_node *mac_node, *tmp, *new_node;
8265 	struct list_head tmp_add_list, tmp_del_list;
8266 	struct list_head *list;
8267 	bool all_added;
8268 
8269 	INIT_LIST_HEAD(&tmp_add_list);
8270 	INIT_LIST_HEAD(&tmp_del_list);
8271 
8272 	/* move the mac addr to the tmp_add_list and tmp_del_list, then
8273 	 * we can add/delete these mac addr outside the spin lock
8274 	 */
8275 	list = (mac_type == HCLGE_MAC_ADDR_UC) ?
8276 		&vport->uc_mac_list : &vport->mc_mac_list;
8277 
8278 	spin_lock_bh(&vport->mac_list_lock);
8279 
8280 	list_for_each_entry_safe(mac_node, tmp, list, node) {
8281 		switch (mac_node->state) {
8282 		case HCLGE_MAC_TO_DEL:
8283 			list_del(&mac_node->node);
8284 			list_add_tail(&mac_node->node, &tmp_del_list);
8285 			break;
8286 		case HCLGE_MAC_TO_ADD:
8287 			new_node = kzalloc(sizeof(*new_node), GFP_ATOMIC);
8288 			if (!new_node)
8289 				goto stop_traverse;
8290 			ether_addr_copy(new_node->mac_addr, mac_node->mac_addr);
8291 			new_node->state = mac_node->state;
8292 			list_add_tail(&new_node->node, &tmp_add_list);
8293 			break;
8294 		default:
8295 			break;
8296 		}
8297 	}
8298 
8299 stop_traverse:
8300 	spin_unlock_bh(&vport->mac_list_lock);
8301 
8302 	/* delete first, in order to get max mac table space for adding */
8303 	if (mac_type == HCLGE_MAC_ADDR_UC) {
8304 		hclge_unsync_vport_mac_list(vport, &tmp_del_list,
8305 					    hclge_rm_uc_addr_common);
8306 		hclge_sync_vport_mac_list(vport, &tmp_add_list,
8307 					  hclge_add_uc_addr_common);
8308 	} else {
8309 		hclge_unsync_vport_mac_list(vport, &tmp_del_list,
8310 					    hclge_rm_mc_addr_common);
8311 		hclge_sync_vport_mac_list(vport, &tmp_add_list,
8312 					  hclge_add_mc_addr_common);
8313 	}
8314 
8315 	/* if some mac addresses were added/deleted fail, move back to the
8316 	 * mac_list, and retry at next time.
8317 	 */
8318 	spin_lock_bh(&vport->mac_list_lock);
8319 
8320 	hclge_sync_from_del_list(&tmp_del_list, list);
8321 	all_added = hclge_sync_from_add_list(&tmp_add_list, list);
8322 
8323 	spin_unlock_bh(&vport->mac_list_lock);
8324 
8325 	hclge_update_overflow_flags(vport, mac_type, all_added);
8326 }
8327 
8328 static bool hclge_need_sync_mac_table(struct hclge_vport *vport)
8329 {
8330 	struct hclge_dev *hdev = vport->back;
8331 
8332 	if (test_bit(vport->vport_id, hdev->vport_config_block))
8333 		return false;
8334 
8335 	if (test_and_clear_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state))
8336 		return true;
8337 
8338 	return false;
8339 }
8340 
8341 static void hclge_sync_mac_table(struct hclge_dev *hdev)
8342 {
8343 	int i;
8344 
8345 	for (i = 0; i < hdev->num_alloc_vport; i++) {
8346 		struct hclge_vport *vport = &hdev->vport[i];
8347 
8348 		if (!hclge_need_sync_mac_table(vport))
8349 			continue;
8350 
8351 		hclge_sync_vport_mac_table(vport, HCLGE_MAC_ADDR_UC);
8352 		hclge_sync_vport_mac_table(vport, HCLGE_MAC_ADDR_MC);
8353 	}
8354 }
8355 
8356 static void hclge_build_del_list(struct list_head *list,
8357 				 bool is_del_list,
8358 				 struct list_head *tmp_del_list)
8359 {
8360 	struct hclge_mac_node *mac_cfg, *tmp;
8361 
8362 	list_for_each_entry_safe(mac_cfg, tmp, list, node) {
8363 		switch (mac_cfg->state) {
8364 		case HCLGE_MAC_TO_DEL:
8365 		case HCLGE_MAC_ACTIVE:
8366 			list_del(&mac_cfg->node);
8367 			list_add_tail(&mac_cfg->node, tmp_del_list);
8368 			break;
8369 		case HCLGE_MAC_TO_ADD:
8370 			if (is_del_list) {
8371 				list_del(&mac_cfg->node);
8372 				kfree(mac_cfg);
8373 			}
8374 			break;
8375 		}
8376 	}
8377 }
8378 
8379 static void hclge_unsync_del_list(struct hclge_vport *vport,
8380 				  int (*unsync)(struct hclge_vport *vport,
8381 						const unsigned char *addr),
8382 				  bool is_del_list,
8383 				  struct list_head *tmp_del_list)
8384 {
8385 	struct hclge_mac_node *mac_cfg, *tmp;
8386 	int ret;
8387 
8388 	list_for_each_entry_safe(mac_cfg, tmp, tmp_del_list, node) {
8389 		ret = unsync(vport, mac_cfg->mac_addr);
8390 		if (!ret || ret == -ENOENT) {
8391 			/* clear all mac addr from hardware, but remain these
8392 			 * mac addr in the mac list, and restore them after
8393 			 * vf reset finished.
8394 			 */
8395 			if (!is_del_list &&
8396 			    mac_cfg->state == HCLGE_MAC_ACTIVE) {
8397 				mac_cfg->state = HCLGE_MAC_TO_ADD;
8398 			} else {
8399 				list_del(&mac_cfg->node);
8400 				kfree(mac_cfg);
8401 			}
8402 		} else if (is_del_list) {
8403 			mac_cfg->state = HCLGE_MAC_TO_DEL;
8404 		}
8405 	}
8406 }
8407 
8408 void hclge_rm_vport_all_mac_table(struct hclge_vport *vport, bool is_del_list,
8409 				  enum HCLGE_MAC_ADDR_TYPE mac_type)
8410 {
8411 	int (*unsync)(struct hclge_vport *vport, const unsigned char *addr);
8412 	struct hclge_dev *hdev = vport->back;
8413 	struct list_head tmp_del_list, *list;
8414 
8415 	if (mac_type == HCLGE_MAC_ADDR_UC) {
8416 		list = &vport->uc_mac_list;
8417 		unsync = hclge_rm_uc_addr_common;
8418 	} else {
8419 		list = &vport->mc_mac_list;
8420 		unsync = hclge_rm_mc_addr_common;
8421 	}
8422 
8423 	INIT_LIST_HEAD(&tmp_del_list);
8424 
8425 	if (!is_del_list)
8426 		set_bit(vport->vport_id, hdev->vport_config_block);
8427 
8428 	spin_lock_bh(&vport->mac_list_lock);
8429 
8430 	hclge_build_del_list(list, is_del_list, &tmp_del_list);
8431 
8432 	spin_unlock_bh(&vport->mac_list_lock);
8433 
8434 	hclge_unsync_del_list(vport, unsync, is_del_list, &tmp_del_list);
8435 
8436 	spin_lock_bh(&vport->mac_list_lock);
8437 
8438 	hclge_sync_from_del_list(&tmp_del_list, list);
8439 
8440 	spin_unlock_bh(&vport->mac_list_lock);
8441 }
8442 
8443 /* remove all mac address when uninitailize */
8444 static void hclge_uninit_vport_mac_list(struct hclge_vport *vport,
8445 					enum HCLGE_MAC_ADDR_TYPE mac_type)
8446 {
8447 	struct hclge_mac_node *mac_node, *tmp;
8448 	struct hclge_dev *hdev = vport->back;
8449 	struct list_head tmp_del_list, *list;
8450 
8451 	INIT_LIST_HEAD(&tmp_del_list);
8452 
8453 	list = (mac_type == HCLGE_MAC_ADDR_UC) ?
8454 		&vport->uc_mac_list : &vport->mc_mac_list;
8455 
8456 	spin_lock_bh(&vport->mac_list_lock);
8457 
8458 	list_for_each_entry_safe(mac_node, tmp, list, node) {
8459 		switch (mac_node->state) {
8460 		case HCLGE_MAC_TO_DEL:
8461 		case HCLGE_MAC_ACTIVE:
8462 			list_del(&mac_node->node);
8463 			list_add_tail(&mac_node->node, &tmp_del_list);
8464 			break;
8465 		case HCLGE_MAC_TO_ADD:
8466 			list_del(&mac_node->node);
8467 			kfree(mac_node);
8468 			break;
8469 		}
8470 	}
8471 
8472 	spin_unlock_bh(&vport->mac_list_lock);
8473 
8474 	if (mac_type == HCLGE_MAC_ADDR_UC)
8475 		hclge_unsync_vport_mac_list(vport, &tmp_del_list,
8476 					    hclge_rm_uc_addr_common);
8477 	else
8478 		hclge_unsync_vport_mac_list(vport, &tmp_del_list,
8479 					    hclge_rm_mc_addr_common);
8480 
8481 	if (!list_empty(&tmp_del_list))
8482 		dev_warn(&hdev->pdev->dev,
8483 			 "uninit %s mac list for vport %u not completely.\n",
8484 			 mac_type == HCLGE_MAC_ADDR_UC ? "uc" : "mc",
8485 			 vport->vport_id);
8486 
8487 	list_for_each_entry_safe(mac_node, tmp, &tmp_del_list, node) {
8488 		list_del(&mac_node->node);
8489 		kfree(mac_node);
8490 	}
8491 }
8492 
8493 static void hclge_uninit_mac_table(struct hclge_dev *hdev)
8494 {
8495 	struct hclge_vport *vport;
8496 	int i;
8497 
8498 	for (i = 0; i < hdev->num_alloc_vport; i++) {
8499 		vport = &hdev->vport[i];
8500 		hclge_uninit_vport_mac_list(vport, HCLGE_MAC_ADDR_UC);
8501 		hclge_uninit_vport_mac_list(vport, HCLGE_MAC_ADDR_MC);
8502 	}
8503 }
8504 
8505 static int hclge_get_mac_ethertype_cmd_status(struct hclge_dev *hdev,
8506 					      u16 cmdq_resp, u8 resp_code)
8507 {
8508 #define HCLGE_ETHERTYPE_SUCCESS_ADD		0
8509 #define HCLGE_ETHERTYPE_ALREADY_ADD		1
8510 #define HCLGE_ETHERTYPE_MGR_TBL_OVERFLOW	2
8511 #define HCLGE_ETHERTYPE_KEY_CONFLICT		3
8512 
8513 	int return_status;
8514 
8515 	if (cmdq_resp) {
8516 		dev_err(&hdev->pdev->dev,
8517 			"cmdq execute failed for get_mac_ethertype_cmd_status, status=%u.\n",
8518 			cmdq_resp);
8519 		return -EIO;
8520 	}
8521 
8522 	switch (resp_code) {
8523 	case HCLGE_ETHERTYPE_SUCCESS_ADD:
8524 	case HCLGE_ETHERTYPE_ALREADY_ADD:
8525 		return_status = 0;
8526 		break;
8527 	case HCLGE_ETHERTYPE_MGR_TBL_OVERFLOW:
8528 		dev_err(&hdev->pdev->dev,
8529 			"add mac ethertype failed for manager table overflow.\n");
8530 		return_status = -EIO;
8531 		break;
8532 	case HCLGE_ETHERTYPE_KEY_CONFLICT:
8533 		dev_err(&hdev->pdev->dev,
8534 			"add mac ethertype failed for key conflict.\n");
8535 		return_status = -EIO;
8536 		break;
8537 	default:
8538 		dev_err(&hdev->pdev->dev,
8539 			"add mac ethertype failed for undefined, code=%u.\n",
8540 			resp_code);
8541 		return_status = -EIO;
8542 	}
8543 
8544 	return return_status;
8545 }
8546 
8547 static bool hclge_check_vf_mac_exist(struct hclge_vport *vport, int vf_idx,
8548 				     u8 *mac_addr)
8549 {
8550 	struct hclge_mac_vlan_tbl_entry_cmd req;
8551 	struct hclge_dev *hdev = vport->back;
8552 	struct hclge_desc desc;
8553 	u16 egress_port = 0;
8554 	int i;
8555 
8556 	if (is_zero_ether_addr(mac_addr))
8557 		return false;
8558 
8559 	memset(&req, 0, sizeof(req));
8560 	hnae3_set_field(egress_port, HCLGE_MAC_EPORT_VFID_M,
8561 			HCLGE_MAC_EPORT_VFID_S, vport->vport_id);
8562 	req.egress_port = cpu_to_le16(egress_port);
8563 	hclge_prepare_mac_addr(&req, mac_addr, false);
8564 
8565 	if (hclge_lookup_mac_vlan_tbl(vport, &req, &desc, false) != -ENOENT)
8566 		return true;
8567 
8568 	vf_idx += HCLGE_VF_VPORT_START_NUM;
8569 	for (i = hdev->num_vmdq_vport + 1; i < hdev->num_alloc_vport; i++)
8570 		if (i != vf_idx &&
8571 		    ether_addr_equal(mac_addr, hdev->vport[i].vf_info.mac))
8572 			return true;
8573 
8574 	return false;
8575 }
8576 
8577 static int hclge_set_vf_mac(struct hnae3_handle *handle, int vf,
8578 			    u8 *mac_addr)
8579 {
8580 	struct hclge_vport *vport = hclge_get_vport(handle);
8581 	struct hclge_dev *hdev = vport->back;
8582 
8583 	vport = hclge_get_vf_vport(hdev, vf);
8584 	if (!vport)
8585 		return -EINVAL;
8586 
8587 	if (ether_addr_equal(mac_addr, vport->vf_info.mac)) {
8588 		dev_info(&hdev->pdev->dev,
8589 			 "Specified MAC(=%pM) is same as before, no change committed!\n",
8590 			 mac_addr);
8591 		return 0;
8592 	}
8593 
8594 	if (hclge_check_vf_mac_exist(vport, vf, mac_addr)) {
8595 		dev_err(&hdev->pdev->dev, "Specified MAC(=%pM) exists!\n",
8596 			mac_addr);
8597 		return -EEXIST;
8598 	}
8599 
8600 	ether_addr_copy(vport->vf_info.mac, mac_addr);
8601 
8602 	if (test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) {
8603 		dev_info(&hdev->pdev->dev,
8604 			 "MAC of VF %d has been set to %pM, and it will be reinitialized!\n",
8605 			 vf, mac_addr);
8606 		return hclge_inform_reset_assert_to_vf(vport);
8607 	}
8608 
8609 	dev_info(&hdev->pdev->dev, "MAC of VF %d has been set to %pM\n",
8610 		 vf, mac_addr);
8611 	return 0;
8612 }
8613 
8614 static int hclge_add_mgr_tbl(struct hclge_dev *hdev,
8615 			     const struct hclge_mac_mgr_tbl_entry_cmd *req)
8616 {
8617 	struct hclge_desc desc;
8618 	u8 resp_code;
8619 	u16 retval;
8620 	int ret;
8621 
8622 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_ETHTYPE_ADD, false);
8623 	memcpy(desc.data, req, sizeof(struct hclge_mac_mgr_tbl_entry_cmd));
8624 
8625 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
8626 	if (ret) {
8627 		dev_err(&hdev->pdev->dev,
8628 			"add mac ethertype failed for cmd_send, ret =%d.\n",
8629 			ret);
8630 		return ret;
8631 	}
8632 
8633 	resp_code = (le32_to_cpu(desc.data[0]) >> 8) & 0xff;
8634 	retval = le16_to_cpu(desc.retval);
8635 
8636 	return hclge_get_mac_ethertype_cmd_status(hdev, retval, resp_code);
8637 }
8638 
8639 static int init_mgr_tbl(struct hclge_dev *hdev)
8640 {
8641 	int ret;
8642 	int i;
8643 
8644 	for (i = 0; i < ARRAY_SIZE(hclge_mgr_table); i++) {
8645 		ret = hclge_add_mgr_tbl(hdev, &hclge_mgr_table[i]);
8646 		if (ret) {
8647 			dev_err(&hdev->pdev->dev,
8648 				"add mac ethertype failed, ret =%d.\n",
8649 				ret);
8650 			return ret;
8651 		}
8652 	}
8653 
8654 	return 0;
8655 }
8656 
8657 static void hclge_get_mac_addr(struct hnae3_handle *handle, u8 *p)
8658 {
8659 	struct hclge_vport *vport = hclge_get_vport(handle);
8660 	struct hclge_dev *hdev = vport->back;
8661 
8662 	ether_addr_copy(p, hdev->hw.mac.mac_addr);
8663 }
8664 
8665 int hclge_update_mac_node_for_dev_addr(struct hclge_vport *vport,
8666 				       const u8 *old_addr, const u8 *new_addr)
8667 {
8668 	struct list_head *list = &vport->uc_mac_list;
8669 	struct hclge_mac_node *old_node, *new_node;
8670 
8671 	new_node = hclge_find_mac_node(list, new_addr);
8672 	if (!new_node) {
8673 		new_node = kzalloc(sizeof(*new_node), GFP_ATOMIC);
8674 		if (!new_node)
8675 			return -ENOMEM;
8676 
8677 		new_node->state = HCLGE_MAC_TO_ADD;
8678 		ether_addr_copy(new_node->mac_addr, new_addr);
8679 		list_add(&new_node->node, list);
8680 	} else {
8681 		if (new_node->state == HCLGE_MAC_TO_DEL)
8682 			new_node->state = HCLGE_MAC_ACTIVE;
8683 
8684 		/* make sure the new addr is in the list head, avoid dev
8685 		 * addr may be not re-added into mac table for the umv space
8686 		 * limitation after global/imp reset which will clear mac
8687 		 * table by hardware.
8688 		 */
8689 		list_move(&new_node->node, list);
8690 	}
8691 
8692 	if (old_addr && !ether_addr_equal(old_addr, new_addr)) {
8693 		old_node = hclge_find_mac_node(list, old_addr);
8694 		if (old_node) {
8695 			if (old_node->state == HCLGE_MAC_TO_ADD) {
8696 				list_del(&old_node->node);
8697 				kfree(old_node);
8698 			} else {
8699 				old_node->state = HCLGE_MAC_TO_DEL;
8700 			}
8701 		}
8702 	}
8703 
8704 	set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state);
8705 
8706 	return 0;
8707 }
8708 
8709 static int hclge_set_mac_addr(struct hnae3_handle *handle, void *p,
8710 			      bool is_first)
8711 {
8712 	const unsigned char *new_addr = (const unsigned char *)p;
8713 	struct hclge_vport *vport = hclge_get_vport(handle);
8714 	struct hclge_dev *hdev = vport->back;
8715 	unsigned char *old_addr = NULL;
8716 	int ret;
8717 
8718 	/* mac addr check */
8719 	if (is_zero_ether_addr(new_addr) ||
8720 	    is_broadcast_ether_addr(new_addr) ||
8721 	    is_multicast_ether_addr(new_addr)) {
8722 		dev_err(&hdev->pdev->dev,
8723 			"change uc mac err! invalid mac: %pM.\n",
8724 			 new_addr);
8725 		return -EINVAL;
8726 	}
8727 
8728 	ret = hclge_pause_addr_cfg(hdev, new_addr);
8729 	if (ret) {
8730 		dev_err(&hdev->pdev->dev,
8731 			"failed to configure mac pause address, ret = %d\n",
8732 			ret);
8733 		return ret;
8734 	}
8735 
8736 	if (!is_first)
8737 		old_addr = hdev->hw.mac.mac_addr;
8738 
8739 	spin_lock_bh(&vport->mac_list_lock);
8740 	ret = hclge_update_mac_node_for_dev_addr(vport, old_addr, new_addr);
8741 	if (ret) {
8742 		dev_err(&hdev->pdev->dev,
8743 			"failed to change the mac addr:%pM, ret = %d\n",
8744 			new_addr, ret);
8745 		spin_unlock_bh(&vport->mac_list_lock);
8746 
8747 		if (!is_first)
8748 			hclge_pause_addr_cfg(hdev, old_addr);
8749 
8750 		return ret;
8751 	}
8752 	/* we must update dev addr with spin lock protect, preventing dev addr
8753 	 * being removed by set_rx_mode path.
8754 	 */
8755 	ether_addr_copy(hdev->hw.mac.mac_addr, new_addr);
8756 	spin_unlock_bh(&vport->mac_list_lock);
8757 
8758 	hclge_task_schedule(hdev, 0);
8759 
8760 	return 0;
8761 }
8762 
8763 static int hclge_do_ioctl(struct hnae3_handle *handle, struct ifreq *ifr,
8764 			  int cmd)
8765 {
8766 	struct hclge_vport *vport = hclge_get_vport(handle);
8767 	struct hclge_dev *hdev = vport->back;
8768 
8769 	if (!hdev->hw.mac.phydev)
8770 		return -EOPNOTSUPP;
8771 
8772 	return phy_mii_ioctl(hdev->hw.mac.phydev, ifr, cmd);
8773 }
8774 
8775 static int hclge_set_vlan_filter_ctrl(struct hclge_dev *hdev, u8 vlan_type,
8776 				      u8 fe_type, bool filter_en, u8 vf_id)
8777 {
8778 	struct hclge_vlan_filter_ctrl_cmd *req;
8779 	struct hclge_desc desc;
8780 	int ret;
8781 
8782 	/* read current vlan filter parameter */
8783 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_FILTER_CTRL, true);
8784 	req = (struct hclge_vlan_filter_ctrl_cmd *)desc.data;
8785 	req->vlan_type = vlan_type;
8786 	req->vf_id = vf_id;
8787 
8788 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
8789 	if (ret) {
8790 		dev_err(&hdev->pdev->dev,
8791 			"failed to get vlan filter config, ret = %d.\n", ret);
8792 		return ret;
8793 	}
8794 
8795 	/* modify and write new config parameter */
8796 	hclge_cmd_reuse_desc(&desc, false);
8797 	req->vlan_fe = filter_en ?
8798 			(req->vlan_fe | fe_type) : (req->vlan_fe & ~fe_type);
8799 
8800 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
8801 	if (ret)
8802 		dev_err(&hdev->pdev->dev, "failed to set vlan filter, ret = %d.\n",
8803 			ret);
8804 
8805 	return ret;
8806 }
8807 
8808 #define HCLGE_FILTER_TYPE_VF		0
8809 #define HCLGE_FILTER_TYPE_PORT		1
8810 #define HCLGE_FILTER_FE_EGRESS_V1_B	BIT(0)
8811 #define HCLGE_FILTER_FE_NIC_INGRESS_B	BIT(0)
8812 #define HCLGE_FILTER_FE_NIC_EGRESS_B	BIT(1)
8813 #define HCLGE_FILTER_FE_ROCE_INGRESS_B	BIT(2)
8814 #define HCLGE_FILTER_FE_ROCE_EGRESS_B	BIT(3)
8815 #define HCLGE_FILTER_FE_EGRESS		(HCLGE_FILTER_FE_NIC_EGRESS_B \
8816 					| HCLGE_FILTER_FE_ROCE_EGRESS_B)
8817 #define HCLGE_FILTER_FE_INGRESS		(HCLGE_FILTER_FE_NIC_INGRESS_B \
8818 					| HCLGE_FILTER_FE_ROCE_INGRESS_B)
8819 
8820 static void hclge_enable_vlan_filter(struct hnae3_handle *handle, bool enable)
8821 {
8822 	struct hclge_vport *vport = hclge_get_vport(handle);
8823 	struct hclge_dev *hdev = vport->back;
8824 
8825 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
8826 		hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
8827 					   HCLGE_FILTER_FE_EGRESS, enable, 0);
8828 		hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT,
8829 					   HCLGE_FILTER_FE_INGRESS, enable, 0);
8830 	} else {
8831 		hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
8832 					   HCLGE_FILTER_FE_EGRESS_V1_B, enable,
8833 					   0);
8834 	}
8835 	if (enable)
8836 		handle->netdev_flags |= HNAE3_VLAN_FLTR;
8837 	else
8838 		handle->netdev_flags &= ~HNAE3_VLAN_FLTR;
8839 }
8840 
8841 static int hclge_set_vf_vlan_filter_cmd(struct hclge_dev *hdev, u16 vfid,
8842 					bool is_kill, u16 vlan,
8843 					struct hclge_desc *desc)
8844 {
8845 	struct hclge_vlan_filter_vf_cfg_cmd *req0;
8846 	struct hclge_vlan_filter_vf_cfg_cmd *req1;
8847 	u8 vf_byte_val;
8848 	u8 vf_byte_off;
8849 	int ret;
8850 
8851 	hclge_cmd_setup_basic_desc(&desc[0],
8852 				   HCLGE_OPC_VLAN_FILTER_VF_CFG, false);
8853 	hclge_cmd_setup_basic_desc(&desc[1],
8854 				   HCLGE_OPC_VLAN_FILTER_VF_CFG, false);
8855 
8856 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
8857 
8858 	vf_byte_off = vfid / 8;
8859 	vf_byte_val = 1 << (vfid % 8);
8860 
8861 	req0 = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[0].data;
8862 	req1 = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[1].data;
8863 
8864 	req0->vlan_id  = cpu_to_le16(vlan);
8865 	req0->vlan_cfg = is_kill;
8866 
8867 	if (vf_byte_off < HCLGE_MAX_VF_BYTES)
8868 		req0->vf_bitmap[vf_byte_off] = vf_byte_val;
8869 	else
8870 		req1->vf_bitmap[vf_byte_off - HCLGE_MAX_VF_BYTES] = vf_byte_val;
8871 
8872 	ret = hclge_cmd_send(&hdev->hw, desc, 2);
8873 	if (ret) {
8874 		dev_err(&hdev->pdev->dev,
8875 			"Send vf vlan command fail, ret =%d.\n",
8876 			ret);
8877 		return ret;
8878 	}
8879 
8880 	return 0;
8881 }
8882 
8883 static int hclge_check_vf_vlan_cmd_status(struct hclge_dev *hdev, u16 vfid,
8884 					  bool is_kill, struct hclge_desc *desc)
8885 {
8886 	struct hclge_vlan_filter_vf_cfg_cmd *req;
8887 
8888 	req = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[0].data;
8889 
8890 	if (!is_kill) {
8891 #define HCLGE_VF_VLAN_NO_ENTRY	2
8892 		if (!req->resp_code || req->resp_code == 1)
8893 			return 0;
8894 
8895 		if (req->resp_code == HCLGE_VF_VLAN_NO_ENTRY) {
8896 			set_bit(vfid, hdev->vf_vlan_full);
8897 			dev_warn(&hdev->pdev->dev,
8898 				 "vf vlan table is full, vf vlan filter is disabled\n");
8899 			return 0;
8900 		}
8901 
8902 		dev_err(&hdev->pdev->dev,
8903 			"Add vf vlan filter fail, ret =%u.\n",
8904 			req->resp_code);
8905 	} else {
8906 #define HCLGE_VF_VLAN_DEL_NO_FOUND	1
8907 		if (!req->resp_code)
8908 			return 0;
8909 
8910 		/* vf vlan filter is disabled when vf vlan table is full,
8911 		 * then new vlan id will not be added into vf vlan table.
8912 		 * Just return 0 without warning, avoid massive verbose
8913 		 * print logs when unload.
8914 		 */
8915 		if (req->resp_code == HCLGE_VF_VLAN_DEL_NO_FOUND)
8916 			return 0;
8917 
8918 		dev_err(&hdev->pdev->dev,
8919 			"Kill vf vlan filter fail, ret =%u.\n",
8920 			req->resp_code);
8921 	}
8922 
8923 	return -EIO;
8924 }
8925 
8926 static int hclge_set_vf_vlan_common(struct hclge_dev *hdev, u16 vfid,
8927 				    bool is_kill, u16 vlan,
8928 				    __be16 proto)
8929 {
8930 	struct hclge_vport *vport = &hdev->vport[vfid];
8931 	struct hclge_desc desc[2];
8932 	int ret;
8933 
8934 	/* if vf vlan table is full, firmware will close vf vlan filter, it
8935 	 * is unable and unnecessary to add new vlan id to vf vlan filter.
8936 	 * If spoof check is enable, and vf vlan is full, it shouldn't add
8937 	 * new vlan, because tx packets with these vlan id will be dropped.
8938 	 */
8939 	if (test_bit(vfid, hdev->vf_vlan_full) && !is_kill) {
8940 		if (vport->vf_info.spoofchk && vlan) {
8941 			dev_err(&hdev->pdev->dev,
8942 				"Can't add vlan due to spoof check is on and vf vlan table is full\n");
8943 			return -EPERM;
8944 		}
8945 		return 0;
8946 	}
8947 
8948 	ret = hclge_set_vf_vlan_filter_cmd(hdev, vfid, is_kill, vlan, desc);
8949 	if (ret)
8950 		return ret;
8951 
8952 	return hclge_check_vf_vlan_cmd_status(hdev, vfid, is_kill, desc);
8953 }
8954 
8955 static int hclge_set_port_vlan_filter(struct hclge_dev *hdev, __be16 proto,
8956 				      u16 vlan_id, bool is_kill)
8957 {
8958 	struct hclge_vlan_filter_pf_cfg_cmd *req;
8959 	struct hclge_desc desc;
8960 	u8 vlan_offset_byte_val;
8961 	u8 vlan_offset_byte;
8962 	u8 vlan_offset_160;
8963 	int ret;
8964 
8965 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_FILTER_PF_CFG, false);
8966 
8967 	vlan_offset_160 = vlan_id / HCLGE_VLAN_ID_OFFSET_STEP;
8968 	vlan_offset_byte = (vlan_id % HCLGE_VLAN_ID_OFFSET_STEP) /
8969 			   HCLGE_VLAN_BYTE_SIZE;
8970 	vlan_offset_byte_val = 1 << (vlan_id % HCLGE_VLAN_BYTE_SIZE);
8971 
8972 	req = (struct hclge_vlan_filter_pf_cfg_cmd *)desc.data;
8973 	req->vlan_offset = vlan_offset_160;
8974 	req->vlan_cfg = is_kill;
8975 	req->vlan_offset_bitmap[vlan_offset_byte] = vlan_offset_byte_val;
8976 
8977 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
8978 	if (ret)
8979 		dev_err(&hdev->pdev->dev,
8980 			"port vlan command, send fail, ret =%d.\n", ret);
8981 	return ret;
8982 }
8983 
8984 static int hclge_set_vlan_filter_hw(struct hclge_dev *hdev, __be16 proto,
8985 				    u16 vport_id, u16 vlan_id,
8986 				    bool is_kill)
8987 {
8988 	u16 vport_idx, vport_num = 0;
8989 	int ret;
8990 
8991 	if (is_kill && !vlan_id)
8992 		return 0;
8993 
8994 	ret = hclge_set_vf_vlan_common(hdev, vport_id, is_kill, vlan_id,
8995 				       proto);
8996 	if (ret) {
8997 		dev_err(&hdev->pdev->dev,
8998 			"Set %u vport vlan filter config fail, ret =%d.\n",
8999 			vport_id, ret);
9000 		return ret;
9001 	}
9002 
9003 	/* vlan 0 may be added twice when 8021q module is enabled */
9004 	if (!is_kill && !vlan_id &&
9005 	    test_bit(vport_id, hdev->vlan_table[vlan_id]))
9006 		return 0;
9007 
9008 	if (!is_kill && test_and_set_bit(vport_id, hdev->vlan_table[vlan_id])) {
9009 		dev_err(&hdev->pdev->dev,
9010 			"Add port vlan failed, vport %u is already in vlan %u\n",
9011 			vport_id, vlan_id);
9012 		return -EINVAL;
9013 	}
9014 
9015 	if (is_kill &&
9016 	    !test_and_clear_bit(vport_id, hdev->vlan_table[vlan_id])) {
9017 		dev_err(&hdev->pdev->dev,
9018 			"Delete port vlan failed, vport %u is not in vlan %u\n",
9019 			vport_id, vlan_id);
9020 		return -EINVAL;
9021 	}
9022 
9023 	for_each_set_bit(vport_idx, hdev->vlan_table[vlan_id], HCLGE_VPORT_NUM)
9024 		vport_num++;
9025 
9026 	if ((is_kill && vport_num == 0) || (!is_kill && vport_num == 1))
9027 		ret = hclge_set_port_vlan_filter(hdev, proto, vlan_id,
9028 						 is_kill);
9029 
9030 	return ret;
9031 }
9032 
9033 static int hclge_set_vlan_tx_offload_cfg(struct hclge_vport *vport)
9034 {
9035 	struct hclge_tx_vtag_cfg *vcfg = &vport->txvlan_cfg;
9036 	struct hclge_vport_vtag_tx_cfg_cmd *req;
9037 	struct hclge_dev *hdev = vport->back;
9038 	struct hclge_desc desc;
9039 	u16 bmap_index;
9040 	int status;
9041 
9042 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_PORT_TX_CFG, false);
9043 
9044 	req = (struct hclge_vport_vtag_tx_cfg_cmd *)desc.data;
9045 	req->def_vlan_tag1 = cpu_to_le16(vcfg->default_tag1);
9046 	req->def_vlan_tag2 = cpu_to_le16(vcfg->default_tag2);
9047 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_TAG1_B,
9048 		      vcfg->accept_tag1 ? 1 : 0);
9049 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_UNTAG1_B,
9050 		      vcfg->accept_untag1 ? 1 : 0);
9051 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_TAG2_B,
9052 		      vcfg->accept_tag2 ? 1 : 0);
9053 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_UNTAG2_B,
9054 		      vcfg->accept_untag2 ? 1 : 0);
9055 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_PORT_INS_TAG1_EN_B,
9056 		      vcfg->insert_tag1_en ? 1 : 0);
9057 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_PORT_INS_TAG2_EN_B,
9058 		      vcfg->insert_tag2_en ? 1 : 0);
9059 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_TAG_SHIFT_MODE_EN_B,
9060 		      vcfg->tag_shift_mode_en ? 1 : 0);
9061 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_CFG_NIC_ROCE_SEL_B, 0);
9062 
9063 	req->vf_offset = vport->vport_id / HCLGE_VF_NUM_PER_CMD;
9064 	bmap_index = vport->vport_id % HCLGE_VF_NUM_PER_CMD /
9065 			HCLGE_VF_NUM_PER_BYTE;
9066 	req->vf_bitmap[bmap_index] =
9067 		1U << (vport->vport_id % HCLGE_VF_NUM_PER_BYTE);
9068 
9069 	status = hclge_cmd_send(&hdev->hw, &desc, 1);
9070 	if (status)
9071 		dev_err(&hdev->pdev->dev,
9072 			"Send port txvlan cfg command fail, ret =%d\n",
9073 			status);
9074 
9075 	return status;
9076 }
9077 
9078 static int hclge_set_vlan_rx_offload_cfg(struct hclge_vport *vport)
9079 {
9080 	struct hclge_rx_vtag_cfg *vcfg = &vport->rxvlan_cfg;
9081 	struct hclge_vport_vtag_rx_cfg_cmd *req;
9082 	struct hclge_dev *hdev = vport->back;
9083 	struct hclge_desc desc;
9084 	u16 bmap_index;
9085 	int status;
9086 
9087 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_PORT_RX_CFG, false);
9088 
9089 	req = (struct hclge_vport_vtag_rx_cfg_cmd *)desc.data;
9090 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_REM_TAG1_EN_B,
9091 		      vcfg->strip_tag1_en ? 1 : 0);
9092 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_REM_TAG2_EN_B,
9093 		      vcfg->strip_tag2_en ? 1 : 0);
9094 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_SHOW_TAG1_EN_B,
9095 		      vcfg->vlan1_vlan_prionly ? 1 : 0);
9096 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_SHOW_TAG2_EN_B,
9097 		      vcfg->vlan2_vlan_prionly ? 1 : 0);
9098 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_DISCARD_TAG1_EN_B,
9099 		      vcfg->strip_tag1_discard_en ? 1 : 0);
9100 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_DISCARD_TAG2_EN_B,
9101 		      vcfg->strip_tag2_discard_en ? 1 : 0);
9102 
9103 	req->vf_offset = vport->vport_id / HCLGE_VF_NUM_PER_CMD;
9104 	bmap_index = vport->vport_id % HCLGE_VF_NUM_PER_CMD /
9105 			HCLGE_VF_NUM_PER_BYTE;
9106 	req->vf_bitmap[bmap_index] =
9107 		1U << (vport->vport_id % HCLGE_VF_NUM_PER_BYTE);
9108 
9109 	status = hclge_cmd_send(&hdev->hw, &desc, 1);
9110 	if (status)
9111 		dev_err(&hdev->pdev->dev,
9112 			"Send port rxvlan cfg command fail, ret =%d\n",
9113 			status);
9114 
9115 	return status;
9116 }
9117 
9118 static int hclge_vlan_offload_cfg(struct hclge_vport *vport,
9119 				  u16 port_base_vlan_state,
9120 				  u16 vlan_tag)
9121 {
9122 	int ret;
9123 
9124 	if (port_base_vlan_state == HNAE3_PORT_BASE_VLAN_DISABLE) {
9125 		vport->txvlan_cfg.accept_tag1 = true;
9126 		vport->txvlan_cfg.insert_tag1_en = false;
9127 		vport->txvlan_cfg.default_tag1 = 0;
9128 	} else {
9129 		struct hnae3_ae_dev *ae_dev = pci_get_drvdata(vport->nic.pdev);
9130 
9131 		vport->txvlan_cfg.accept_tag1 =
9132 			ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V3;
9133 		vport->txvlan_cfg.insert_tag1_en = true;
9134 		vport->txvlan_cfg.default_tag1 = vlan_tag;
9135 	}
9136 
9137 	vport->txvlan_cfg.accept_untag1 = true;
9138 
9139 	/* accept_tag2 and accept_untag2 are not supported on
9140 	 * pdev revision(0x20), new revision support them,
9141 	 * this two fields can not be configured by user.
9142 	 */
9143 	vport->txvlan_cfg.accept_tag2 = true;
9144 	vport->txvlan_cfg.accept_untag2 = true;
9145 	vport->txvlan_cfg.insert_tag2_en = false;
9146 	vport->txvlan_cfg.default_tag2 = 0;
9147 	vport->txvlan_cfg.tag_shift_mode_en = true;
9148 
9149 	if (port_base_vlan_state == HNAE3_PORT_BASE_VLAN_DISABLE) {
9150 		vport->rxvlan_cfg.strip_tag1_en = false;
9151 		vport->rxvlan_cfg.strip_tag2_en =
9152 				vport->rxvlan_cfg.rx_vlan_offload_en;
9153 		vport->rxvlan_cfg.strip_tag2_discard_en = false;
9154 	} else {
9155 		vport->rxvlan_cfg.strip_tag1_en =
9156 				vport->rxvlan_cfg.rx_vlan_offload_en;
9157 		vport->rxvlan_cfg.strip_tag2_en = true;
9158 		vport->rxvlan_cfg.strip_tag2_discard_en = true;
9159 	}
9160 
9161 	vport->rxvlan_cfg.strip_tag1_discard_en = false;
9162 	vport->rxvlan_cfg.vlan1_vlan_prionly = false;
9163 	vport->rxvlan_cfg.vlan2_vlan_prionly = false;
9164 
9165 	ret = hclge_set_vlan_tx_offload_cfg(vport);
9166 	if (ret)
9167 		return ret;
9168 
9169 	return hclge_set_vlan_rx_offload_cfg(vport);
9170 }
9171 
9172 static int hclge_set_vlan_protocol_type(struct hclge_dev *hdev)
9173 {
9174 	struct hclge_rx_vlan_type_cfg_cmd *rx_req;
9175 	struct hclge_tx_vlan_type_cfg_cmd *tx_req;
9176 	struct hclge_desc desc;
9177 	int status;
9178 
9179 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_TYPE_ID, false);
9180 	rx_req = (struct hclge_rx_vlan_type_cfg_cmd *)desc.data;
9181 	rx_req->ot_fst_vlan_type =
9182 		cpu_to_le16(hdev->vlan_type_cfg.rx_ot_fst_vlan_type);
9183 	rx_req->ot_sec_vlan_type =
9184 		cpu_to_le16(hdev->vlan_type_cfg.rx_ot_sec_vlan_type);
9185 	rx_req->in_fst_vlan_type =
9186 		cpu_to_le16(hdev->vlan_type_cfg.rx_in_fst_vlan_type);
9187 	rx_req->in_sec_vlan_type =
9188 		cpu_to_le16(hdev->vlan_type_cfg.rx_in_sec_vlan_type);
9189 
9190 	status = hclge_cmd_send(&hdev->hw, &desc, 1);
9191 	if (status) {
9192 		dev_err(&hdev->pdev->dev,
9193 			"Send rxvlan protocol type command fail, ret =%d\n",
9194 			status);
9195 		return status;
9196 	}
9197 
9198 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_INSERT, false);
9199 
9200 	tx_req = (struct hclge_tx_vlan_type_cfg_cmd *)desc.data;
9201 	tx_req->ot_vlan_type = cpu_to_le16(hdev->vlan_type_cfg.tx_ot_vlan_type);
9202 	tx_req->in_vlan_type = cpu_to_le16(hdev->vlan_type_cfg.tx_in_vlan_type);
9203 
9204 	status = hclge_cmd_send(&hdev->hw, &desc, 1);
9205 	if (status)
9206 		dev_err(&hdev->pdev->dev,
9207 			"Send txvlan protocol type command fail, ret =%d\n",
9208 			status);
9209 
9210 	return status;
9211 }
9212 
9213 static int hclge_init_vlan_config(struct hclge_dev *hdev)
9214 {
9215 #define HCLGE_DEF_VLAN_TYPE		0x8100
9216 
9217 	struct hnae3_handle *handle = &hdev->vport[0].nic;
9218 	struct hclge_vport *vport;
9219 	int ret;
9220 	int i;
9221 
9222 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
9223 		/* for revision 0x21, vf vlan filter is per function */
9224 		for (i = 0; i < hdev->num_alloc_vport; i++) {
9225 			vport = &hdev->vport[i];
9226 			ret = hclge_set_vlan_filter_ctrl(hdev,
9227 							 HCLGE_FILTER_TYPE_VF,
9228 							 HCLGE_FILTER_FE_EGRESS,
9229 							 true,
9230 							 vport->vport_id);
9231 			if (ret)
9232 				return ret;
9233 		}
9234 
9235 		ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT,
9236 						 HCLGE_FILTER_FE_INGRESS, true,
9237 						 0);
9238 		if (ret)
9239 			return ret;
9240 	} else {
9241 		ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
9242 						 HCLGE_FILTER_FE_EGRESS_V1_B,
9243 						 true, 0);
9244 		if (ret)
9245 			return ret;
9246 	}
9247 
9248 	handle->netdev_flags |= HNAE3_VLAN_FLTR;
9249 
9250 	hdev->vlan_type_cfg.rx_in_fst_vlan_type = HCLGE_DEF_VLAN_TYPE;
9251 	hdev->vlan_type_cfg.rx_in_sec_vlan_type = HCLGE_DEF_VLAN_TYPE;
9252 	hdev->vlan_type_cfg.rx_ot_fst_vlan_type = HCLGE_DEF_VLAN_TYPE;
9253 	hdev->vlan_type_cfg.rx_ot_sec_vlan_type = HCLGE_DEF_VLAN_TYPE;
9254 	hdev->vlan_type_cfg.tx_ot_vlan_type = HCLGE_DEF_VLAN_TYPE;
9255 	hdev->vlan_type_cfg.tx_in_vlan_type = HCLGE_DEF_VLAN_TYPE;
9256 
9257 	ret = hclge_set_vlan_protocol_type(hdev);
9258 	if (ret)
9259 		return ret;
9260 
9261 	for (i = 0; i < hdev->num_alloc_vport; i++) {
9262 		u16 vlan_tag;
9263 
9264 		vport = &hdev->vport[i];
9265 		vlan_tag = vport->port_base_vlan_cfg.vlan_info.vlan_tag;
9266 
9267 		ret = hclge_vlan_offload_cfg(vport,
9268 					     vport->port_base_vlan_cfg.state,
9269 					     vlan_tag);
9270 		if (ret)
9271 			return ret;
9272 	}
9273 
9274 	return hclge_set_vlan_filter(handle, htons(ETH_P_8021Q), 0, false);
9275 }
9276 
9277 static void hclge_add_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id,
9278 				       bool writen_to_tbl)
9279 {
9280 	struct hclge_vport_vlan_cfg *vlan;
9281 
9282 	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
9283 	if (!vlan)
9284 		return;
9285 
9286 	vlan->hd_tbl_status = writen_to_tbl;
9287 	vlan->vlan_id = vlan_id;
9288 
9289 	list_add_tail(&vlan->node, &vport->vlan_list);
9290 }
9291 
9292 static int hclge_add_vport_all_vlan_table(struct hclge_vport *vport)
9293 {
9294 	struct hclge_vport_vlan_cfg *vlan, *tmp;
9295 	struct hclge_dev *hdev = vport->back;
9296 	int ret;
9297 
9298 	list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
9299 		if (!vlan->hd_tbl_status) {
9300 			ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
9301 						       vport->vport_id,
9302 						       vlan->vlan_id, false);
9303 			if (ret) {
9304 				dev_err(&hdev->pdev->dev,
9305 					"restore vport vlan list failed, ret=%d\n",
9306 					ret);
9307 				return ret;
9308 			}
9309 		}
9310 		vlan->hd_tbl_status = true;
9311 	}
9312 
9313 	return 0;
9314 }
9315 
9316 static void hclge_rm_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id,
9317 				      bool is_write_tbl)
9318 {
9319 	struct hclge_vport_vlan_cfg *vlan, *tmp;
9320 	struct hclge_dev *hdev = vport->back;
9321 
9322 	list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
9323 		if (vlan->vlan_id == vlan_id) {
9324 			if (is_write_tbl && vlan->hd_tbl_status)
9325 				hclge_set_vlan_filter_hw(hdev,
9326 							 htons(ETH_P_8021Q),
9327 							 vport->vport_id,
9328 							 vlan_id,
9329 							 true);
9330 
9331 			list_del(&vlan->node);
9332 			kfree(vlan);
9333 			break;
9334 		}
9335 	}
9336 }
9337 
9338 void hclge_rm_vport_all_vlan_table(struct hclge_vport *vport, bool is_del_list)
9339 {
9340 	struct hclge_vport_vlan_cfg *vlan, *tmp;
9341 	struct hclge_dev *hdev = vport->back;
9342 
9343 	list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
9344 		if (vlan->hd_tbl_status)
9345 			hclge_set_vlan_filter_hw(hdev,
9346 						 htons(ETH_P_8021Q),
9347 						 vport->vport_id,
9348 						 vlan->vlan_id,
9349 						 true);
9350 
9351 		vlan->hd_tbl_status = false;
9352 		if (is_del_list) {
9353 			list_del(&vlan->node);
9354 			kfree(vlan);
9355 		}
9356 	}
9357 	clear_bit(vport->vport_id, hdev->vf_vlan_full);
9358 }
9359 
9360 void hclge_uninit_vport_vlan_table(struct hclge_dev *hdev)
9361 {
9362 	struct hclge_vport_vlan_cfg *vlan, *tmp;
9363 	struct hclge_vport *vport;
9364 	int i;
9365 
9366 	for (i = 0; i < hdev->num_alloc_vport; i++) {
9367 		vport = &hdev->vport[i];
9368 		list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
9369 			list_del(&vlan->node);
9370 			kfree(vlan);
9371 		}
9372 	}
9373 }
9374 
9375 void hclge_restore_vport_vlan_table(struct hclge_vport *vport)
9376 {
9377 	struct hclge_vport_vlan_cfg *vlan, *tmp;
9378 	struct hclge_dev *hdev = vport->back;
9379 	u16 vlan_proto;
9380 	u16 vlan_id;
9381 	u16 state;
9382 	int ret;
9383 
9384 	vlan_proto = vport->port_base_vlan_cfg.vlan_info.vlan_proto;
9385 	vlan_id = vport->port_base_vlan_cfg.vlan_info.vlan_tag;
9386 	state = vport->port_base_vlan_cfg.state;
9387 
9388 	if (state != HNAE3_PORT_BASE_VLAN_DISABLE) {
9389 		clear_bit(vport->vport_id, hdev->vlan_table[vlan_id]);
9390 		hclge_set_vlan_filter_hw(hdev, htons(vlan_proto),
9391 					 vport->vport_id, vlan_id,
9392 					 false);
9393 		return;
9394 	}
9395 
9396 	list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
9397 		ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
9398 					       vport->vport_id,
9399 					       vlan->vlan_id, false);
9400 		if (ret)
9401 			break;
9402 		vlan->hd_tbl_status = true;
9403 	}
9404 }
9405 
9406 /* For global reset and imp reset, hardware will clear the mac table,
9407  * so we change the mac address state from ACTIVE to TO_ADD, then they
9408  * can be restored in the service task after reset complete. Furtherly,
9409  * the mac addresses with state TO_DEL or DEL_FAIL are unnecessary to
9410  * be restored after reset, so just remove these mac nodes from mac_list.
9411  */
9412 static void hclge_mac_node_convert_for_reset(struct list_head *list)
9413 {
9414 	struct hclge_mac_node *mac_node, *tmp;
9415 
9416 	list_for_each_entry_safe(mac_node, tmp, list, node) {
9417 		if (mac_node->state == HCLGE_MAC_ACTIVE) {
9418 			mac_node->state = HCLGE_MAC_TO_ADD;
9419 		} else if (mac_node->state == HCLGE_MAC_TO_DEL) {
9420 			list_del(&mac_node->node);
9421 			kfree(mac_node);
9422 		}
9423 	}
9424 }
9425 
9426 void hclge_restore_mac_table_common(struct hclge_vport *vport)
9427 {
9428 	spin_lock_bh(&vport->mac_list_lock);
9429 
9430 	hclge_mac_node_convert_for_reset(&vport->uc_mac_list);
9431 	hclge_mac_node_convert_for_reset(&vport->mc_mac_list);
9432 	set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state);
9433 
9434 	spin_unlock_bh(&vport->mac_list_lock);
9435 }
9436 
9437 static void hclge_restore_hw_table(struct hclge_dev *hdev)
9438 {
9439 	struct hclge_vport *vport = &hdev->vport[0];
9440 	struct hnae3_handle *handle = &vport->nic;
9441 
9442 	hclge_restore_mac_table_common(vport);
9443 	hclge_restore_vport_vlan_table(vport);
9444 	set_bit(HCLGE_STATE_PROMISC_CHANGED, &hdev->state);
9445 
9446 	hclge_restore_fd_entries(handle);
9447 }
9448 
9449 int hclge_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable)
9450 {
9451 	struct hclge_vport *vport = hclge_get_vport(handle);
9452 
9453 	if (vport->port_base_vlan_cfg.state == HNAE3_PORT_BASE_VLAN_DISABLE) {
9454 		vport->rxvlan_cfg.strip_tag1_en = false;
9455 		vport->rxvlan_cfg.strip_tag2_en = enable;
9456 		vport->rxvlan_cfg.strip_tag2_discard_en = false;
9457 	} else {
9458 		vport->rxvlan_cfg.strip_tag1_en = enable;
9459 		vport->rxvlan_cfg.strip_tag2_en = true;
9460 		vport->rxvlan_cfg.strip_tag2_discard_en = true;
9461 	}
9462 
9463 	vport->rxvlan_cfg.strip_tag1_discard_en = false;
9464 	vport->rxvlan_cfg.vlan1_vlan_prionly = false;
9465 	vport->rxvlan_cfg.vlan2_vlan_prionly = false;
9466 	vport->rxvlan_cfg.rx_vlan_offload_en = enable;
9467 
9468 	return hclge_set_vlan_rx_offload_cfg(vport);
9469 }
9470 
9471 static int hclge_update_vlan_filter_entries(struct hclge_vport *vport,
9472 					    u16 port_base_vlan_state,
9473 					    struct hclge_vlan_info *new_info,
9474 					    struct hclge_vlan_info *old_info)
9475 {
9476 	struct hclge_dev *hdev = vport->back;
9477 	int ret;
9478 
9479 	if (port_base_vlan_state == HNAE3_PORT_BASE_VLAN_ENABLE) {
9480 		hclge_rm_vport_all_vlan_table(vport, false);
9481 		return hclge_set_vlan_filter_hw(hdev,
9482 						 htons(new_info->vlan_proto),
9483 						 vport->vport_id,
9484 						 new_info->vlan_tag,
9485 						 false);
9486 	}
9487 
9488 	ret = hclge_set_vlan_filter_hw(hdev, htons(old_info->vlan_proto),
9489 				       vport->vport_id, old_info->vlan_tag,
9490 				       true);
9491 	if (ret)
9492 		return ret;
9493 
9494 	return hclge_add_vport_all_vlan_table(vport);
9495 }
9496 
9497 int hclge_update_port_base_vlan_cfg(struct hclge_vport *vport, u16 state,
9498 				    struct hclge_vlan_info *vlan_info)
9499 {
9500 	struct hnae3_handle *nic = &vport->nic;
9501 	struct hclge_vlan_info *old_vlan_info;
9502 	struct hclge_dev *hdev = vport->back;
9503 	int ret;
9504 
9505 	old_vlan_info = &vport->port_base_vlan_cfg.vlan_info;
9506 
9507 	ret = hclge_vlan_offload_cfg(vport, state, vlan_info->vlan_tag);
9508 	if (ret)
9509 		return ret;
9510 
9511 	if (state == HNAE3_PORT_BASE_VLAN_MODIFY) {
9512 		/* add new VLAN tag */
9513 		ret = hclge_set_vlan_filter_hw(hdev,
9514 					       htons(vlan_info->vlan_proto),
9515 					       vport->vport_id,
9516 					       vlan_info->vlan_tag,
9517 					       false);
9518 		if (ret)
9519 			return ret;
9520 
9521 		/* remove old VLAN tag */
9522 		ret = hclge_set_vlan_filter_hw(hdev,
9523 					       htons(old_vlan_info->vlan_proto),
9524 					       vport->vport_id,
9525 					       old_vlan_info->vlan_tag,
9526 					       true);
9527 		if (ret)
9528 			return ret;
9529 
9530 		goto update;
9531 	}
9532 
9533 	ret = hclge_update_vlan_filter_entries(vport, state, vlan_info,
9534 					       old_vlan_info);
9535 	if (ret)
9536 		return ret;
9537 
9538 	/* update state only when disable/enable port based VLAN */
9539 	vport->port_base_vlan_cfg.state = state;
9540 	if (state == HNAE3_PORT_BASE_VLAN_DISABLE)
9541 		nic->port_base_vlan_state = HNAE3_PORT_BASE_VLAN_DISABLE;
9542 	else
9543 		nic->port_base_vlan_state = HNAE3_PORT_BASE_VLAN_ENABLE;
9544 
9545 update:
9546 	vport->port_base_vlan_cfg.vlan_info.vlan_tag = vlan_info->vlan_tag;
9547 	vport->port_base_vlan_cfg.vlan_info.qos = vlan_info->qos;
9548 	vport->port_base_vlan_cfg.vlan_info.vlan_proto = vlan_info->vlan_proto;
9549 
9550 	return 0;
9551 }
9552 
9553 static u16 hclge_get_port_base_vlan_state(struct hclge_vport *vport,
9554 					  enum hnae3_port_base_vlan_state state,
9555 					  u16 vlan)
9556 {
9557 	if (state == HNAE3_PORT_BASE_VLAN_DISABLE) {
9558 		if (!vlan)
9559 			return HNAE3_PORT_BASE_VLAN_NOCHANGE;
9560 		else
9561 			return HNAE3_PORT_BASE_VLAN_ENABLE;
9562 	} else {
9563 		if (!vlan)
9564 			return HNAE3_PORT_BASE_VLAN_DISABLE;
9565 		else if (vport->port_base_vlan_cfg.vlan_info.vlan_tag == vlan)
9566 			return HNAE3_PORT_BASE_VLAN_NOCHANGE;
9567 		else
9568 			return HNAE3_PORT_BASE_VLAN_MODIFY;
9569 	}
9570 }
9571 
9572 static int hclge_set_vf_vlan_filter(struct hnae3_handle *handle, int vfid,
9573 				    u16 vlan, u8 qos, __be16 proto)
9574 {
9575 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev);
9576 	struct hclge_vport *vport = hclge_get_vport(handle);
9577 	struct hclge_dev *hdev = vport->back;
9578 	struct hclge_vlan_info vlan_info;
9579 	u16 state;
9580 	int ret;
9581 
9582 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
9583 		return -EOPNOTSUPP;
9584 
9585 	vport = hclge_get_vf_vport(hdev, vfid);
9586 	if (!vport)
9587 		return -EINVAL;
9588 
9589 	/* qos is a 3 bits value, so can not be bigger than 7 */
9590 	if (vlan > VLAN_N_VID - 1 || qos > 7)
9591 		return -EINVAL;
9592 	if (proto != htons(ETH_P_8021Q))
9593 		return -EPROTONOSUPPORT;
9594 
9595 	state = hclge_get_port_base_vlan_state(vport,
9596 					       vport->port_base_vlan_cfg.state,
9597 					       vlan);
9598 	if (state == HNAE3_PORT_BASE_VLAN_NOCHANGE)
9599 		return 0;
9600 
9601 	vlan_info.vlan_tag = vlan;
9602 	vlan_info.qos = qos;
9603 	vlan_info.vlan_proto = ntohs(proto);
9604 
9605 	ret = hclge_update_port_base_vlan_cfg(vport, state, &vlan_info);
9606 	if (ret) {
9607 		dev_err(&hdev->pdev->dev,
9608 			"failed to update port base vlan for vf %d, ret = %d\n",
9609 			vfid, ret);
9610 		return ret;
9611 	}
9612 
9613 	/* for DEVICE_VERSION_V3, vf doesn't need to know about the port based
9614 	 * VLAN state.
9615 	 */
9616 	if (ae_dev->dev_version < HNAE3_DEVICE_VERSION_V3 &&
9617 	    test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state))
9618 		hclge_push_vf_port_base_vlan_info(&hdev->vport[0],
9619 						  vport->vport_id, state,
9620 						  vlan, qos,
9621 						  ntohs(proto));
9622 
9623 	return 0;
9624 }
9625 
9626 static void hclge_clear_vf_vlan(struct hclge_dev *hdev)
9627 {
9628 	struct hclge_vlan_info *vlan_info;
9629 	struct hclge_vport *vport;
9630 	int ret;
9631 	int vf;
9632 
9633 	/* clear port base vlan for all vf */
9634 	for (vf = HCLGE_VF_VPORT_START_NUM; vf < hdev->num_alloc_vport; vf++) {
9635 		vport = &hdev->vport[vf];
9636 		vlan_info = &vport->port_base_vlan_cfg.vlan_info;
9637 
9638 		ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
9639 					       vport->vport_id,
9640 					       vlan_info->vlan_tag, true);
9641 		if (ret)
9642 			dev_err(&hdev->pdev->dev,
9643 				"failed to clear vf vlan for vf%d, ret = %d\n",
9644 				vf - HCLGE_VF_VPORT_START_NUM, ret);
9645 	}
9646 }
9647 
9648 int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto,
9649 			  u16 vlan_id, bool is_kill)
9650 {
9651 	struct hclge_vport *vport = hclge_get_vport(handle);
9652 	struct hclge_dev *hdev = vport->back;
9653 	bool writen_to_tbl = false;
9654 	int ret = 0;
9655 
9656 	/* When device is resetting or reset failed, firmware is unable to
9657 	 * handle mailbox. Just record the vlan id, and remove it after
9658 	 * reset finished.
9659 	 */
9660 	if ((test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) ||
9661 	     test_bit(HCLGE_STATE_RST_FAIL, &hdev->state)) && is_kill) {
9662 		set_bit(vlan_id, vport->vlan_del_fail_bmap);
9663 		return -EBUSY;
9664 	}
9665 
9666 	/* when port base vlan enabled, we use port base vlan as the vlan
9667 	 * filter entry. In this case, we don't update vlan filter table
9668 	 * when user add new vlan or remove exist vlan, just update the vport
9669 	 * vlan list. The vlan id in vlan list will be writen in vlan filter
9670 	 * table until port base vlan disabled
9671 	 */
9672 	if (handle->port_base_vlan_state == HNAE3_PORT_BASE_VLAN_DISABLE) {
9673 		ret = hclge_set_vlan_filter_hw(hdev, proto, vport->vport_id,
9674 					       vlan_id, is_kill);
9675 		writen_to_tbl = true;
9676 	}
9677 
9678 	if (!ret) {
9679 		if (is_kill)
9680 			hclge_rm_vport_vlan_table(vport, vlan_id, false);
9681 		else
9682 			hclge_add_vport_vlan_table(vport, vlan_id,
9683 						   writen_to_tbl);
9684 	} else if (is_kill) {
9685 		/* when remove hw vlan filter failed, record the vlan id,
9686 		 * and try to remove it from hw later, to be consistence
9687 		 * with stack
9688 		 */
9689 		set_bit(vlan_id, vport->vlan_del_fail_bmap);
9690 	}
9691 	return ret;
9692 }
9693 
9694 static void hclge_sync_vlan_filter(struct hclge_dev *hdev)
9695 {
9696 #define HCLGE_MAX_SYNC_COUNT	60
9697 
9698 	int i, ret, sync_cnt = 0;
9699 	u16 vlan_id;
9700 
9701 	/* start from vport 1 for PF is always alive */
9702 	for (i = 0; i < hdev->num_alloc_vport; i++) {
9703 		struct hclge_vport *vport = &hdev->vport[i];
9704 
9705 		vlan_id = find_first_bit(vport->vlan_del_fail_bmap,
9706 					 VLAN_N_VID);
9707 		while (vlan_id != VLAN_N_VID) {
9708 			ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
9709 						       vport->vport_id, vlan_id,
9710 						       true);
9711 			if (ret && ret != -EINVAL)
9712 				return;
9713 
9714 			clear_bit(vlan_id, vport->vlan_del_fail_bmap);
9715 			hclge_rm_vport_vlan_table(vport, vlan_id, false);
9716 
9717 			sync_cnt++;
9718 			if (sync_cnt >= HCLGE_MAX_SYNC_COUNT)
9719 				return;
9720 
9721 			vlan_id = find_first_bit(vport->vlan_del_fail_bmap,
9722 						 VLAN_N_VID);
9723 		}
9724 	}
9725 }
9726 
9727 static int hclge_set_mac_mtu(struct hclge_dev *hdev, int new_mps)
9728 {
9729 	struct hclge_config_max_frm_size_cmd *req;
9730 	struct hclge_desc desc;
9731 
9732 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_MAX_FRM_SIZE, false);
9733 
9734 	req = (struct hclge_config_max_frm_size_cmd *)desc.data;
9735 	req->max_frm_size = cpu_to_le16(new_mps);
9736 	req->min_frm_size = HCLGE_MAC_MIN_FRAME;
9737 
9738 	return hclge_cmd_send(&hdev->hw, &desc, 1);
9739 }
9740 
9741 static int hclge_set_mtu(struct hnae3_handle *handle, int new_mtu)
9742 {
9743 	struct hclge_vport *vport = hclge_get_vport(handle);
9744 
9745 	return hclge_set_vport_mtu(vport, new_mtu);
9746 }
9747 
9748 int hclge_set_vport_mtu(struct hclge_vport *vport, int new_mtu)
9749 {
9750 	struct hclge_dev *hdev = vport->back;
9751 	int i, max_frm_size, ret;
9752 
9753 	/* HW supprt 2 layer vlan */
9754 	max_frm_size = new_mtu + ETH_HLEN + ETH_FCS_LEN + 2 * VLAN_HLEN;
9755 	if (max_frm_size < HCLGE_MAC_MIN_FRAME ||
9756 	    max_frm_size > hdev->ae_dev->dev_specs.max_frm_size)
9757 		return -EINVAL;
9758 
9759 	max_frm_size = max(max_frm_size, HCLGE_MAC_DEFAULT_FRAME);
9760 	mutex_lock(&hdev->vport_lock);
9761 	/* VF's mps must fit within hdev->mps */
9762 	if (vport->vport_id && max_frm_size > hdev->mps) {
9763 		mutex_unlock(&hdev->vport_lock);
9764 		return -EINVAL;
9765 	} else if (vport->vport_id) {
9766 		vport->mps = max_frm_size;
9767 		mutex_unlock(&hdev->vport_lock);
9768 		return 0;
9769 	}
9770 
9771 	/* PF's mps must be greater then VF's mps */
9772 	for (i = 1; i < hdev->num_alloc_vport; i++)
9773 		if (max_frm_size < hdev->vport[i].mps) {
9774 			mutex_unlock(&hdev->vport_lock);
9775 			return -EINVAL;
9776 		}
9777 
9778 	hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
9779 
9780 	ret = hclge_set_mac_mtu(hdev, max_frm_size);
9781 	if (ret) {
9782 		dev_err(&hdev->pdev->dev,
9783 			"Change mtu fail, ret =%d\n", ret);
9784 		goto out;
9785 	}
9786 
9787 	hdev->mps = max_frm_size;
9788 	vport->mps = max_frm_size;
9789 
9790 	ret = hclge_buffer_alloc(hdev);
9791 	if (ret)
9792 		dev_err(&hdev->pdev->dev,
9793 			"Allocate buffer fail, ret =%d\n", ret);
9794 
9795 out:
9796 	hclge_notify_client(hdev, HNAE3_UP_CLIENT);
9797 	mutex_unlock(&hdev->vport_lock);
9798 	return ret;
9799 }
9800 
9801 static int hclge_send_reset_tqp_cmd(struct hclge_dev *hdev, u16 queue_id,
9802 				    bool enable)
9803 {
9804 	struct hclge_reset_tqp_queue_cmd *req;
9805 	struct hclge_desc desc;
9806 	int ret;
9807 
9808 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RESET_TQP_QUEUE, false);
9809 
9810 	req = (struct hclge_reset_tqp_queue_cmd *)desc.data;
9811 	req->tqp_id = cpu_to_le16(queue_id);
9812 	if (enable)
9813 		hnae3_set_bit(req->reset_req, HCLGE_TQP_RESET_B, 1U);
9814 
9815 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
9816 	if (ret) {
9817 		dev_err(&hdev->pdev->dev,
9818 			"Send tqp reset cmd error, status =%d\n", ret);
9819 		return ret;
9820 	}
9821 
9822 	return 0;
9823 }
9824 
9825 static int hclge_get_reset_status(struct hclge_dev *hdev, u16 queue_id)
9826 {
9827 	struct hclge_reset_tqp_queue_cmd *req;
9828 	struct hclge_desc desc;
9829 	int ret;
9830 
9831 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RESET_TQP_QUEUE, true);
9832 
9833 	req = (struct hclge_reset_tqp_queue_cmd *)desc.data;
9834 	req->tqp_id = cpu_to_le16(queue_id);
9835 
9836 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
9837 	if (ret) {
9838 		dev_err(&hdev->pdev->dev,
9839 			"Get reset status error, status =%d\n", ret);
9840 		return ret;
9841 	}
9842 
9843 	return hnae3_get_bit(req->ready_to_reset, HCLGE_TQP_RESET_B);
9844 }
9845 
9846 u16 hclge_covert_handle_qid_global(struct hnae3_handle *handle, u16 queue_id)
9847 {
9848 	struct hnae3_queue *queue;
9849 	struct hclge_tqp *tqp;
9850 
9851 	queue = handle->kinfo.tqp[queue_id];
9852 	tqp = container_of(queue, struct hclge_tqp, q);
9853 
9854 	return tqp->index;
9855 }
9856 
9857 int hclge_reset_tqp(struct hnae3_handle *handle, u16 queue_id)
9858 {
9859 	struct hclge_vport *vport = hclge_get_vport(handle);
9860 	struct hclge_dev *hdev = vport->back;
9861 	int reset_try_times = 0;
9862 	int reset_status;
9863 	u16 queue_gid;
9864 	int ret;
9865 
9866 	queue_gid = hclge_covert_handle_qid_global(handle, queue_id);
9867 
9868 	ret = hclge_tqp_enable(hdev, queue_id, 0, false);
9869 	if (ret) {
9870 		dev_err(&hdev->pdev->dev, "Disable tqp fail, ret = %d\n", ret);
9871 		return ret;
9872 	}
9873 
9874 	ret = hclge_send_reset_tqp_cmd(hdev, queue_gid, true);
9875 	if (ret) {
9876 		dev_err(&hdev->pdev->dev,
9877 			"Send reset tqp cmd fail, ret = %d\n", ret);
9878 		return ret;
9879 	}
9880 
9881 	while (reset_try_times++ < HCLGE_TQP_RESET_TRY_TIMES) {
9882 		reset_status = hclge_get_reset_status(hdev, queue_gid);
9883 		if (reset_status)
9884 			break;
9885 
9886 		/* Wait for tqp hw reset */
9887 		usleep_range(1000, 1200);
9888 	}
9889 
9890 	if (reset_try_times >= HCLGE_TQP_RESET_TRY_TIMES) {
9891 		dev_err(&hdev->pdev->dev, "Reset TQP fail\n");
9892 		return ret;
9893 	}
9894 
9895 	ret = hclge_send_reset_tqp_cmd(hdev, queue_gid, false);
9896 	if (ret)
9897 		dev_err(&hdev->pdev->dev,
9898 			"Deassert the soft reset fail, ret = %d\n", ret);
9899 
9900 	return ret;
9901 }
9902 
9903 void hclge_reset_vf_queue(struct hclge_vport *vport, u16 queue_id)
9904 {
9905 	struct hnae3_handle *handle = &vport->nic;
9906 	struct hclge_dev *hdev = vport->back;
9907 	int reset_try_times = 0;
9908 	int reset_status;
9909 	u16 queue_gid;
9910 	int ret;
9911 
9912 	if (queue_id >= handle->kinfo.num_tqps) {
9913 		dev_warn(&hdev->pdev->dev, "Invalid vf queue id(%u)\n",
9914 			 queue_id);
9915 		return;
9916 	}
9917 
9918 	queue_gid = hclge_covert_handle_qid_global(&vport->nic, queue_id);
9919 
9920 	ret = hclge_send_reset_tqp_cmd(hdev, queue_gid, true);
9921 	if (ret) {
9922 		dev_warn(&hdev->pdev->dev,
9923 			 "Send reset tqp cmd fail, ret = %d\n", ret);
9924 		return;
9925 	}
9926 
9927 	while (reset_try_times++ < HCLGE_TQP_RESET_TRY_TIMES) {
9928 		reset_status = hclge_get_reset_status(hdev, queue_gid);
9929 		if (reset_status)
9930 			break;
9931 
9932 		/* Wait for tqp hw reset */
9933 		usleep_range(1000, 1200);
9934 	}
9935 
9936 	if (reset_try_times >= HCLGE_TQP_RESET_TRY_TIMES) {
9937 		dev_warn(&hdev->pdev->dev, "Reset TQP fail\n");
9938 		return;
9939 	}
9940 
9941 	ret = hclge_send_reset_tqp_cmd(hdev, queue_gid, false);
9942 	if (ret)
9943 		dev_warn(&hdev->pdev->dev,
9944 			 "Deassert the soft reset fail, ret = %d\n", ret);
9945 }
9946 
9947 static u32 hclge_get_fw_version(struct hnae3_handle *handle)
9948 {
9949 	struct hclge_vport *vport = hclge_get_vport(handle);
9950 	struct hclge_dev *hdev = vport->back;
9951 
9952 	return hdev->fw_version;
9953 }
9954 
9955 static void hclge_set_flowctrl_adv(struct hclge_dev *hdev, u32 rx_en, u32 tx_en)
9956 {
9957 	struct phy_device *phydev = hdev->hw.mac.phydev;
9958 
9959 	if (!phydev)
9960 		return;
9961 
9962 	phy_set_asym_pause(phydev, rx_en, tx_en);
9963 }
9964 
9965 static int hclge_cfg_pauseparam(struct hclge_dev *hdev, u32 rx_en, u32 tx_en)
9966 {
9967 	int ret;
9968 
9969 	if (hdev->tm_info.fc_mode == HCLGE_FC_PFC)
9970 		return 0;
9971 
9972 	ret = hclge_mac_pause_en_cfg(hdev, tx_en, rx_en);
9973 	if (ret)
9974 		dev_err(&hdev->pdev->dev,
9975 			"configure pauseparam error, ret = %d.\n", ret);
9976 
9977 	return ret;
9978 }
9979 
9980 int hclge_cfg_flowctrl(struct hclge_dev *hdev)
9981 {
9982 	struct phy_device *phydev = hdev->hw.mac.phydev;
9983 	u16 remote_advertising = 0;
9984 	u16 local_advertising;
9985 	u32 rx_pause, tx_pause;
9986 	u8 flowctl;
9987 
9988 	if (!phydev->link || !phydev->autoneg)
9989 		return 0;
9990 
9991 	local_advertising = linkmode_adv_to_lcl_adv_t(phydev->advertising);
9992 
9993 	if (phydev->pause)
9994 		remote_advertising = LPA_PAUSE_CAP;
9995 
9996 	if (phydev->asym_pause)
9997 		remote_advertising |= LPA_PAUSE_ASYM;
9998 
9999 	flowctl = mii_resolve_flowctrl_fdx(local_advertising,
10000 					   remote_advertising);
10001 	tx_pause = flowctl & FLOW_CTRL_TX;
10002 	rx_pause = flowctl & FLOW_CTRL_RX;
10003 
10004 	if (phydev->duplex == HCLGE_MAC_HALF) {
10005 		tx_pause = 0;
10006 		rx_pause = 0;
10007 	}
10008 
10009 	return hclge_cfg_pauseparam(hdev, rx_pause, tx_pause);
10010 }
10011 
10012 static void hclge_get_pauseparam(struct hnae3_handle *handle, u32 *auto_neg,
10013 				 u32 *rx_en, u32 *tx_en)
10014 {
10015 	struct hclge_vport *vport = hclge_get_vport(handle);
10016 	struct hclge_dev *hdev = vport->back;
10017 	struct phy_device *phydev = hdev->hw.mac.phydev;
10018 
10019 	*auto_neg = phydev ? hclge_get_autoneg(handle) : 0;
10020 
10021 	if (hdev->tm_info.fc_mode == HCLGE_FC_PFC) {
10022 		*rx_en = 0;
10023 		*tx_en = 0;
10024 		return;
10025 	}
10026 
10027 	if (hdev->tm_info.fc_mode == HCLGE_FC_RX_PAUSE) {
10028 		*rx_en = 1;
10029 		*tx_en = 0;
10030 	} else if (hdev->tm_info.fc_mode == HCLGE_FC_TX_PAUSE) {
10031 		*tx_en = 1;
10032 		*rx_en = 0;
10033 	} else if (hdev->tm_info.fc_mode == HCLGE_FC_FULL) {
10034 		*rx_en = 1;
10035 		*tx_en = 1;
10036 	} else {
10037 		*rx_en = 0;
10038 		*tx_en = 0;
10039 	}
10040 }
10041 
10042 static void hclge_record_user_pauseparam(struct hclge_dev *hdev,
10043 					 u32 rx_en, u32 tx_en)
10044 {
10045 	if (rx_en && tx_en)
10046 		hdev->fc_mode_last_time = HCLGE_FC_FULL;
10047 	else if (rx_en && !tx_en)
10048 		hdev->fc_mode_last_time = HCLGE_FC_RX_PAUSE;
10049 	else if (!rx_en && tx_en)
10050 		hdev->fc_mode_last_time = HCLGE_FC_TX_PAUSE;
10051 	else
10052 		hdev->fc_mode_last_time = HCLGE_FC_NONE;
10053 
10054 	hdev->tm_info.fc_mode = hdev->fc_mode_last_time;
10055 }
10056 
10057 static int hclge_set_pauseparam(struct hnae3_handle *handle, u32 auto_neg,
10058 				u32 rx_en, u32 tx_en)
10059 {
10060 	struct hclge_vport *vport = hclge_get_vport(handle);
10061 	struct hclge_dev *hdev = vport->back;
10062 	struct phy_device *phydev = hdev->hw.mac.phydev;
10063 	u32 fc_autoneg;
10064 
10065 	if (phydev) {
10066 		fc_autoneg = hclge_get_autoneg(handle);
10067 		if (auto_neg != fc_autoneg) {
10068 			dev_info(&hdev->pdev->dev,
10069 				 "To change autoneg please use: ethtool -s <dev> autoneg <on|off>\n");
10070 			return -EOPNOTSUPP;
10071 		}
10072 	}
10073 
10074 	if (hdev->tm_info.fc_mode == HCLGE_FC_PFC) {
10075 		dev_info(&hdev->pdev->dev,
10076 			 "Priority flow control enabled. Cannot set link flow control.\n");
10077 		return -EOPNOTSUPP;
10078 	}
10079 
10080 	hclge_set_flowctrl_adv(hdev, rx_en, tx_en);
10081 
10082 	hclge_record_user_pauseparam(hdev, rx_en, tx_en);
10083 
10084 	if (!auto_neg)
10085 		return hclge_cfg_pauseparam(hdev, rx_en, tx_en);
10086 
10087 	if (phydev)
10088 		return phy_start_aneg(phydev);
10089 
10090 	return -EOPNOTSUPP;
10091 }
10092 
10093 static void hclge_get_ksettings_an_result(struct hnae3_handle *handle,
10094 					  u8 *auto_neg, u32 *speed, u8 *duplex)
10095 {
10096 	struct hclge_vport *vport = hclge_get_vport(handle);
10097 	struct hclge_dev *hdev = vport->back;
10098 
10099 	if (speed)
10100 		*speed = hdev->hw.mac.speed;
10101 	if (duplex)
10102 		*duplex = hdev->hw.mac.duplex;
10103 	if (auto_neg)
10104 		*auto_neg = hdev->hw.mac.autoneg;
10105 }
10106 
10107 static void hclge_get_media_type(struct hnae3_handle *handle, u8 *media_type,
10108 				 u8 *module_type)
10109 {
10110 	struct hclge_vport *vport = hclge_get_vport(handle);
10111 	struct hclge_dev *hdev = vport->back;
10112 
10113 	/* When nic is down, the service task is not running, doesn't update
10114 	 * the port information per second. Query the port information before
10115 	 * return the media type, ensure getting the correct media information.
10116 	 */
10117 	hclge_update_port_info(hdev);
10118 
10119 	if (media_type)
10120 		*media_type = hdev->hw.mac.media_type;
10121 
10122 	if (module_type)
10123 		*module_type = hdev->hw.mac.module_type;
10124 }
10125 
10126 static void hclge_get_mdix_mode(struct hnae3_handle *handle,
10127 				u8 *tp_mdix_ctrl, u8 *tp_mdix)
10128 {
10129 	struct hclge_vport *vport = hclge_get_vport(handle);
10130 	struct hclge_dev *hdev = vport->back;
10131 	struct phy_device *phydev = hdev->hw.mac.phydev;
10132 	int mdix_ctrl, mdix, is_resolved;
10133 	unsigned int retval;
10134 
10135 	if (!phydev) {
10136 		*tp_mdix_ctrl = ETH_TP_MDI_INVALID;
10137 		*tp_mdix = ETH_TP_MDI_INVALID;
10138 		return;
10139 	}
10140 
10141 	phy_write(phydev, HCLGE_PHY_PAGE_REG, HCLGE_PHY_PAGE_MDIX);
10142 
10143 	retval = phy_read(phydev, HCLGE_PHY_CSC_REG);
10144 	mdix_ctrl = hnae3_get_field(retval, HCLGE_PHY_MDIX_CTRL_M,
10145 				    HCLGE_PHY_MDIX_CTRL_S);
10146 
10147 	retval = phy_read(phydev, HCLGE_PHY_CSS_REG);
10148 	mdix = hnae3_get_bit(retval, HCLGE_PHY_MDIX_STATUS_B);
10149 	is_resolved = hnae3_get_bit(retval, HCLGE_PHY_SPEED_DUP_RESOLVE_B);
10150 
10151 	phy_write(phydev, HCLGE_PHY_PAGE_REG, HCLGE_PHY_PAGE_COPPER);
10152 
10153 	switch (mdix_ctrl) {
10154 	case 0x0:
10155 		*tp_mdix_ctrl = ETH_TP_MDI;
10156 		break;
10157 	case 0x1:
10158 		*tp_mdix_ctrl = ETH_TP_MDI_X;
10159 		break;
10160 	case 0x3:
10161 		*tp_mdix_ctrl = ETH_TP_MDI_AUTO;
10162 		break;
10163 	default:
10164 		*tp_mdix_ctrl = ETH_TP_MDI_INVALID;
10165 		break;
10166 	}
10167 
10168 	if (!is_resolved)
10169 		*tp_mdix = ETH_TP_MDI_INVALID;
10170 	else if (mdix)
10171 		*tp_mdix = ETH_TP_MDI_X;
10172 	else
10173 		*tp_mdix = ETH_TP_MDI;
10174 }
10175 
10176 static void hclge_info_show(struct hclge_dev *hdev)
10177 {
10178 	struct device *dev = &hdev->pdev->dev;
10179 
10180 	dev_info(dev, "PF info begin:\n");
10181 
10182 	dev_info(dev, "Task queue pairs numbers: %u\n", hdev->num_tqps);
10183 	dev_info(dev, "Desc num per TX queue: %u\n", hdev->num_tx_desc);
10184 	dev_info(dev, "Desc num per RX queue: %u\n", hdev->num_rx_desc);
10185 	dev_info(dev, "Numbers of vports: %u\n", hdev->num_alloc_vport);
10186 	dev_info(dev, "Numbers of vmdp vports: %u\n", hdev->num_vmdq_vport);
10187 	dev_info(dev, "Numbers of VF for this PF: %u\n", hdev->num_req_vfs);
10188 	dev_info(dev, "HW tc map: 0x%x\n", hdev->hw_tc_map);
10189 	dev_info(dev, "Total buffer size for TX/RX: %u\n", hdev->pkt_buf_size);
10190 	dev_info(dev, "TX buffer size for each TC: %u\n", hdev->tx_buf_size);
10191 	dev_info(dev, "DV buffer size for each TC: %u\n", hdev->dv_buf_size);
10192 	dev_info(dev, "This is %s PF\n",
10193 		 hdev->flag & HCLGE_FLAG_MAIN ? "main" : "not main");
10194 	dev_info(dev, "DCB %s\n",
10195 		 hdev->flag & HCLGE_FLAG_DCB_ENABLE ? "enable" : "disable");
10196 	dev_info(dev, "MQPRIO %s\n",
10197 		 hdev->flag & HCLGE_FLAG_MQPRIO_ENABLE ? "enable" : "disable");
10198 
10199 	dev_info(dev, "PF info end.\n");
10200 }
10201 
10202 static int hclge_init_nic_client_instance(struct hnae3_ae_dev *ae_dev,
10203 					  struct hclge_vport *vport)
10204 {
10205 	struct hnae3_client *client = vport->nic.client;
10206 	struct hclge_dev *hdev = ae_dev->priv;
10207 	int rst_cnt = hdev->rst_stats.reset_cnt;
10208 	int ret;
10209 
10210 	ret = client->ops->init_instance(&vport->nic);
10211 	if (ret)
10212 		return ret;
10213 
10214 	set_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state);
10215 	if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) ||
10216 	    rst_cnt != hdev->rst_stats.reset_cnt) {
10217 		ret = -EBUSY;
10218 		goto init_nic_err;
10219 	}
10220 
10221 	/* Enable nic hw error interrupts */
10222 	ret = hclge_config_nic_hw_error(hdev, true);
10223 	if (ret) {
10224 		dev_err(&ae_dev->pdev->dev,
10225 			"fail(%d) to enable hw error interrupts\n", ret);
10226 		goto init_nic_err;
10227 	}
10228 
10229 	hnae3_set_client_init_flag(client, ae_dev, 1);
10230 
10231 	if (netif_msg_drv(&hdev->vport->nic))
10232 		hclge_info_show(hdev);
10233 
10234 	return ret;
10235 
10236 init_nic_err:
10237 	clear_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state);
10238 	while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
10239 		msleep(HCLGE_WAIT_RESET_DONE);
10240 
10241 	client->ops->uninit_instance(&vport->nic, 0);
10242 
10243 	return ret;
10244 }
10245 
10246 static int hclge_init_roce_client_instance(struct hnae3_ae_dev *ae_dev,
10247 					   struct hclge_vport *vport)
10248 {
10249 	struct hclge_dev *hdev = ae_dev->priv;
10250 	struct hnae3_client *client;
10251 	int rst_cnt;
10252 	int ret;
10253 
10254 	if (!hnae3_dev_roce_supported(hdev) || !hdev->roce_client ||
10255 	    !hdev->nic_client)
10256 		return 0;
10257 
10258 	client = hdev->roce_client;
10259 	ret = hclge_init_roce_base_info(vport);
10260 	if (ret)
10261 		return ret;
10262 
10263 	rst_cnt = hdev->rst_stats.reset_cnt;
10264 	ret = client->ops->init_instance(&vport->roce);
10265 	if (ret)
10266 		return ret;
10267 
10268 	set_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state);
10269 	if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) ||
10270 	    rst_cnt != hdev->rst_stats.reset_cnt) {
10271 		ret = -EBUSY;
10272 		goto init_roce_err;
10273 	}
10274 
10275 	/* Enable roce ras interrupts */
10276 	ret = hclge_config_rocee_ras_interrupt(hdev, true);
10277 	if (ret) {
10278 		dev_err(&ae_dev->pdev->dev,
10279 			"fail(%d) to enable roce ras interrupts\n", ret);
10280 		goto init_roce_err;
10281 	}
10282 
10283 	hnae3_set_client_init_flag(client, ae_dev, 1);
10284 
10285 	return 0;
10286 
10287 init_roce_err:
10288 	clear_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state);
10289 	while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
10290 		msleep(HCLGE_WAIT_RESET_DONE);
10291 
10292 	hdev->roce_client->ops->uninit_instance(&vport->roce, 0);
10293 
10294 	return ret;
10295 }
10296 
10297 static int hclge_init_client_instance(struct hnae3_client *client,
10298 				      struct hnae3_ae_dev *ae_dev)
10299 {
10300 	struct hclge_dev *hdev = ae_dev->priv;
10301 	struct hclge_vport *vport;
10302 	int i, ret;
10303 
10304 	for (i = 0; i <  hdev->num_vmdq_vport + 1; i++) {
10305 		vport = &hdev->vport[i];
10306 
10307 		switch (client->type) {
10308 		case HNAE3_CLIENT_KNIC:
10309 			hdev->nic_client = client;
10310 			vport->nic.client = client;
10311 			ret = hclge_init_nic_client_instance(ae_dev, vport);
10312 			if (ret)
10313 				goto clear_nic;
10314 
10315 			ret = hclge_init_roce_client_instance(ae_dev, vport);
10316 			if (ret)
10317 				goto clear_roce;
10318 
10319 			break;
10320 		case HNAE3_CLIENT_ROCE:
10321 			if (hnae3_dev_roce_supported(hdev)) {
10322 				hdev->roce_client = client;
10323 				vport->roce.client = client;
10324 			}
10325 
10326 			ret = hclge_init_roce_client_instance(ae_dev, vport);
10327 			if (ret)
10328 				goto clear_roce;
10329 
10330 			break;
10331 		default:
10332 			return -EINVAL;
10333 		}
10334 	}
10335 
10336 	return 0;
10337 
10338 clear_nic:
10339 	hdev->nic_client = NULL;
10340 	vport->nic.client = NULL;
10341 	return ret;
10342 clear_roce:
10343 	hdev->roce_client = NULL;
10344 	vport->roce.client = NULL;
10345 	return ret;
10346 }
10347 
10348 static void hclge_uninit_client_instance(struct hnae3_client *client,
10349 					 struct hnae3_ae_dev *ae_dev)
10350 {
10351 	struct hclge_dev *hdev = ae_dev->priv;
10352 	struct hclge_vport *vport;
10353 	int i;
10354 
10355 	for (i = 0; i < hdev->num_vmdq_vport + 1; i++) {
10356 		vport = &hdev->vport[i];
10357 		if (hdev->roce_client) {
10358 			clear_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state);
10359 			while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
10360 				msleep(HCLGE_WAIT_RESET_DONE);
10361 
10362 			hdev->roce_client->ops->uninit_instance(&vport->roce,
10363 								0);
10364 			hdev->roce_client = NULL;
10365 			vport->roce.client = NULL;
10366 		}
10367 		if (client->type == HNAE3_CLIENT_ROCE)
10368 			return;
10369 		if (hdev->nic_client && client->ops->uninit_instance) {
10370 			clear_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state);
10371 			while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
10372 				msleep(HCLGE_WAIT_RESET_DONE);
10373 
10374 			client->ops->uninit_instance(&vport->nic, 0);
10375 			hdev->nic_client = NULL;
10376 			vport->nic.client = NULL;
10377 		}
10378 	}
10379 }
10380 
10381 static int hclge_dev_mem_map(struct hclge_dev *hdev)
10382 {
10383 #define HCLGE_MEM_BAR		4
10384 
10385 	struct pci_dev *pdev = hdev->pdev;
10386 	struct hclge_hw *hw = &hdev->hw;
10387 
10388 	/* for device does not have device memory, return directly */
10389 	if (!(pci_select_bars(pdev, IORESOURCE_MEM) & BIT(HCLGE_MEM_BAR)))
10390 		return 0;
10391 
10392 	hw->mem_base = devm_ioremap_wc(&pdev->dev,
10393 				       pci_resource_start(pdev, HCLGE_MEM_BAR),
10394 				       pci_resource_len(pdev, HCLGE_MEM_BAR));
10395 	if (!hw->mem_base) {
10396 		dev_err(&pdev->dev, "failed to map device memory\n");
10397 		return -EFAULT;
10398 	}
10399 
10400 	return 0;
10401 }
10402 
10403 static int hclge_pci_init(struct hclge_dev *hdev)
10404 {
10405 	struct pci_dev *pdev = hdev->pdev;
10406 	struct hclge_hw *hw;
10407 	int ret;
10408 
10409 	ret = pci_enable_device(pdev);
10410 	if (ret) {
10411 		dev_err(&pdev->dev, "failed to enable PCI device\n");
10412 		return ret;
10413 	}
10414 
10415 	ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
10416 	if (ret) {
10417 		ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
10418 		if (ret) {
10419 			dev_err(&pdev->dev,
10420 				"can't set consistent PCI DMA");
10421 			goto err_disable_device;
10422 		}
10423 		dev_warn(&pdev->dev, "set DMA mask to 32 bits\n");
10424 	}
10425 
10426 	ret = pci_request_regions(pdev, HCLGE_DRIVER_NAME);
10427 	if (ret) {
10428 		dev_err(&pdev->dev, "PCI request regions failed %d\n", ret);
10429 		goto err_disable_device;
10430 	}
10431 
10432 	pci_set_master(pdev);
10433 	hw = &hdev->hw;
10434 	hw->io_base = pcim_iomap(pdev, 2, 0);
10435 	if (!hw->io_base) {
10436 		dev_err(&pdev->dev, "Can't map configuration register space\n");
10437 		ret = -ENOMEM;
10438 		goto err_clr_master;
10439 	}
10440 
10441 	ret = hclge_dev_mem_map(hdev);
10442 	if (ret)
10443 		goto err_unmap_io_base;
10444 
10445 	hdev->num_req_vfs = pci_sriov_get_totalvfs(pdev);
10446 
10447 	return 0;
10448 
10449 err_unmap_io_base:
10450 	pcim_iounmap(pdev, hdev->hw.io_base);
10451 err_clr_master:
10452 	pci_clear_master(pdev);
10453 	pci_release_regions(pdev);
10454 err_disable_device:
10455 	pci_disable_device(pdev);
10456 
10457 	return ret;
10458 }
10459 
10460 static void hclge_pci_uninit(struct hclge_dev *hdev)
10461 {
10462 	struct pci_dev *pdev = hdev->pdev;
10463 
10464 	if (hdev->hw.mem_base)
10465 		devm_iounmap(&pdev->dev, hdev->hw.mem_base);
10466 
10467 	pcim_iounmap(pdev, hdev->hw.io_base);
10468 	pci_free_irq_vectors(pdev);
10469 	pci_clear_master(pdev);
10470 	pci_release_mem_regions(pdev);
10471 	pci_disable_device(pdev);
10472 }
10473 
10474 static void hclge_state_init(struct hclge_dev *hdev)
10475 {
10476 	set_bit(HCLGE_STATE_SERVICE_INITED, &hdev->state);
10477 	set_bit(HCLGE_STATE_DOWN, &hdev->state);
10478 	clear_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state);
10479 	clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
10480 	clear_bit(HCLGE_STATE_RST_FAIL, &hdev->state);
10481 	clear_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state);
10482 	clear_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state);
10483 }
10484 
10485 static void hclge_state_uninit(struct hclge_dev *hdev)
10486 {
10487 	set_bit(HCLGE_STATE_DOWN, &hdev->state);
10488 	set_bit(HCLGE_STATE_REMOVING, &hdev->state);
10489 
10490 	if (hdev->reset_timer.function)
10491 		del_timer_sync(&hdev->reset_timer);
10492 	if (hdev->service_task.work.func)
10493 		cancel_delayed_work_sync(&hdev->service_task);
10494 }
10495 
10496 static void hclge_flr_prepare(struct hnae3_ae_dev *ae_dev)
10497 {
10498 #define HCLGE_FLR_RETRY_WAIT_MS	500
10499 #define HCLGE_FLR_RETRY_CNT	5
10500 
10501 	struct hclge_dev *hdev = ae_dev->priv;
10502 	int retry_cnt = 0;
10503 	int ret;
10504 
10505 retry:
10506 	down(&hdev->reset_sem);
10507 	set_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
10508 	hdev->reset_type = HNAE3_FLR_RESET;
10509 	ret = hclge_reset_prepare(hdev);
10510 	if (ret || hdev->reset_pending) {
10511 		dev_err(&hdev->pdev->dev, "fail to prepare FLR, ret=%d\n",
10512 			ret);
10513 		if (hdev->reset_pending ||
10514 		    retry_cnt++ < HCLGE_FLR_RETRY_CNT) {
10515 			dev_err(&hdev->pdev->dev,
10516 				"reset_pending:0x%lx, retry_cnt:%d\n",
10517 				hdev->reset_pending, retry_cnt);
10518 			clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
10519 			up(&hdev->reset_sem);
10520 			msleep(HCLGE_FLR_RETRY_WAIT_MS);
10521 			goto retry;
10522 		}
10523 	}
10524 
10525 	/* disable misc vector before FLR done */
10526 	hclge_enable_vector(&hdev->misc_vector, false);
10527 	set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state);
10528 	hdev->rst_stats.flr_rst_cnt++;
10529 }
10530 
10531 static void hclge_flr_done(struct hnae3_ae_dev *ae_dev)
10532 {
10533 	struct hclge_dev *hdev = ae_dev->priv;
10534 	int ret;
10535 
10536 	hclge_enable_vector(&hdev->misc_vector, true);
10537 
10538 	ret = hclge_reset_rebuild(hdev);
10539 	if (ret)
10540 		dev_err(&hdev->pdev->dev, "fail to rebuild, ret=%d\n", ret);
10541 
10542 	hdev->reset_type = HNAE3_NONE_RESET;
10543 	clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
10544 	up(&hdev->reset_sem);
10545 }
10546 
10547 static void hclge_clear_resetting_state(struct hclge_dev *hdev)
10548 {
10549 	u16 i;
10550 
10551 	for (i = 0; i < hdev->num_alloc_vport; i++) {
10552 		struct hclge_vport *vport = &hdev->vport[i];
10553 		int ret;
10554 
10555 		 /* Send cmd to clear VF's FUNC_RST_ING */
10556 		ret = hclge_set_vf_rst(hdev, vport->vport_id, false);
10557 		if (ret)
10558 			dev_warn(&hdev->pdev->dev,
10559 				 "clear vf(%u) rst failed %d!\n",
10560 				 vport->vport_id, ret);
10561 	}
10562 }
10563 
10564 static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
10565 {
10566 	struct pci_dev *pdev = ae_dev->pdev;
10567 	struct hclge_dev *hdev;
10568 	int ret;
10569 
10570 	hdev = devm_kzalloc(&pdev->dev, sizeof(*hdev), GFP_KERNEL);
10571 	if (!hdev)
10572 		return -ENOMEM;
10573 
10574 	hdev->pdev = pdev;
10575 	hdev->ae_dev = ae_dev;
10576 	hdev->reset_type = HNAE3_NONE_RESET;
10577 	hdev->reset_level = HNAE3_FUNC_RESET;
10578 	ae_dev->priv = hdev;
10579 
10580 	/* HW supprt 2 layer vlan */
10581 	hdev->mps = ETH_FRAME_LEN + ETH_FCS_LEN + 2 * VLAN_HLEN;
10582 
10583 	mutex_init(&hdev->vport_lock);
10584 	spin_lock_init(&hdev->fd_rule_lock);
10585 	sema_init(&hdev->reset_sem, 1);
10586 
10587 	ret = hclge_pci_init(hdev);
10588 	if (ret)
10589 		goto out;
10590 
10591 	/* Firmware command queue initialize */
10592 	ret = hclge_cmd_queue_init(hdev);
10593 	if (ret)
10594 		goto err_pci_uninit;
10595 
10596 	/* Firmware command initialize */
10597 	ret = hclge_cmd_init(hdev);
10598 	if (ret)
10599 		goto err_cmd_uninit;
10600 
10601 	ret = hclge_get_cap(hdev);
10602 	if (ret)
10603 		goto err_cmd_uninit;
10604 
10605 	ret = hclge_query_dev_specs(hdev);
10606 	if (ret) {
10607 		dev_err(&pdev->dev, "failed to query dev specifications, ret = %d.\n",
10608 			ret);
10609 		goto err_cmd_uninit;
10610 	}
10611 
10612 	ret = hclge_configure(hdev);
10613 	if (ret) {
10614 		dev_err(&pdev->dev, "Configure dev error, ret = %d.\n", ret);
10615 		goto err_cmd_uninit;
10616 	}
10617 
10618 	ret = hclge_init_msi(hdev);
10619 	if (ret) {
10620 		dev_err(&pdev->dev, "Init MSI/MSI-X error, ret = %d.\n", ret);
10621 		goto err_cmd_uninit;
10622 	}
10623 
10624 	ret = hclge_misc_irq_init(hdev);
10625 	if (ret)
10626 		goto err_msi_uninit;
10627 
10628 	ret = hclge_alloc_tqps(hdev);
10629 	if (ret) {
10630 		dev_err(&pdev->dev, "Allocate TQPs error, ret = %d.\n", ret);
10631 		goto err_msi_irq_uninit;
10632 	}
10633 
10634 	ret = hclge_alloc_vport(hdev);
10635 	if (ret)
10636 		goto err_msi_irq_uninit;
10637 
10638 	ret = hclge_map_tqp(hdev);
10639 	if (ret)
10640 		goto err_msi_irq_uninit;
10641 
10642 	if (hdev->hw.mac.media_type == HNAE3_MEDIA_TYPE_COPPER) {
10643 		ret = hclge_mac_mdio_config(hdev);
10644 		if (ret)
10645 			goto err_msi_irq_uninit;
10646 	}
10647 
10648 	ret = hclge_init_umv_space(hdev);
10649 	if (ret)
10650 		goto err_mdiobus_unreg;
10651 
10652 	ret = hclge_mac_init(hdev);
10653 	if (ret) {
10654 		dev_err(&pdev->dev, "Mac init error, ret = %d\n", ret);
10655 		goto err_mdiobus_unreg;
10656 	}
10657 
10658 	ret = hclge_config_tso(hdev, HCLGE_TSO_MSS_MIN, HCLGE_TSO_MSS_MAX);
10659 	if (ret) {
10660 		dev_err(&pdev->dev, "Enable tso fail, ret =%d\n", ret);
10661 		goto err_mdiobus_unreg;
10662 	}
10663 
10664 	ret = hclge_config_gro(hdev, true);
10665 	if (ret)
10666 		goto err_mdiobus_unreg;
10667 
10668 	ret = hclge_init_vlan_config(hdev);
10669 	if (ret) {
10670 		dev_err(&pdev->dev, "VLAN init fail, ret =%d\n", ret);
10671 		goto err_mdiobus_unreg;
10672 	}
10673 
10674 	ret = hclge_tm_schd_init(hdev);
10675 	if (ret) {
10676 		dev_err(&pdev->dev, "tm schd init fail, ret =%d\n", ret);
10677 		goto err_mdiobus_unreg;
10678 	}
10679 
10680 	ret = hclge_rss_init_cfg(hdev);
10681 	if (ret) {
10682 		dev_err(&pdev->dev, "failed to init rss cfg, ret = %d\n", ret);
10683 		goto err_mdiobus_unreg;
10684 	}
10685 
10686 	ret = hclge_rss_init_hw(hdev);
10687 	if (ret) {
10688 		dev_err(&pdev->dev, "Rss init fail, ret =%d\n", ret);
10689 		goto err_mdiobus_unreg;
10690 	}
10691 
10692 	ret = init_mgr_tbl(hdev);
10693 	if (ret) {
10694 		dev_err(&pdev->dev, "manager table init fail, ret =%d\n", ret);
10695 		goto err_mdiobus_unreg;
10696 	}
10697 
10698 	ret = hclge_init_fd_config(hdev);
10699 	if (ret) {
10700 		dev_err(&pdev->dev,
10701 			"fd table init fail, ret=%d\n", ret);
10702 		goto err_mdiobus_unreg;
10703 	}
10704 
10705 	INIT_KFIFO(hdev->mac_tnl_log);
10706 
10707 	hclge_dcb_ops_set(hdev);
10708 
10709 	timer_setup(&hdev->reset_timer, hclge_reset_timer, 0);
10710 	INIT_DELAYED_WORK(&hdev->service_task, hclge_service_task);
10711 
10712 	/* Setup affinity after service timer setup because add_timer_on
10713 	 * is called in affinity notify.
10714 	 */
10715 	hclge_misc_affinity_setup(hdev);
10716 
10717 	hclge_clear_all_event_cause(hdev);
10718 	hclge_clear_resetting_state(hdev);
10719 
10720 	/* Log and clear the hw errors those already occurred */
10721 	hclge_handle_all_hns_hw_errors(ae_dev);
10722 
10723 	/* request delayed reset for the error recovery because an immediate
10724 	 * global reset on a PF affecting pending initialization of other PFs
10725 	 */
10726 	if (ae_dev->hw_err_reset_req) {
10727 		enum hnae3_reset_type reset_level;
10728 
10729 		reset_level = hclge_get_reset_level(ae_dev,
10730 						    &ae_dev->hw_err_reset_req);
10731 		hclge_set_def_reset_request(ae_dev, reset_level);
10732 		mod_timer(&hdev->reset_timer, jiffies + HCLGE_RESET_INTERVAL);
10733 	}
10734 
10735 	/* Enable MISC vector(vector0) */
10736 	hclge_enable_vector(&hdev->misc_vector, true);
10737 
10738 	hclge_state_init(hdev);
10739 	hdev->last_reset_time = jiffies;
10740 
10741 	dev_info(&hdev->pdev->dev, "%s driver initialization finished.\n",
10742 		 HCLGE_DRIVER_NAME);
10743 
10744 	hclge_task_schedule(hdev, round_jiffies_relative(HZ));
10745 
10746 	return 0;
10747 
10748 err_mdiobus_unreg:
10749 	if (hdev->hw.mac.phydev)
10750 		mdiobus_unregister(hdev->hw.mac.mdio_bus);
10751 err_msi_irq_uninit:
10752 	hclge_misc_irq_uninit(hdev);
10753 err_msi_uninit:
10754 	pci_free_irq_vectors(pdev);
10755 err_cmd_uninit:
10756 	hclge_cmd_uninit(hdev);
10757 err_pci_uninit:
10758 	pcim_iounmap(pdev, hdev->hw.io_base);
10759 	pci_clear_master(pdev);
10760 	pci_release_regions(pdev);
10761 	pci_disable_device(pdev);
10762 out:
10763 	mutex_destroy(&hdev->vport_lock);
10764 	return ret;
10765 }
10766 
10767 static void hclge_stats_clear(struct hclge_dev *hdev)
10768 {
10769 	memset(&hdev->mac_stats, 0, sizeof(hdev->mac_stats));
10770 }
10771 
10772 static int hclge_set_mac_spoofchk(struct hclge_dev *hdev, int vf, bool enable)
10773 {
10774 	return hclge_config_switch_param(hdev, vf, enable,
10775 					 HCLGE_SWITCH_ANTI_SPOOF_MASK);
10776 }
10777 
10778 static int hclge_set_vlan_spoofchk(struct hclge_dev *hdev, int vf, bool enable)
10779 {
10780 	return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
10781 					  HCLGE_FILTER_FE_NIC_INGRESS_B,
10782 					  enable, vf);
10783 }
10784 
10785 static int hclge_set_vf_spoofchk_hw(struct hclge_dev *hdev, int vf, bool enable)
10786 {
10787 	int ret;
10788 
10789 	ret = hclge_set_mac_spoofchk(hdev, vf, enable);
10790 	if (ret) {
10791 		dev_err(&hdev->pdev->dev,
10792 			"Set vf %d mac spoof check %s failed, ret=%d\n",
10793 			vf, enable ? "on" : "off", ret);
10794 		return ret;
10795 	}
10796 
10797 	ret = hclge_set_vlan_spoofchk(hdev, vf, enable);
10798 	if (ret)
10799 		dev_err(&hdev->pdev->dev,
10800 			"Set vf %d vlan spoof check %s failed, ret=%d\n",
10801 			vf, enable ? "on" : "off", ret);
10802 
10803 	return ret;
10804 }
10805 
10806 static int hclge_set_vf_spoofchk(struct hnae3_handle *handle, int vf,
10807 				 bool enable)
10808 {
10809 	struct hclge_vport *vport = hclge_get_vport(handle);
10810 	struct hclge_dev *hdev = vport->back;
10811 	u32 new_spoofchk = enable ? 1 : 0;
10812 	int ret;
10813 
10814 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
10815 		return -EOPNOTSUPP;
10816 
10817 	vport = hclge_get_vf_vport(hdev, vf);
10818 	if (!vport)
10819 		return -EINVAL;
10820 
10821 	if (vport->vf_info.spoofchk == new_spoofchk)
10822 		return 0;
10823 
10824 	if (enable && test_bit(vport->vport_id, hdev->vf_vlan_full))
10825 		dev_warn(&hdev->pdev->dev,
10826 			 "vf %d vlan table is full, enable spoof check may cause its packet send fail\n",
10827 			 vf);
10828 	else if (enable && hclge_is_umv_space_full(vport, true))
10829 		dev_warn(&hdev->pdev->dev,
10830 			 "vf %d mac table is full, enable spoof check may cause its packet send fail\n",
10831 			 vf);
10832 
10833 	ret = hclge_set_vf_spoofchk_hw(hdev, vport->vport_id, enable);
10834 	if (ret)
10835 		return ret;
10836 
10837 	vport->vf_info.spoofchk = new_spoofchk;
10838 	return 0;
10839 }
10840 
10841 static int hclge_reset_vport_spoofchk(struct hclge_dev *hdev)
10842 {
10843 	struct hclge_vport *vport = hdev->vport;
10844 	int ret;
10845 	int i;
10846 
10847 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
10848 		return 0;
10849 
10850 	/* resume the vf spoof check state after reset */
10851 	for (i = 0; i < hdev->num_alloc_vport; i++) {
10852 		ret = hclge_set_vf_spoofchk_hw(hdev, vport->vport_id,
10853 					       vport->vf_info.spoofchk);
10854 		if (ret)
10855 			return ret;
10856 
10857 		vport++;
10858 	}
10859 
10860 	return 0;
10861 }
10862 
10863 static int hclge_set_vf_trust(struct hnae3_handle *handle, int vf, bool enable)
10864 {
10865 	struct hclge_vport *vport = hclge_get_vport(handle);
10866 	struct hclge_dev *hdev = vport->back;
10867 	struct hnae3_ae_dev *ae_dev = hdev->ae_dev;
10868 	u32 new_trusted = enable ? 1 : 0;
10869 	bool en_bc_pmc;
10870 	int ret;
10871 
10872 	vport = hclge_get_vf_vport(hdev, vf);
10873 	if (!vport)
10874 		return -EINVAL;
10875 
10876 	if (vport->vf_info.trusted == new_trusted)
10877 		return 0;
10878 
10879 	/* Disable promisc mode for VF if it is not trusted any more. */
10880 	if (!enable && vport->vf_info.promisc_enable) {
10881 		en_bc_pmc = ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2;
10882 		ret = hclge_set_vport_promisc_mode(vport, false, false,
10883 						   en_bc_pmc);
10884 		if (ret)
10885 			return ret;
10886 		vport->vf_info.promisc_enable = 0;
10887 		hclge_inform_vf_promisc_info(vport);
10888 	}
10889 
10890 	vport->vf_info.trusted = new_trusted;
10891 
10892 	return 0;
10893 }
10894 
10895 static void hclge_reset_vf_rate(struct hclge_dev *hdev)
10896 {
10897 	int ret;
10898 	int vf;
10899 
10900 	/* reset vf rate to default value */
10901 	for (vf = HCLGE_VF_VPORT_START_NUM; vf < hdev->num_alloc_vport; vf++) {
10902 		struct hclge_vport *vport = &hdev->vport[vf];
10903 
10904 		vport->vf_info.max_tx_rate = 0;
10905 		ret = hclge_tm_qs_shaper_cfg(vport, vport->vf_info.max_tx_rate);
10906 		if (ret)
10907 			dev_err(&hdev->pdev->dev,
10908 				"vf%d failed to reset to default, ret=%d\n",
10909 				vf - HCLGE_VF_VPORT_START_NUM, ret);
10910 	}
10911 }
10912 
10913 static int hclge_vf_rate_param_check(struct hclge_dev *hdev,
10914 				     int min_tx_rate, int max_tx_rate)
10915 {
10916 	if (min_tx_rate != 0 ||
10917 	    max_tx_rate < 0 || max_tx_rate > hdev->hw.mac.max_speed) {
10918 		dev_err(&hdev->pdev->dev,
10919 			"min_tx_rate:%d [0], max_tx_rate:%d [0, %u]\n",
10920 			min_tx_rate, max_tx_rate, hdev->hw.mac.max_speed);
10921 		return -EINVAL;
10922 	}
10923 
10924 	return 0;
10925 }
10926 
10927 static int hclge_set_vf_rate(struct hnae3_handle *handle, int vf,
10928 			     int min_tx_rate, int max_tx_rate, bool force)
10929 {
10930 	struct hclge_vport *vport = hclge_get_vport(handle);
10931 	struct hclge_dev *hdev = vport->back;
10932 	int ret;
10933 
10934 	ret = hclge_vf_rate_param_check(hdev, min_tx_rate, max_tx_rate);
10935 	if (ret)
10936 		return ret;
10937 
10938 	vport = hclge_get_vf_vport(hdev, vf);
10939 	if (!vport)
10940 		return -EINVAL;
10941 
10942 	if (!force && max_tx_rate == vport->vf_info.max_tx_rate)
10943 		return 0;
10944 
10945 	ret = hclge_tm_qs_shaper_cfg(vport, max_tx_rate);
10946 	if (ret)
10947 		return ret;
10948 
10949 	vport->vf_info.max_tx_rate = max_tx_rate;
10950 
10951 	return 0;
10952 }
10953 
10954 static int hclge_resume_vf_rate(struct hclge_dev *hdev)
10955 {
10956 	struct hnae3_handle *handle = &hdev->vport->nic;
10957 	struct hclge_vport *vport;
10958 	int ret;
10959 	int vf;
10960 
10961 	/* resume the vf max_tx_rate after reset */
10962 	for (vf = 0; vf < pci_num_vf(hdev->pdev); vf++) {
10963 		vport = hclge_get_vf_vport(hdev, vf);
10964 		if (!vport)
10965 			return -EINVAL;
10966 
10967 		/* zero means max rate, after reset, firmware already set it to
10968 		 * max rate, so just continue.
10969 		 */
10970 		if (!vport->vf_info.max_tx_rate)
10971 			continue;
10972 
10973 		ret = hclge_set_vf_rate(handle, vf, 0,
10974 					vport->vf_info.max_tx_rate, true);
10975 		if (ret) {
10976 			dev_err(&hdev->pdev->dev,
10977 				"vf%d failed to resume tx_rate:%u, ret=%d\n",
10978 				vf, vport->vf_info.max_tx_rate, ret);
10979 			return ret;
10980 		}
10981 	}
10982 
10983 	return 0;
10984 }
10985 
10986 static void hclge_reset_vport_state(struct hclge_dev *hdev)
10987 {
10988 	struct hclge_vport *vport = hdev->vport;
10989 	int i;
10990 
10991 	for (i = 0; i < hdev->num_alloc_vport; i++) {
10992 		hclge_vport_stop(vport);
10993 		vport++;
10994 	}
10995 }
10996 
10997 static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev)
10998 {
10999 	struct hclge_dev *hdev = ae_dev->priv;
11000 	struct pci_dev *pdev = ae_dev->pdev;
11001 	int ret;
11002 
11003 	set_bit(HCLGE_STATE_DOWN, &hdev->state);
11004 
11005 	hclge_stats_clear(hdev);
11006 	/* NOTE: pf reset needn't to clear or restore pf and vf table entry.
11007 	 * so here should not clean table in memory.
11008 	 */
11009 	if (hdev->reset_type == HNAE3_IMP_RESET ||
11010 	    hdev->reset_type == HNAE3_GLOBAL_RESET) {
11011 		memset(hdev->vlan_table, 0, sizeof(hdev->vlan_table));
11012 		memset(hdev->vf_vlan_full, 0, sizeof(hdev->vf_vlan_full));
11013 		bitmap_set(hdev->vport_config_block, 0, hdev->num_alloc_vport);
11014 		hclge_reset_umv_space(hdev);
11015 	}
11016 
11017 	ret = hclge_cmd_init(hdev);
11018 	if (ret) {
11019 		dev_err(&pdev->dev, "Cmd queue init failed\n");
11020 		return ret;
11021 	}
11022 
11023 	ret = hclge_map_tqp(hdev);
11024 	if (ret) {
11025 		dev_err(&pdev->dev, "Map tqp error, ret = %d.\n", ret);
11026 		return ret;
11027 	}
11028 
11029 	ret = hclge_mac_init(hdev);
11030 	if (ret) {
11031 		dev_err(&pdev->dev, "Mac init error, ret = %d\n", ret);
11032 		return ret;
11033 	}
11034 
11035 	ret = hclge_config_tso(hdev, HCLGE_TSO_MSS_MIN, HCLGE_TSO_MSS_MAX);
11036 	if (ret) {
11037 		dev_err(&pdev->dev, "Enable tso fail, ret =%d\n", ret);
11038 		return ret;
11039 	}
11040 
11041 	ret = hclge_config_gro(hdev, true);
11042 	if (ret)
11043 		return ret;
11044 
11045 	ret = hclge_init_vlan_config(hdev);
11046 	if (ret) {
11047 		dev_err(&pdev->dev, "VLAN init fail, ret =%d\n", ret);
11048 		return ret;
11049 	}
11050 
11051 	ret = hclge_tm_init_hw(hdev, true);
11052 	if (ret) {
11053 		dev_err(&pdev->dev, "tm init hw fail, ret =%d\n", ret);
11054 		return ret;
11055 	}
11056 
11057 	ret = hclge_rss_init_hw(hdev);
11058 	if (ret) {
11059 		dev_err(&pdev->dev, "Rss init fail, ret =%d\n", ret);
11060 		return ret;
11061 	}
11062 
11063 	ret = init_mgr_tbl(hdev);
11064 	if (ret) {
11065 		dev_err(&pdev->dev,
11066 			"failed to reinit manager table, ret = %d\n", ret);
11067 		return ret;
11068 	}
11069 
11070 	ret = hclge_init_fd_config(hdev);
11071 	if (ret) {
11072 		dev_err(&pdev->dev, "fd table init fail, ret=%d\n", ret);
11073 		return ret;
11074 	}
11075 
11076 	/* Log and clear the hw errors those already occurred */
11077 	hclge_handle_all_hns_hw_errors(ae_dev);
11078 
11079 	/* Re-enable the hw error interrupts because
11080 	 * the interrupts get disabled on global reset.
11081 	 */
11082 	ret = hclge_config_nic_hw_error(hdev, true);
11083 	if (ret) {
11084 		dev_err(&pdev->dev,
11085 			"fail(%d) to re-enable NIC hw error interrupts\n",
11086 			ret);
11087 		return ret;
11088 	}
11089 
11090 	if (hdev->roce_client) {
11091 		ret = hclge_config_rocee_ras_interrupt(hdev, true);
11092 		if (ret) {
11093 			dev_err(&pdev->dev,
11094 				"fail(%d) to re-enable roce ras interrupts\n",
11095 				ret);
11096 			return ret;
11097 		}
11098 	}
11099 
11100 	hclge_reset_vport_state(hdev);
11101 	ret = hclge_reset_vport_spoofchk(hdev);
11102 	if (ret)
11103 		return ret;
11104 
11105 	ret = hclge_resume_vf_rate(hdev);
11106 	if (ret)
11107 		return ret;
11108 
11109 	dev_info(&pdev->dev, "Reset done, %s driver initialization finished.\n",
11110 		 HCLGE_DRIVER_NAME);
11111 
11112 	return 0;
11113 }
11114 
11115 static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev)
11116 {
11117 	struct hclge_dev *hdev = ae_dev->priv;
11118 	struct hclge_mac *mac = &hdev->hw.mac;
11119 
11120 	hclge_reset_vf_rate(hdev);
11121 	hclge_clear_vf_vlan(hdev);
11122 	hclge_misc_affinity_teardown(hdev);
11123 	hclge_state_uninit(hdev);
11124 	hclge_uninit_mac_table(hdev);
11125 
11126 	if (mac->phydev)
11127 		mdiobus_unregister(mac->mdio_bus);
11128 
11129 	/* Disable MISC vector(vector0) */
11130 	hclge_enable_vector(&hdev->misc_vector, false);
11131 	synchronize_irq(hdev->misc_vector.vector_irq);
11132 
11133 	/* Disable all hw interrupts */
11134 	hclge_config_mac_tnl_int(hdev, false);
11135 	hclge_config_nic_hw_error(hdev, false);
11136 	hclge_config_rocee_ras_interrupt(hdev, false);
11137 
11138 	hclge_cmd_uninit(hdev);
11139 	hclge_misc_irq_uninit(hdev);
11140 	hclge_pci_uninit(hdev);
11141 	mutex_destroy(&hdev->vport_lock);
11142 	hclge_uninit_vport_vlan_table(hdev);
11143 	ae_dev->priv = NULL;
11144 }
11145 
11146 static u32 hclge_get_max_channels(struct hnae3_handle *handle)
11147 {
11148 	struct hclge_vport *vport = hclge_get_vport(handle);
11149 	struct hclge_dev *hdev = vport->back;
11150 
11151 	return min_t(u32, hdev->pf_rss_size_max, vport->alloc_tqps);
11152 }
11153 
11154 static void hclge_get_channels(struct hnae3_handle *handle,
11155 			       struct ethtool_channels *ch)
11156 {
11157 	ch->max_combined = hclge_get_max_channels(handle);
11158 	ch->other_count = 1;
11159 	ch->max_other = 1;
11160 	ch->combined_count = handle->kinfo.rss_size;
11161 }
11162 
11163 static void hclge_get_tqps_and_rss_info(struct hnae3_handle *handle,
11164 					u16 *alloc_tqps, u16 *max_rss_size)
11165 {
11166 	struct hclge_vport *vport = hclge_get_vport(handle);
11167 	struct hclge_dev *hdev = vport->back;
11168 
11169 	*alloc_tqps = vport->alloc_tqps;
11170 	*max_rss_size = hdev->pf_rss_size_max;
11171 }
11172 
11173 static int hclge_set_channels(struct hnae3_handle *handle, u32 new_tqps_num,
11174 			      bool rxfh_configured)
11175 {
11176 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev);
11177 	struct hclge_vport *vport = hclge_get_vport(handle);
11178 	struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
11179 	u16 tc_offset[HCLGE_MAX_TC_NUM] = {0};
11180 	struct hclge_dev *hdev = vport->back;
11181 	u16 tc_size[HCLGE_MAX_TC_NUM] = {0};
11182 	u16 cur_rss_size = kinfo->rss_size;
11183 	u16 cur_tqps = kinfo->num_tqps;
11184 	u16 tc_valid[HCLGE_MAX_TC_NUM];
11185 	u16 roundup_size;
11186 	u32 *rss_indir;
11187 	unsigned int i;
11188 	int ret;
11189 
11190 	kinfo->req_rss_size = new_tqps_num;
11191 
11192 	ret = hclge_tm_vport_map_update(hdev);
11193 	if (ret) {
11194 		dev_err(&hdev->pdev->dev, "tm vport map fail, ret =%d\n", ret);
11195 		return ret;
11196 	}
11197 
11198 	roundup_size = roundup_pow_of_two(kinfo->rss_size);
11199 	roundup_size = ilog2(roundup_size);
11200 	/* Set the RSS TC mode according to the new RSS size */
11201 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
11202 		tc_valid[i] = 0;
11203 
11204 		if (!(hdev->hw_tc_map & BIT(i)))
11205 			continue;
11206 
11207 		tc_valid[i] = 1;
11208 		tc_size[i] = roundup_size;
11209 		tc_offset[i] = kinfo->rss_size * i;
11210 	}
11211 	ret = hclge_set_rss_tc_mode(hdev, tc_valid, tc_size, tc_offset);
11212 	if (ret)
11213 		return ret;
11214 
11215 	/* RSS indirection table has been configuared by user */
11216 	if (rxfh_configured)
11217 		goto out;
11218 
11219 	/* Reinitializes the rss indirect table according to the new RSS size */
11220 	rss_indir = kcalloc(ae_dev->dev_specs.rss_ind_tbl_size, sizeof(u32),
11221 			    GFP_KERNEL);
11222 	if (!rss_indir)
11223 		return -ENOMEM;
11224 
11225 	for (i = 0; i < ae_dev->dev_specs.rss_ind_tbl_size; i++)
11226 		rss_indir[i] = i % kinfo->rss_size;
11227 
11228 	ret = hclge_set_rss(handle, rss_indir, NULL, 0);
11229 	if (ret)
11230 		dev_err(&hdev->pdev->dev, "set rss indir table fail, ret=%d\n",
11231 			ret);
11232 
11233 	kfree(rss_indir);
11234 
11235 out:
11236 	if (!ret)
11237 		dev_info(&hdev->pdev->dev,
11238 			 "Channels changed, rss_size from %u to %u, tqps from %u to %u",
11239 			 cur_rss_size, kinfo->rss_size,
11240 			 cur_tqps, kinfo->rss_size * kinfo->tc_info.num_tc);
11241 
11242 	return ret;
11243 }
11244 
11245 static int hclge_get_regs_num(struct hclge_dev *hdev, u32 *regs_num_32_bit,
11246 			      u32 *regs_num_64_bit)
11247 {
11248 	struct hclge_desc desc;
11249 	u32 total_num;
11250 	int ret;
11251 
11252 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_REG_NUM, true);
11253 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
11254 	if (ret) {
11255 		dev_err(&hdev->pdev->dev,
11256 			"Query register number cmd failed, ret = %d.\n", ret);
11257 		return ret;
11258 	}
11259 
11260 	*regs_num_32_bit = le32_to_cpu(desc.data[0]);
11261 	*regs_num_64_bit = le32_to_cpu(desc.data[1]);
11262 
11263 	total_num = *regs_num_32_bit + *regs_num_64_bit;
11264 	if (!total_num)
11265 		return -EINVAL;
11266 
11267 	return 0;
11268 }
11269 
11270 static int hclge_get_32_bit_regs(struct hclge_dev *hdev, u32 regs_num,
11271 				 void *data)
11272 {
11273 #define HCLGE_32_BIT_REG_RTN_DATANUM 8
11274 #define HCLGE_32_BIT_DESC_NODATA_LEN 2
11275 
11276 	struct hclge_desc *desc;
11277 	u32 *reg_val = data;
11278 	__le32 *desc_data;
11279 	int nodata_num;
11280 	int cmd_num;
11281 	int i, k, n;
11282 	int ret;
11283 
11284 	if (regs_num == 0)
11285 		return 0;
11286 
11287 	nodata_num = HCLGE_32_BIT_DESC_NODATA_LEN;
11288 	cmd_num = DIV_ROUND_UP(regs_num + nodata_num,
11289 			       HCLGE_32_BIT_REG_RTN_DATANUM);
11290 	desc = kcalloc(cmd_num, sizeof(struct hclge_desc), GFP_KERNEL);
11291 	if (!desc)
11292 		return -ENOMEM;
11293 
11294 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QUERY_32_BIT_REG, true);
11295 	ret = hclge_cmd_send(&hdev->hw, desc, cmd_num);
11296 	if (ret) {
11297 		dev_err(&hdev->pdev->dev,
11298 			"Query 32 bit register cmd failed, ret = %d.\n", ret);
11299 		kfree(desc);
11300 		return ret;
11301 	}
11302 
11303 	for (i = 0; i < cmd_num; i++) {
11304 		if (i == 0) {
11305 			desc_data = (__le32 *)(&desc[i].data[0]);
11306 			n = HCLGE_32_BIT_REG_RTN_DATANUM - nodata_num;
11307 		} else {
11308 			desc_data = (__le32 *)(&desc[i]);
11309 			n = HCLGE_32_BIT_REG_RTN_DATANUM;
11310 		}
11311 		for (k = 0; k < n; k++) {
11312 			*reg_val++ = le32_to_cpu(*desc_data++);
11313 
11314 			regs_num--;
11315 			if (!regs_num)
11316 				break;
11317 		}
11318 	}
11319 
11320 	kfree(desc);
11321 	return 0;
11322 }
11323 
11324 static int hclge_get_64_bit_regs(struct hclge_dev *hdev, u32 regs_num,
11325 				 void *data)
11326 {
11327 #define HCLGE_64_BIT_REG_RTN_DATANUM 4
11328 #define HCLGE_64_BIT_DESC_NODATA_LEN 1
11329 
11330 	struct hclge_desc *desc;
11331 	u64 *reg_val = data;
11332 	__le64 *desc_data;
11333 	int nodata_len;
11334 	int cmd_num;
11335 	int i, k, n;
11336 	int ret;
11337 
11338 	if (regs_num == 0)
11339 		return 0;
11340 
11341 	nodata_len = HCLGE_64_BIT_DESC_NODATA_LEN;
11342 	cmd_num = DIV_ROUND_UP(regs_num + nodata_len,
11343 			       HCLGE_64_BIT_REG_RTN_DATANUM);
11344 	desc = kcalloc(cmd_num, sizeof(struct hclge_desc), GFP_KERNEL);
11345 	if (!desc)
11346 		return -ENOMEM;
11347 
11348 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QUERY_64_BIT_REG, true);
11349 	ret = hclge_cmd_send(&hdev->hw, desc, cmd_num);
11350 	if (ret) {
11351 		dev_err(&hdev->pdev->dev,
11352 			"Query 64 bit register cmd failed, ret = %d.\n", ret);
11353 		kfree(desc);
11354 		return ret;
11355 	}
11356 
11357 	for (i = 0; i < cmd_num; i++) {
11358 		if (i == 0) {
11359 			desc_data = (__le64 *)(&desc[i].data[0]);
11360 			n = HCLGE_64_BIT_REG_RTN_DATANUM - nodata_len;
11361 		} else {
11362 			desc_data = (__le64 *)(&desc[i]);
11363 			n = HCLGE_64_BIT_REG_RTN_DATANUM;
11364 		}
11365 		for (k = 0; k < n; k++) {
11366 			*reg_val++ = le64_to_cpu(*desc_data++);
11367 
11368 			regs_num--;
11369 			if (!regs_num)
11370 				break;
11371 		}
11372 	}
11373 
11374 	kfree(desc);
11375 	return 0;
11376 }
11377 
11378 #define MAX_SEPARATE_NUM	4
11379 #define SEPARATOR_VALUE		0xFDFCFBFA
11380 #define REG_NUM_PER_LINE	4
11381 #define REG_LEN_PER_LINE	(REG_NUM_PER_LINE * sizeof(u32))
11382 #define REG_SEPARATOR_LINE	1
11383 #define REG_NUM_REMAIN_MASK	3
11384 #define BD_LIST_MAX_NUM		30
11385 
11386 int hclge_query_bd_num_cmd_send(struct hclge_dev *hdev, struct hclge_desc *desc)
11387 {
11388 	int i;
11389 
11390 	/* initialize command BD except the last one */
11391 	for (i = 0; i < HCLGE_GET_DFX_REG_TYPE_CNT - 1; i++) {
11392 		hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_DFX_BD_NUM,
11393 					   true);
11394 		desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
11395 	}
11396 
11397 	/* initialize the last command BD */
11398 	hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_DFX_BD_NUM, true);
11399 
11400 	return hclge_cmd_send(&hdev->hw, desc, HCLGE_GET_DFX_REG_TYPE_CNT);
11401 }
11402 
11403 static int hclge_get_dfx_reg_bd_num(struct hclge_dev *hdev,
11404 				    int *bd_num_list,
11405 				    u32 type_num)
11406 {
11407 	u32 entries_per_desc, desc_index, index, offset, i;
11408 	struct hclge_desc desc[HCLGE_GET_DFX_REG_TYPE_CNT];
11409 	int ret;
11410 
11411 	ret = hclge_query_bd_num_cmd_send(hdev, desc);
11412 	if (ret) {
11413 		dev_err(&hdev->pdev->dev,
11414 			"Get dfx bd num fail, status is %d.\n", ret);
11415 		return ret;
11416 	}
11417 
11418 	entries_per_desc = ARRAY_SIZE(desc[0].data);
11419 	for (i = 0; i < type_num; i++) {
11420 		offset = hclge_dfx_bd_offset_list[i];
11421 		index = offset % entries_per_desc;
11422 		desc_index = offset / entries_per_desc;
11423 		bd_num_list[i] = le32_to_cpu(desc[desc_index].data[index]);
11424 	}
11425 
11426 	return ret;
11427 }
11428 
11429 static int hclge_dfx_reg_cmd_send(struct hclge_dev *hdev,
11430 				  struct hclge_desc *desc_src, int bd_num,
11431 				  enum hclge_opcode_type cmd)
11432 {
11433 	struct hclge_desc *desc = desc_src;
11434 	int i, ret;
11435 
11436 	hclge_cmd_setup_basic_desc(desc, cmd, true);
11437 	for (i = 0; i < bd_num - 1; i++) {
11438 		desc->flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
11439 		desc++;
11440 		hclge_cmd_setup_basic_desc(desc, cmd, true);
11441 	}
11442 
11443 	desc = desc_src;
11444 	ret = hclge_cmd_send(&hdev->hw, desc, bd_num);
11445 	if (ret)
11446 		dev_err(&hdev->pdev->dev,
11447 			"Query dfx reg cmd(0x%x) send fail, status is %d.\n",
11448 			cmd, ret);
11449 
11450 	return ret;
11451 }
11452 
11453 static int hclge_dfx_reg_fetch_data(struct hclge_desc *desc_src, int bd_num,
11454 				    void *data)
11455 {
11456 	int entries_per_desc, reg_num, separator_num, desc_index, index, i;
11457 	struct hclge_desc *desc = desc_src;
11458 	u32 *reg = data;
11459 
11460 	entries_per_desc = ARRAY_SIZE(desc->data);
11461 	reg_num = entries_per_desc * bd_num;
11462 	separator_num = REG_NUM_PER_LINE - (reg_num & REG_NUM_REMAIN_MASK);
11463 	for (i = 0; i < reg_num; i++) {
11464 		index = i % entries_per_desc;
11465 		desc_index = i / entries_per_desc;
11466 		*reg++ = le32_to_cpu(desc[desc_index].data[index]);
11467 	}
11468 	for (i = 0; i < separator_num; i++)
11469 		*reg++ = SEPARATOR_VALUE;
11470 
11471 	return reg_num + separator_num;
11472 }
11473 
11474 static int hclge_get_dfx_reg_len(struct hclge_dev *hdev, int *len)
11475 {
11476 	u32 dfx_reg_type_num = ARRAY_SIZE(hclge_dfx_bd_offset_list);
11477 	int data_len_per_desc, bd_num, i;
11478 	int bd_num_list[BD_LIST_MAX_NUM];
11479 	u32 data_len;
11480 	int ret;
11481 
11482 	ret = hclge_get_dfx_reg_bd_num(hdev, bd_num_list, dfx_reg_type_num);
11483 	if (ret) {
11484 		dev_err(&hdev->pdev->dev,
11485 			"Get dfx reg bd num fail, status is %d.\n", ret);
11486 		return ret;
11487 	}
11488 
11489 	data_len_per_desc = sizeof_field(struct hclge_desc, data);
11490 	*len = 0;
11491 	for (i = 0; i < dfx_reg_type_num; i++) {
11492 		bd_num = bd_num_list[i];
11493 		data_len = data_len_per_desc * bd_num;
11494 		*len += (data_len / REG_LEN_PER_LINE + 1) * REG_LEN_PER_LINE;
11495 	}
11496 
11497 	return ret;
11498 }
11499 
11500 static int hclge_get_dfx_reg(struct hclge_dev *hdev, void *data)
11501 {
11502 	u32 dfx_reg_type_num = ARRAY_SIZE(hclge_dfx_bd_offset_list);
11503 	int bd_num, bd_num_max, buf_len, i;
11504 	int bd_num_list[BD_LIST_MAX_NUM];
11505 	struct hclge_desc *desc_src;
11506 	u32 *reg = data;
11507 	int ret;
11508 
11509 	ret = hclge_get_dfx_reg_bd_num(hdev, bd_num_list, dfx_reg_type_num);
11510 	if (ret) {
11511 		dev_err(&hdev->pdev->dev,
11512 			"Get dfx reg bd num fail, status is %d.\n", ret);
11513 		return ret;
11514 	}
11515 
11516 	bd_num_max = bd_num_list[0];
11517 	for (i = 1; i < dfx_reg_type_num; i++)
11518 		bd_num_max = max_t(int, bd_num_max, bd_num_list[i]);
11519 
11520 	buf_len = sizeof(*desc_src) * bd_num_max;
11521 	desc_src = kzalloc(buf_len, GFP_KERNEL);
11522 	if (!desc_src)
11523 		return -ENOMEM;
11524 
11525 	for (i = 0; i < dfx_reg_type_num; i++) {
11526 		bd_num = bd_num_list[i];
11527 		ret = hclge_dfx_reg_cmd_send(hdev, desc_src, bd_num,
11528 					     hclge_dfx_reg_opcode_list[i]);
11529 		if (ret) {
11530 			dev_err(&hdev->pdev->dev,
11531 				"Get dfx reg fail, status is %d.\n", ret);
11532 			break;
11533 		}
11534 
11535 		reg += hclge_dfx_reg_fetch_data(desc_src, bd_num, reg);
11536 	}
11537 
11538 	kfree(desc_src);
11539 	return ret;
11540 }
11541 
11542 static int hclge_fetch_pf_reg(struct hclge_dev *hdev, void *data,
11543 			      struct hnae3_knic_private_info *kinfo)
11544 {
11545 #define HCLGE_RING_REG_OFFSET		0x200
11546 #define HCLGE_RING_INT_REG_OFFSET	0x4
11547 
11548 	int i, j, reg_num, separator_num;
11549 	int data_num_sum;
11550 	u32 *reg = data;
11551 
11552 	/* fetching per-PF registers valus from PF PCIe register space */
11553 	reg_num = ARRAY_SIZE(cmdq_reg_addr_list);
11554 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
11555 	for (i = 0; i < reg_num; i++)
11556 		*reg++ = hclge_read_dev(&hdev->hw, cmdq_reg_addr_list[i]);
11557 	for (i = 0; i < separator_num; i++)
11558 		*reg++ = SEPARATOR_VALUE;
11559 	data_num_sum = reg_num + separator_num;
11560 
11561 	reg_num = ARRAY_SIZE(common_reg_addr_list);
11562 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
11563 	for (i = 0; i < reg_num; i++)
11564 		*reg++ = hclge_read_dev(&hdev->hw, common_reg_addr_list[i]);
11565 	for (i = 0; i < separator_num; i++)
11566 		*reg++ = SEPARATOR_VALUE;
11567 	data_num_sum += reg_num + separator_num;
11568 
11569 	reg_num = ARRAY_SIZE(ring_reg_addr_list);
11570 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
11571 	for (j = 0; j < kinfo->num_tqps; j++) {
11572 		for (i = 0; i < reg_num; i++)
11573 			*reg++ = hclge_read_dev(&hdev->hw,
11574 						ring_reg_addr_list[i] +
11575 						HCLGE_RING_REG_OFFSET * j);
11576 		for (i = 0; i < separator_num; i++)
11577 			*reg++ = SEPARATOR_VALUE;
11578 	}
11579 	data_num_sum += (reg_num + separator_num) * kinfo->num_tqps;
11580 
11581 	reg_num = ARRAY_SIZE(tqp_intr_reg_addr_list);
11582 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
11583 	for (j = 0; j < hdev->num_msi_used - 1; j++) {
11584 		for (i = 0; i < reg_num; i++)
11585 			*reg++ = hclge_read_dev(&hdev->hw,
11586 						tqp_intr_reg_addr_list[i] +
11587 						HCLGE_RING_INT_REG_OFFSET * j);
11588 		for (i = 0; i < separator_num; i++)
11589 			*reg++ = SEPARATOR_VALUE;
11590 	}
11591 	data_num_sum += (reg_num + separator_num) * (hdev->num_msi_used - 1);
11592 
11593 	return data_num_sum;
11594 }
11595 
11596 static int hclge_get_regs_len(struct hnae3_handle *handle)
11597 {
11598 	int cmdq_lines, common_lines, ring_lines, tqp_intr_lines;
11599 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
11600 	struct hclge_vport *vport = hclge_get_vport(handle);
11601 	struct hclge_dev *hdev = vport->back;
11602 	int regs_num_32_bit, regs_num_64_bit, dfx_regs_len;
11603 	int regs_lines_32_bit, regs_lines_64_bit;
11604 	int ret;
11605 
11606 	ret = hclge_get_regs_num(hdev, &regs_num_32_bit, &regs_num_64_bit);
11607 	if (ret) {
11608 		dev_err(&hdev->pdev->dev,
11609 			"Get register number failed, ret = %d.\n", ret);
11610 		return ret;
11611 	}
11612 
11613 	ret = hclge_get_dfx_reg_len(hdev, &dfx_regs_len);
11614 	if (ret) {
11615 		dev_err(&hdev->pdev->dev,
11616 			"Get dfx reg len failed, ret = %d.\n", ret);
11617 		return ret;
11618 	}
11619 
11620 	cmdq_lines = sizeof(cmdq_reg_addr_list) / REG_LEN_PER_LINE +
11621 		REG_SEPARATOR_LINE;
11622 	common_lines = sizeof(common_reg_addr_list) / REG_LEN_PER_LINE +
11623 		REG_SEPARATOR_LINE;
11624 	ring_lines = sizeof(ring_reg_addr_list) / REG_LEN_PER_LINE +
11625 		REG_SEPARATOR_LINE;
11626 	tqp_intr_lines = sizeof(tqp_intr_reg_addr_list) / REG_LEN_PER_LINE +
11627 		REG_SEPARATOR_LINE;
11628 	regs_lines_32_bit = regs_num_32_bit * sizeof(u32) / REG_LEN_PER_LINE +
11629 		REG_SEPARATOR_LINE;
11630 	regs_lines_64_bit = regs_num_64_bit * sizeof(u64) / REG_LEN_PER_LINE +
11631 		REG_SEPARATOR_LINE;
11632 
11633 	return (cmdq_lines + common_lines + ring_lines * kinfo->num_tqps +
11634 		tqp_intr_lines * (hdev->num_msi_used - 1) + regs_lines_32_bit +
11635 		regs_lines_64_bit) * REG_LEN_PER_LINE + dfx_regs_len;
11636 }
11637 
11638 static void hclge_get_regs(struct hnae3_handle *handle, u32 *version,
11639 			   void *data)
11640 {
11641 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
11642 	struct hclge_vport *vport = hclge_get_vport(handle);
11643 	struct hclge_dev *hdev = vport->back;
11644 	u32 regs_num_32_bit, regs_num_64_bit;
11645 	int i, reg_num, separator_num, ret;
11646 	u32 *reg = data;
11647 
11648 	*version = hdev->fw_version;
11649 
11650 	ret = hclge_get_regs_num(hdev, &regs_num_32_bit, &regs_num_64_bit);
11651 	if (ret) {
11652 		dev_err(&hdev->pdev->dev,
11653 			"Get register number failed, ret = %d.\n", ret);
11654 		return;
11655 	}
11656 
11657 	reg += hclge_fetch_pf_reg(hdev, reg, kinfo);
11658 
11659 	ret = hclge_get_32_bit_regs(hdev, regs_num_32_bit, reg);
11660 	if (ret) {
11661 		dev_err(&hdev->pdev->dev,
11662 			"Get 32 bit register failed, ret = %d.\n", ret);
11663 		return;
11664 	}
11665 	reg_num = regs_num_32_bit;
11666 	reg += reg_num;
11667 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
11668 	for (i = 0; i < separator_num; i++)
11669 		*reg++ = SEPARATOR_VALUE;
11670 
11671 	ret = hclge_get_64_bit_regs(hdev, regs_num_64_bit, reg);
11672 	if (ret) {
11673 		dev_err(&hdev->pdev->dev,
11674 			"Get 64 bit register failed, ret = %d.\n", ret);
11675 		return;
11676 	}
11677 	reg_num = regs_num_64_bit * 2;
11678 	reg += reg_num;
11679 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
11680 	for (i = 0; i < separator_num; i++)
11681 		*reg++ = SEPARATOR_VALUE;
11682 
11683 	ret = hclge_get_dfx_reg(hdev, reg);
11684 	if (ret)
11685 		dev_err(&hdev->pdev->dev,
11686 			"Get dfx register failed, ret = %d.\n", ret);
11687 }
11688 
11689 static int hclge_set_led_status(struct hclge_dev *hdev, u8 locate_led_status)
11690 {
11691 	struct hclge_set_led_state_cmd *req;
11692 	struct hclge_desc desc;
11693 	int ret;
11694 
11695 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_LED_STATUS_CFG, false);
11696 
11697 	req = (struct hclge_set_led_state_cmd *)desc.data;
11698 	hnae3_set_field(req->locate_led_config, HCLGE_LED_LOCATE_STATE_M,
11699 			HCLGE_LED_LOCATE_STATE_S, locate_led_status);
11700 
11701 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
11702 	if (ret)
11703 		dev_err(&hdev->pdev->dev,
11704 			"Send set led state cmd error, ret =%d\n", ret);
11705 
11706 	return ret;
11707 }
11708 
11709 enum hclge_led_status {
11710 	HCLGE_LED_OFF,
11711 	HCLGE_LED_ON,
11712 	HCLGE_LED_NO_CHANGE = 0xFF,
11713 };
11714 
11715 static int hclge_set_led_id(struct hnae3_handle *handle,
11716 			    enum ethtool_phys_id_state status)
11717 {
11718 	struct hclge_vport *vport = hclge_get_vport(handle);
11719 	struct hclge_dev *hdev = vport->back;
11720 
11721 	switch (status) {
11722 	case ETHTOOL_ID_ACTIVE:
11723 		return hclge_set_led_status(hdev, HCLGE_LED_ON);
11724 	case ETHTOOL_ID_INACTIVE:
11725 		return hclge_set_led_status(hdev, HCLGE_LED_OFF);
11726 	default:
11727 		return -EINVAL;
11728 	}
11729 }
11730 
11731 static void hclge_get_link_mode(struct hnae3_handle *handle,
11732 				unsigned long *supported,
11733 				unsigned long *advertising)
11734 {
11735 	unsigned int size = BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS);
11736 	struct hclge_vport *vport = hclge_get_vport(handle);
11737 	struct hclge_dev *hdev = vport->back;
11738 	unsigned int idx = 0;
11739 
11740 	for (; idx < size; idx++) {
11741 		supported[idx] = hdev->hw.mac.supported[idx];
11742 		advertising[idx] = hdev->hw.mac.advertising[idx];
11743 	}
11744 }
11745 
11746 static int hclge_gro_en(struct hnae3_handle *handle, bool enable)
11747 {
11748 	struct hclge_vport *vport = hclge_get_vport(handle);
11749 	struct hclge_dev *hdev = vport->back;
11750 
11751 	return hclge_config_gro(hdev, enable);
11752 }
11753 
11754 static void hclge_sync_promisc_mode(struct hclge_dev *hdev)
11755 {
11756 	struct hclge_vport *vport = &hdev->vport[0];
11757 	struct hnae3_handle *handle = &vport->nic;
11758 	u8 tmp_flags;
11759 	int ret;
11760 
11761 	if (vport->last_promisc_flags != vport->overflow_promisc_flags) {
11762 		set_bit(HCLGE_STATE_PROMISC_CHANGED, &hdev->state);
11763 		vport->last_promisc_flags = vport->overflow_promisc_flags;
11764 	}
11765 
11766 	if (test_bit(HCLGE_STATE_PROMISC_CHANGED, &hdev->state)) {
11767 		tmp_flags = handle->netdev_flags | vport->last_promisc_flags;
11768 		ret = hclge_set_promisc_mode(handle, tmp_flags & HNAE3_UPE,
11769 					     tmp_flags & HNAE3_MPE);
11770 		if (!ret) {
11771 			clear_bit(HCLGE_STATE_PROMISC_CHANGED, &hdev->state);
11772 			hclge_enable_vlan_filter(handle,
11773 						 tmp_flags & HNAE3_VLAN_FLTR);
11774 		}
11775 	}
11776 }
11777 
11778 static bool hclge_module_existed(struct hclge_dev *hdev)
11779 {
11780 	struct hclge_desc desc;
11781 	u32 existed;
11782 	int ret;
11783 
11784 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GET_SFP_EXIST, true);
11785 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
11786 	if (ret) {
11787 		dev_err(&hdev->pdev->dev,
11788 			"failed to get SFP exist state, ret = %d\n", ret);
11789 		return false;
11790 	}
11791 
11792 	existed = le32_to_cpu(desc.data[0]);
11793 
11794 	return existed != 0;
11795 }
11796 
11797 /* need 6 bds(total 140 bytes) in one reading
11798  * return the number of bytes actually read, 0 means read failed.
11799  */
11800 static u16 hclge_get_sfp_eeprom_info(struct hclge_dev *hdev, u32 offset,
11801 				     u32 len, u8 *data)
11802 {
11803 	struct hclge_desc desc[HCLGE_SFP_INFO_CMD_NUM];
11804 	struct hclge_sfp_info_bd0_cmd *sfp_info_bd0;
11805 	u16 read_len;
11806 	u16 copy_len;
11807 	int ret;
11808 	int i;
11809 
11810 	/* setup all 6 bds to read module eeprom info. */
11811 	for (i = 0; i < HCLGE_SFP_INFO_CMD_NUM; i++) {
11812 		hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_GET_SFP_EEPROM,
11813 					   true);
11814 
11815 		/* bd0~bd4 need next flag */
11816 		if (i < HCLGE_SFP_INFO_CMD_NUM - 1)
11817 			desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
11818 	}
11819 
11820 	/* setup bd0, this bd contains offset and read length. */
11821 	sfp_info_bd0 = (struct hclge_sfp_info_bd0_cmd *)desc[0].data;
11822 	sfp_info_bd0->offset = cpu_to_le16((u16)offset);
11823 	read_len = min_t(u16, len, HCLGE_SFP_INFO_MAX_LEN);
11824 	sfp_info_bd0->read_len = cpu_to_le16(read_len);
11825 
11826 	ret = hclge_cmd_send(&hdev->hw, desc, i);
11827 	if (ret) {
11828 		dev_err(&hdev->pdev->dev,
11829 			"failed to get SFP eeprom info, ret = %d\n", ret);
11830 		return 0;
11831 	}
11832 
11833 	/* copy sfp info from bd0 to out buffer. */
11834 	copy_len = min_t(u16, len, HCLGE_SFP_INFO_BD0_LEN);
11835 	memcpy(data, sfp_info_bd0->data, copy_len);
11836 	read_len = copy_len;
11837 
11838 	/* copy sfp info from bd1~bd5 to out buffer if needed. */
11839 	for (i = 1; i < HCLGE_SFP_INFO_CMD_NUM; i++) {
11840 		if (read_len >= len)
11841 			return read_len;
11842 
11843 		copy_len = min_t(u16, len - read_len, HCLGE_SFP_INFO_BDX_LEN);
11844 		memcpy(data + read_len, desc[i].data, copy_len);
11845 		read_len += copy_len;
11846 	}
11847 
11848 	return read_len;
11849 }
11850 
11851 static int hclge_get_module_eeprom(struct hnae3_handle *handle, u32 offset,
11852 				   u32 len, u8 *data)
11853 {
11854 	struct hclge_vport *vport = hclge_get_vport(handle);
11855 	struct hclge_dev *hdev = vport->back;
11856 	u32 read_len = 0;
11857 	u16 data_len;
11858 
11859 	if (hdev->hw.mac.media_type != HNAE3_MEDIA_TYPE_FIBER)
11860 		return -EOPNOTSUPP;
11861 
11862 	if (!hclge_module_existed(hdev))
11863 		return -ENXIO;
11864 
11865 	while (read_len < len) {
11866 		data_len = hclge_get_sfp_eeprom_info(hdev,
11867 						     offset + read_len,
11868 						     len - read_len,
11869 						     data + read_len);
11870 		if (!data_len)
11871 			return -EIO;
11872 
11873 		read_len += data_len;
11874 	}
11875 
11876 	return 0;
11877 }
11878 
11879 static const struct hnae3_ae_ops hclge_ops = {
11880 	.init_ae_dev = hclge_init_ae_dev,
11881 	.uninit_ae_dev = hclge_uninit_ae_dev,
11882 	.flr_prepare = hclge_flr_prepare,
11883 	.flr_done = hclge_flr_done,
11884 	.init_client_instance = hclge_init_client_instance,
11885 	.uninit_client_instance = hclge_uninit_client_instance,
11886 	.map_ring_to_vector = hclge_map_ring_to_vector,
11887 	.unmap_ring_from_vector = hclge_unmap_ring_frm_vector,
11888 	.get_vector = hclge_get_vector,
11889 	.put_vector = hclge_put_vector,
11890 	.set_promisc_mode = hclge_set_promisc_mode,
11891 	.request_update_promisc_mode = hclge_request_update_promisc_mode,
11892 	.set_loopback = hclge_set_loopback,
11893 	.start = hclge_ae_start,
11894 	.stop = hclge_ae_stop,
11895 	.client_start = hclge_client_start,
11896 	.client_stop = hclge_client_stop,
11897 	.get_status = hclge_get_status,
11898 	.get_ksettings_an_result = hclge_get_ksettings_an_result,
11899 	.cfg_mac_speed_dup_h = hclge_cfg_mac_speed_dup_h,
11900 	.get_media_type = hclge_get_media_type,
11901 	.check_port_speed = hclge_check_port_speed,
11902 	.get_fec = hclge_get_fec,
11903 	.set_fec = hclge_set_fec,
11904 	.get_rss_key_size = hclge_get_rss_key_size,
11905 	.get_rss = hclge_get_rss,
11906 	.set_rss = hclge_set_rss,
11907 	.set_rss_tuple = hclge_set_rss_tuple,
11908 	.get_rss_tuple = hclge_get_rss_tuple,
11909 	.get_tc_size = hclge_get_tc_size,
11910 	.get_mac_addr = hclge_get_mac_addr,
11911 	.set_mac_addr = hclge_set_mac_addr,
11912 	.do_ioctl = hclge_do_ioctl,
11913 	.add_uc_addr = hclge_add_uc_addr,
11914 	.rm_uc_addr = hclge_rm_uc_addr,
11915 	.add_mc_addr = hclge_add_mc_addr,
11916 	.rm_mc_addr = hclge_rm_mc_addr,
11917 	.set_autoneg = hclge_set_autoneg,
11918 	.get_autoneg = hclge_get_autoneg,
11919 	.restart_autoneg = hclge_restart_autoneg,
11920 	.halt_autoneg = hclge_halt_autoneg,
11921 	.get_pauseparam = hclge_get_pauseparam,
11922 	.set_pauseparam = hclge_set_pauseparam,
11923 	.set_mtu = hclge_set_mtu,
11924 	.reset_queue = hclge_reset_tqp,
11925 	.get_stats = hclge_get_stats,
11926 	.get_mac_stats = hclge_get_mac_stat,
11927 	.update_stats = hclge_update_stats,
11928 	.get_strings = hclge_get_strings,
11929 	.get_sset_count = hclge_get_sset_count,
11930 	.get_fw_version = hclge_get_fw_version,
11931 	.get_mdix_mode = hclge_get_mdix_mode,
11932 	.enable_vlan_filter = hclge_enable_vlan_filter,
11933 	.set_vlan_filter = hclge_set_vlan_filter,
11934 	.set_vf_vlan_filter = hclge_set_vf_vlan_filter,
11935 	.enable_hw_strip_rxvtag = hclge_en_hw_strip_rxvtag,
11936 	.reset_event = hclge_reset_event,
11937 	.get_reset_level = hclge_get_reset_level,
11938 	.set_default_reset_request = hclge_set_def_reset_request,
11939 	.get_tqps_and_rss_info = hclge_get_tqps_and_rss_info,
11940 	.set_channels = hclge_set_channels,
11941 	.get_channels = hclge_get_channels,
11942 	.get_regs_len = hclge_get_regs_len,
11943 	.get_regs = hclge_get_regs,
11944 	.set_led_id = hclge_set_led_id,
11945 	.get_link_mode = hclge_get_link_mode,
11946 	.add_fd_entry = hclge_add_fd_entry,
11947 	.del_fd_entry = hclge_del_fd_entry,
11948 	.del_all_fd_entries = hclge_del_all_fd_entries,
11949 	.get_fd_rule_cnt = hclge_get_fd_rule_cnt,
11950 	.get_fd_rule_info = hclge_get_fd_rule_info,
11951 	.get_fd_all_rules = hclge_get_all_rules,
11952 	.enable_fd = hclge_enable_fd,
11953 	.add_arfs_entry = hclge_add_fd_entry_by_arfs,
11954 	.dbg_run_cmd = hclge_dbg_run_cmd,
11955 	.dbg_read_cmd = hclge_dbg_read_cmd,
11956 	.handle_hw_ras_error = hclge_handle_hw_ras_error,
11957 	.get_hw_reset_stat = hclge_get_hw_reset_stat,
11958 	.ae_dev_resetting = hclge_ae_dev_resetting,
11959 	.ae_dev_reset_cnt = hclge_ae_dev_reset_cnt,
11960 	.set_gro_en = hclge_gro_en,
11961 	.get_global_queue_id = hclge_covert_handle_qid_global,
11962 	.set_timer_task = hclge_set_timer_task,
11963 	.mac_connect_phy = hclge_mac_connect_phy,
11964 	.mac_disconnect_phy = hclge_mac_disconnect_phy,
11965 	.get_vf_config = hclge_get_vf_config,
11966 	.set_vf_link_state = hclge_set_vf_link_state,
11967 	.set_vf_spoofchk = hclge_set_vf_spoofchk,
11968 	.set_vf_trust = hclge_set_vf_trust,
11969 	.set_vf_rate = hclge_set_vf_rate,
11970 	.set_vf_mac = hclge_set_vf_mac,
11971 	.get_module_eeprom = hclge_get_module_eeprom,
11972 	.get_cmdq_stat = hclge_get_cmdq_stat,
11973 	.add_cls_flower = hclge_add_cls_flower,
11974 	.del_cls_flower = hclge_del_cls_flower,
11975 	.cls_flower_active = hclge_is_cls_flower_active,
11976 };
11977 
11978 static struct hnae3_ae_algo ae_algo = {
11979 	.ops = &hclge_ops,
11980 	.pdev_id_table = ae_algo_pci_tbl,
11981 };
11982 
11983 static int hclge_init(void)
11984 {
11985 	pr_info("%s is initializing\n", HCLGE_NAME);
11986 
11987 	hclge_wq = alloc_workqueue("%s", 0, 0, HCLGE_NAME);
11988 	if (!hclge_wq) {
11989 		pr_err("%s: failed to create workqueue\n", HCLGE_NAME);
11990 		return -ENOMEM;
11991 	}
11992 
11993 	hnae3_register_ae_algo(&ae_algo);
11994 
11995 	return 0;
11996 }
11997 
11998 static void hclge_exit(void)
11999 {
12000 	hnae3_unregister_ae_algo(&ae_algo);
12001 	destroy_workqueue(hclge_wq);
12002 }
12003 module_init(hclge_init);
12004 module_exit(hclge_exit);
12005 
12006 MODULE_LICENSE("GPL");
12007 MODULE_AUTHOR("Huawei Tech. Co., Ltd.");
12008 MODULE_DESCRIPTION("HCLGE Driver");
12009 MODULE_VERSION(HCLGE_MOD_VERSION);
12010