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