xref: /dpdk/drivers/net/ngbe/base/ngbe_type.h (revision 2aba42f6712c9ffd87a1c2cf227c23f0166f2f96)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018-2021 Beijing WangXun Technology Co., Ltd.
3  * Copyright(c) 2010-2017 Intel Corporation
4  */
5 
6 #ifndef _NGBE_TYPE_H_
7 #define _NGBE_TYPE_H_
8 
9 #define NGBE_LINK_UP_TIME	90 /* 9.0 Seconds */
10 
11 #define NGBE_RX_HDR_SIZE	256
12 #define NGBE_RX_BUF_SIZE	2048
13 
14 #define NGBE_FRAME_SIZE_MAX       (9728) /* Maximum frame size, +FCS */
15 #define NGBE_FRAME_SIZE_DFT       (1518) /* Default frame size, +FCS */
16 #define NGBE_NUM_POOL             (32)
17 #define NGBE_PBRXSIZE_MAX         0x00080000 /* 512KB Packet Buffer */
18 #define NGBE_PBTXSIZE_MAX         0x00005000 /* 20KB Packet Buffer */
19 #define NGBE_TXPKT_SIZE_MAX       0xA /* Max Tx Packet size */
20 #define NGBE_MAX_QP               (8)
21 #define NGBE_MAX_UTA              128
22 
23 #define NGBE_VF_INIT_TIMEOUT	200 /* Number of retries to clear RSTI */
24 #define NGBE_PCI_MASTER_DISABLE_TIMEOUT	800
25 #define NGBE_SPI_TIMEOUT	10000
26 
27 #define NGBE_ALIGN		128 /* as intel did */
28 #define NGBE_ISB_SIZE		16
29 
30 #include "ngbe_status.h"
31 #include "ngbe_osdep.h"
32 #include "ngbe_devids.h"
33 
34 struct ngbe_thermal_diode_data {
35 	s16 temp;
36 	s16 alarm_thresh;
37 	s16 dalarm_thresh;
38 };
39 
40 struct ngbe_thermal_sensor_data {
41 	struct ngbe_thermal_diode_data sensor[1];
42 };
43 
44 enum ngbe_eeprom_type {
45 	ngbe_eeprom_unknown = 0,
46 	ngbe_eeprom_spi,
47 	ngbe_eeprom_flash,
48 	ngbe_eeprom_none /* No NVM support */
49 };
50 
51 enum ngbe_link_type {
52 	ngbe_link_type_unknown = 0,
53 	ngbe_link_fiber,
54 	ngbe_link_copper
55 };
56 
57 enum ngbe_mac_type {
58 	ngbe_mac_unknown = 0,
59 	ngbe_mac_em,
60 	ngbe_mac_em_vf,
61 	ngbe_num_macs
62 };
63 
64 enum ngbe_phy_type {
65 	ngbe_phy_unknown = 0,
66 	ngbe_phy_none,
67 	ngbe_phy_rtl,
68 	ngbe_phy_mvl,
69 	ngbe_phy_mvl_sfi,
70 	ngbe_phy_yt8521s,
71 	ngbe_phy_yt8521s_sfi,
72 	ngbe_phy_zte,
73 	ngbe_phy_cu_mtd,
74 };
75 
76 enum ngbe_media_type {
77 	ngbe_media_type_unknown = 0,
78 	ngbe_media_type_fiber,
79 	ngbe_media_type_fiber_qsfp,
80 	ngbe_media_type_copper,
81 	ngbe_media_type_backplane,
82 	ngbe_media_type_cx4,
83 	ngbe_media_type_virtual
84 };
85 
86 /* Flow Control Settings */
87 enum ngbe_fc_mode {
88 	ngbe_fc_none = 0,
89 	ngbe_fc_rx_pause,
90 	ngbe_fc_tx_pause,
91 	ngbe_fc_full,
92 	ngbe_fc_default
93 };
94 
95 struct ngbe_hw;
96 
97 struct ngbe_addr_filter_info {
98 	u32 num_mc_addrs;
99 	u32 mta_in_use;
100 };
101 
102 /* Bus parameters */
103 struct ngbe_bus_info {
104 	void (*set_lan_id)(struct ngbe_hw *hw);
105 
106 	u16 func;
107 	u8 lan_id;
108 };
109 
110 /* Flow control parameters */
111 struct ngbe_fc_info {
112 	u32 high_water; /* Flow Ctrl High-water */
113 	u32 low_water; /* Flow Ctrl Low-water */
114 	u16 pause_time; /* Flow Control Pause timer */
115 	bool send_xon; /* Flow control send XON */
116 	bool strict_ieee; /* Strict IEEE mode */
117 	bool disable_fc_autoneg; /* Do not autonegotiate FC */
118 	bool fc_was_autonegged; /* Is current_mode the result of autonegging? */
119 	enum ngbe_fc_mode current_mode; /* FC mode in effect */
120 	enum ngbe_fc_mode requested_mode; /* FC mode requested by caller */
121 };
122 
123 /* Flow Control Data Sheet defined values
124  * Calculation and defines taken from 802.1bb Annex O
125  */
126 /* BitTimes (BT) conversion */
127 #define NGBE_BT2KB(BT)         (((BT) + (8 * 1024 - 1)) / (8 * 1024))
128 #define NGBE_B2BT(BT)          ((BT) * 8)
129 
130 /* Calculate Delay to respond to PFC */
131 #define NGBE_PFC_D     672
132 
133 /* Calculate Cable Delay */
134 #define NGBE_CABLE_DC  5556 /* Delay Copper */
135 
136 /* Calculate Interface Delay */
137 #define NGBE_PHY_D     12800
138 #define NGBE_MAC_D     4096
139 #define NGBE_XAUI_D    (2 * 1024)
140 
141 #define NGBE_ID        (NGBE_MAC_D + NGBE_XAUI_D + NGBE_PHY_D)
142 
143 /* Calculate Delay incurred from higher layer */
144 #define NGBE_HD        6144
145 
146 /* Calculate PCI Bus delay for low thresholds */
147 #define NGBE_PCI_DELAY 10000
148 
149 /* Calculate delay value in bit times */
150 #define NGBE_DV(_max_frame_link, _max_frame_tc) \
151 			((36 * \
152 			  (NGBE_B2BT(_max_frame_link) + \
153 			   NGBE_PFC_D + \
154 			   (2 * NGBE_CABLE_DC) + \
155 			   (2 * NGBE_ID) + \
156 			   NGBE_HD) / 25 + 1) + \
157 			 2 * NGBE_B2BT(_max_frame_tc))
158 
159 #define NGBE_LOW_DV(_max_frame_tc) \
160 			(2 * ((2 * NGBE_B2BT(_max_frame_tc) + \
161 			      (36 * NGBE_PCI_DELAY / 25) + 1)))
162 
163 /* Statistics counters collected by the MAC */
164 /* PB[] RxTx */
165 struct ngbe_pb_stats {
166 	u64 tx_pb_xon_packets;
167 	u64 rx_pb_xon_packets;
168 	u64 tx_pb_xoff_packets;
169 	u64 rx_pb_xoff_packets;
170 	u64 rx_pb_dropped;
171 	u64 rx_pb_mbuf_alloc_errors;
172 	u64 tx_pb_xon2off_packets;
173 };
174 
175 /* QP[] RxTx */
176 struct ngbe_qp_stats {
177 	u64 rx_qp_packets;
178 	u64 tx_qp_packets;
179 	u64 rx_qp_bytes;
180 	u64 tx_qp_bytes;
181 	u64 rx_qp_mc_packets;
182 };
183 
184 struct ngbe_hw_stats {
185 	/* MNG RxTx */
186 	u64 mng_bmc2host_packets;
187 	u64 mng_host2bmc_packets;
188 	/* Basix RxTx */
189 	u64 rx_dma_drop;
190 	u64 tx_dma_drop;
191 	u64 tx_secdrp_packets;
192 	u64 rx_packets;
193 	u64 tx_packets;
194 	u64 rx_bytes;
195 	u64 tx_bytes;
196 	u64 rx_total_bytes;
197 	u64 rx_total_packets;
198 	u64 tx_total_packets;
199 	u64 rx_total_missed_packets;
200 	u64 rx_broadcast_packets;
201 	u64 tx_broadcast_packets;
202 	u64 rx_multicast_packets;
203 	u64 tx_multicast_packets;
204 	u64 rx_management_packets;
205 	u64 tx_management_packets;
206 	u64 rx_management_dropped;
207 
208 	/* Basic Error */
209 	u64 rx_crc_errors;
210 	u64 rx_illegal_byte_errors;
211 	u64 rx_error_bytes;
212 	u64 rx_mac_short_packet_dropped;
213 	u64 rx_length_errors;
214 	u64 rx_undersize_errors;
215 	u64 rx_fragment_errors;
216 	u64 rx_oversize_cnt;
217 	u64 rx_jabber_errors;
218 	u64 rx_l3_l4_xsum_error;
219 	u64 mac_local_errors;
220 	u64 mac_remote_errors;
221 
222 	/* MACSEC */
223 	u64 tx_macsec_pkts_untagged;
224 	u64 tx_macsec_pkts_encrypted;
225 	u64 tx_macsec_pkts_protected;
226 	u64 tx_macsec_octets_encrypted;
227 	u64 tx_macsec_octets_protected;
228 	u64 rx_macsec_pkts_untagged;
229 	u64 rx_macsec_pkts_badtag;
230 	u64 rx_macsec_pkts_nosci;
231 	u64 rx_macsec_pkts_unknownsci;
232 	u64 rx_macsec_octets_decrypted;
233 	u64 rx_macsec_octets_validated;
234 	u64 rx_macsec_sc_pkts_unchecked;
235 	u64 rx_macsec_sc_pkts_delayed;
236 	u64 rx_macsec_sc_pkts_late;
237 	u64 rx_macsec_sa_pkts_ok;
238 	u64 rx_macsec_sa_pkts_invalid;
239 	u64 rx_macsec_sa_pkts_notvalid;
240 	u64 rx_macsec_sa_pkts_unusedsa;
241 	u64 rx_macsec_sa_pkts_notusingsa;
242 
243 	/* MAC RxTx */
244 	u64 rx_size_64_packets;
245 	u64 rx_size_65_to_127_packets;
246 	u64 rx_size_128_to_255_packets;
247 	u64 rx_size_256_to_511_packets;
248 	u64 rx_size_512_to_1023_packets;
249 	u64 rx_size_1024_to_max_packets;
250 	u64 tx_size_64_packets;
251 	u64 tx_size_65_to_127_packets;
252 	u64 tx_size_128_to_255_packets;
253 	u64 tx_size_256_to_511_packets;
254 	u64 tx_size_512_to_1023_packets;
255 	u64 tx_size_1024_to_max_packets;
256 
257 	/* Flow Control */
258 	u64 tx_xon_packets;
259 	u64 rx_xon_packets;
260 	u64 tx_xoff_packets;
261 	u64 rx_xoff_packets;
262 
263 	u64 rx_up_dropped;
264 
265 	u64 rdb_pkt_cnt;
266 	u64 rdb_repli_cnt;
267 	u64 rdb_drp_cnt;
268 
269 	/* QP[] RxTx */
270 	struct {
271 		u64 rx_qp_packets;
272 		u64 tx_qp_packets;
273 		u64 rx_qp_bytes;
274 		u64 tx_qp_bytes;
275 		u64 rx_qp_mc_packets;
276 		u64 tx_qp_mc_packets;
277 		u64 rx_qp_bc_packets;
278 		u64 tx_qp_bc_packets;
279 	} qp[NGBE_MAX_QP];
280 
281 };
282 
283 /* iterator type for walking multicast address lists */
284 typedef u8* (*ngbe_mc_addr_itr) (struct ngbe_hw *hw, u8 **mc_addr_ptr,
285 				  u32 *vmdq);
286 
287 struct ngbe_rom_info {
288 	s32 (*init_params)(struct ngbe_hw *hw);
289 	s32 (*readw_buffer)(struct ngbe_hw *hw, u32 offset, u32 words,
290 			    void *data);
291 	s32 (*read32)(struct ngbe_hw *hw, u32 addr, u32 *data);
292 	s32 (*writew_buffer)(struct ngbe_hw *hw, u32 offset, u32 words,
293 			     void *data);
294 	s32 (*validate_checksum)(struct ngbe_hw *hw, u16 *checksum_val);
295 
296 	enum ngbe_eeprom_type type;
297 	u32 semaphore_delay;
298 	u16 word_size;
299 	u16 address_bits;
300 	u16 word_page_size;
301 	u32 sw_addr;
302 	u32 saved_version;
303 	u16 cksum_devcap;
304 };
305 
306 struct ngbe_mac_info {
307 	s32 (*init_hw)(struct ngbe_hw *hw);
308 	s32 (*reset_hw)(struct ngbe_hw *hw);
309 	s32 (*start_hw)(struct ngbe_hw *hw);
310 	s32 (*stop_hw)(struct ngbe_hw *hw);
311 	s32 (*clear_hw_cntrs)(struct ngbe_hw *hw);
312 	s32 (*get_mac_addr)(struct ngbe_hw *hw, u8 *mac_addr);
313 	s32 (*enable_rx_dma)(struct ngbe_hw *hw, u32 regval);
314 	s32 (*disable_sec_rx_path)(struct ngbe_hw *hw);
315 	s32 (*enable_sec_rx_path)(struct ngbe_hw *hw);
316 	s32 (*acquire_swfw_sync)(struct ngbe_hw *hw, u32 mask);
317 	void (*release_swfw_sync)(struct ngbe_hw *hw, u32 mask);
318 	s32 (*negotiate_api_version)(struct ngbe_hw *hw, int api);
319 
320 	/* Link */
321 	s32 (*setup_link)(struct ngbe_hw *hw, u32 speed,
322 			       bool autoneg_wait_to_complete);
323 	s32 (*check_link)(struct ngbe_hw *hw, u32 *speed,
324 			       bool *link_up, bool link_up_wait_to_complete);
325 	s32 (*get_link_capabilities)(struct ngbe_hw *hw,
326 				      u32 *speed, bool *autoneg);
327 
328 	/* Packet Buffer manipulation */
329 	void (*setup_pba)(struct ngbe_hw *hw);
330 
331 	/* LED */
332 	s32 (*led_on)(struct ngbe_hw *hw, u32 index);
333 	s32 (*led_off)(struct ngbe_hw *hw, u32 index);
334 
335 	/* RAR */
336 	s32 (*set_rar)(struct ngbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
337 			  u32 enable_addr);
338 	s32 (*set_uc_addr)(struct ngbe_hw *hw, u32 index, u8 *addr);
339 	s32 (*clear_rar)(struct ngbe_hw *hw, u32 index);
340 	s32 (*set_vmdq)(struct ngbe_hw *hw, u32 rar, u32 vmdq);
341 	s32 (*clear_vmdq)(struct ngbe_hw *hw, u32 rar, u32 vmdq);
342 	s32 (*init_rx_addrs)(struct ngbe_hw *hw);
343 	s32 (*update_mc_addr_list)(struct ngbe_hw *hw, u8 *mc_addr_list,
344 				      u32 mc_addr_count,
345 				      ngbe_mc_addr_itr func, bool clear);
346 	s32 (*clear_vfta)(struct ngbe_hw *hw);
347 	s32 (*set_vfta)(struct ngbe_hw *hw, u32 vlan,
348 			 u32 vind, bool vlan_on, bool vlvf_bypass);
349 	s32 (*set_vlvf)(struct ngbe_hw *hw, u32 vlan, u32 vind,
350 			   bool vlan_on, u32 *vfta_delta, u32 vfta,
351 			   bool vlvf_bypass);
352 	void (*set_mac_anti_spoofing)(struct ngbe_hw *hw, bool enable, int vf);
353 	void (*set_vlan_anti_spoofing)(struct ngbe_hw *hw,
354 					bool enable, int vf);
355 	s32 (*update_xcast_mode)(struct ngbe_hw *hw, int xcast_mode);
356 	s32 (*set_rlpml)(struct ngbe_hw *hw, u16 max_size);
357 
358 	/* Flow Control */
359 	s32 (*fc_enable)(struct ngbe_hw *hw);
360 	s32 (*setup_fc)(struct ngbe_hw *hw);
361 	void (*fc_autoneg)(struct ngbe_hw *hw);
362 
363 	/* Manageability interface */
364 	s32 (*init_thermal_sensor_thresh)(struct ngbe_hw *hw);
365 	s32 (*check_overtemp)(struct ngbe_hw *hw);
366 
367 	enum ngbe_mac_type type;
368 	enum ngbe_link_type link_type;
369 	u8 addr[ETH_ADDR_LEN];
370 	u8 perm_addr[ETH_ADDR_LEN];
371 #define NGBE_MAX_MTA			128
372 	u32 mta_shadow[NGBE_MAX_MTA];
373 	s32 mc_filter_type;
374 	u32 mcft_size;
375 	u32 vft_size;
376 	u32 num_rar_entries;
377 	u32 rx_pb_size;
378 	u32 max_tx_queues;
379 	u32 max_rx_queues;
380 	bool get_link_status;
381 	struct ngbe_thermal_sensor_data  thermal_sensor_data;
382 	bool set_lben;
383 	u32  max_link_up_time;
384 
385 	u32 default_speeds;
386 	bool autoneg;
387 };
388 
389 struct ngbe_phy_info {
390 	s32 (*identify)(struct ngbe_hw *hw);
391 	s32 (*init_hw)(struct ngbe_hw *hw);
392 	s32 (*reset_hw)(struct ngbe_hw *hw);
393 	s32 (*read_reg)(struct ngbe_hw *hw, u32 reg_addr,
394 				u32 device_type, u16 *phy_data);
395 	s32 (*write_reg)(struct ngbe_hw *hw, u32 reg_addr,
396 				u32 device_type, u16 phy_data);
397 	s32 (*read_reg_unlocked)(struct ngbe_hw *hw, u32 reg_addr,
398 				u32 device_type, u16 *phy_data);
399 	s32 (*write_reg_unlocked)(struct ngbe_hw *hw, u32 reg_addr,
400 				u32 device_type, u16 phy_data);
401 	s32 (*setup_link)(struct ngbe_hw *hw, u32 speed,
402 				bool autoneg_wait_to_complete);
403 	s32 (*check_link)(struct ngbe_hw *hw, u32 *speed, bool *link_up);
404 	s32 (*set_phy_power)(struct ngbe_hw *hw, bool on);
405 	s32 (*led_oem_chk)(struct ngbe_hw *hw, u32 *data);
406 	s32 (*get_adv_pause)(struct ngbe_hw *hw, u8 *pause_bit);
407 	s32 (*get_lp_adv_pause)(struct ngbe_hw *hw, u8 *pause_bit);
408 	s32 (*set_pause_adv)(struct ngbe_hw *hw, u16 pause_bit);
409 
410 	enum ngbe_media_type media_type;
411 	enum ngbe_phy_type type;
412 	u32 addr;
413 	u32 id;
414 	u32 revision;
415 	u32 phy_semaphore_mask;
416 	bool reset_disable;
417 	u32 autoneg_advertised;
418 };
419 
420 struct ngbe_mbx_stats {
421 	u32 msgs_tx;
422 	u32 msgs_rx;
423 
424 	u32 acks;
425 	u32 reqs;
426 	u32 rsts;
427 };
428 
429 struct ngbe_mbx_info {
430 	void (*init_params)(struct ngbe_hw *hw);
431 	s32  (*read)(struct ngbe_hw *hw, u32 *msg, u16 size, u16 vf_number);
432 	s32  (*write)(struct ngbe_hw *hw, u32 *msg, u16 size, u16 vf_number);
433 	s32  (*read_posted)(struct ngbe_hw *hw, u32 *msg, u16 size,
434 				u16 mbx_id);
435 	s32  (*write_posted)(struct ngbe_hw *hw, u32 *msg, u16 size,
436 				u16 mbx_id);
437 	s32  (*check_for_msg)(struct ngbe_hw *hw, u16 mbx_id);
438 	s32  (*check_for_ack)(struct ngbe_hw *hw, u16 mbx_id);
439 	s32  (*check_for_rst)(struct ngbe_hw *hw, u16 mbx_id);
440 
441 	struct ngbe_mbx_stats stats;
442 	u32 timeout;
443 	u32 usec_delay;
444 	u32 v2p_mailbox;
445 	u16 size;
446 };
447 
448 enum ngbe_isb_idx {
449 	NGBE_ISB_HEADER,
450 	NGBE_ISB_MISC,
451 	NGBE_ISB_VEC0,
452 	NGBE_ISB_VEC1,
453 	NGBE_ISB_MAX
454 };
455 
456 struct ngbe_hw {
457 	void IOMEM *hw_addr;
458 	void *back;
459 	struct ngbe_mac_info mac;
460 	struct ngbe_addr_filter_info addr_ctrl;
461 	struct ngbe_fc_info fc;
462 	struct ngbe_phy_info phy;
463 	struct ngbe_rom_info rom;
464 	struct ngbe_bus_info bus;
465 	struct ngbe_mbx_info mbx;
466 	u16 device_id;
467 	u16 vendor_id;
468 	u16 sub_device_id;
469 	u16 sub_system_id;
470 	u32 eeprom_id;
471 	u8 port_id;
472 	u8 revision_id;
473 	bool adapter_stopped;
474 	int api_version;
475 	bool wol_enabled;
476 	bool ncsi_enabled;
477 	bool lldp_enabled;
478 
479 	uint64_t isb_dma;
480 	void IOMEM *isb_mem;
481 	u16 nb_rx_queues;
482 	u16 nb_tx_queues;
483 
484 	u32 mode;
485 
486 	u32 q_rx_regs[8 * 4];
487 	u32 q_tx_regs[8 * 4];
488 	u32 gphy_efuse[2];
489 	bool offset_loaded;
490 	bool rx_loaded;
491 	bool is_pf;
492 	bool gpio_ctl;
493 	bool lsc;
494 	u32 led_conf;
495 	bool init_phy;
496 	rte_spinlock_t phy_lock;
497 	struct {
498 		u64 rx_qp_packets;
499 		u64 tx_qp_packets;
500 		u64 rx_qp_bytes;
501 		u64 tx_qp_bytes;
502 		u64 rx_qp_mc_packets;
503 		u64 tx_qp_mc_packets;
504 		u64 rx_qp_bc_packets;
505 		u64 tx_qp_bc_packets;
506 	} qp_last[NGBE_MAX_QP];
507 };
508 
509 #include "ngbe_regs.h"
510 #include "ngbe_dummy.h"
511 
512 #endif /* _NGBE_TYPE_H_ */
513