]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - drivers/net/ethernet/hisilicon/hns3/hnae3.h
net: hns3: modify hnae_ to hnae3_
[mirror_ubuntu-bionic-kernel.git] / drivers / net / ethernet / hisilicon / hns3 / hnae3.h
1 /*
2 * Copyright (c) 2016-2017 Hisilicon Limited.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 */
9
10 #ifndef __HNAE3_H
11 #define __HNAE3_H
12
13 /* Names used in this framework:
14 * ae handle (handle):
15 * a set of queues provided by AE
16 * ring buffer queue (rbq):
17 * the channel between upper layer and the AE, can do tx and rx
18 * ring:
19 * a tx or rx channel within a rbq
20 * ring description (desc):
21 * an element in the ring with packet information
22 * buffer:
23 * a memory region referred by desc with the full packet payload
24 *
25 * "num" means a static number set as a parameter, "count" mean a dynamic
26 * number set while running
27 * "cb" means control block
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 /* Device IDs */
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 hnae3_get_bit(hdev->ae_dev->flag, HNAE3_DEV_SUPPORT_ROCE_B)
66
67 #define hnae3_dev_dcb_supported(hdev) \
68 hnae3_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
75 enum hns_desc_type {
76 DESC_TYPE_SKB,
77 DESC_TYPE_PAGE,
78 };
79
80 struct hnae3_handle;
81
82 struct hnae3_queue {
83 void __iomem *io_base;
84 struct hnae3_ae_algo *ae_algo;
85 struct hnae3_handle *handle;
86 int tqp_index; /* index in a handle */
87 u32 buf_size; /* size for hnae_desc->addr, preset by AE */
88 u16 desc_num; /* total number of desc */
89 };
90
91 /*hnae3 loop mode*/
92 enum 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
99 enum hnae3_client_type {
100 HNAE3_CLIENT_KNIC,
101 HNAE3_CLIENT_UNIC,
102 HNAE3_CLIENT_ROCE,
103 };
104
105 enum hnae3_dev_type {
106 HNAE3_DEV_KNIC,
107 HNAE3_DEV_UNIC,
108 };
109
110 /* mac media type */
111 enum 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
118 enum hnae3_reset_notify_type {
119 HNAE3_UP_CLIENT,
120 HNAE3_DOWN_CLIENT,
121 HNAE3_INIT_CLIENT,
122 HNAE3_UNINIT_CLIENT,
123 };
124
125 enum 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
135 struct 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
148 struct 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
158 struct 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
168 struct hnae3_client {
169 char name[HNAE3_CLIENT_NAME_LENGTH];
170 unsigned long state;
171 enum hnae3_client_type type;
172 const struct hnae3_client_ops *ops;
173 struct list_head node;
174 };
175
176 struct hnae3_ae_dev {
177 struct pci_dev *pdev;
178 const struct hnae3_ae_ops *ops;
179 struct list_head node;
180 u32 flag;
181 enum hnae3_dev_type dev_type;
182 void *priv;
183 };
184
185 /* This struct defines the operation on the handle.
186 *
187 * init_ae_dev(): (mandatory)
188 * Get PF configure from pci_dev and initialize PF hardware
189 * uninit_ae_dev()
190 * Disable PF device and release PF resource
191 * register_client
192 * Register client to ae_dev
193 * unregister_client()
194 * Unregister client from ae_dev
195 * start()
196 * Enable the hardware
197 * stop()
198 * Disable the hardware
199 * get_status()
200 * Get the carrier state of the back channel of the handle, 1 for ok, 0 for
201 * non-ok
202 * get_ksettings_an_result()
203 * Get negotiation status,speed and duplex
204 * update_speed_duplex_h()
205 * Update hardware speed and duplex
206 * get_media_type()
207 * Get media type of MAC
208 * adjust_link()
209 * Adjust link status
210 * set_loopback()
211 * Set loopback
212 * set_promisc_mode
213 * Set promisc mode
214 * set_mtu()
215 * set mtu
216 * get_pauseparam()
217 * get tx and rx of pause frame use
218 * set_pauseparam()
219 * set tx and rx of pause frame use
220 * set_autoneg()
221 * set auto autonegotiation of pause frame use
222 * get_autoneg()
223 * get auto autonegotiation of pause frame use
224 * get_coalesce_usecs()
225 * get usecs to delay a TX interrupt after a packet is sent
226 * get_rx_max_coalesced_frames()
227 * get Maximum number of packets to be sent before a TX interrupt.
228 * set_coalesce_usecs()
229 * set usecs to delay a TX interrupt after a packet is sent
230 * set_coalesce_frames()
231 * set Maximum number of packets to be sent before a TX interrupt.
232 * get_mac_addr()
233 * get mac address
234 * set_mac_addr()
235 * set mac address
236 * add_uc_addr
237 * Add unicast addr to mac table
238 * rm_uc_addr
239 * Remove unicast addr from mac table
240 * set_mc_addr()
241 * Set multicast address
242 * add_mc_addr
243 * Add multicast address to mac table
244 * rm_mc_addr
245 * Remove multicast address from mac table
246 * update_stats()
247 * Update Old network device statistics
248 * get_ethtool_stats()
249 * Get ethtool network device statistics
250 * get_strings()
251 * Get a set of strings that describe the requested objects
252 * get_sset_count()
253 * Get number of strings that @get_strings will write
254 * update_led_status()
255 * Update the led status
256 * set_led_id()
257 * Set led id
258 * get_regs()
259 * Get regs dump
260 * get_regs_len()
261 * Get the len of the regs dump
262 * get_rss_key_size()
263 * Get rss key size
264 * get_rss_indir_size()
265 * Get rss indirection table size
266 * get_rss()
267 * Get rss table
268 * set_rss()
269 * Set rss table
270 * get_tc_size()
271 * Get tc size of handle
272 * get_vector()
273 * Get vector number and vector information
274 * put_vector()
275 * Put the vector in hdev
276 * map_ring_to_vector()
277 * Map rings to vector
278 * unmap_ring_from_vector()
279 * Unmap rings from vector
280 * reset_queue()
281 * Reset queue
282 * get_fw_version()
283 * Get firmware version
284 * get_mdix_mode()
285 * Get media typr of phy
286 * enable_vlan_filter()
287 * Enable vlan filter
288 * set_vlan_filter()
289 * Set vlan filter config of Ports
290 * set_vf_vlan_filter()
291 * Set vlan filter config of vf
292 * enable_hw_strip_rxvtag()
293 * Enable/disable hardware strip vlan tag of packets received
294 */
295 struct hnae3_ae_ops {
296 int (*init_ae_dev)(struct hnae3_ae_dev *ae_dev);
297 void (*uninit_ae_dev)(struct hnae3_ae_dev *ae_dev);
298
299 int (*init_client_instance)(struct hnae3_client *client,
300 struct hnae3_ae_dev *ae_dev);
301 void (*uninit_client_instance)(struct hnae3_client *client,
302 struct hnae3_ae_dev *ae_dev);
303 int (*start)(struct hnae3_handle *handle);
304 void (*stop)(struct hnae3_handle *handle);
305 int (*get_status)(struct hnae3_handle *handle);
306 void (*get_ksettings_an_result)(struct hnae3_handle *handle,
307 u8 *auto_neg, u32 *speed, u8 *duplex);
308
309 int (*update_speed_duplex_h)(struct hnae3_handle *handle);
310 int (*cfg_mac_speed_dup_h)(struct hnae3_handle *handle, int speed,
311 u8 duplex);
312
313 void (*get_media_type)(struct hnae3_handle *handle, u8 *media_type);
314 void (*adjust_link)(struct hnae3_handle *handle, int speed, int duplex);
315 int (*set_loopback)(struct hnae3_handle *handle,
316 enum hnae3_loop loop_mode, bool en);
317
318 void (*set_promisc_mode)(struct hnae3_handle *handle, bool en_uc_pmc,
319 bool en_mc_pmc);
320 int (*set_mtu)(struct hnae3_handle *handle, int new_mtu);
321
322 void (*get_pauseparam)(struct hnae3_handle *handle,
323 u32 *auto_neg, u32 *rx_en, u32 *tx_en);
324 int (*set_pauseparam)(struct hnae3_handle *handle,
325 u32 auto_neg, u32 rx_en, u32 tx_en);
326
327 int (*set_autoneg)(struct hnae3_handle *handle, bool enable);
328 int (*get_autoneg)(struct hnae3_handle *handle);
329
330 void (*get_coalesce_usecs)(struct hnae3_handle *handle,
331 u32 *tx_usecs, u32 *rx_usecs);
332 void (*get_rx_max_coalesced_frames)(struct hnae3_handle *handle,
333 u32 *tx_frames, u32 *rx_frames);
334 int (*set_coalesce_usecs)(struct hnae3_handle *handle, u32 timeout);
335 int (*set_coalesce_frames)(struct hnae3_handle *handle,
336 u32 coalesce_frames);
337 void (*get_coalesce_range)(struct hnae3_handle *handle,
338 u32 *tx_frames_low, u32 *rx_frames_low,
339 u32 *tx_frames_high, u32 *rx_frames_high,
340 u32 *tx_usecs_low, u32 *rx_usecs_low,
341 u32 *tx_usecs_high, u32 *rx_usecs_high);
342
343 void (*get_mac_addr)(struct hnae3_handle *handle, u8 *p);
344 int (*set_mac_addr)(struct hnae3_handle *handle, void *p,
345 bool is_first);
346 int (*add_uc_addr)(struct hnae3_handle *handle,
347 const unsigned char *addr);
348 int (*rm_uc_addr)(struct hnae3_handle *handle,
349 const unsigned char *addr);
350 int (*set_mc_addr)(struct hnae3_handle *handle, void *addr);
351 int (*add_mc_addr)(struct hnae3_handle *handle,
352 const unsigned char *addr);
353 int (*rm_mc_addr)(struct hnae3_handle *handle,
354 const unsigned char *addr);
355 int (*update_mta_status)(struct hnae3_handle *handle);
356
357 void (*set_tso_stats)(struct hnae3_handle *handle, int enable);
358 void (*update_stats)(struct hnae3_handle *handle,
359 struct net_device_stats *net_stats);
360 void (*get_stats)(struct hnae3_handle *handle, u64 *data);
361
362 void (*get_strings)(struct hnae3_handle *handle,
363 u32 stringset, u8 *data);
364 int (*get_sset_count)(struct hnae3_handle *handle, int stringset);
365
366 void (*get_regs)(struct hnae3_handle *handle, u32 *version,
367 void *data);
368 int (*get_regs_len)(struct hnae3_handle *handle);
369
370 u32 (*get_rss_key_size)(struct hnae3_handle *handle);
371 u32 (*get_rss_indir_size)(struct hnae3_handle *handle);
372 int (*get_rss)(struct hnae3_handle *handle, u32 *indir, u8 *key,
373 u8 *hfunc);
374 int (*set_rss)(struct hnae3_handle *handle, const u32 *indir,
375 const u8 *key, const u8 hfunc);
376 int (*set_rss_tuple)(struct hnae3_handle *handle,
377 struct ethtool_rxnfc *cmd);
378 int (*get_rss_tuple)(struct hnae3_handle *handle,
379 struct ethtool_rxnfc *cmd);
380
381 int (*get_tc_size)(struct hnae3_handle *handle);
382
383 int (*get_vector)(struct hnae3_handle *handle, u16 vector_num,
384 struct hnae3_vector_info *vector_info);
385 int (*put_vector)(struct hnae3_handle *handle, int vector_num);
386 int (*map_ring_to_vector)(struct hnae3_handle *handle,
387 int vector_num,
388 struct hnae3_ring_chain_node *vr_chain);
389 int (*unmap_ring_from_vector)(struct hnae3_handle *handle,
390 int vector_num,
391 struct hnae3_ring_chain_node *vr_chain);
392
393 void (*reset_queue)(struct hnae3_handle *handle, u16 queue_id);
394 u32 (*get_fw_version)(struct hnae3_handle *handle);
395 void (*get_mdix_mode)(struct hnae3_handle *handle,
396 u8 *tp_mdix_ctrl, u8 *tp_mdix);
397
398 void (*enable_vlan_filter)(struct hnae3_handle *handle, bool enable);
399 int (*set_vlan_filter)(struct hnae3_handle *handle, __be16 proto,
400 u16 vlan_id, bool is_kill);
401 int (*set_vf_vlan_filter)(struct hnae3_handle *handle, int vfid,
402 u16 vlan, u8 qos, __be16 proto);
403 int (*enable_hw_strip_rxvtag)(struct hnae3_handle *handle, bool enable);
404 void (*reset_event)(struct hnae3_handle *handle);
405 void (*get_channels)(struct hnae3_handle *handle,
406 struct ethtool_channels *ch);
407 void (*get_tqps_and_rss_info)(struct hnae3_handle *h,
408 u16 *free_tqps, u16 *max_rss_size);
409 int (*set_channels)(struct hnae3_handle *handle, u32 new_tqps_num);
410 void (*get_flowctrl_adv)(struct hnae3_handle *handle,
411 u32 *flowctrl_adv);
412 int (*set_led_id)(struct hnae3_handle *handle,
413 enum ethtool_phys_id_state status);
414 void (*get_link_mode)(struct hnae3_handle *handle,
415 unsigned long *supported,
416 unsigned long *advertising);
417 void (*get_port_type)(struct hnae3_handle *handle, u8 *port_type);
418 };
419
420 struct hnae3_dcb_ops {
421 /* IEEE 802.1Qaz std */
422 int (*ieee_getets)(struct hnae3_handle *, struct ieee_ets *);
423 int (*ieee_setets)(struct hnae3_handle *, struct ieee_ets *);
424 int (*ieee_getpfc)(struct hnae3_handle *, struct ieee_pfc *);
425 int (*ieee_setpfc)(struct hnae3_handle *, struct ieee_pfc *);
426
427 /* DCBX configuration */
428 u8 (*getdcbx)(struct hnae3_handle *);
429 u8 (*setdcbx)(struct hnae3_handle *, u8);
430
431 int (*map_update)(struct hnae3_handle *);
432 int (*setup_tc)(struct hnae3_handle *, u8, u8 *);
433 };
434
435 struct hnae3_ae_algo {
436 const struct hnae3_ae_ops *ops;
437 struct list_head node;
438 const struct pci_device_id *pdev_id_table;
439 };
440
441 #define HNAE3_INT_NAME_LEN (IFNAMSIZ + 16)
442 #define HNAE3_ITR_COUNTDOWN_START 100
443
444 struct hnae3_tc_info {
445 u16 tqp_offset; /* TQP offset from base TQP */
446 u16 tqp_count; /* Total TQPs */
447 u8 tc; /* TC index */
448 bool enable; /* If this TC is enable or not */
449 };
450
451 #define HNAE3_MAX_TC 8
452 #define HNAE3_MAX_USER_PRIO 8
453 struct hnae3_knic_private_info {
454 struct net_device *netdev; /* Set by KNIC client when init instance */
455 u16 rss_size; /* Allocated RSS queues */
456 u16 rx_buf_len;
457 u16 num_desc;
458
459 u8 num_tc; /* Total number of enabled TCs */
460 u8 prio_tc[HNAE3_MAX_USER_PRIO]; /* TC indexed by prio */
461 struct hnae3_tc_info tc_info[HNAE3_MAX_TC]; /* Idx of array is HW TC */
462
463 u16 num_tqps; /* total number of TQPs in this handle */
464 struct hnae3_queue **tqp; /* array base of all TQPs in this instance */
465 const struct hnae3_dcb_ops *dcb_ops;
466
467 u16 int_rl_setting;
468 };
469
470 struct hnae3_roce_private_info {
471 struct net_device *netdev;
472 void __iomem *roce_io_base;
473 int base_vector;
474 int num_vectors;
475 };
476
477 struct hnae3_unic_private_info {
478 struct net_device *netdev;
479 u16 rx_buf_len;
480 u16 num_desc;
481 u16 num_tqps; /* total number of tqps in this handle */
482 struct hnae3_queue **tqp; /* array base of all TQPs of this instance */
483 };
484
485 #define HNAE3_SUPPORT_MAC_LOOPBACK BIT(0)
486 #define HNAE3_SUPPORT_PHY_LOOPBACK BIT(1)
487 #define HNAE3_SUPPORT_SERDES_LOOPBACK BIT(2)
488 #define HNAE3_SUPPORT_VF BIT(3)
489
490 struct hnae3_handle {
491 struct hnae3_client *client;
492 struct pci_dev *pdev;
493 void *priv;
494 struct hnae3_ae_algo *ae_algo; /* the class who provides this handle */
495 u64 flags; /* Indicate the capabilities for this handle*/
496
497 unsigned long last_reset_time;
498 enum hnae3_reset_type reset_level;
499
500 union {
501 struct net_device *netdev; /* first member */
502 struct hnae3_knic_private_info kinfo;
503 struct hnae3_unic_private_info uinfo;
504 struct hnae3_roce_private_info rinfo;
505 };
506
507 u32 numa_node_mask; /* for multi-chip support */
508 };
509
510 #define hnae3_set_field(origin, mask, shift, val) \
511 do { \
512 (origin) &= (~(mask)); \
513 (origin) |= ((val) << (shift)) & (mask); \
514 } while (0)
515 #define hnae3_get_field(origin, mask, shift) (((origin) & (mask)) >> (shift))
516
517 #define hnae3_set_bit(origin, shift, val) \
518 hnae3_set_field((origin), (0x1 << (shift)), (shift), (val))
519 #define hnae3_get_bit(origin, shift) \
520 hnae3_get_field((origin), (0x1 << (shift)), (shift))
521
522 void hnae3_register_ae_dev(struct hnae3_ae_dev *ae_dev);
523 void hnae3_unregister_ae_dev(struct hnae3_ae_dev *ae_dev);
524
525 void hnae3_unregister_ae_algo(struct hnae3_ae_algo *ae_algo);
526 void hnae3_register_ae_algo(struct hnae3_ae_algo *ae_algo);
527
528 void hnae3_unregister_client(struct hnae3_client *client);
529 int hnae3_register_client(struct hnae3_client *client);
530 #endif