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