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