5caefc99e56995384e7e8c86cb0c60ea7efff93e
[dpdk.git] / drivers / net / ngbe / base / ngbe_type.h
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_FRAME_SIZE_MAX       (9728) /* Maximum frame size, +FCS */
12 #define NGBE_FRAME_SIZE_DFT       (1522) /* Default frame size, +FCS */
13 #define NGBE_NUM_POOL             (32)
14 #define NGBE_MAX_QP               (8)
15
16 #define NGBE_ALIGN              128 /* as intel did */
17 #define NGBE_ISB_SIZE           16
18
19 #include "ngbe_status.h"
20 #include "ngbe_osdep.h"
21 #include "ngbe_devids.h"
22
23 struct ngbe_thermal_diode_data {
24         s16 temp;
25         s16 alarm_thresh;
26         s16 dalarm_thresh;
27 };
28
29 struct ngbe_thermal_sensor_data {
30         struct ngbe_thermal_diode_data sensor[1];
31 };
32
33 enum ngbe_eeprom_type {
34         ngbe_eeprom_unknown = 0,
35         ngbe_eeprom_spi,
36         ngbe_eeprom_flash,
37         ngbe_eeprom_none /* No NVM support */
38 };
39
40 enum ngbe_mac_type {
41         ngbe_mac_unknown = 0,
42         ngbe_mac_em,
43         ngbe_mac_em_vf,
44         ngbe_num_macs
45 };
46
47 enum ngbe_phy_type {
48         ngbe_phy_unknown = 0,
49         ngbe_phy_none,
50         ngbe_phy_rtl,
51         ngbe_phy_mvl,
52         ngbe_phy_mvl_sfi,
53         ngbe_phy_yt8521s,
54         ngbe_phy_yt8521s_sfi,
55         ngbe_phy_zte,
56         ngbe_phy_cu_mtd,
57 };
58
59 enum ngbe_media_type {
60         ngbe_media_type_unknown = 0,
61         ngbe_media_type_fiber,
62         ngbe_media_type_fiber_qsfp,
63         ngbe_media_type_copper,
64         ngbe_media_type_backplane,
65         ngbe_media_type_cx4,
66         ngbe_media_type_virtual
67 };
68
69 struct ngbe_hw;
70
71 struct ngbe_addr_filter_info {
72         u32 mta_in_use;
73 };
74
75 /* Bus parameters */
76 struct ngbe_bus_info {
77         void (*set_lan_id)(struct ngbe_hw *hw);
78
79         u16 func;
80         u8 lan_id;
81 };
82
83 /* Statistics counters collected by the MAC */
84 /* PB[] RxTx */
85 struct ngbe_pb_stats {
86         u64 tx_pb_xon_packets;
87         u64 rx_pb_xon_packets;
88         u64 tx_pb_xoff_packets;
89         u64 rx_pb_xoff_packets;
90         u64 rx_pb_dropped;
91         u64 rx_pb_mbuf_alloc_errors;
92         u64 tx_pb_xon2off_packets;
93 };
94
95 /* QP[] RxTx */
96 struct ngbe_qp_stats {
97         u64 rx_qp_packets;
98         u64 tx_qp_packets;
99         u64 rx_qp_bytes;
100         u64 tx_qp_bytes;
101         u64 rx_qp_mc_packets;
102 };
103
104 struct ngbe_hw_stats {
105         /* MNG RxTx */
106         u64 mng_bmc2host_packets;
107         u64 mng_host2bmc_packets;
108         /* Basix RxTx */
109         u64 rx_drop_packets;
110         u64 tx_drop_packets;
111         u64 rx_dma_drop;
112         u64 tx_secdrp_packets;
113         u64 rx_packets;
114         u64 tx_packets;
115         u64 rx_bytes;
116         u64 tx_bytes;
117         u64 rx_total_bytes;
118         u64 rx_total_packets;
119         u64 tx_total_packets;
120         u64 rx_total_missed_packets;
121         u64 rx_broadcast_packets;
122         u64 tx_broadcast_packets;
123         u64 rx_multicast_packets;
124         u64 tx_multicast_packets;
125         u64 rx_management_packets;
126         u64 tx_management_packets;
127         u64 rx_management_dropped;
128
129         /* Basic Error */
130         u64 rx_crc_errors;
131         u64 rx_illegal_byte_errors;
132         u64 rx_error_bytes;
133         u64 rx_mac_short_packet_dropped;
134         u64 rx_length_errors;
135         u64 rx_undersize_errors;
136         u64 rx_fragment_errors;
137         u64 rx_oversize_errors;
138         u64 rx_jabber_errors;
139         u64 rx_l3_l4_xsum_error;
140         u64 mac_local_errors;
141         u64 mac_remote_errors;
142
143         /* MACSEC */
144         u64 tx_macsec_pkts_untagged;
145         u64 tx_macsec_pkts_encrypted;
146         u64 tx_macsec_pkts_protected;
147         u64 tx_macsec_octets_encrypted;
148         u64 tx_macsec_octets_protected;
149         u64 rx_macsec_pkts_untagged;
150         u64 rx_macsec_pkts_badtag;
151         u64 rx_macsec_pkts_nosci;
152         u64 rx_macsec_pkts_unknownsci;
153         u64 rx_macsec_octets_decrypted;
154         u64 rx_macsec_octets_validated;
155         u64 rx_macsec_sc_pkts_unchecked;
156         u64 rx_macsec_sc_pkts_delayed;
157         u64 rx_macsec_sc_pkts_late;
158         u64 rx_macsec_sa_pkts_ok;
159         u64 rx_macsec_sa_pkts_invalid;
160         u64 rx_macsec_sa_pkts_notvalid;
161         u64 rx_macsec_sa_pkts_unusedsa;
162         u64 rx_macsec_sa_pkts_notusingsa;
163
164         /* MAC RxTx */
165         u64 rx_size_64_packets;
166         u64 rx_size_65_to_127_packets;
167         u64 rx_size_128_to_255_packets;
168         u64 rx_size_256_to_511_packets;
169         u64 rx_size_512_to_1023_packets;
170         u64 rx_size_1024_to_max_packets;
171         u64 tx_size_64_packets;
172         u64 tx_size_65_to_127_packets;
173         u64 tx_size_128_to_255_packets;
174         u64 tx_size_256_to_511_packets;
175         u64 tx_size_512_to_1023_packets;
176         u64 tx_size_1024_to_max_packets;
177
178         /* Flow Control */
179         u64 tx_xon_packets;
180         u64 rx_xon_packets;
181         u64 tx_xoff_packets;
182         u64 rx_xoff_packets;
183
184         u64 rx_up_dropped;
185
186         u64 rdb_pkt_cnt;
187         u64 rdb_repli_cnt;
188         u64 rdb_drp_cnt;
189
190         /* QP[] RxTx */
191         struct {
192                 u64 rx_qp_packets;
193                 u64 tx_qp_packets;
194                 u64 rx_qp_bytes;
195                 u64 tx_qp_bytes;
196                 u64 rx_qp_mc_packets;
197                 u64 tx_qp_mc_packets;
198                 u64 rx_qp_bc_packets;
199                 u64 tx_qp_bc_packets;
200         } qp[NGBE_MAX_QP];
201
202 };
203
204 struct ngbe_rom_info {
205         s32 (*init_params)(struct ngbe_hw *hw);
206         s32 (*read32)(struct ngbe_hw *hw, u32 addr, u32 *data);
207         s32 (*validate_checksum)(struct ngbe_hw *hw, u16 *checksum_val);
208
209         enum ngbe_eeprom_type type;
210         u32 semaphore_delay;
211         u16 word_size;
212         u16 address_bits;
213         u16 word_page_size;
214         u32 sw_addr;
215         u32 saved_version;
216         u16 cksum_devcap;
217 };
218
219 struct ngbe_mac_info {
220         s32 (*init_hw)(struct ngbe_hw *hw);
221         s32 (*reset_hw)(struct ngbe_hw *hw);
222         s32 (*start_hw)(struct ngbe_hw *hw);
223         s32 (*stop_hw)(struct ngbe_hw *hw);
224         s32 (*clear_hw_cntrs)(struct ngbe_hw *hw);
225         s32 (*get_mac_addr)(struct ngbe_hw *hw, u8 *mac_addr);
226         s32 (*enable_rx_dma)(struct ngbe_hw *hw, u32 regval);
227         s32 (*disable_sec_rx_path)(struct ngbe_hw *hw);
228         s32 (*enable_sec_rx_path)(struct ngbe_hw *hw);
229         s32 (*acquire_swfw_sync)(struct ngbe_hw *hw, u32 mask);
230         void (*release_swfw_sync)(struct ngbe_hw *hw, u32 mask);
231
232         /* Link */
233         s32 (*setup_link)(struct ngbe_hw *hw, u32 speed,
234                                bool autoneg_wait_to_complete);
235         s32 (*check_link)(struct ngbe_hw *hw, u32 *speed,
236                                bool *link_up, bool link_up_wait_to_complete);
237         s32 (*get_link_capabilities)(struct ngbe_hw *hw,
238                                       u32 *speed, bool *autoneg);
239
240         /* RAR */
241         s32 (*set_rar)(struct ngbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
242                           u32 enable_addr);
243         s32 (*clear_rar)(struct ngbe_hw *hw, u32 index);
244         s32 (*set_vmdq)(struct ngbe_hw *hw, u32 rar, u32 vmdq);
245         s32 (*clear_vmdq)(struct ngbe_hw *hw, u32 rar, u32 vmdq);
246         s32 (*init_rx_addrs)(struct ngbe_hw *hw);
247         s32 (*clear_vfta)(struct ngbe_hw *hw);
248
249         /* Manageability interface */
250         s32 (*init_thermal_sensor_thresh)(struct ngbe_hw *hw);
251         s32 (*check_overtemp)(struct ngbe_hw *hw);
252
253         enum ngbe_mac_type type;
254         u8 addr[ETH_ADDR_LEN];
255         u8 perm_addr[ETH_ADDR_LEN];
256         s32 mc_filter_type;
257         u32 mcft_size;
258         u32 vft_size;
259         u32 num_rar_entries;
260         u32 max_tx_queues;
261         u32 max_rx_queues;
262         bool get_link_status;
263         struct ngbe_thermal_sensor_data  thermal_sensor_data;
264         bool set_lben;
265         u32  max_link_up_time;
266
267         u32 default_speeds;
268         bool autoneg;
269 };
270
271 struct ngbe_phy_info {
272         s32 (*identify)(struct ngbe_hw *hw);
273         s32 (*init_hw)(struct ngbe_hw *hw);
274         s32 (*reset_hw)(struct ngbe_hw *hw);
275         s32 (*read_reg)(struct ngbe_hw *hw, u32 reg_addr,
276                                 u32 device_type, u16 *phy_data);
277         s32 (*write_reg)(struct ngbe_hw *hw, u32 reg_addr,
278                                 u32 device_type, u16 phy_data);
279         s32 (*read_reg_unlocked)(struct ngbe_hw *hw, u32 reg_addr,
280                                 u32 device_type, u16 *phy_data);
281         s32 (*write_reg_unlocked)(struct ngbe_hw *hw, u32 reg_addr,
282                                 u32 device_type, u16 phy_data);
283         s32 (*setup_link)(struct ngbe_hw *hw, u32 speed,
284                                 bool autoneg_wait_to_complete);
285         s32 (*check_link)(struct ngbe_hw *hw, u32 *speed, bool *link_up);
286
287         enum ngbe_media_type media_type;
288         enum ngbe_phy_type type;
289         u32 addr;
290         u32 id;
291         u32 revision;
292         u32 phy_semaphore_mask;
293         bool reset_disable;
294         u32 autoneg_advertised;
295 };
296
297 enum ngbe_isb_idx {
298         NGBE_ISB_HEADER,
299         NGBE_ISB_MISC,
300         NGBE_ISB_VEC0,
301         NGBE_ISB_VEC1,
302         NGBE_ISB_MAX
303 };
304
305 struct ngbe_hw {
306         void IOMEM *hw_addr;
307         void *back;
308         struct ngbe_mac_info mac;
309         struct ngbe_addr_filter_info addr_ctrl;
310         struct ngbe_phy_info phy;
311         struct ngbe_rom_info rom;
312         struct ngbe_bus_info bus;
313         u16 device_id;
314         u16 vendor_id;
315         u16 sub_device_id;
316         u16 sub_system_id;
317         u32 eeprom_id;
318         bool adapter_stopped;
319
320         uint64_t isb_dma;
321         void IOMEM *isb_mem;
322         u16 nb_rx_queues;
323         u16 nb_tx_queues;
324
325         u32 mode;
326
327         u32 q_rx_regs[8 * 4];
328         u32 q_tx_regs[8 * 4];
329         bool offset_loaded;
330         bool is_pf;
331         struct {
332                 u64 rx_qp_packets;
333                 u64 tx_qp_packets;
334                 u64 rx_qp_bytes;
335                 u64 tx_qp_bytes;
336                 u64 rx_qp_mc_packets;
337                 u64 tx_qp_mc_packets;
338                 u64 rx_qp_bc_packets;
339                 u64 tx_qp_bc_packets;
340         } qp_last[NGBE_MAX_QP];
341 };
342
343 #include "ngbe_regs.h"
344 #include "ngbe_dummy.h"
345
346 #endif /* _NGBE_TYPE_H_ */