net/sfc/base: allow to use PHY stats on Huntington/Medford
[dpdk.git] / drivers / net / sfc / base / siena_impl.h
1 /*
2  * Copyright (c) 2009-2016 Solarflare Communications Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  *    this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright notice,
11  *    this list of conditions and the following disclaimer in the documentation
12  *    and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
24  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  * The views and conclusions contained in the software and documentation are
27  * those of the authors and should not be interpreted as representing official
28  * policies, either expressed or implied, of the FreeBSD Project.
29  */
30
31 #ifndef _SYS_SIENA_IMPL_H
32 #define _SYS_SIENA_IMPL_H
33
34 #include "efx.h"
35 #include "efx_regs.h"
36 #include "efx_mcdi.h"
37 #include "siena_flash.h"
38
39 #ifdef  __cplusplus
40 extern "C" {
41 #endif
42
43 #ifndef EFX_TXQ_DC_SIZE
44 #define EFX_TXQ_DC_SIZE 1 /* 16 descriptors */
45 #endif
46 #ifndef EFX_RXQ_DC_SIZE
47 #define EFX_RXQ_DC_SIZE 3 /* 64 descriptors */
48 #endif
49 #define EFX_TXQ_DC_NDESCS(_dcsize)      (8 << (_dcsize))
50
51 #define SIENA_NVRAM_CHUNK 0x80
52
53
54 extern  __checkReturn   efx_rc_t
55 siena_nic_probe(
56         __in            efx_nic_t *enp);
57
58 extern  __checkReturn   efx_rc_t
59 siena_nic_reset(
60         __in            efx_nic_t *enp);
61
62 extern  __checkReturn   efx_rc_t
63 siena_nic_init(
64         __in            efx_nic_t *enp);
65
66 #if EFSYS_OPT_DIAG
67
68 extern  __checkReturn   efx_rc_t
69 siena_nic_register_test(
70         __in            efx_nic_t *enp);
71
72 #endif  /* EFSYS_OPT_DIAG */
73
74 extern                  void
75 siena_nic_fini(
76         __in            efx_nic_t *enp);
77
78 extern                  void
79 siena_nic_unprobe(
80         __in            efx_nic_t *enp);
81
82 #define SIENA_SRAM_ROWS 0x12000
83
84 extern                  void
85 siena_sram_init(
86         __in            efx_nic_t *enp);
87
88 #if EFSYS_OPT_DIAG
89
90 extern  __checkReturn   efx_rc_t
91 siena_sram_test(
92         __in            efx_nic_t *enp,
93         __in            efx_sram_pattern_fn_t func);
94
95 #endif  /* EFSYS_OPT_DIAG */
96
97 #if EFSYS_OPT_MCDI
98
99 extern  __checkReturn   efx_rc_t
100 siena_mcdi_init(
101         __in            efx_nic_t *enp,
102         __in            const efx_mcdi_transport_t *mtp);
103
104 extern                  void
105 siena_mcdi_send_request(
106         __in                    efx_nic_t *enp,
107         __in_bcount(hdr_len)    void *hdrp,
108         __in                    size_t hdr_len,
109         __in_bcount(sdu_len)    void *sdup,
110         __in                    size_t sdu_len);
111
112 extern  __checkReturn   boolean_t
113 siena_mcdi_poll_response(
114         __in            efx_nic_t *enp);
115
116 extern                  void
117 siena_mcdi_read_response(
118         __in                    efx_nic_t *enp,
119         __out_bcount(length)    void *bufferp,
120         __in                    size_t offset,
121         __in                    size_t length);
122
123 extern                  efx_rc_t
124 siena_mcdi_poll_reboot(
125         __in            efx_nic_t *enp);
126
127 extern                  void
128 siena_mcdi_fini(
129         __in            efx_nic_t *enp);
130
131 extern  __checkReturn   efx_rc_t
132 siena_mcdi_feature_supported(
133         __in            efx_nic_t *enp,
134         __in            efx_mcdi_feature_id_t id,
135         __out           boolean_t *supportedp);
136
137 extern                  void
138 siena_mcdi_get_timeout(
139         __in            efx_nic_t *enp,
140         __in            efx_mcdi_req_t *emrp,
141         __out           uint32_t *timeoutp);
142
143 #endif /* EFSYS_OPT_MCDI */
144
145 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
146
147 extern  __checkReturn           efx_rc_t
148 siena_nvram_partn_lock(
149         __in                    efx_nic_t *enp,
150         __in                    uint32_t partn);
151
152 extern  __checkReturn           efx_rc_t
153 siena_nvram_partn_unlock(
154         __in                    efx_nic_t *enp,
155         __in                    uint32_t partn,
156         __out_opt               uint32_t *verify_resultp);
157
158 extern  __checkReturn           efx_rc_t
159 siena_nvram_get_dynamic_cfg(
160         __in                    efx_nic_t *enp,
161         __in                    uint32_t partn,
162         __in                    boolean_t vpd,
163         __out                   siena_mc_dynamic_config_hdr_t **dcfgp,
164         __out                   size_t *sizep);
165
166 #endif  /* EFSYS_OPT_VPD || EFSYS_OPT_NVRAM */
167
168 #if EFSYS_OPT_NVRAM
169
170 #if EFSYS_OPT_DIAG
171
172 extern  __checkReturn           efx_rc_t
173 siena_nvram_test(
174         __in                    efx_nic_t *enp);
175
176 #endif  /* EFSYS_OPT_DIAG */
177
178 extern  __checkReturn           efx_rc_t
179 siena_nvram_get_subtype(
180         __in                    efx_nic_t *enp,
181         __in                    uint32_t partn,
182         __out                   uint32_t *subtypep);
183
184 extern  __checkReturn           efx_rc_t
185 siena_nvram_type_to_partn(
186         __in                    efx_nic_t *enp,
187         __in                    efx_nvram_type_t type,
188         __out                   uint32_t *partnp);
189
190 extern  __checkReturn           efx_rc_t
191 siena_nvram_partn_size(
192         __in                    efx_nic_t *enp,
193         __in                    uint32_t partn,
194         __out                   size_t *sizep);
195
196 extern  __checkReturn           efx_rc_t
197 siena_nvram_partn_rw_start(
198         __in                    efx_nic_t *enp,
199         __in                    uint32_t partn,
200         __out                   size_t *chunk_sizep);
201
202 extern  __checkReturn           efx_rc_t
203 siena_nvram_partn_read(
204         __in                    efx_nic_t *enp,
205         __in                    uint32_t partn,
206         __in                    unsigned int offset,
207         __out_bcount(size)      caddr_t data,
208         __in                    size_t size);
209
210 extern  __checkReturn           efx_rc_t
211 siena_nvram_partn_erase(
212         __in                    efx_nic_t *enp,
213         __in                    uint32_t partn,
214         __in                    unsigned int offset,
215         __in                    size_t size);
216
217 extern  __checkReturn           efx_rc_t
218 siena_nvram_partn_write(
219         __in                    efx_nic_t *enp,
220         __in                    uint32_t partn,
221         __in                    unsigned int offset,
222         __out_bcount(size)      caddr_t data,
223         __in                    size_t size);
224
225 extern  __checkReturn           efx_rc_t
226 siena_nvram_partn_rw_finish(
227         __in                    efx_nic_t *enp,
228         __in                    uint32_t partn,
229         __out_opt               uint32_t *verify_resultp);
230
231 extern  __checkReturn           efx_rc_t
232 siena_nvram_partn_get_version(
233         __in                    efx_nic_t *enp,
234         __in                    uint32_t partn,
235         __out                   uint32_t *subtypep,
236         __out_ecount(4)         uint16_t version[4]);
237
238 extern  __checkReturn           efx_rc_t
239 siena_nvram_partn_set_version(
240         __in                    efx_nic_t *enp,
241         __in                    uint32_t partn,
242         __in_ecount(4)          uint16_t version[4]);
243
244 #endif  /* EFSYS_OPT_NVRAM */
245
246 #if EFSYS_OPT_VPD
247
248 extern  __checkReturn           efx_rc_t
249 siena_vpd_init(
250         __in                    efx_nic_t *enp);
251
252 extern  __checkReturn           efx_rc_t
253 siena_vpd_size(
254         __in                    efx_nic_t *enp,
255         __out                   size_t *sizep);
256
257 extern  __checkReturn           efx_rc_t
258 siena_vpd_read(
259         __in                    efx_nic_t *enp,
260         __out_bcount(size)      caddr_t data,
261         __in                    size_t size);
262
263 extern  __checkReturn           efx_rc_t
264 siena_vpd_verify(
265         __in                    efx_nic_t *enp,
266         __in_bcount(size)       caddr_t data,
267         __in                    size_t size);
268
269 extern  __checkReturn           efx_rc_t
270 siena_vpd_reinit(
271         __in                    efx_nic_t *enp,
272         __in_bcount(size)       caddr_t data,
273         __in                    size_t size);
274
275 extern  __checkReturn           efx_rc_t
276 siena_vpd_get(
277         __in                    efx_nic_t *enp,
278         __in_bcount(size)       caddr_t data,
279         __in                    size_t size,
280         __inout                 efx_vpd_value_t *evvp);
281
282 extern  __checkReturn           efx_rc_t
283 siena_vpd_set(
284         __in                    efx_nic_t *enp,
285         __in_bcount(size)       caddr_t data,
286         __in                    size_t size,
287         __in                    efx_vpd_value_t *evvp);
288
289 extern  __checkReturn           efx_rc_t
290 siena_vpd_next(
291         __in                    efx_nic_t *enp,
292         __in_bcount(size)       caddr_t data,
293         __in                    size_t size,
294         __out                   efx_vpd_value_t *evvp,
295         __inout                 unsigned int *contp);
296
297 extern __checkReturn            efx_rc_t
298 siena_vpd_write(
299         __in                    efx_nic_t *enp,
300         __in_bcount(size)       caddr_t data,
301         __in                    size_t size);
302
303 extern                          void
304 siena_vpd_fini(
305         __in                    efx_nic_t *enp);
306
307 #endif  /* EFSYS_OPT_VPD */
308
309 typedef struct siena_link_state_s {
310         uint32_t                sls_adv_cap_mask;
311         uint32_t                sls_lp_cap_mask;
312         unsigned int            sls_fcntl;
313         efx_link_mode_t         sls_link_mode;
314 #if EFSYS_OPT_LOOPBACK
315         efx_loopback_type_t     sls_loopback;
316 #endif
317         boolean_t               sls_mac_up;
318 } siena_link_state_t;
319
320 extern                  void
321 siena_phy_link_ev(
322         __in            efx_nic_t *enp,
323         __in            efx_qword_t *eqp,
324         __out           efx_link_mode_t *link_modep);
325
326 extern  __checkReturn   efx_rc_t
327 siena_phy_get_link(
328         __in            efx_nic_t *enp,
329         __out           siena_link_state_t *slsp);
330
331 extern  __checkReturn   efx_rc_t
332 siena_phy_power(
333         __in            efx_nic_t *enp,
334         __in            boolean_t on);
335
336 extern  __checkReturn   efx_rc_t
337 siena_phy_reconfigure(
338         __in            efx_nic_t *enp);
339
340 extern  __checkReturn   efx_rc_t
341 siena_phy_verify(
342         __in            efx_nic_t *enp);
343
344 extern  __checkReturn   efx_rc_t
345 siena_phy_oui_get(
346         __in            efx_nic_t *enp,
347         __out           uint32_t *ouip);
348
349 #if EFSYS_OPT_PHY_STATS
350
351 extern                                          void
352 siena_phy_decode_stats(
353         __in                                    efx_nic_t *enp,
354         __in                                    uint32_t vmask,
355         __in_opt                                efsys_mem_t *esmp,
356         __out_opt                               uint64_t *smaskp,
357         __inout_ecount_opt(EFX_PHY_NSTATS)      uint32_t *stat);
358
359 extern  __checkReturn                   efx_rc_t
360 siena_phy_stats_update(
361         __in                            efx_nic_t *enp,
362         __in                            efsys_mem_t *esmp,
363         __inout_ecount(EFX_PHY_NSTATS)  uint32_t *stat);
364
365 #endif  /* EFSYS_OPT_PHY_STATS */
366
367 #if EFSYS_OPT_BIST
368
369 extern  __checkReturn           efx_rc_t
370 siena_phy_bist_start(
371         __in                    efx_nic_t *enp,
372         __in                    efx_bist_type_t type);
373
374 extern  __checkReturn           efx_rc_t
375 siena_phy_bist_poll(
376         __in                    efx_nic_t *enp,
377         __in                    efx_bist_type_t type,
378         __out                   efx_bist_result_t *resultp,
379         __out_opt __drv_when(count > 0, __notnull)
380         uint32_t        *value_maskp,
381         __out_ecount_opt(count) __drv_when(count > 0, __notnull)
382         unsigned long   *valuesp,
383         __in                    size_t count);
384
385 extern                          void
386 siena_phy_bist_stop(
387         __in                    efx_nic_t *enp,
388         __in                    efx_bist_type_t type);
389
390 #endif  /* EFSYS_OPT_BIST */
391
392 extern  __checkReturn   efx_rc_t
393 siena_mac_poll(
394         __in            efx_nic_t *enp,
395         __out           efx_link_mode_t *link_modep);
396
397 extern  __checkReturn   efx_rc_t
398 siena_mac_up(
399         __in            efx_nic_t *enp,
400         __out           boolean_t *mac_upp);
401
402 extern  __checkReturn   efx_rc_t
403 siena_mac_reconfigure(
404         __in    efx_nic_t *enp);
405
406 extern  __checkReturn   efx_rc_t
407 siena_mac_pdu_get(
408         __in    efx_nic_t *enp,
409         __out   size_t *pdu);
410
411 #if EFSYS_OPT_LOOPBACK
412
413 extern  __checkReturn   efx_rc_t
414 siena_mac_loopback_set(
415         __in            efx_nic_t *enp,
416         __in            efx_link_mode_t link_mode,
417         __in            efx_loopback_type_t loopback_type);
418
419 #endif  /* EFSYS_OPT_LOOPBACK */
420
421 #if EFSYS_OPT_MAC_STATS
422
423 extern  __checkReturn                   efx_rc_t
424 siena_mac_stats_get_mask(
425         __in                            efx_nic_t *enp,
426         __inout_bcount(mask_size)       uint32_t *maskp,
427         __in                            size_t mask_size);
428
429 extern  __checkReturn                   efx_rc_t
430 siena_mac_stats_update(
431         __in                            efx_nic_t *enp,
432         __in                            efsys_mem_t *esmp,
433         __inout_ecount(EFX_MAC_NSTATS)  efsys_stat_t *stat,
434         __inout_opt                     uint32_t *generationp);
435
436 #endif  /* EFSYS_OPT_MAC_STATS */
437
438 #ifdef  __cplusplus
439 }
440 #endif
441
442 #endif  /* _SYS_SIENA_IMPL_H */