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