net/sfc/base: improve MCDI interface header inclusion
[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_rw_start(
196         __in                    efx_nic_t *enp,
197         __in                    uint32_t partn,
198         __out                   size_t *chunk_sizep);
199
200 extern  __checkReturn           efx_rc_t
201 siena_nvram_partn_read(
202         __in                    efx_nic_t *enp,
203         __in                    uint32_t partn,
204         __in                    unsigned int offset,
205         __out_bcount(size)      caddr_t data,
206         __in                    size_t size);
207
208 extern  __checkReturn           efx_rc_t
209 siena_nvram_partn_erase(
210         __in                    efx_nic_t *enp,
211         __in                    uint32_t partn,
212         __in                    unsigned int offset,
213         __in                    size_t size);
214
215 extern  __checkReturn           efx_rc_t
216 siena_nvram_partn_write(
217         __in                    efx_nic_t *enp,
218         __in                    uint32_t partn,
219         __in                    unsigned int offset,
220         __out_bcount(size)      caddr_t data,
221         __in                    size_t size);
222
223 extern  __checkReturn           efx_rc_t
224 siena_nvram_partn_rw_finish(
225         __in                    efx_nic_t *enp,
226         __in                    uint32_t partn,
227         __out_opt               uint32_t *verify_resultp);
228
229 extern  __checkReturn           efx_rc_t
230 siena_nvram_partn_get_version(
231         __in                    efx_nic_t *enp,
232         __in                    uint32_t partn,
233         __out                   uint32_t *subtypep,
234         __out_ecount(4)         uint16_t version[4]);
235
236 extern  __checkReturn           efx_rc_t
237 siena_nvram_partn_set_version(
238         __in                    efx_nic_t *enp,
239         __in                    uint32_t partn,
240         __in_ecount(4)          uint16_t version[4]);
241
242 #endif  /* EFSYS_OPT_NVRAM */
243
244 #if EFSYS_OPT_VPD
245
246 extern  __checkReturn           efx_rc_t
247 siena_vpd_init(
248         __in                    efx_nic_t *enp);
249
250 extern  __checkReturn           efx_rc_t
251 siena_vpd_size(
252         __in                    efx_nic_t *enp,
253         __out                   size_t *sizep);
254
255 extern  __checkReturn           efx_rc_t
256 siena_vpd_read(
257         __in                    efx_nic_t *enp,
258         __out_bcount(size)      caddr_t data,
259         __in                    size_t size);
260
261 extern  __checkReturn           efx_rc_t
262 siena_vpd_verify(
263         __in                    efx_nic_t *enp,
264         __in_bcount(size)       caddr_t data,
265         __in                    size_t size);
266
267 extern  __checkReturn           efx_rc_t
268 siena_vpd_reinit(
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_get(
275         __in                    efx_nic_t *enp,
276         __in_bcount(size)       caddr_t data,
277         __in                    size_t size,
278         __inout                 efx_vpd_value_t *evvp);
279
280 extern  __checkReturn           efx_rc_t
281 siena_vpd_set(
282         __in                    efx_nic_t *enp,
283         __in_bcount(size)       caddr_t data,
284         __in                    size_t size,
285         __in                    efx_vpd_value_t *evvp);
286
287 extern  __checkReturn           efx_rc_t
288 siena_vpd_next(
289         __in                    efx_nic_t *enp,
290         __in_bcount(size)       caddr_t data,
291         __in                    size_t size,
292         __out                   efx_vpd_value_t *evvp,
293         __inout                 unsigned int *contp);
294
295 extern __checkReturn            efx_rc_t
296 siena_vpd_write(
297         __in                    efx_nic_t *enp,
298         __in_bcount(size)       caddr_t data,
299         __in                    size_t size);
300
301 extern                          void
302 siena_vpd_fini(
303         __in                    efx_nic_t *enp);
304
305 #endif  /* EFSYS_OPT_VPD */
306
307 typedef struct siena_link_state_s {
308         uint32_t                sls_adv_cap_mask;
309         uint32_t                sls_lp_cap_mask;
310         unsigned int            sls_fcntl;
311         efx_link_mode_t         sls_link_mode;
312 #if EFSYS_OPT_LOOPBACK
313         efx_loopback_type_t     sls_loopback;
314 #endif
315         boolean_t               sls_mac_up;
316 } siena_link_state_t;
317
318 extern                  void
319 siena_phy_link_ev(
320         __in            efx_nic_t *enp,
321         __in            efx_qword_t *eqp,
322         __out           efx_link_mode_t *link_modep);
323
324 extern  __checkReturn   efx_rc_t
325 siena_phy_get_link(
326         __in            efx_nic_t *enp,
327         __out           siena_link_state_t *slsp);
328
329 extern  __checkReturn   efx_rc_t
330 siena_phy_power(
331         __in            efx_nic_t *enp,
332         __in            boolean_t on);
333
334 extern  __checkReturn   efx_rc_t
335 siena_phy_reconfigure(
336         __in            efx_nic_t *enp);
337
338 extern  __checkReturn   efx_rc_t
339 siena_phy_verify(
340         __in            efx_nic_t *enp);
341
342 extern  __checkReturn   efx_rc_t
343 siena_phy_oui_get(
344         __in            efx_nic_t *enp,
345         __out           uint32_t *ouip);
346
347 #if EFSYS_OPT_PHY_STATS
348
349 extern                                          void
350 siena_phy_decode_stats(
351         __in                                    efx_nic_t *enp,
352         __in                                    uint32_t vmask,
353         __in_opt                                efsys_mem_t *esmp,
354         __out_opt                               uint64_t *smaskp,
355         __inout_ecount_opt(EFX_PHY_NSTATS)      uint32_t *stat);
356
357 extern  __checkReturn                   efx_rc_t
358 siena_phy_stats_update(
359         __in                            efx_nic_t *enp,
360         __in                            efsys_mem_t *esmp,
361         __inout_ecount(EFX_PHY_NSTATS)  uint32_t *stat);
362
363 #endif  /* EFSYS_OPT_PHY_STATS */
364
365 #if EFSYS_OPT_BIST
366
367 extern  __checkReturn           efx_rc_t
368 siena_phy_bist_start(
369         __in                    efx_nic_t *enp,
370         __in                    efx_bist_type_t type);
371
372 extern  __checkReturn           efx_rc_t
373 siena_phy_bist_poll(
374         __in                    efx_nic_t *enp,
375         __in                    efx_bist_type_t type,
376         __out                   efx_bist_result_t *resultp,
377         __out_opt __drv_when(count > 0, __notnull)
378         uint32_t        *value_maskp,
379         __out_ecount_opt(count) __drv_when(count > 0, __notnull)
380         unsigned long   *valuesp,
381         __in                    size_t count);
382
383 extern                          void
384 siena_phy_bist_stop(
385         __in                    efx_nic_t *enp,
386         __in                    efx_bist_type_t type);
387
388 #endif  /* EFSYS_OPT_BIST */
389
390 extern  __checkReturn   efx_rc_t
391 siena_mac_poll(
392         __in            efx_nic_t *enp,
393         __out           efx_link_mode_t *link_modep);
394
395 extern  __checkReturn   efx_rc_t
396 siena_mac_up(
397         __in            efx_nic_t *enp,
398         __out           boolean_t *mac_upp);
399
400 extern  __checkReturn   efx_rc_t
401 siena_mac_reconfigure(
402         __in    efx_nic_t *enp);
403
404 extern  __checkReturn   efx_rc_t
405 siena_mac_pdu_get(
406         __in    efx_nic_t *enp,
407         __out   size_t *pdu);
408
409 #if EFSYS_OPT_LOOPBACK
410
411 extern  __checkReturn   efx_rc_t
412 siena_mac_loopback_set(
413         __in            efx_nic_t *enp,
414         __in            efx_link_mode_t link_mode,
415         __in            efx_loopback_type_t loopback_type);
416
417 #endif  /* EFSYS_OPT_LOOPBACK */
418
419 #if EFSYS_OPT_MAC_STATS
420
421 extern  __checkReturn                   efx_rc_t
422 siena_mac_stats_get_mask(
423         __in                            efx_nic_t *enp,
424         __inout_bcount(mask_size)       uint32_t *maskp,
425         __in                            size_t mask_size);
426
427 extern  __checkReturn                   efx_rc_t
428 siena_mac_stats_update(
429         __in                            efx_nic_t *enp,
430         __in                            efsys_mem_t *esmp,
431         __inout_ecount(EFX_MAC_NSTATS)  efsys_stat_t *stat,
432         __inout_opt                     uint32_t *generationp);
433
434 #endif  /* EFSYS_OPT_MAC_STATS */
435
436 #ifdef  __cplusplus
437 }
438 #endif
439
440 #endif  /* _SYS_SIENA_IMPL_H */