1
2
3
4
5
6
7
8
9
10#ifndef __HNAE3_H
11#define __HNAE3_H
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30#include <linux/acpi.h>
31#include <linux/dcbnl.h>
32#include <linux/delay.h>
33#include <linux/device.h>
34#include <linux/module.h>
35#include <linux/netdevice.h>
36#include <linux/pci.h>
37#include <linux/types.h>
38
39#define HNAE3_MOD_VERSION "1.0"
40
41
42#define HNAE3_DEV_ID_GE 0xA220
43#define HNAE3_DEV_ID_25GE 0xA221
44#define HNAE3_DEV_ID_25GE_RDMA 0xA222
45#define HNAE3_DEV_ID_25GE_RDMA_MACSEC 0xA223
46#define HNAE3_DEV_ID_50GE_RDMA 0xA224
47#define HNAE3_DEV_ID_50GE_RDMA_MACSEC 0xA225
48#define HNAE3_DEV_ID_100G_RDMA_MACSEC 0xA226
49#define HNAE3_DEV_ID_100G_VF 0xA22E
50#define HNAE3_DEV_ID_100G_RDMA_DCB_PFC_VF 0xA22F
51
52#define HNAE3_CLASS_NAME_SIZE 16
53
54#define HNAE3_DEV_INITED_B 0x0
55#define HNAE3_DEV_SUPPORT_ROCE_B 0x1
56#define HNAE3_DEV_SUPPORT_DCB_B 0x2
57#define HNAE3_KNIC_CLIENT_INITED_B 0x3
58#define HNAE3_UNIC_CLIENT_INITED_B 0x4
59#define HNAE3_ROCE_CLIENT_INITED_B 0x5
60
61#define HNAE3_DEV_SUPPORT_ROCE_DCB_BITS (BIT(HNAE3_DEV_SUPPORT_DCB_B) |\
62 BIT(HNAE3_DEV_SUPPORT_ROCE_B))
63
64#define hnae3_dev_roce_supported(hdev) \
65 hnae_get_bit(hdev->ae_dev->flag, HNAE3_DEV_SUPPORT_ROCE_B)
66
67#define hnae3_dev_dcb_supported(hdev) \
68 hnae_get_bit(hdev->ae_dev->flag, HNAE3_DEV_SUPPORT_DCB_B)
69
70#define ring_ptr_move_fw(ring, p) \
71 ((ring)->p = ((ring)->p + 1) % (ring)->desc_num)
72#define ring_ptr_move_bw(ring, p) \
73 ((ring)->p = ((ring)->p - 1 + (ring)->desc_num) % (ring)->desc_num)
74
75enum hns_desc_type {
76 DESC_TYPE_SKB,
77 DESC_TYPE_PAGE,
78};
79
80struct hnae3_handle;
81
82struct hnae3_queue {
83 void __iomem *io_base;
84 struct hnae3_ae_algo *ae_algo;
85 struct hnae3_handle *handle;
86 int tqp_index;
87 u32 buf_size;
88 u16 desc_num;
89};
90
91
92enum hnae3_loop {
93 HNAE3_MAC_INTER_LOOP_MAC,
94 HNAE3_MAC_INTER_LOOP_SERDES,
95 HNAE3_MAC_INTER_LOOP_PHY,
96 HNAE3_MAC_LOOP_NONE,
97};
98
99enum hnae3_client_type {
100 HNAE3_CLIENT_KNIC,
101 HNAE3_CLIENT_UNIC,
102 HNAE3_CLIENT_ROCE,
103};
104
105enum hnae3_dev_type {
106 HNAE3_DEV_KNIC,
107 HNAE3_DEV_UNIC,
108};
109
110
111enum hnae3_media_type {
112 HNAE3_MEDIA_TYPE_UNKNOWN,
113 HNAE3_MEDIA_TYPE_FIBER,
114 HNAE3_MEDIA_TYPE_COPPER,
115 HNAE3_MEDIA_TYPE_BACKPLANE,
116};
117
118enum hnae3_reset_notify_type {
119 HNAE3_UP_CLIENT,
120 HNAE3_DOWN_CLIENT,
121 HNAE3_INIT_CLIENT,
122 HNAE3_UNINIT_CLIENT,
123};
124
125enum hnae3_reset_type {
126 HNAE3_VF_RESET,
127 HNAE3_VF_FULL_RESET,
128 HNAE3_FUNC_RESET,
129 HNAE3_CORE_RESET,
130 HNAE3_GLOBAL_RESET,
131 HNAE3_IMP_RESET,
132 HNAE3_NONE_RESET,
133};
134
135struct hnae3_vector_info {
136 u8 __iomem *io_addr;
137 int vector;
138};
139
140#define HNAE3_RING_TYPE_B 0
141#define HNAE3_RING_TYPE_TX 0
142#define HNAE3_RING_TYPE_RX 1
143#define HNAE3_RING_GL_IDX_S 0
144#define HNAE3_RING_GL_IDX_M GENMASK(1, 0)
145#define HNAE3_RING_GL_RX 0
146#define HNAE3_RING_GL_TX 1
147
148struct hnae3_ring_chain_node {
149 struct hnae3_ring_chain_node *next;
150 u32 tqp_index;
151 u32 flag;
152 u32 int_gl_idx;
153};
154
155#define HNAE3_IS_TX_RING(node) \
156 (((node)->flag & (1 << HNAE3_RING_TYPE_B)) == HNAE3_RING_TYPE_TX)
157
158struct hnae3_client_ops {
159 int (*init_instance)(struct hnae3_handle *handle);
160 void (*uninit_instance)(struct hnae3_handle *handle, bool reset);
161 void (*link_status_change)(struct hnae3_handle *handle, bool state);
162 int (*setup_tc)(struct hnae3_handle *handle, u8 tc);
163 int (*reset_notify)(struct hnae3_handle *handle,
164 enum hnae3_reset_notify_type type);
165};
166
167#define HNAE3_CLIENT_NAME_LENGTH 16
168struct hnae3_client {
169 char name[HNAE3_CLIENT_NAME_LENGTH];
170 u16 version;
171 unsigned long state;
172 enum hnae3_client_type type;
173 const struct hnae3_client_ops *ops;
174 struct list_head node;
175};
176
177struct hnae3_ae_dev {
178 struct pci_dev *pdev;
179 const struct hnae3_ae_ops *ops;
180 struct list_head node;
181 u32 flag;
182 enum hnae3_dev_type dev_type;
183 void *priv;
184};
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296struct hnae3_ae_ops {
297 int (*init_ae_dev)(struct hnae3_ae_dev *ae_dev);
298 void (*uninit_ae_dev)(struct hnae3_ae_dev *ae_dev);
299
300 int (*init_client_instance)(struct hnae3_client *client,
301 struct hnae3_ae_dev *ae_dev);
302 void (*uninit_client_instance)(struct hnae3_client *client,
303 struct hnae3_ae_dev *ae_dev);
304 int (*start)(struct hnae3_handle *handle);
305 void (*stop)(struct hnae3_handle *handle);
306 int (*get_status)(struct hnae3_handle *handle);
307 void (*get_ksettings_an_result)(struct hnae3_handle *handle,
308 u8 *auto_neg, u32 *speed, u8 *duplex);
309
310 int (*update_speed_duplex_h)(struct hnae3_handle *handle);
311 int (*cfg_mac_speed_dup_h)(struct hnae3_handle *handle, int speed,
312 u8 duplex);
313
314 void (*get_media_type)(struct hnae3_handle *handle, u8 *media_type);
315 void (*adjust_link)(struct hnae3_handle *handle, int speed, int duplex);
316 int (*set_loopback)(struct hnae3_handle *handle,
317 enum hnae3_loop loop_mode, bool en);
318
319 void (*set_promisc_mode)(struct hnae3_handle *handle, bool en_uc_pmc,
320 bool en_mc_pmc);
321 int (*set_mtu)(struct hnae3_handle *handle, int new_mtu);
322
323 void (*get_pauseparam)(struct hnae3_handle *handle,
324 u32 *auto_neg, u32 *rx_en, u32 *tx_en);
325 int (*set_pauseparam)(struct hnae3_handle *handle,
326 u32 auto_neg, u32 rx_en, u32 tx_en);
327
328 int (*set_autoneg)(struct hnae3_handle *handle, bool enable);
329 int (*get_autoneg)(struct hnae3_handle *handle);
330
331 void (*get_coalesce_usecs)(struct hnae3_handle *handle,
332 u32 *tx_usecs, u32 *rx_usecs);
333 void (*get_rx_max_coalesced_frames)(struct hnae3_handle *handle,
334 u32 *tx_frames, u32 *rx_frames);
335 int (*set_coalesce_usecs)(struct hnae3_handle *handle, u32 timeout);
336 int (*set_coalesce_frames)(struct hnae3_handle *handle,
337 u32 coalesce_frames);
338 void (*get_coalesce_range)(struct hnae3_handle *handle,
339 u32 *tx_frames_low, u32 *rx_frames_low,
340 u32 *tx_frames_high, u32 *rx_frames_high,
341 u32 *tx_usecs_low, u32 *rx_usecs_low,
342 u32 *tx_usecs_high, u32 *rx_usecs_high);
343
344 void (*get_mac_addr)(struct hnae3_handle *handle, u8 *p);
345 int (*set_mac_addr)(struct hnae3_handle *handle, void *p,
346 bool is_first);
347 int (*add_uc_addr)(struct hnae3_handle *handle,
348 const unsigned char *addr);
349 int (*rm_uc_addr)(struct hnae3_handle *handle,
350 const unsigned char *addr);
351 int (*set_mc_addr)(struct hnae3_handle *handle, void *addr);
352 int (*add_mc_addr)(struct hnae3_handle *handle,
353 const unsigned char *addr);
354 int (*rm_mc_addr)(struct hnae3_handle *handle,
355 const unsigned char *addr);
356 int (*update_mta_status)(struct hnae3_handle *handle);
357
358 void (*set_tso_stats)(struct hnae3_handle *handle, int enable);
359 void (*update_stats)(struct hnae3_handle *handle,
360 struct net_device_stats *net_stats);
361 void (*get_stats)(struct hnae3_handle *handle, u64 *data);
362
363 void (*get_strings)(struct hnae3_handle *handle,
364 u32 stringset, u8 *data);
365 int (*get_sset_count)(struct hnae3_handle *handle, int stringset);
366
367 void (*get_regs)(struct hnae3_handle *handle, u32 *version,
368 void *data);
369 int (*get_regs_len)(struct hnae3_handle *handle);
370
371 u32 (*get_rss_key_size)(struct hnae3_handle *handle);
372 u32 (*get_rss_indir_size)(struct hnae3_handle *handle);
373 int (*get_rss)(struct hnae3_handle *handle, u32 *indir, u8 *key,
374 u8 *hfunc);
375 int (*set_rss)(struct hnae3_handle *handle, const u32 *indir,
376 const u8 *key, const u8 hfunc);
377 int (*set_rss_tuple)(struct hnae3_handle *handle,
378 struct ethtool_rxnfc *cmd);
379 int (*get_rss_tuple)(struct hnae3_handle *handle,
380 struct ethtool_rxnfc *cmd);
381
382 int (*get_tc_size)(struct hnae3_handle *handle);
383
384 int (*get_vector)(struct hnae3_handle *handle, u16 vector_num,
385 struct hnae3_vector_info *vector_info);
386 int (*put_vector)(struct hnae3_handle *handle, int vector_num);
387 int (*map_ring_to_vector)(struct hnae3_handle *handle,
388 int vector_num,
389 struct hnae3_ring_chain_node *vr_chain);
390 int (*unmap_ring_from_vector)(struct hnae3_handle *handle,
391 int vector_num,
392 struct hnae3_ring_chain_node *vr_chain);
393
394 void (*reset_queue)(struct hnae3_handle *handle, u16 queue_id);
395 u32 (*get_fw_version)(struct hnae3_handle *handle);
396 void (*get_mdix_mode)(struct hnae3_handle *handle,
397 u8 *tp_mdix_ctrl, u8 *tp_mdix);
398
399 void (*enable_vlan_filter)(struct hnae3_handle *handle, bool enable);
400 int (*set_vlan_filter)(struct hnae3_handle *handle, __be16 proto,
401 u16 vlan_id, bool is_kill);
402 int (*set_vf_vlan_filter)(struct hnae3_handle *handle, int vfid,
403 u16 vlan, u8 qos, __be16 proto);
404 int (*enable_hw_strip_rxvtag)(struct hnae3_handle *handle, bool enable);
405 void (*reset_event)(struct hnae3_handle *handle);
406 void (*get_channels)(struct hnae3_handle *handle,
407 struct ethtool_channels *ch);
408 void (*get_tqps_and_rss_info)(struct hnae3_handle *h,
409 u16 *free_tqps, u16 *max_rss_size);
410 int (*set_channels)(struct hnae3_handle *handle, u32 new_tqps_num);
411 void (*get_flowctrl_adv)(struct hnae3_handle *handle,
412 u32 *flowctrl_adv);
413 int (*set_led_id)(struct hnae3_handle *handle,
414 enum ethtool_phys_id_state status);
415 void (*get_link_mode)(struct hnae3_handle *handle,
416 unsigned long *supported,
417 unsigned long *advertising);
418 void (*get_port_type)(struct hnae3_handle *handle, u8 *port_type);
419};
420
421struct hnae3_dcb_ops {
422
423 int (*ieee_getets)(struct hnae3_handle *, struct ieee_ets *);
424 int (*ieee_setets)(struct hnae3_handle *, struct ieee_ets *);
425 int (*ieee_getpfc)(struct hnae3_handle *, struct ieee_pfc *);
426 int (*ieee_setpfc)(struct hnae3_handle *, struct ieee_pfc *);
427
428
429 u8 (*getdcbx)(struct hnae3_handle *);
430 u8 (*setdcbx)(struct hnae3_handle *, u8);
431
432 int (*map_update)(struct hnae3_handle *);
433 int (*setup_tc)(struct hnae3_handle *, u8, u8 *);
434};
435
436struct hnae3_ae_algo {
437 const struct hnae3_ae_ops *ops;
438 struct list_head node;
439 char name[HNAE3_CLASS_NAME_SIZE];
440 const struct pci_device_id *pdev_id_table;
441};
442
443#define HNAE3_INT_NAME_LEN (IFNAMSIZ + 16)
444#define HNAE3_ITR_COUNTDOWN_START 100
445
446struct hnae3_tc_info {
447 u16 tqp_offset;
448 u16 tqp_count;
449 u8 tc;
450 bool enable;
451};
452
453#define HNAE3_MAX_TC 8
454#define HNAE3_MAX_USER_PRIO 8
455struct hnae3_knic_private_info {
456 struct net_device *netdev;
457 u16 rss_size;
458 u16 rx_buf_len;
459 u16 num_desc;
460
461 u8 num_tc;
462 u8 prio_tc[HNAE3_MAX_USER_PRIO];
463 struct hnae3_tc_info tc_info[HNAE3_MAX_TC];
464
465 u16 num_tqps;
466 struct hnae3_queue **tqp;
467 const struct hnae3_dcb_ops *dcb_ops;
468
469 u16 int_rl_setting;
470};
471
472struct hnae3_roce_private_info {
473 struct net_device *netdev;
474 void __iomem *roce_io_base;
475 int base_vector;
476 int num_vectors;
477};
478
479struct hnae3_unic_private_info {
480 struct net_device *netdev;
481 u16 rx_buf_len;
482 u16 num_desc;
483 u16 num_tqps;
484 struct hnae3_queue **tqp;
485};
486
487#define HNAE3_SUPPORT_MAC_LOOPBACK BIT(0)
488#define HNAE3_SUPPORT_PHY_LOOPBACK BIT(1)
489#define HNAE3_SUPPORT_SERDES_LOOPBACK BIT(2)
490#define HNAE3_SUPPORT_VF BIT(3)
491
492struct hnae3_handle {
493 struct hnae3_client *client;
494 struct pci_dev *pdev;
495 void *priv;
496 struct hnae3_ae_algo *ae_algo;
497 u64 flags;
498
499 unsigned long last_reset_time;
500 enum hnae3_reset_type reset_level;
501
502 union {
503 struct net_device *netdev;
504 struct hnae3_knic_private_info kinfo;
505 struct hnae3_unic_private_info uinfo;
506 struct hnae3_roce_private_info rinfo;
507 };
508
509 u32 numa_node_mask;
510};
511
512#define hnae_set_field(origin, mask, shift, val) \
513 do { \
514 (origin) &= (~(mask)); \
515 (origin) |= ((val) << (shift)) & (mask); \
516 } while (0)
517#define hnae_get_field(origin, mask, shift) (((origin) & (mask)) >> (shift))
518
519#define hnae_set_bit(origin, shift, val) \
520 hnae_set_field((origin), (0x1 << (shift)), (shift), (val))
521#define hnae_get_bit(origin, shift) \
522 hnae_get_field((origin), (0x1 << (shift)), (shift))
523
524void hnae3_register_ae_dev(struct hnae3_ae_dev *ae_dev);
525void hnae3_unregister_ae_dev(struct hnae3_ae_dev *ae_dev);
526
527void hnae3_unregister_ae_algo(struct hnae3_ae_algo *ae_algo);
528void hnae3_register_ae_algo(struct hnae3_ae_algo *ae_algo);
529
530void hnae3_unregister_client(struct hnae3_client *client);
531int hnae3_register_client(struct hnae3_client *client);
532#endif
533