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