1 /* SPDX-License-Identifier: BSD-3-Clause 2 * 3 * Copyright(c) 2019-2021 Xilinx, Inc. 4 * Copyright(c) 2009-2019 Solarflare Communications Inc. 5 */ 6 7 #ifndef _SYS_SIENA_IMPL_H 8 #define _SYS_SIENA_IMPL_H 9 10 #include "efx.h" 11 #include "efx_regs.h" 12 #include "siena_flash.h" 13 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 18 #ifndef EFX_TXQ_DC_SIZE 19 #define EFX_TXQ_DC_SIZE 1 /* 16 descriptors */ 20 #endif 21 #ifndef EFX_RXQ_DC_SIZE 22 #define EFX_RXQ_DC_SIZE 3 /* 64 descriptors */ 23 #endif 24 #define EFX_TXQ_DC_NDESCS(_dcsize) (8 << (_dcsize)) 25 #define EFX_RXQ_DC_NDESCS(_dcsize) (8 << (_dcsize)) 26 27 #define SIENA_EVQ_MAXNEVS 32768 28 #define SIENA_EVQ_MINNEVS 512 29 30 #define SIENA_TXQ_MAXNDESCS 4096 31 #define SIENA_TXQ_MINNDESCS 512 32 33 #define SIENA_RXQ_MAXNDESCS 4096 34 #define SIENA_RXQ_MINNDESCS 512 35 36 #define SIENA_EVQ_DESC_SIZE (sizeof (efx_qword_t)) 37 #define SIENA_RXQ_DESC_SIZE (sizeof (efx_qword_t)) 38 #define SIENA_TXQ_DESC_SIZE (sizeof (efx_qword_t)) 39 40 #define SIENA_NVRAM_CHUNK 0x80 41 42 43 LIBEFX_INTERNAL 44 extern __checkReturn efx_rc_t 45 siena_nic_probe( 46 __in efx_nic_t *enp); 47 48 LIBEFX_INTERNAL 49 extern __checkReturn efx_rc_t 50 siena_nic_reset( 51 __in efx_nic_t *enp); 52 53 LIBEFX_INTERNAL 54 extern __checkReturn efx_rc_t 55 siena_nic_init( 56 __in efx_nic_t *enp); 57 58 #if EFSYS_OPT_DIAG 59 60 LIBEFX_INTERNAL 61 extern efx_sram_pattern_fn_t __efx_sram_pattern_fns[]; 62 63 typedef struct siena_register_set_s { 64 unsigned int address; 65 unsigned int step; 66 unsigned int rows; 67 efx_oword_t mask; 68 } siena_register_set_t; 69 70 LIBEFX_INTERNAL 71 extern __checkReturn efx_rc_t 72 siena_nic_register_test( 73 __in efx_nic_t *enp); 74 75 #endif /* EFSYS_OPT_DIAG */ 76 77 LIBEFX_INTERNAL 78 extern void 79 siena_nic_fini( 80 __in efx_nic_t *enp); 81 82 LIBEFX_INTERNAL 83 extern void 84 siena_nic_unprobe( 85 __in efx_nic_t *enp); 86 87 #define SIENA_SRAM_ROWS 0x12000 88 89 LIBEFX_INTERNAL 90 extern void 91 siena_sram_init( 92 __in efx_nic_t *enp); 93 94 #if EFSYS_OPT_DIAG 95 96 LIBEFX_INTERNAL 97 extern __checkReturn efx_rc_t 98 siena_sram_test( 99 __in efx_nic_t *enp, 100 __in efx_sram_pattern_fn_t func); 101 102 #endif /* EFSYS_OPT_DIAG */ 103 104 #if EFSYS_OPT_MCDI 105 106 LIBEFX_INTERNAL 107 extern __checkReturn efx_rc_t 108 siena_mcdi_init( 109 __in efx_nic_t *enp, 110 __in const efx_mcdi_transport_t *mtp); 111 112 LIBEFX_INTERNAL 113 extern void 114 siena_mcdi_send_request( 115 __in efx_nic_t *enp, 116 __in_bcount(hdr_len) void *hdrp, 117 __in size_t hdr_len, 118 __in_bcount(sdu_len) void *sdup, 119 __in size_t sdu_len); 120 121 LIBEFX_INTERNAL 122 extern __checkReturn boolean_t 123 siena_mcdi_poll_response( 124 __in efx_nic_t *enp); 125 126 LIBEFX_INTERNAL 127 extern void 128 siena_mcdi_read_response( 129 __in efx_nic_t *enp, 130 __out_bcount(length) void *bufferp, 131 __in size_t offset, 132 __in size_t length); 133 134 LIBEFX_INTERNAL 135 extern efx_rc_t 136 siena_mcdi_poll_reboot( 137 __in efx_nic_t *enp); 138 139 LIBEFX_INTERNAL 140 extern void 141 siena_mcdi_fini( 142 __in efx_nic_t *enp); 143 144 LIBEFX_INTERNAL 145 extern __checkReturn efx_rc_t 146 siena_mcdi_feature_supported( 147 __in efx_nic_t *enp, 148 __in efx_mcdi_feature_id_t id, 149 __out boolean_t *supportedp); 150 151 LIBEFX_INTERNAL 152 extern void 153 siena_mcdi_get_timeout( 154 __in efx_nic_t *enp, 155 __in efx_mcdi_req_t *emrp, 156 __out uint32_t *timeoutp); 157 158 #endif /* EFSYS_OPT_MCDI */ 159 160 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD 161 162 LIBEFX_INTERNAL 163 extern __checkReturn efx_rc_t 164 siena_nvram_partn_lock( 165 __in efx_nic_t *enp, 166 __in uint32_t partn); 167 168 LIBEFX_INTERNAL 169 extern __checkReturn efx_rc_t 170 siena_nvram_partn_unlock( 171 __in efx_nic_t *enp, 172 __in uint32_t partn, 173 __out_opt uint32_t *verify_resultp); 174 175 LIBEFX_INTERNAL 176 extern __checkReturn efx_rc_t 177 siena_nvram_get_dynamic_cfg( 178 __in efx_nic_t *enp, 179 __in uint32_t partn, 180 __in boolean_t vpd, 181 __out siena_mc_dynamic_config_hdr_t **dcfgp, 182 __out size_t *sizep); 183 184 #endif /* EFSYS_OPT_VPD || EFSYS_OPT_NVRAM */ 185 186 #if EFSYS_OPT_NVRAM 187 188 #if EFSYS_OPT_DIAG 189 190 LIBEFX_INTERNAL 191 extern __checkReturn efx_rc_t 192 siena_nvram_test( 193 __in efx_nic_t *enp); 194 195 #endif /* EFSYS_OPT_DIAG */ 196 197 LIBEFX_INTERNAL 198 extern __checkReturn efx_rc_t 199 siena_nvram_get_subtype( 200 __in efx_nic_t *enp, 201 __in uint32_t partn, 202 __out uint32_t *subtypep); 203 204 LIBEFX_INTERNAL 205 extern __checkReturn efx_rc_t 206 siena_nvram_type_to_partn( 207 __in efx_nic_t *enp, 208 __in efx_nvram_type_t type, 209 __out uint32_t *partnp); 210 211 LIBEFX_INTERNAL 212 extern __checkReturn efx_rc_t 213 siena_nvram_partn_size( 214 __in efx_nic_t *enp, 215 __in uint32_t partn, 216 __out size_t *sizep); 217 218 LIBEFX_INTERNAL 219 extern __checkReturn efx_rc_t 220 siena_nvram_partn_info( 221 __in efx_nic_t *enp, 222 __in uint32_t partn, 223 __out efx_nvram_info_t * enip); 224 225 LIBEFX_INTERNAL 226 extern __checkReturn efx_rc_t 227 siena_nvram_partn_rw_start( 228 __in efx_nic_t *enp, 229 __in uint32_t partn, 230 __out size_t *chunk_sizep); 231 232 LIBEFX_INTERNAL 233 extern __checkReturn efx_rc_t 234 siena_nvram_partn_read( 235 __in efx_nic_t *enp, 236 __in uint32_t partn, 237 __in unsigned int offset, 238 __out_bcount(size) caddr_t data, 239 __in size_t size); 240 241 LIBEFX_INTERNAL 242 extern __checkReturn efx_rc_t 243 siena_nvram_partn_erase( 244 __in efx_nic_t *enp, 245 __in uint32_t partn, 246 __in unsigned int offset, 247 __in size_t size); 248 249 LIBEFX_INTERNAL 250 extern __checkReturn efx_rc_t 251 siena_nvram_partn_write( 252 __in efx_nic_t *enp, 253 __in uint32_t partn, 254 __in unsigned int offset, 255 __out_bcount(size) caddr_t data, 256 __in size_t size); 257 258 LIBEFX_INTERNAL 259 extern __checkReturn efx_rc_t 260 siena_nvram_partn_rw_finish( 261 __in efx_nic_t *enp, 262 __in uint32_t partn, 263 __out_opt uint32_t *verify_resultp); 264 265 LIBEFX_INTERNAL 266 extern __checkReturn efx_rc_t 267 siena_nvram_partn_get_version( 268 __in efx_nic_t *enp, 269 __in uint32_t partn, 270 __out uint32_t *subtypep, 271 __out_ecount(4) uint16_t version[4]); 272 273 LIBEFX_INTERNAL 274 extern __checkReturn efx_rc_t 275 siena_nvram_partn_set_version( 276 __in efx_nic_t *enp, 277 __in uint32_t partn, 278 __in_ecount(4) uint16_t version[4]); 279 280 #endif /* EFSYS_OPT_NVRAM */ 281 282 #if EFSYS_OPT_VPD 283 284 LIBEFX_INTERNAL 285 extern __checkReturn efx_rc_t 286 siena_vpd_init( 287 __in efx_nic_t *enp); 288 289 LIBEFX_INTERNAL 290 extern __checkReturn efx_rc_t 291 siena_vpd_size( 292 __in efx_nic_t *enp, 293 __out size_t *sizep); 294 295 LIBEFX_INTERNAL 296 extern __checkReturn efx_rc_t 297 siena_vpd_read( 298 __in efx_nic_t *enp, 299 __out_bcount(size) caddr_t data, 300 __in size_t size); 301 302 LIBEFX_INTERNAL 303 extern __checkReturn efx_rc_t 304 siena_vpd_verify( 305 __in efx_nic_t *enp, 306 __in_bcount(size) caddr_t data, 307 __in size_t size); 308 309 LIBEFX_INTERNAL 310 extern __checkReturn efx_rc_t 311 siena_vpd_reinit( 312 __in efx_nic_t *enp, 313 __in_bcount(size) caddr_t data, 314 __in size_t size); 315 316 LIBEFX_INTERNAL 317 extern __checkReturn efx_rc_t 318 siena_vpd_get( 319 __in efx_nic_t *enp, 320 __in_bcount(size) caddr_t data, 321 __in size_t size, 322 __inout efx_vpd_value_t *evvp); 323 324 LIBEFX_INTERNAL 325 extern __checkReturn efx_rc_t 326 siena_vpd_set( 327 __in efx_nic_t *enp, 328 __in_bcount(size) caddr_t data, 329 __in size_t size, 330 __in efx_vpd_value_t *evvp); 331 332 LIBEFX_INTERNAL 333 extern __checkReturn efx_rc_t 334 siena_vpd_next( 335 __in efx_nic_t *enp, 336 __in_bcount(size) caddr_t data, 337 __in size_t size, 338 __out efx_vpd_value_t *evvp, 339 __inout unsigned int *contp); 340 341 LIBEFX_INTERNAL 342 extern __checkReturn efx_rc_t 343 siena_vpd_write( 344 __in efx_nic_t *enp, 345 __in_bcount(size) caddr_t data, 346 __in size_t size); 347 348 LIBEFX_INTERNAL 349 extern void 350 siena_vpd_fini( 351 __in efx_nic_t *enp); 352 353 #endif /* EFSYS_OPT_VPD */ 354 355 typedef struct siena_link_state_s { 356 uint32_t sls_adv_cap_mask; 357 uint32_t sls_lp_cap_mask; 358 unsigned int sls_fcntl; 359 efx_link_mode_t sls_link_mode; 360 #if EFSYS_OPT_LOOPBACK 361 efx_loopback_type_t sls_loopback; 362 #endif 363 boolean_t sls_mac_up; 364 } siena_link_state_t; 365 366 LIBEFX_INTERNAL 367 extern void 368 siena_phy_link_ev( 369 __in efx_nic_t *enp, 370 __in efx_qword_t *eqp, 371 __out efx_link_mode_t *link_modep); 372 373 LIBEFX_INTERNAL 374 extern __checkReturn efx_rc_t 375 siena_phy_get_link( 376 __in efx_nic_t *enp, 377 __out siena_link_state_t *slsp); 378 379 LIBEFX_INTERNAL 380 extern __checkReturn efx_rc_t 381 siena_phy_power( 382 __in efx_nic_t *enp, 383 __in boolean_t on); 384 385 LIBEFX_INTERNAL 386 extern __checkReturn efx_rc_t 387 siena_phy_reconfigure( 388 __in efx_nic_t *enp); 389 390 LIBEFX_INTERNAL 391 extern __checkReturn efx_rc_t 392 siena_phy_verify( 393 __in efx_nic_t *enp); 394 395 LIBEFX_INTERNAL 396 extern __checkReturn efx_rc_t 397 siena_phy_oui_get( 398 __in efx_nic_t *enp, 399 __out uint32_t *ouip); 400 401 #if EFSYS_OPT_PHY_STATS 402 403 LIBEFX_INTERNAL 404 extern void 405 siena_phy_decode_stats( 406 __in efx_nic_t *enp, 407 __in uint32_t vmask, 408 __in_opt efsys_mem_t *esmp, 409 __out_opt uint64_t *smaskp, 410 __inout_ecount_opt(EFX_PHY_NSTATS) uint32_t *stat); 411 412 LIBEFX_INTERNAL 413 extern __checkReturn efx_rc_t 414 siena_phy_stats_update( 415 __in efx_nic_t *enp, 416 __in efsys_mem_t *esmp, 417 __inout_ecount(EFX_PHY_NSTATS) uint32_t *stat); 418 419 #endif /* EFSYS_OPT_PHY_STATS */ 420 421 #if EFSYS_OPT_BIST 422 423 LIBEFX_INTERNAL 424 extern __checkReturn efx_rc_t 425 siena_phy_bist_start( 426 __in efx_nic_t *enp, 427 __in efx_bist_type_t type); 428 429 LIBEFX_INTERNAL 430 extern __checkReturn efx_rc_t 431 siena_phy_bist_poll( 432 __in efx_nic_t *enp, 433 __in efx_bist_type_t type, 434 __out efx_bist_result_t *resultp, 435 __out_opt __drv_when(count > 0, __notnull) 436 uint32_t *value_maskp, 437 __out_ecount_opt(count) __drv_when(count > 0, __notnull) 438 unsigned long *valuesp, 439 __in size_t count); 440 441 LIBEFX_INTERNAL 442 extern void 443 siena_phy_bist_stop( 444 __in efx_nic_t *enp, 445 __in efx_bist_type_t type); 446 447 #endif /* EFSYS_OPT_BIST */ 448 449 LIBEFX_INTERNAL 450 extern __checkReturn efx_rc_t 451 siena_mac_poll( 452 __in efx_nic_t *enp, 453 __out efx_link_mode_t *link_modep); 454 455 LIBEFX_INTERNAL 456 extern __checkReturn efx_rc_t 457 siena_mac_up( 458 __in efx_nic_t *enp, 459 __out boolean_t *mac_upp); 460 461 LIBEFX_INTERNAL 462 extern __checkReturn efx_rc_t 463 siena_mac_reconfigure( 464 __in efx_nic_t *enp); 465 466 LIBEFX_INTERNAL 467 extern __checkReturn efx_rc_t 468 siena_mac_pdu_get( 469 __in efx_nic_t *enp, 470 __out size_t *pdu); 471 472 #if EFSYS_OPT_LOOPBACK 473 474 LIBEFX_INTERNAL 475 extern __checkReturn efx_rc_t 476 siena_mac_loopback_set( 477 __in efx_nic_t *enp, 478 __in efx_link_mode_t link_mode, 479 __in efx_loopback_type_t loopback_type); 480 481 #endif /* EFSYS_OPT_LOOPBACK */ 482 483 #if EFSYS_OPT_MAC_STATS 484 485 LIBEFX_INTERNAL 486 extern __checkReturn efx_rc_t 487 siena_mac_stats_get_mask( 488 __in efx_nic_t *enp, 489 __inout_bcount(mask_size) uint32_t *maskp, 490 __in size_t mask_size); 491 492 LIBEFX_INTERNAL 493 extern __checkReturn efx_rc_t 494 siena_mac_stats_update( 495 __in efx_nic_t *enp, 496 __in efsys_mem_t *esmp, 497 __inout_ecount(EFX_MAC_NSTATS) efsys_stat_t *stat, 498 __inout_opt uint32_t *generationp); 499 500 #endif /* EFSYS_OPT_MAC_STATS */ 501 502 #ifdef __cplusplus 503 } 504 #endif 505 506 #endif /* _SYS_SIENA_IMPL_H */ 507