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