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