]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/sfxge/common/siena_impl.h
sfxge: [3/6] rework MCDI response handling
[FreeBSD/FreeBSD.git] / sys / dev / sfxge / common / siena_impl.h
1 /*-
2  * Copyright (c) 2009-2015 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  * $FreeBSD$
31  */
32
33 #ifndef _SYS_SIENA_IMPL_H
34 #define _SYS_SIENA_IMPL_H
35
36 #include "efx.h"
37 #include "efx_regs.h"
38 #include "efx_mcdi.h"
39 #include "siena_flash.h"
40
41 #ifdef  __cplusplus
42 extern "C" {
43 #endif
44
45 #if EFSYS_OPT_PHY_PROPS
46
47 /* START MKCONFIG GENERATED SienaPhyHeaderPropsBlock a8db1f8eb5106efd */
48 typedef enum siena_phy_prop_e {
49         SIENA_PHY_NPROPS
50 } siena_phy_prop_t;
51
52 /* END MKCONFIG GENERATED SienaPhyHeaderPropsBlock */
53
54 #endif  /* EFSYS_OPT_PHY_PROPS */
55
56 #define SIENA_NVRAM_CHUNK 0x80
57
58 extern  __checkReturn   efx_rc_t
59 siena_nic_probe(
60         __in            efx_nic_t *enp);
61
62 #if EFSYS_OPT_PCIE_TUNE
63
64 extern  __checkReturn   efx_rc_t
65 siena_nic_pcie_extended_sync(
66         __in            efx_nic_t *enp);
67
68 #endif
69
70 extern  __checkReturn   efx_rc_t
71 siena_nic_reset(
72         __in            efx_nic_t *enp);
73
74 extern  __checkReturn   efx_rc_t
75 siena_nic_init(
76         __in            efx_nic_t *enp);
77
78 #if EFSYS_OPT_DIAG
79
80 extern  __checkReturn   efx_rc_t
81 siena_nic_register_test(
82         __in            efx_nic_t *enp);
83
84 #endif  /* EFSYS_OPT_DIAG */
85
86 extern                  void
87 siena_nic_fini(
88         __in            efx_nic_t *enp);
89
90 extern                  void
91 siena_nic_unprobe(
92         __in            efx_nic_t *enp);
93
94 #define SIENA_SRAM_ROWS 0x12000
95
96 extern                  void
97 siena_sram_init(
98         __in            efx_nic_t *enp);
99
100 #if EFSYS_OPT_DIAG
101
102 extern  __checkReturn   efx_rc_t
103 siena_sram_test(
104         __in            efx_nic_t *enp,
105         __in            efx_sram_pattern_fn_t func);
106
107 #endif  /* EFSYS_OPT_DIAG */
108
109 #if EFSYS_OPT_MCDI
110
111 extern  __checkReturn   efx_rc_t
112 siena_mcdi_init(
113         __in            efx_nic_t *enp,
114         __in            const efx_mcdi_transport_t *mtp);
115
116 extern                  void
117 siena_mcdi_request_copyin(
118         __in            efx_nic_t *enp,
119         __in            efx_mcdi_req_t *emrp,
120         __in            unsigned int seq,
121         __in            boolean_t ev_cpl,
122         __in            boolean_t new_epoch);
123
124 extern                  void
125 siena_mcdi_read_response(
126         __in            efx_nic_t *enp,
127         __out           void *bufferp,
128         __in            size_t offset,
129         __in            size_t length);
130
131 extern  __checkReturn   boolean_t
132 siena_mcdi_request_poll(
133         __in            efx_nic_t *enp);
134
135 extern                  void
136 siena_mcdi_request_copyout(
137         __in            efx_nic_t *enp,
138         __in            efx_mcdi_req_t *emrp);
139
140 extern                  efx_rc_t
141 siena_mcdi_poll_reboot(
142         __in            efx_nic_t *enp);
143
144 extern                  void
145 siena_mcdi_fini(
146         __in            efx_nic_t *enp);
147
148 extern  __checkReturn   efx_rc_t
149 siena_mcdi_fw_update_supported(
150         __in            efx_nic_t *enp,
151         __out           boolean_t *supportedp);
152
153 extern  __checkReturn   efx_rc_t
154 siena_mcdi_macaddr_change_supported(
155         __in            efx_nic_t *enp,
156         __out           boolean_t *supportedp);
157
158 extern  __checkReturn   efx_rc_t
159 siena_mcdi_link_control_supported(
160         __in            efx_nic_t *enp,
161         __out           boolean_t *supportedp);
162
163 #endif /* EFSYS_OPT_MCDI */
164
165 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
166
167 extern  __checkReturn           efx_rc_t
168 siena_nvram_partn_size(
169         __in                    efx_nic_t *enp,
170         __in                    unsigned int partn,
171         __out                   size_t *sizep);
172
173 extern  __checkReturn           efx_rc_t
174 siena_nvram_partn_lock(
175         __in                    efx_nic_t *enp,
176         __in                    unsigned int partn);
177
178 extern  __checkReturn           efx_rc_t
179 siena_nvram_partn_read(
180         __in                    efx_nic_t *enp,
181         __in                    unsigned int partn,
182         __in                    unsigned int offset,
183         __out_bcount(size)      caddr_t data,
184         __in                    size_t size);
185
186 extern  __checkReturn           efx_rc_t
187 siena_nvram_partn_erase(
188         __in                    efx_nic_t *enp,
189         __in                    unsigned int partn,
190         __in                    unsigned int offset,
191         __in                    size_t size);
192
193 extern  __checkReturn           efx_rc_t
194 siena_nvram_partn_write(
195         __in                    efx_nic_t *enp,
196         __in                    unsigned int partn,
197         __in                    unsigned int offset,
198         __out_bcount(size)      caddr_t data,
199         __in                    size_t size);
200
201 extern                          void
202 siena_nvram_partn_unlock(
203         __in                    efx_nic_t *enp,
204         __in                    unsigned int partn);
205
206 extern  __checkReturn           efx_rc_t
207 siena_nvram_get_dynamic_cfg(
208         __in                    efx_nic_t *enp,
209         __in                    unsigned int index,
210         __in                    boolean_t vpd,
211         __out                   siena_mc_dynamic_config_hdr_t **dcfgp,
212         __out                   size_t *sizep);
213
214 #endif  /* EFSYS_OPT_VPD || EFSYS_OPT_NVRAM */
215
216 #if EFSYS_OPT_NVRAM
217
218 #if EFSYS_OPT_DIAG
219
220 extern  __checkReturn           efx_rc_t
221 siena_nvram_test(
222         __in                    efx_nic_t *enp);
223
224 #endif  /* EFSYS_OPT_DIAG */
225
226 extern  __checkReturn           efx_rc_t
227 siena_nvram_size(
228         __in                    efx_nic_t *enp,
229         __in                    efx_nvram_type_t type,
230         __out                   size_t *sizep);
231
232 extern  __checkReturn           efx_rc_t
233 siena_nvram_get_subtype(
234         __in                    efx_nic_t *enp,
235         __in                    unsigned int partn,
236         __out                   uint32_t *subtypep);
237
238 extern  __checkReturn           efx_rc_t
239 siena_nvram_get_version(
240         __in                    efx_nic_t *enp,
241         __in                    efx_nvram_type_t type,
242         __out                   uint32_t *subtypep,
243         __out_ecount(4)         uint16_t version[4]);
244
245 extern  __checkReturn           efx_rc_t
246 siena_nvram_rw_start(
247         __in                    efx_nic_t *enp,
248         __in                    efx_nvram_type_t type,
249         __out                   size_t *pref_chunkp);
250
251 extern  __checkReturn           efx_rc_t
252 siena_nvram_read_chunk(
253         __in                    efx_nic_t *enp,
254         __in                    efx_nvram_type_t type,
255         __in                    unsigned int offset,
256         __out_bcount(size)      caddr_t data,
257         __in                    size_t size);
258
259 extern   __checkReturn          efx_rc_t
260 siena_nvram_erase(
261         __in                    efx_nic_t *enp,
262         __in                    efx_nvram_type_t type);
263
264 extern  __checkReturn           efx_rc_t
265 siena_nvram_write_chunk(
266         __in                    efx_nic_t *enp,
267         __in                    efx_nvram_type_t type,
268         __in                    unsigned int offset,
269         __in_bcount(size)       caddr_t data,
270         __in                    size_t size);
271
272 extern                          void
273 siena_nvram_rw_finish(
274         __in                    efx_nic_t *enp,
275         __in                    efx_nvram_type_t type);
276
277 extern  __checkReturn           efx_rc_t
278 siena_nvram_set_version(
279         __in                    efx_nic_t *enp,
280         __in                    efx_nvram_type_t type,
281         __in_ecount(4)          uint16_t version[4]);
282
283 #endif  /* EFSYS_OPT_NVRAM */
284
285 #if EFSYS_OPT_VPD
286
287 extern  __checkReturn           efx_rc_t
288 siena_vpd_init(
289         __in                    efx_nic_t *enp);
290
291 extern  __checkReturn           efx_rc_t
292 siena_vpd_size(
293         __in                    efx_nic_t *enp,
294         __out                   size_t *sizep);
295
296 extern  __checkReturn           efx_rc_t
297 siena_vpd_read(
298         __in                    efx_nic_t *enp,
299         __out_bcount(size)      caddr_t data,
300         __in                    size_t size);
301
302 extern  __checkReturn           efx_rc_t
303 siena_vpd_verify(
304         __in                    efx_nic_t *enp,
305         __in_bcount(size)       caddr_t data,
306         __in                    size_t size);
307
308 extern  __checkReturn           efx_rc_t
309 siena_vpd_reinit(
310         __in                    efx_nic_t *enp,
311         __in_bcount(size)       caddr_t data,
312         __in                    size_t size);
313
314 extern  __checkReturn           efx_rc_t
315 siena_vpd_get(
316         __in                    efx_nic_t *enp,
317         __in_bcount(size)       caddr_t data,
318         __in                    size_t size,
319         __inout                 efx_vpd_value_t *evvp);
320
321 extern  __checkReturn           efx_rc_t
322 siena_vpd_set(
323         __in                    efx_nic_t *enp,
324         __in_bcount(size)       caddr_t data,
325         __in                    size_t size,
326         __in                    efx_vpd_value_t *evvp);
327
328 extern  __checkReturn           efx_rc_t
329 siena_vpd_next(
330         __in                    efx_nic_t *enp,
331         __in_bcount(size)       caddr_t data,
332         __in                    size_t size,
333         __out                   efx_vpd_value_t *evvp,
334         __inout                 unsigned int *contp);
335
336 extern __checkReturn            efx_rc_t
337 siena_vpd_write(
338         __in                    efx_nic_t *enp,
339         __in_bcount(size)       caddr_t data,
340         __in                    size_t size);
341
342 extern                          void
343 siena_vpd_fini(
344         __in                    efx_nic_t *enp);
345
346 #endif  /* EFSYS_OPT_VPD */
347
348 typedef struct siena_link_state_s {
349         uint32_t                sls_adv_cap_mask;
350         uint32_t                sls_lp_cap_mask;
351         unsigned int            sls_fcntl;
352         efx_link_mode_t         sls_link_mode;
353 #if EFSYS_OPT_LOOPBACK
354         efx_loopback_type_t     sls_loopback;
355 #endif
356         boolean_t               sls_mac_up;
357 } siena_link_state_t;
358
359 extern                  void
360 siena_phy_link_ev(
361         __in            efx_nic_t *enp,
362         __in            efx_qword_t *eqp,
363         __out           efx_link_mode_t *link_modep);
364
365 extern  __checkReturn   efx_rc_t
366 siena_phy_get_link(
367         __in            efx_nic_t *enp,
368         __out           siena_link_state_t *slsp);
369
370 extern  __checkReturn   efx_rc_t
371 siena_phy_power(
372         __in            efx_nic_t *enp,
373         __in            boolean_t on);
374
375 extern  __checkReturn   efx_rc_t
376 siena_phy_reconfigure(
377         __in            efx_nic_t *enp);
378
379 extern  __checkReturn   efx_rc_t
380 siena_phy_verify(
381         __in            efx_nic_t *enp);
382
383 extern  __checkReturn   efx_rc_t
384 siena_phy_oui_get(
385         __in            efx_nic_t *enp,
386         __out           uint32_t *ouip);
387
388 #if EFSYS_OPT_PHY_STATS
389
390 extern                                          void
391 siena_phy_decode_stats(
392         __in                                    efx_nic_t *enp,
393         __in                                    uint32_t vmask,
394         __in_opt                                efsys_mem_t *esmp,
395         __out_opt                               uint64_t *smaskp,
396         __inout_ecount_opt(EFX_PHY_NSTATS)      uint32_t *stat);
397
398 extern  __checkReturn                   efx_rc_t
399 siena_phy_stats_update(
400         __in                            efx_nic_t *enp,
401         __in                            efsys_mem_t *esmp,
402         __inout_ecount(EFX_PHY_NSTATS)  uint32_t *stat);
403
404 #endif  /* EFSYS_OPT_PHY_STATS */
405
406 #if EFSYS_OPT_PHY_PROPS
407
408 #if EFSYS_OPT_NAMES
409
410 extern          const char *
411 siena_phy_prop_name(
412         __in    efx_nic_t *enp,
413         __in    unsigned int id);
414
415 #endif  /* EFSYS_OPT_NAMES */
416
417 extern  __checkReturn   efx_rc_t
418 siena_phy_prop_get(
419         __in            efx_nic_t *enp,
420         __in            unsigned int id,
421         __in            uint32_t flags,
422         __out           uint32_t *valp);
423
424 extern  __checkReturn   efx_rc_t
425 siena_phy_prop_set(
426         __in            efx_nic_t *enp,
427         __in            unsigned int id,
428         __in            uint32_t val);
429
430 #endif  /* EFSYS_OPT_PHY_PROPS */
431
432 #if EFSYS_OPT_BIST
433
434 extern  __checkReturn           efx_rc_t
435 siena_phy_bist_start(
436         __in                    efx_nic_t *enp,
437         __in                    efx_bist_type_t type);
438
439 extern  __checkReturn           efx_rc_t
440 siena_phy_bist_poll(
441         __in                    efx_nic_t *enp,
442         __in                    efx_bist_type_t type,
443         __out                   efx_bist_result_t *resultp,
444         __out_opt __drv_when(count > 0, __notnull)
445         uint32_t        *value_maskp,
446         __out_ecount_opt(count) __drv_when(count > 0, __notnull)
447         unsigned long   *valuesp,
448         __in                    size_t count);
449
450 extern                          void
451 siena_phy_bist_stop(
452         __in                    efx_nic_t *enp,
453         __in                    efx_bist_type_t type);
454
455 #endif  /* EFSYS_OPT_BIST */
456
457 extern  __checkReturn   efx_rc_t
458 siena_mac_poll(
459         __in            efx_nic_t *enp,
460         __out           efx_link_mode_t *link_modep);
461
462 extern  __checkReturn   efx_rc_t
463 siena_mac_up(
464         __in            efx_nic_t *enp,
465         __out           boolean_t *mac_upp);
466
467 extern  __checkReturn   efx_rc_t
468 siena_mac_reconfigure(
469         __in    efx_nic_t *enp);
470
471 #if EFSYS_OPT_LOOPBACK
472
473 extern  __checkReturn   efx_rc_t
474 siena_mac_loopback_set(
475         __in            efx_nic_t *enp,
476         __in            efx_link_mode_t link_mode,
477         __in            efx_loopback_type_t loopback_type);
478
479 #endif  /* EFSYS_OPT_LOOPBACK */
480
481 #if EFSYS_OPT_MAC_STATS
482
483 extern  __checkReturn                   efx_rc_t
484 siena_mac_stats_update(
485         __in                            efx_nic_t *enp,
486         __in                            efsys_mem_t *esmp,
487         __inout_ecount(EFX_MAC_NSTATS)  efsys_stat_t *stat,
488         __inout_opt                     uint32_t *generationp);
489
490 #endif  /* EFSYS_OPT_MAC_STATS */
491
492 #ifdef  __cplusplus
493 }
494 #endif
495
496 #endif  /* _SYS_SIENA_IMPL_H */