1 /* SPDX-License-Identifier: BSD-3-Clause
3 * Copyright (c) 2009-2018 Solarflare Communications Inc.
7 #ifndef _SYS_SIENA_IMPL_H
8 #define _SYS_SIENA_IMPL_H
13 #include "siena_flash.h"
19 #ifndef EFX_TXQ_DC_SIZE
20 #define EFX_TXQ_DC_SIZE 1 /* 16 descriptors */
22 #ifndef EFX_RXQ_DC_SIZE
23 #define EFX_RXQ_DC_SIZE 3 /* 64 descriptors */
25 #define EFX_TXQ_DC_NDESCS(_dcsize) (8 << (_dcsize))
27 #define SIENA_TXQ_MAXNDESCS 4096
28 #define SIENA_TXQ_MINNDESCS 512
30 #define SIENA_NVRAM_CHUNK 0x80
33 extern __checkReturn efx_rc_t
37 extern __checkReturn efx_rc_t
41 extern __checkReturn efx_rc_t
47 extern efx_sram_pattern_fn_t __efx_sram_pattern_fns[];
49 typedef struct siena_register_set_s {
54 } siena_register_set_t;
56 extern __checkReturn efx_rc_t
57 siena_nic_register_test(
60 #endif /* EFSYS_OPT_DIAG */
70 #define SIENA_SRAM_ROWS 0x12000
78 extern __checkReturn efx_rc_t
81 __in efx_sram_pattern_fn_t func);
83 #endif /* EFSYS_OPT_DIAG */
87 extern __checkReturn efx_rc_t
90 __in const efx_mcdi_transport_t *mtp);
93 siena_mcdi_send_request(
95 __in_bcount(hdr_len) void *hdrp,
97 __in_bcount(sdu_len) void *sdup,
100 extern __checkReturn boolean_t
101 siena_mcdi_poll_response(
102 __in efx_nic_t *enp);
105 siena_mcdi_read_response(
107 __out_bcount(length) void *bufferp,
112 siena_mcdi_poll_reboot(
113 __in efx_nic_t *enp);
117 __in efx_nic_t *enp);
119 extern __checkReturn efx_rc_t
120 siena_mcdi_feature_supported(
122 __in efx_mcdi_feature_id_t id,
123 __out boolean_t *supportedp);
126 siena_mcdi_get_timeout(
128 __in efx_mcdi_req_t *emrp,
129 __out uint32_t *timeoutp);
131 #endif /* EFSYS_OPT_MCDI */
133 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
135 extern __checkReturn efx_rc_t
136 siena_nvram_partn_lock(
138 __in uint32_t partn);
140 extern __checkReturn efx_rc_t
141 siena_nvram_partn_unlock(
144 __out_opt uint32_t *verify_resultp);
146 extern __checkReturn efx_rc_t
147 siena_nvram_get_dynamic_cfg(
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 efx_rc_t
162 __in efx_nic_t *enp);
164 #endif /* EFSYS_OPT_DIAG */
166 extern __checkReturn efx_rc_t
167 siena_nvram_get_subtype(
170 __out uint32_t *subtypep);
172 extern __checkReturn efx_rc_t
173 siena_nvram_type_to_partn(
175 __in efx_nvram_type_t type,
176 __out uint32_t *partnp);
178 extern __checkReturn efx_rc_t
179 siena_nvram_partn_size(
182 __out size_t *sizep);
184 extern __checkReturn efx_rc_t
185 siena_nvram_partn_rw_start(
188 __out size_t *chunk_sizep);
190 extern __checkReturn efx_rc_t
191 siena_nvram_partn_read(
194 __in unsigned int offset,
195 __out_bcount(size) caddr_t data,
198 extern __checkReturn efx_rc_t
199 siena_nvram_partn_erase(
202 __in unsigned int offset,
205 extern __checkReturn efx_rc_t
206 siena_nvram_partn_write(
209 __in unsigned int offset,
210 __out_bcount(size) caddr_t data,
213 extern __checkReturn efx_rc_t
214 siena_nvram_partn_rw_finish(
217 __out_opt uint32_t *verify_resultp);
219 extern __checkReturn efx_rc_t
220 siena_nvram_partn_get_version(
223 __out uint32_t *subtypep,
224 __out_ecount(4) uint16_t version[4]);
226 extern __checkReturn efx_rc_t
227 siena_nvram_partn_set_version(
230 __in_ecount(4) uint16_t version[4]);
232 #endif /* EFSYS_OPT_NVRAM */
236 extern __checkReturn efx_rc_t
238 __in efx_nic_t *enp);
240 extern __checkReturn efx_rc_t
243 __out size_t *sizep);
245 extern __checkReturn efx_rc_t
248 __out_bcount(size) caddr_t data,
251 extern __checkReturn efx_rc_t
254 __in_bcount(size) caddr_t data,
257 extern __checkReturn efx_rc_t
260 __in_bcount(size) caddr_t data,
263 extern __checkReturn efx_rc_t
266 __in_bcount(size) caddr_t data,
268 __inout efx_vpd_value_t *evvp);
270 extern __checkReturn efx_rc_t
273 __in_bcount(size) caddr_t data,
275 __in efx_vpd_value_t *evvp);
277 extern __checkReturn efx_rc_t
280 __in_bcount(size) caddr_t data,
282 __out efx_vpd_value_t *evvp,
283 __inout unsigned int *contp);
285 extern __checkReturn efx_rc_t
288 __in_bcount(size) caddr_t data,
293 __in efx_nic_t *enp);
295 #endif /* EFSYS_OPT_VPD */
297 typedef struct siena_link_state_s {
298 uint32_t sls_adv_cap_mask;
299 uint32_t sls_lp_cap_mask;
300 unsigned int sls_fcntl;
301 efx_link_mode_t sls_link_mode;
302 #if EFSYS_OPT_LOOPBACK
303 efx_loopback_type_t sls_loopback;
305 boolean_t sls_mac_up;
306 } siena_link_state_t;
311 __in efx_qword_t *eqp,
312 __out efx_link_mode_t *link_modep);
314 extern __checkReturn efx_rc_t
317 __out siena_link_state_t *slsp);
319 extern __checkReturn efx_rc_t
324 extern __checkReturn efx_rc_t
325 siena_phy_reconfigure(
326 __in efx_nic_t *enp);
328 extern __checkReturn efx_rc_t
330 __in efx_nic_t *enp);
332 extern __checkReturn efx_rc_t
335 __out uint32_t *ouip);
337 #if EFSYS_OPT_PHY_STATS
340 siena_phy_decode_stats(
343 __in_opt efsys_mem_t *esmp,
344 __out_opt uint64_t *smaskp,
345 __inout_ecount_opt(EFX_PHY_NSTATS) uint32_t *stat);
347 extern __checkReturn efx_rc_t
348 siena_phy_stats_update(
350 __in efsys_mem_t *esmp,
351 __inout_ecount(EFX_PHY_NSTATS) uint32_t *stat);
353 #endif /* EFSYS_OPT_PHY_STATS */
357 extern __checkReturn efx_rc_t
358 siena_phy_bist_start(
360 __in efx_bist_type_t type);
362 extern __checkReturn efx_rc_t
365 __in efx_bist_type_t type,
366 __out efx_bist_result_t *resultp,
367 __out_opt __drv_when(count > 0, __notnull)
368 uint32_t *value_maskp,
369 __out_ecount_opt(count) __drv_when(count > 0, __notnull)
370 unsigned long *valuesp,
376 __in efx_bist_type_t type);
378 #endif /* EFSYS_OPT_BIST */
380 extern __checkReturn efx_rc_t
383 __out efx_link_mode_t *link_modep);
385 extern __checkReturn efx_rc_t
388 __out boolean_t *mac_upp);
390 extern __checkReturn efx_rc_t
391 siena_mac_reconfigure(
392 __in efx_nic_t *enp);
394 extern __checkReturn efx_rc_t
399 #if EFSYS_OPT_LOOPBACK
401 extern __checkReturn efx_rc_t
402 siena_mac_loopback_set(
404 __in efx_link_mode_t link_mode,
405 __in efx_loopback_type_t loopback_type);
407 #endif /* EFSYS_OPT_LOOPBACK */
409 #if EFSYS_OPT_MAC_STATS
411 extern __checkReturn efx_rc_t
412 siena_mac_stats_get_mask(
414 __inout_bcount(mask_size) uint32_t *maskp,
415 __in size_t mask_size);
417 extern __checkReturn efx_rc_t
418 siena_mac_stats_update(
420 __in efsys_mem_t *esmp,
421 __inout_ecount(EFX_MAC_NSTATS) efsys_stat_t *stat,
422 __inout_opt uint32_t *generationp);
424 #endif /* EFSYS_OPT_MAC_STATS */
430 #endif /* _SYS_SIENA_IMPL_H */