2 * Copyright 2009 Solarflare Communications Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 #ifndef _SYS_SIENA_IMPL_H
29 #define _SYS_SIENA_IMPL_H
34 #include "siena_flash.h"
40 #if EFSYS_OPT_PHY_PROPS
42 /* START MKCONFIG GENERATED SienaPhyHeaderPropsBlock a8db1f8eb5106efd */
43 typedef enum siena_phy_prop_e {
47 /* END MKCONFIG GENERATED SienaPhyHeaderPropsBlock */
49 #endif /* EFSYS_OPT_PHY_PROPS */
51 #define SIENA_NVRAM_CHUNK 0x80
53 extern __checkReturn int
57 #if EFSYS_OPT_PCIE_TUNE
59 extern __checkReturn int
60 siena_nic_pcie_extended_sync(
65 extern __checkReturn int
69 extern __checkReturn int
75 extern __checkReturn int
76 siena_nic_register_test(
79 #endif /* EFSYS_OPT_DIAG */
89 #define SIENA_SRAM_ROWS 0x12000
97 extern __checkReturn int
100 __in efx_sram_pattern_fn_t func);
102 #endif /* EFSYS_OPT_DIAG */
105 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
107 extern __checkReturn int
108 siena_nvram_partn_size(
110 __in unsigned int partn,
111 __out size_t *sizep);
113 extern __checkReturn int
114 siena_nvram_partn_lock(
116 __in unsigned int partn);
118 extern __checkReturn int
119 siena_nvram_partn_read(
121 __in unsigned int partn,
122 __in unsigned int offset,
123 __out_bcount(size) caddr_t data,
126 extern __checkReturn int
127 siena_nvram_partn_erase(
129 __in unsigned int partn,
130 __in unsigned int offset,
133 extern __checkReturn int
134 siena_nvram_partn_write(
136 __in unsigned int partn,
137 __in unsigned int offset,
138 __out_bcount(size) caddr_t data,
142 siena_nvram_partn_unlock(
144 __in unsigned int partn);
146 extern __checkReturn int
147 siena_nvram_get_dynamic_cfg(
149 __in unsigned int index,
151 __out siena_mc_dynamic_config_hdr_t **dcfgp,
152 __out size_t *sizep);
154 #endif /* EFSYS_OPT_VPD || EFSYS_OPT_NVRAM */
160 extern __checkReturn int
162 __in efx_nic_t *enp);
164 #endif /* EFSYS_OPT_DIAG */
166 extern __checkReturn int
169 __in efx_nvram_type_t type,
170 __out size_t *sizep);
172 extern __checkReturn int
173 siena_nvram_get_version(
175 __in efx_nvram_type_t type,
176 __out uint32_t *subtypep,
177 __out_ecount(4) uint16_t version[4]);
179 extern __checkReturn int
180 siena_nvram_rw_start(
182 __in efx_nvram_type_t type,
183 __out size_t *pref_chunkp);
185 extern __checkReturn int
186 siena_nvram_read_chunk(
188 __in efx_nvram_type_t type,
189 __in unsigned int offset,
190 __out_bcount(size) caddr_t data,
193 extern __checkReturn int
196 __in efx_nvram_type_t type);
198 extern __checkReturn int
199 siena_nvram_write_chunk(
201 __in efx_nvram_type_t type,
202 __in unsigned int offset,
203 __in_bcount(size) caddr_t data,
207 siena_nvram_rw_finish(
209 __in efx_nvram_type_t type);
211 extern __checkReturn int
212 siena_nvram_set_version(
214 __in efx_nvram_type_t type,
215 __out uint16_t version[4]);
217 #endif /* EFSYS_OPT_NVRAM */
221 extern __checkReturn int
223 __in efx_nic_t *enp);
225 extern __checkReturn int
228 __out size_t *sizep);
230 extern __checkReturn int
233 __out_bcount(size) caddr_t data,
236 extern __checkReturn int
239 __in_bcount(size) caddr_t data,
242 extern __checkReturn int
245 __in_bcount(size) caddr_t data,
248 extern __checkReturn int
251 __in_bcount(size) caddr_t data,
253 __inout efx_vpd_value_t *evvp);
255 extern __checkReturn int
258 __in_bcount(size) caddr_t data,
260 __in efx_vpd_value_t *evvp);
262 extern __checkReturn int
265 __in_bcount(size) caddr_t data,
267 __out efx_vpd_value_t *evvp,
268 __inout unsigned int *contp);
270 extern __checkReturn int
273 __in_bcount(size) caddr_t data,
278 __in efx_nic_t *enp);
280 #endif /* EFSYS_OPT_VPD */
282 typedef struct siena_link_state_s {
283 uint32_t sls_adv_cap_mask;
284 uint32_t sls_lp_cap_mask;
285 unsigned int sls_fcntl;
286 efx_link_mode_t sls_link_mode;
287 #if EFSYS_OPT_LOOPBACK
288 efx_loopback_type_t sls_loopback;
290 boolean_t sls_mac_up;
291 } siena_link_state_t;
296 __in efx_qword_t *eqp,
297 __out efx_link_mode_t *link_modep);
299 extern __checkReturn int
302 __out siena_link_state_t *slsp);
304 extern __checkReturn int
309 extern __checkReturn int
310 siena_phy_reconfigure(
311 __in efx_nic_t *enp);
313 extern __checkReturn int
315 __in efx_nic_t *enp);
317 extern __checkReturn int
320 __out uint32_t *ouip);
322 #if EFSYS_OPT_PHY_STATS
325 siena_phy_decode_stats(
328 __in_opt efsys_mem_t *esmp,
329 __out_opt uint64_t *smaskp,
330 __out_ecount_opt(EFX_PHY_NSTATS) uint32_t *stat);
332 extern __checkReturn int
333 siena_phy_stats_update(
335 __in efsys_mem_t *esmp,
336 __out_ecount(EFX_PHY_NSTATS) uint32_t *stat);
338 #endif /* EFSYS_OPT_PHY_STATS */
340 #if EFSYS_OPT_PHY_PROPS
344 extern const char __cs *
347 __in unsigned int id);
349 #endif /* EFSYS_OPT_NAMES */
351 extern __checkReturn int
354 __in unsigned int id,
356 __out uint32_t *valp);
358 extern __checkReturn int
361 __in unsigned int id,
364 #endif /* EFSYS_OPT_PHY_PROPS */
366 #if EFSYS_OPT_PHY_BIST
368 extern __checkReturn int
369 siena_phy_bist_start(
371 __in efx_phy_bist_type_t type);
373 extern __checkReturn int
376 __in efx_phy_bist_type_t type,
377 __out efx_phy_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,
387 __in efx_phy_bist_type_t type);
389 #endif /* EFSYS_OPT_PHY_BIST */
391 extern __checkReturn int
394 __out efx_link_mode_t *link_modep);
396 extern __checkReturn int
399 __out boolean_t *mac_upp);
401 extern __checkReturn int
402 siena_mac_reconfigure(
403 __in efx_nic_t *enp);
405 #if EFSYS_OPT_LOOPBACK
407 extern __checkReturn int
408 siena_mac_loopback_set(
410 __in efx_link_mode_t link_mode,
411 __in efx_loopback_type_t loopback_type);
413 #endif /* EFSYS_OPT_LOOPBACK */
415 #if EFSYS_OPT_MAC_STATS
417 extern __checkReturn int
418 siena_mac_stats_clear(
419 __in efx_nic_t *enp);
421 extern __checkReturn int
422 siena_mac_stats_upload(
424 __in efsys_mem_t *esmp);
426 extern __checkReturn int
427 siena_mac_stats_periodic(
429 __in efsys_mem_t *esmp,
430 __in uint16_t period_ms,
431 __in boolean_t events);
433 extern __checkReturn int
434 siena_mac_stats_update(
436 __in efsys_mem_t *esmp,
437 __out_ecount(EFX_MAC_NSTATS) efsys_stat_t *stat,
438 __out_opt uint32_t *generationp);
440 #endif /* EFSYS_OPT_MAC_STATS */
442 extern __checkReturn int
444 __in efx_nic_t *enp);
446 extern __checkReturn int
447 siena_mon_reconfigure(
448 __in efx_nic_t *enp);
450 #if EFSYS_OPT_MON_STATS
453 siena_mon_decode_stats(
456 __in_opt efsys_mem_t *esmp,
457 __out_opt uint32_t *vmaskp,
458 __out_ecount_opt(EFX_MON_NSTATS) efx_mon_stat_value_t *value);
460 extern __checkReturn int
463 __in efx_qword_t *eqp,
464 __out efx_mon_stat_t *idp,
465 __out efx_mon_stat_value_t *valuep);
467 extern __checkReturn int
468 siena_mon_stats_update(
470 __in efsys_mem_t *esmp,
471 __out_ecount(EFX_MON_NSTATS) efx_mon_stat_value_t *values);
473 #endif /* EFSYS_OPT_MON_STATS */
479 #endif /* _SYS_SIENA_IMPL_H */