net/sfc/base: define max desc number for every EF10 NIC
[dpdk.git] / drivers / net / sfc / base / siena_impl.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  *
3  * Copyright (c) 2009-2018 Solarflare Communications Inc.
4  * All rights reserved.
5  */
6
7 #ifndef _SYS_SIENA_IMPL_H
8 #define _SYS_SIENA_IMPL_H
9
10 #include "efx.h"
11 #include "efx_regs.h"
12 #include "efx_mcdi.h"
13 #include "siena_flash.h"
14
15 #ifdef  __cplusplus
16 extern "C" {
17 #endif
18
19 #ifndef EFX_TXQ_DC_SIZE
20 #define EFX_TXQ_DC_SIZE 1 /* 16 descriptors */
21 #endif
22 #ifndef EFX_RXQ_DC_SIZE
23 #define EFX_RXQ_DC_SIZE 3 /* 64 descriptors */
24 #endif
25 #define EFX_TXQ_DC_NDESCS(_dcsize)      (8 << (_dcsize))
26
27 #define SIENA_TXQ_MAXNDESCS     4096
28 #define SIENA_TXQ_MINNDESCS     512
29
30 #define SIENA_NVRAM_CHUNK 0x80
31
32
33 extern  __checkReturn   efx_rc_t
34 siena_nic_probe(
35         __in            efx_nic_t *enp);
36
37 extern  __checkReturn   efx_rc_t
38 siena_nic_reset(
39         __in            efx_nic_t *enp);
40
41 extern  __checkReturn   efx_rc_t
42 siena_nic_init(
43         __in            efx_nic_t *enp);
44
45 #if EFSYS_OPT_DIAG
46
47 extern  efx_sram_pattern_fn_t   __efx_sram_pattern_fns[];
48
49 typedef struct siena_register_set_s {
50         unsigned int            address;
51         unsigned int            step;
52         unsigned int            rows;
53         efx_oword_t             mask;
54 } siena_register_set_t;
55
56 extern  __checkReturn   efx_rc_t
57 siena_nic_register_test(
58         __in            efx_nic_t *enp);
59
60 #endif  /* EFSYS_OPT_DIAG */
61
62 extern                  void
63 siena_nic_fini(
64         __in            efx_nic_t *enp);
65
66 extern                  void
67 siena_nic_unprobe(
68         __in            efx_nic_t *enp);
69
70 #define SIENA_SRAM_ROWS 0x12000
71
72 extern                  void
73 siena_sram_init(
74         __in            efx_nic_t *enp);
75
76 #if EFSYS_OPT_DIAG
77
78 extern  __checkReturn   efx_rc_t
79 siena_sram_test(
80         __in            efx_nic_t *enp,
81         __in            efx_sram_pattern_fn_t func);
82
83 #endif  /* EFSYS_OPT_DIAG */
84
85 #if EFSYS_OPT_MCDI
86
87 extern  __checkReturn   efx_rc_t
88 siena_mcdi_init(
89         __in            efx_nic_t *enp,
90         __in            const efx_mcdi_transport_t *mtp);
91
92 extern                  void
93 siena_mcdi_send_request(
94         __in                    efx_nic_t *enp,
95         __in_bcount(hdr_len)    void *hdrp,
96         __in                    size_t hdr_len,
97         __in_bcount(sdu_len)    void *sdup,
98         __in                    size_t sdu_len);
99
100 extern  __checkReturn   boolean_t
101 siena_mcdi_poll_response(
102         __in            efx_nic_t *enp);
103
104 extern                  void
105 siena_mcdi_read_response(
106         __in                    efx_nic_t *enp,
107         __out_bcount(length)    void *bufferp,
108         __in                    size_t offset,
109         __in                    size_t length);
110
111 extern                  efx_rc_t
112 siena_mcdi_poll_reboot(
113         __in            efx_nic_t *enp);
114
115 extern                  void
116 siena_mcdi_fini(
117         __in            efx_nic_t *enp);
118
119 extern  __checkReturn   efx_rc_t
120 siena_mcdi_feature_supported(
121         __in            efx_nic_t *enp,
122         __in            efx_mcdi_feature_id_t id,
123         __out           boolean_t *supportedp);
124
125 extern                  void
126 siena_mcdi_get_timeout(
127         __in            efx_nic_t *enp,
128         __in            efx_mcdi_req_t *emrp,
129         __out           uint32_t *timeoutp);
130
131 #endif /* EFSYS_OPT_MCDI */
132
133 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
134
135 extern  __checkReturn           efx_rc_t
136 siena_nvram_partn_lock(
137         __in                    efx_nic_t *enp,
138         __in                    uint32_t partn);
139
140 extern  __checkReturn           efx_rc_t
141 siena_nvram_partn_unlock(
142         __in                    efx_nic_t *enp,
143         __in                    uint32_t partn,
144         __out_opt               uint32_t *verify_resultp);
145
146 extern  __checkReturn           efx_rc_t
147 siena_nvram_get_dynamic_cfg(
148         __in                    efx_nic_t *enp,
149         __in                    uint32_t partn,
150         __in                    boolean_t vpd,
151         __out                   siena_mc_dynamic_config_hdr_t **dcfgp,
152         __out                   size_t *sizep);
153
154 #endif  /* EFSYS_OPT_VPD || EFSYS_OPT_NVRAM */
155
156 #if EFSYS_OPT_NVRAM
157
158 #if EFSYS_OPT_DIAG
159
160 extern  __checkReturn           efx_rc_t
161 siena_nvram_test(
162         __in                    efx_nic_t *enp);
163
164 #endif  /* EFSYS_OPT_DIAG */
165
166 extern  __checkReturn           efx_rc_t
167 siena_nvram_get_subtype(
168         __in                    efx_nic_t *enp,
169         __in                    uint32_t partn,
170         __out                   uint32_t *subtypep);
171
172 extern  __checkReturn           efx_rc_t
173 siena_nvram_type_to_partn(
174         __in                    efx_nic_t *enp,
175         __in                    efx_nvram_type_t type,
176         __out                   uint32_t *partnp);
177
178 extern  __checkReturn           efx_rc_t
179 siena_nvram_partn_size(
180         __in                    efx_nic_t *enp,
181         __in                    uint32_t partn,
182         __out                   size_t *sizep);
183
184 extern  __checkReturn           efx_rc_t
185 siena_nvram_partn_rw_start(
186         __in                    efx_nic_t *enp,
187         __in                    uint32_t partn,
188         __out                   size_t *chunk_sizep);
189
190 extern  __checkReturn           efx_rc_t
191 siena_nvram_partn_read(
192         __in                    efx_nic_t *enp,
193         __in                    uint32_t partn,
194         __in                    unsigned int offset,
195         __out_bcount(size)      caddr_t data,
196         __in                    size_t size);
197
198 extern  __checkReturn           efx_rc_t
199 siena_nvram_partn_erase(
200         __in                    efx_nic_t *enp,
201         __in                    uint32_t partn,
202         __in                    unsigned int offset,
203         __in                    size_t size);
204
205 extern  __checkReturn           efx_rc_t
206 siena_nvram_partn_write(
207         __in                    efx_nic_t *enp,
208         __in                    uint32_t partn,
209         __in                    unsigned int offset,
210         __out_bcount(size)      caddr_t data,
211         __in                    size_t size);
212
213 extern  __checkReturn           efx_rc_t
214 siena_nvram_partn_rw_finish(
215         __in                    efx_nic_t *enp,
216         __in                    uint32_t partn,
217         __out_opt               uint32_t *verify_resultp);
218
219 extern  __checkReturn           efx_rc_t
220 siena_nvram_partn_get_version(
221         __in                    efx_nic_t *enp,
222         __in                    uint32_t partn,
223         __out                   uint32_t *subtypep,
224         __out_ecount(4)         uint16_t version[4]);
225
226 extern  __checkReturn           efx_rc_t
227 siena_nvram_partn_set_version(
228         __in                    efx_nic_t *enp,
229         __in                    uint32_t partn,
230         __in_ecount(4)          uint16_t version[4]);
231
232 #endif  /* EFSYS_OPT_NVRAM */
233
234 #if EFSYS_OPT_VPD
235
236 extern  __checkReturn           efx_rc_t
237 siena_vpd_init(
238         __in                    efx_nic_t *enp);
239
240 extern  __checkReturn           efx_rc_t
241 siena_vpd_size(
242         __in                    efx_nic_t *enp,
243         __out                   size_t *sizep);
244
245 extern  __checkReturn           efx_rc_t
246 siena_vpd_read(
247         __in                    efx_nic_t *enp,
248         __out_bcount(size)      caddr_t data,
249         __in                    size_t size);
250
251 extern  __checkReturn           efx_rc_t
252 siena_vpd_verify(
253         __in                    efx_nic_t *enp,
254         __in_bcount(size)       caddr_t data,
255         __in                    size_t size);
256
257 extern  __checkReturn           efx_rc_t
258 siena_vpd_reinit(
259         __in                    efx_nic_t *enp,
260         __in_bcount(size)       caddr_t data,
261         __in                    size_t size);
262
263 extern  __checkReturn           efx_rc_t
264 siena_vpd_get(
265         __in                    efx_nic_t *enp,
266         __in_bcount(size)       caddr_t data,
267         __in                    size_t size,
268         __inout                 efx_vpd_value_t *evvp);
269
270 extern  __checkReturn           efx_rc_t
271 siena_vpd_set(
272         __in                    efx_nic_t *enp,
273         __in_bcount(size)       caddr_t data,
274         __in                    size_t size,
275         __in                    efx_vpd_value_t *evvp);
276
277 extern  __checkReturn           efx_rc_t
278 siena_vpd_next(
279         __in                    efx_nic_t *enp,
280         __in_bcount(size)       caddr_t data,
281         __in                    size_t size,
282         __out                   efx_vpd_value_t *evvp,
283         __inout                 unsigned int *contp);
284
285 extern __checkReturn            efx_rc_t
286 siena_vpd_write(
287         __in                    efx_nic_t *enp,
288         __in_bcount(size)       caddr_t data,
289         __in                    size_t size);
290
291 extern                          void
292 siena_vpd_fini(
293         __in                    efx_nic_t *enp);
294
295 #endif  /* EFSYS_OPT_VPD */
296
297 typedef struct siena_link_state_s {
298         uint32_t                sls_adv_cap_mask;
299         uint32_t                sls_lp_cap_mask;
300         unsigned int            sls_fcntl;
301         efx_link_mode_t         sls_link_mode;
302 #if EFSYS_OPT_LOOPBACK
303         efx_loopback_type_t     sls_loopback;
304 #endif
305         boolean_t               sls_mac_up;
306 } siena_link_state_t;
307
308 extern                  void
309 siena_phy_link_ev(
310         __in            efx_nic_t *enp,
311         __in            efx_qword_t *eqp,
312         __out           efx_link_mode_t *link_modep);
313
314 extern  __checkReturn   efx_rc_t
315 siena_phy_get_link(
316         __in            efx_nic_t *enp,
317         __out           siena_link_state_t *slsp);
318
319 extern  __checkReturn   efx_rc_t
320 siena_phy_power(
321         __in            efx_nic_t *enp,
322         __in            boolean_t on);
323
324 extern  __checkReturn   efx_rc_t
325 siena_phy_reconfigure(
326         __in            efx_nic_t *enp);
327
328 extern  __checkReturn   efx_rc_t
329 siena_phy_verify(
330         __in            efx_nic_t *enp);
331
332 extern  __checkReturn   efx_rc_t
333 siena_phy_oui_get(
334         __in            efx_nic_t *enp,
335         __out           uint32_t *ouip);
336
337 #if EFSYS_OPT_PHY_STATS
338
339 extern                                          void
340 siena_phy_decode_stats(
341         __in                                    efx_nic_t *enp,
342         __in                                    uint32_t vmask,
343         __in_opt                                efsys_mem_t *esmp,
344         __out_opt                               uint64_t *smaskp,
345         __inout_ecount_opt(EFX_PHY_NSTATS)      uint32_t *stat);
346
347 extern  __checkReturn                   efx_rc_t
348 siena_phy_stats_update(
349         __in                            efx_nic_t *enp,
350         __in                            efsys_mem_t *esmp,
351         __inout_ecount(EFX_PHY_NSTATS)  uint32_t *stat);
352
353 #endif  /* EFSYS_OPT_PHY_STATS */
354
355 #if EFSYS_OPT_BIST
356
357 extern  __checkReturn           efx_rc_t
358 siena_phy_bist_start(
359         __in                    efx_nic_t *enp,
360         __in                    efx_bist_type_t type);
361
362 extern  __checkReturn           efx_rc_t
363 siena_phy_bist_poll(
364         __in                    efx_nic_t *enp,
365         __in                    efx_bist_type_t type,
366         __out                   efx_bist_result_t *resultp,
367         __out_opt __drv_when(count > 0, __notnull)
368         uint32_t        *value_maskp,
369         __out_ecount_opt(count) __drv_when(count > 0, __notnull)
370         unsigned long   *valuesp,
371         __in                    size_t count);
372
373 extern                          void
374 siena_phy_bist_stop(
375         __in                    efx_nic_t *enp,
376         __in                    efx_bist_type_t type);
377
378 #endif  /* EFSYS_OPT_BIST */
379
380 extern  __checkReturn   efx_rc_t
381 siena_mac_poll(
382         __in            efx_nic_t *enp,
383         __out           efx_link_mode_t *link_modep);
384
385 extern  __checkReturn   efx_rc_t
386 siena_mac_up(
387         __in            efx_nic_t *enp,
388         __out           boolean_t *mac_upp);
389
390 extern  __checkReturn   efx_rc_t
391 siena_mac_reconfigure(
392         __in    efx_nic_t *enp);
393
394 extern  __checkReturn   efx_rc_t
395 siena_mac_pdu_get(
396         __in    efx_nic_t *enp,
397         __out   size_t *pdu);
398
399 #if EFSYS_OPT_LOOPBACK
400
401 extern  __checkReturn   efx_rc_t
402 siena_mac_loopback_set(
403         __in            efx_nic_t *enp,
404         __in            efx_link_mode_t link_mode,
405         __in            efx_loopback_type_t loopback_type);
406
407 #endif  /* EFSYS_OPT_LOOPBACK */
408
409 #if EFSYS_OPT_MAC_STATS
410
411 extern  __checkReturn                   efx_rc_t
412 siena_mac_stats_get_mask(
413         __in                            efx_nic_t *enp,
414         __inout_bcount(mask_size)       uint32_t *maskp,
415         __in                            size_t mask_size);
416
417 extern  __checkReturn                   efx_rc_t
418 siena_mac_stats_update(
419         __in                            efx_nic_t *enp,
420         __in                            efsys_mem_t *esmp,
421         __inout_ecount(EFX_MAC_NSTATS)  efsys_stat_t *stat,
422         __inout_opt                     uint32_t *generationp);
423
424 #endif  /* EFSYS_OPT_MAC_STATS */
425
426 #ifdef  __cplusplus
427 }
428 #endif
429
430 #endif  /* _SYS_SIENA_IMPL_H */