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