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 */ 454