1 /* SPDX-License-Identifier: BSD-3-Clause 2 * 3 * Copyright(c) 2019-2020 Xilinx, Inc. 4 * Copyright(c) 2015-2019 Solarflare Communications Inc. 5 */ 6 7 #ifndef _SYS_EF10_IMPL_H 8 #define _SYS_EF10_IMPL_H 9 10 #ifdef __cplusplus 11 extern "C" { 12 #endif 13 14 #define EF10_EVQ_MAXNEVS 32768 15 #define EF10_EVQ_MINNEVS 512 16 17 #define EF10_RXQ_MAXNDESCS 4096 18 #define EF10_RXQ_MINNDESCS 512 19 20 #define EF10_TXQ_MINNDESCS 512 21 22 #define EF10_EVQ_DESC_SIZE (sizeof (efx_qword_t)) 23 #define EF10_RXQ_DESC_SIZE (sizeof (efx_qword_t)) 24 #define EF10_TXQ_DESC_SIZE (sizeof (efx_qword_t)) 25 26 /* Number of hardware EVQ buffers (for compile-time resource dimensions) */ 27 #define EF10_EVQ_MAXNBUFS (64) 28 29 /* Maximum independent of EFX_BUG35388_WORKAROUND. */ 30 #define EF10_TXQ_MAXNBUFS 8 31 32 #if EFSYS_OPT_HUNTINGTON 33 # if (EF10_EVQ_MAXNBUFS < HUNT_EVQ_MAXNBUFS) 34 # error "EF10_EVQ_MAXNBUFS too small" 35 # endif 36 #endif /* EFSYS_OPT_HUNTINGTON */ 37 #if EFSYS_OPT_MEDFORD 38 # if (EF10_EVQ_MAXNBUFS < MEDFORD_EVQ_MAXNBUFS) 39 # error "EF10_EVQ_MAXNBUFS too small" 40 # endif 41 #endif /* EFSYS_OPT_MEDFORD */ 42 #if EFSYS_OPT_MEDFORD2 43 # if (EF10_EVQ_MAXNBUFS < MEDFORD2_EVQ_MAXNBUFS) 44 # error "EF10_EVQ_MAXNBUFS too small" 45 # endif 46 #endif /* EFSYS_OPT_MEDFORD2 */ 47 48 /* Number of hardware PIO buffers (for compile-time resource dimensions) */ 49 #define EF10_MAX_PIOBUF_NBUFS (16) 50 51 #if EFSYS_OPT_HUNTINGTON 52 # if (EF10_MAX_PIOBUF_NBUFS < HUNT_PIOBUF_NBUFS) 53 # error "EF10_MAX_PIOBUF_NBUFS too small" 54 # endif 55 #endif /* EFSYS_OPT_HUNTINGTON */ 56 #if EFSYS_OPT_MEDFORD 57 # if (EF10_MAX_PIOBUF_NBUFS < MEDFORD_PIOBUF_NBUFS) 58 # error "EF10_MAX_PIOBUF_NBUFS too small" 59 # endif 60 #endif /* EFSYS_OPT_MEDFORD */ 61 #if EFSYS_OPT_MEDFORD2 62 # if (EF10_MAX_PIOBUF_NBUFS < MEDFORD2_PIOBUF_NBUFS) 63 # error "EF10_MAX_PIOBUF_NBUFS too small" 64 # endif 65 #endif /* EFSYS_OPT_MEDFORD2 */ 66 67 68 69 /* 70 * FIXME: This is just a power of 2 which fits in an MCDI v1 message, and could 71 * possibly be increased, or the write size reported by newer firmware used 72 * instead. 73 */ 74 #define EF10_NVRAM_CHUNK 0x80 75 76 /* 77 * Alignment requirement for value written to RX WPTR: the WPTR must be aligned 78 * to an 8 descriptor boundary. 79 */ 80 #define EF10_RX_WPTR_ALIGN 8 81 82 /* 83 * Max byte offset into the packet the TCP header must start for the hardware 84 * to be able to parse the packet correctly. 85 */ 86 #define EF10_TCP_HEADER_OFFSET_LIMIT 208 87 88 /* Invalid RSS context handle */ 89 #define EF10_RSS_CONTEXT_INVALID (0xffffffff) 90 91 92 /* EV */ 93 94 LIBEFX_INTERNAL 95 extern __checkReturn efx_rc_t 96 ef10_ev_init( 97 __in efx_nic_t *enp); 98 99 LIBEFX_INTERNAL 100 extern void 101 ef10_ev_fini( 102 __in efx_nic_t *enp); 103 104 LIBEFX_INTERNAL 105 extern __checkReturn efx_rc_t 106 ef10_ev_qcreate( 107 __in efx_nic_t *enp, 108 __in unsigned int index, 109 __in efsys_mem_t *esmp, 110 __in size_t ndescs, 111 __in uint32_t id, 112 __in uint32_t us, 113 __in uint32_t flags, 114 __in efx_evq_t *eep); 115 116 LIBEFX_INTERNAL 117 extern void 118 ef10_ev_qdestroy( 119 __in efx_evq_t *eep); 120 121 LIBEFX_INTERNAL 122 extern __checkReturn efx_rc_t 123 ef10_ev_qprime( 124 __in efx_evq_t *eep, 125 __in unsigned int count); 126 127 LIBEFX_INTERNAL 128 extern void 129 ef10_ev_qpost( 130 __in efx_evq_t *eep, 131 __in uint16_t data); 132 133 LIBEFX_INTERNAL 134 extern __checkReturn efx_rc_t 135 ef10_ev_qmoderate( 136 __in efx_evq_t *eep, 137 __in unsigned int us); 138 139 #if EFSYS_OPT_QSTATS 140 LIBEFX_INTERNAL 141 extern void 142 ef10_ev_qstats_update( 143 __in efx_evq_t *eep, 144 __inout_ecount(EV_NQSTATS) efsys_stat_t *stat); 145 #endif /* EFSYS_OPT_QSTATS */ 146 147 LIBEFX_INTERNAL 148 extern void 149 ef10_ev_rxlabel_init( 150 __in efx_evq_t *eep, 151 __in efx_rxq_t *erp, 152 __in unsigned int label, 153 __in efx_rxq_type_t type); 154 155 LIBEFX_INTERNAL 156 extern void 157 ef10_ev_rxlabel_fini( 158 __in efx_evq_t *eep, 159 __in unsigned int label); 160 161 LIBEFX_INTERNAL 162 extern __checkReturn boolean_t 163 ef10_ev_mcdi( 164 __in efx_evq_t *eep, 165 __in efx_qword_t *eqp, 166 __in const efx_ev_callbacks_t *eecp, 167 __in_opt void *arg); 168 169 /* INTR */ 170 171 LIBEFX_INTERNAL 172 extern __checkReturn efx_rc_t 173 ef10_intr_init( 174 __in efx_nic_t *enp, 175 __in efx_intr_type_t type, 176 __in efsys_mem_t *esmp); 177 178 LIBEFX_INTERNAL 179 extern void 180 ef10_intr_enable( 181 __in efx_nic_t *enp); 182 183 LIBEFX_INTERNAL 184 extern void 185 ef10_intr_disable( 186 __in efx_nic_t *enp); 187 188 LIBEFX_INTERNAL 189 extern void 190 ef10_intr_disable_unlocked( 191 __in efx_nic_t *enp); 192 193 LIBEFX_INTERNAL 194 extern __checkReturn efx_rc_t 195 ef10_intr_trigger( 196 __in efx_nic_t *enp, 197 __in unsigned int level); 198 199 LIBEFX_INTERNAL 200 extern void 201 ef10_intr_status_line( 202 __in efx_nic_t *enp, 203 __out boolean_t *fatalp, 204 __out uint32_t *qmaskp); 205 206 LIBEFX_INTERNAL 207 extern void 208 ef10_intr_status_message( 209 __in efx_nic_t *enp, 210 __in unsigned int message, 211 __out boolean_t *fatalp); 212 213 LIBEFX_INTERNAL 214 extern void 215 ef10_intr_fatal( 216 __in efx_nic_t *enp); 217 218 LIBEFX_INTERNAL 219 extern void 220 ef10_intr_fini( 221 __in efx_nic_t *enp); 222 223 /* NIC */ 224 225 LIBEFX_INTERNAL 226 extern __checkReturn efx_rc_t 227 efx_mcdi_vadaptor_alloc( 228 __in efx_nic_t *enp, 229 __in uint32_t port_id); 230 231 LIBEFX_INTERNAL 232 extern __checkReturn efx_rc_t 233 efx_mcdi_vadaptor_free( 234 __in efx_nic_t *enp, 235 __in uint32_t port_id); 236 237 LIBEFX_INTERNAL 238 extern __checkReturn efx_rc_t 239 ef10_upstream_port_vadaptor_alloc( 240 __in efx_nic_t *enp); 241 242 LIBEFX_INTERNAL 243 extern __checkReturn efx_rc_t 244 ef10_nic_probe( 245 __in efx_nic_t *enp); 246 247 LIBEFX_INTERNAL 248 extern __checkReturn efx_rc_t 249 ef10_nic_set_drv_limits( 250 __inout efx_nic_t *enp, 251 __in efx_drv_limits_t *edlp); 252 253 LIBEFX_INTERNAL 254 extern __checkReturn efx_rc_t 255 ef10_nic_get_vi_pool( 256 __in efx_nic_t *enp, 257 __out uint32_t *vi_countp); 258 259 LIBEFX_INTERNAL 260 extern __checkReturn efx_rc_t 261 ef10_nic_get_bar_region( 262 __in efx_nic_t *enp, 263 __in efx_nic_region_t region, 264 __out uint32_t *offsetp, 265 __out size_t *sizep); 266 267 LIBEFX_INTERNAL 268 extern __checkReturn efx_rc_t 269 ef10_nic_reset( 270 __in efx_nic_t *enp); 271 272 LIBEFX_INTERNAL 273 extern __checkReturn efx_rc_t 274 ef10_nic_init( 275 __in efx_nic_t *enp); 276 277 LIBEFX_INTERNAL 278 extern __checkReturn boolean_t 279 ef10_nic_hw_unavailable( 280 __in efx_nic_t *enp); 281 282 LIBEFX_INTERNAL 283 extern void 284 ef10_nic_set_hw_unavailable( 285 __in efx_nic_t *enp); 286 287 #if EFSYS_OPT_DIAG 288 289 LIBEFX_INTERNAL 290 extern __checkReturn efx_rc_t 291 ef10_nic_register_test( 292 __in efx_nic_t *enp); 293 294 #endif /* EFSYS_OPT_DIAG */ 295 296 LIBEFX_INTERNAL 297 extern void 298 ef10_nic_fini( 299 __in efx_nic_t *enp); 300 301 LIBEFX_INTERNAL 302 extern void 303 ef10_nic_unprobe( 304 __in efx_nic_t *enp); 305 306 307 /* MAC */ 308 309 LIBEFX_INTERNAL 310 extern __checkReturn efx_rc_t 311 ef10_mac_poll( 312 __in efx_nic_t *enp, 313 __out efx_link_mode_t *link_modep); 314 315 LIBEFX_INTERNAL 316 extern __checkReturn efx_rc_t 317 ef10_mac_up( 318 __in efx_nic_t *enp, 319 __out boolean_t *mac_upp); 320 321 LIBEFX_INTERNAL 322 extern __checkReturn efx_rc_t 323 ef10_mac_addr_set( 324 __in efx_nic_t *enp); 325 326 LIBEFX_INTERNAL 327 extern __checkReturn efx_rc_t 328 ef10_mac_pdu_set( 329 __in efx_nic_t *enp); 330 331 LIBEFX_INTERNAL 332 extern __checkReturn efx_rc_t 333 ef10_mac_pdu_get( 334 __in efx_nic_t *enp, 335 __out size_t *pdu); 336 337 LIBEFX_INTERNAL 338 extern __checkReturn efx_rc_t 339 ef10_mac_reconfigure( 340 __in efx_nic_t *enp); 341 342 LIBEFX_INTERNAL 343 extern __checkReturn efx_rc_t 344 ef10_mac_multicast_list_set( 345 __in efx_nic_t *enp); 346 347 LIBEFX_INTERNAL 348 extern __checkReturn efx_rc_t 349 ef10_mac_filter_default_rxq_set( 350 __in efx_nic_t *enp, 351 __in efx_rxq_t *erp, 352 __in boolean_t using_rss); 353 354 LIBEFX_INTERNAL 355 extern void 356 ef10_mac_filter_default_rxq_clear( 357 __in efx_nic_t *enp); 358 359 #if EFSYS_OPT_LOOPBACK 360 361 LIBEFX_INTERNAL 362 extern __checkReturn efx_rc_t 363 ef10_mac_loopback_set( 364 __in efx_nic_t *enp, 365 __in efx_link_mode_t link_mode, 366 __in efx_loopback_type_t loopback_type); 367 368 #endif /* EFSYS_OPT_LOOPBACK */ 369 370 #if EFSYS_OPT_MAC_STATS 371 372 LIBEFX_INTERNAL 373 extern __checkReturn efx_rc_t 374 ef10_mac_stats_get_mask( 375 __in efx_nic_t *enp, 376 __inout_bcount(mask_size) uint32_t *maskp, 377 __in size_t mask_size); 378 379 LIBEFX_INTERNAL 380 extern __checkReturn efx_rc_t 381 ef10_mac_stats_update( 382 __in efx_nic_t *enp, 383 __in efsys_mem_t *esmp, 384 __inout_ecount(EFX_MAC_NSTATS) efsys_stat_t *stat, 385 __inout_opt uint32_t *generationp); 386 387 #endif /* EFSYS_OPT_MAC_STATS */ 388 389 390 /* MCDI */ 391 392 #if EFSYS_OPT_MCDI 393 394 LIBEFX_INTERNAL 395 extern __checkReturn efx_rc_t 396 ef10_mcdi_init( 397 __in efx_nic_t *enp, 398 __in const efx_mcdi_transport_t *mtp); 399 400 LIBEFX_INTERNAL 401 extern void 402 ef10_mcdi_fini( 403 __in efx_nic_t *enp); 404 405 LIBEFX_INTERNAL 406 extern void 407 ef10_mcdi_send_request( 408 __in efx_nic_t *enp, 409 __in_bcount(hdr_len) void *hdrp, 410 __in size_t hdr_len, 411 __in_bcount(sdu_len) void *sdup, 412 __in size_t sdu_len); 413 414 LIBEFX_INTERNAL 415 extern __checkReturn boolean_t 416 ef10_mcdi_poll_response( 417 __in efx_nic_t *enp); 418 419 LIBEFX_INTERNAL 420 extern void 421 ef10_mcdi_read_response( 422 __in efx_nic_t *enp, 423 __out_bcount(length) void *bufferp, 424 __in size_t offset, 425 __in size_t length); 426 427 LIBEFX_INTERNAL 428 extern efx_rc_t 429 ef10_mcdi_poll_reboot( 430 __in efx_nic_t *enp); 431 432 LIBEFX_INTERNAL 433 extern __checkReturn efx_rc_t 434 ef10_mcdi_feature_supported( 435 __in efx_nic_t *enp, 436 __in efx_mcdi_feature_id_t id, 437 __out boolean_t *supportedp); 438 439 LIBEFX_INTERNAL 440 extern void 441 ef10_mcdi_get_timeout( 442 __in efx_nic_t *enp, 443 __in efx_mcdi_req_t *emrp, 444 __out uint32_t *timeoutp); 445 446 #endif /* EFSYS_OPT_MCDI */ 447 448 /* NVRAM */ 449 450 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD 451 452 LIBEFX_INTERNAL 453 extern __checkReturn efx_rc_t 454 ef10_nvram_buf_read_tlv( 455 __in efx_nic_t *enp, 456 __in_bcount(max_seg_size) caddr_t seg_data, 457 __in size_t max_seg_size, 458 __in uint32_t tag, 459 __deref_out_bcount_opt(*sizep) caddr_t *datap, 460 __out size_t *sizep); 461 462 LIBEFX_INTERNAL 463 extern __checkReturn efx_rc_t 464 ef10_nvram_buf_write_tlv( 465 __inout_bcount(partn_size) caddr_t partn_data, 466 __in size_t partn_size, 467 __in uint32_t tag, 468 __in_bcount(tag_size) caddr_t tag_data, 469 __in size_t tag_size, 470 __out size_t *total_lengthp); 471 472 LIBEFX_INTERNAL 473 extern __checkReturn efx_rc_t 474 ef10_nvram_partn_read_tlv( 475 __in efx_nic_t *enp, 476 __in uint32_t partn, 477 __in uint32_t tag, 478 __deref_out_bcount_opt(*sizep) caddr_t *datap, 479 __out size_t *sizep); 480 481 LIBEFX_INTERNAL 482 extern __checkReturn efx_rc_t 483 ef10_nvram_partn_write_tlv( 484 __in efx_nic_t *enp, 485 __in uint32_t partn, 486 __in uint32_t tag, 487 __in_bcount(size) caddr_t data, 488 __in size_t size); 489 490 LIBEFX_INTERNAL 491 extern __checkReturn efx_rc_t 492 ef10_nvram_partn_write_segment_tlv( 493 __in efx_nic_t *enp, 494 __in uint32_t partn, 495 __in uint32_t tag, 496 __in_bcount(size) caddr_t data, 497 __in size_t size, 498 __in boolean_t all_segments); 499 500 LIBEFX_INTERNAL 501 extern __checkReturn efx_rc_t 502 ef10_nvram_partn_lock( 503 __in efx_nic_t *enp, 504 __in uint32_t partn); 505 506 LIBEFX_INTERNAL 507 extern __checkReturn efx_rc_t 508 ef10_nvram_partn_unlock( 509 __in efx_nic_t *enp, 510 __in uint32_t partn, 511 __out_opt uint32_t *resultp); 512 513 #endif /* EFSYS_OPT_NVRAM || EFSYS_OPT_VPD */ 514 515 #if EFSYS_OPT_NVRAM 516 517 #if EFSYS_OPT_DIAG 518 519 LIBEFX_INTERNAL 520 extern __checkReturn efx_rc_t 521 ef10_nvram_test( 522 __in efx_nic_t *enp); 523 524 #endif /* EFSYS_OPT_DIAG */ 525 526 LIBEFX_INTERNAL 527 extern __checkReturn efx_rc_t 528 ef10_nvram_type_to_partn( 529 __in efx_nic_t *enp, 530 __in efx_nvram_type_t type, 531 __out uint32_t *partnp); 532 533 LIBEFX_INTERNAL 534 extern __checkReturn efx_rc_t 535 ef10_nvram_partn_size( 536 __in efx_nic_t *enp, 537 __in uint32_t partn, 538 __out size_t *sizep); 539 540 LIBEFX_INTERNAL 541 extern __checkReturn efx_rc_t 542 ef10_nvram_partn_info( 543 __in efx_nic_t *enp, 544 __in uint32_t partn, 545 __out efx_nvram_info_t * enip); 546 547 LIBEFX_INTERNAL 548 extern __checkReturn efx_rc_t 549 ef10_nvram_partn_rw_start( 550 __in efx_nic_t *enp, 551 __in uint32_t partn, 552 __out size_t *chunk_sizep); 553 554 LIBEFX_INTERNAL 555 extern __checkReturn efx_rc_t 556 ef10_nvram_partn_read_mode( 557 __in efx_nic_t *enp, 558 __in uint32_t partn, 559 __in unsigned int offset, 560 __out_bcount(size) caddr_t data, 561 __in size_t size, 562 __in uint32_t mode); 563 564 LIBEFX_INTERNAL 565 extern __checkReturn efx_rc_t 566 ef10_nvram_partn_read( 567 __in efx_nic_t *enp, 568 __in uint32_t partn, 569 __in unsigned int offset, 570 __out_bcount(size) caddr_t data, 571 __in size_t size); 572 573 LIBEFX_INTERNAL 574 extern __checkReturn efx_rc_t 575 ef10_nvram_partn_read_backup( 576 __in efx_nic_t *enp, 577 __in uint32_t partn, 578 __in unsigned int offset, 579 __out_bcount(size) caddr_t data, 580 __in size_t size); 581 582 LIBEFX_INTERNAL 583 extern __checkReturn efx_rc_t 584 ef10_nvram_partn_erase( 585 __in efx_nic_t *enp, 586 __in uint32_t partn, 587 __in unsigned int offset, 588 __in size_t size); 589 590 LIBEFX_INTERNAL 591 extern __checkReturn efx_rc_t 592 ef10_nvram_partn_write( 593 __in efx_nic_t *enp, 594 __in uint32_t partn, 595 __in unsigned int offset, 596 __in_bcount(size) caddr_t data, 597 __in size_t size); 598 599 LIBEFX_INTERNAL 600 extern __checkReturn efx_rc_t 601 ef10_nvram_partn_rw_finish( 602 __in efx_nic_t *enp, 603 __in uint32_t partn, 604 __out_opt uint32_t *verify_resultp); 605 606 LIBEFX_INTERNAL 607 extern __checkReturn efx_rc_t 608 ef10_nvram_partn_get_version( 609 __in efx_nic_t *enp, 610 __in uint32_t partn, 611 __out uint32_t *subtypep, 612 __out_ecount(4) uint16_t version[4]); 613 614 LIBEFX_INTERNAL 615 extern __checkReturn efx_rc_t 616 ef10_nvram_partn_set_version( 617 __in efx_nic_t *enp, 618 __in uint32_t partn, 619 __in_ecount(4) uint16_t version[4]); 620 621 LIBEFX_INTERNAL 622 extern __checkReturn efx_rc_t 623 ef10_nvram_buffer_validate( 624 __in uint32_t partn, 625 __in_bcount(buffer_size) 626 caddr_t bufferp, 627 __in size_t buffer_size); 628 629 LIBEFX_INTERNAL 630 extern void 631 ef10_nvram_buffer_init( 632 __out_bcount(buffer_size) 633 caddr_t bufferp, 634 __in size_t buffer_size); 635 636 LIBEFX_INTERNAL 637 extern __checkReturn efx_rc_t 638 ef10_nvram_buffer_create( 639 __in uint32_t partn_type, 640 __out_bcount(buffer_size) 641 caddr_t bufferp, 642 __in size_t buffer_size); 643 644 LIBEFX_INTERNAL 645 extern __checkReturn efx_rc_t 646 ef10_nvram_buffer_find_item_start( 647 __in_bcount(buffer_size) 648 caddr_t bufferp, 649 __in size_t buffer_size, 650 __out uint32_t *startp); 651 652 LIBEFX_INTERNAL 653 extern __checkReturn efx_rc_t 654 ef10_nvram_buffer_find_end( 655 __in_bcount(buffer_size) 656 caddr_t bufferp, 657 __in size_t buffer_size, 658 __in uint32_t offset, 659 __out uint32_t *endp); 660 661 LIBEFX_INTERNAL 662 extern __checkReturn __success(return != B_FALSE) boolean_t 663 ef10_nvram_buffer_find_item( 664 __in_bcount(buffer_size) 665 caddr_t bufferp, 666 __in size_t buffer_size, 667 __in uint32_t offset, 668 __out uint32_t *startp, 669 __out uint32_t *lengthp); 670 671 LIBEFX_INTERNAL 672 extern __checkReturn efx_rc_t 673 ef10_nvram_buffer_peek_item( 674 __in_bcount(buffer_size) 675 caddr_t bufferp, 676 __in size_t buffer_size, 677 __in uint32_t offset, 678 __out uint32_t *tagp, 679 __out uint32_t *lengthp, 680 __out uint32_t *value_offsetp); 681 682 LIBEFX_INTERNAL 683 extern __checkReturn efx_rc_t 684 ef10_nvram_buffer_get_item( 685 __in_bcount(buffer_size) 686 caddr_t bufferp, 687 __in size_t buffer_size, 688 __in uint32_t offset, 689 __in uint32_t length, 690 __out uint32_t *tagp, 691 __out_bcount_part(value_max_size, *lengthp) 692 caddr_t valuep, 693 __in size_t value_max_size, 694 __out uint32_t *lengthp); 695 696 LIBEFX_INTERNAL 697 extern __checkReturn efx_rc_t 698 ef10_nvram_buffer_insert_item( 699 __in_bcount(buffer_size) 700 caddr_t bufferp, 701 __in size_t buffer_size, 702 __in uint32_t offset, 703 __in uint32_t tag, 704 __in_bcount(length) caddr_t valuep, 705 __in uint32_t length, 706 __out uint32_t *lengthp); 707 708 LIBEFX_INTERNAL 709 extern __checkReturn efx_rc_t 710 ef10_nvram_buffer_modify_item( 711 __in_bcount(buffer_size) 712 caddr_t bufferp, 713 __in size_t buffer_size, 714 __in uint32_t offset, 715 __in uint32_t tag, 716 __in_bcount(length) caddr_t valuep, 717 __in uint32_t length, 718 __out uint32_t *lengthp); 719 720 LIBEFX_INTERNAL 721 extern __checkReturn efx_rc_t 722 ef10_nvram_buffer_delete_item( 723 __in_bcount(buffer_size) 724 caddr_t bufferp, 725 __in size_t buffer_size, 726 __in uint32_t offset, 727 __in uint32_t length, 728 __in uint32_t end); 729 730 LIBEFX_INTERNAL 731 extern __checkReturn efx_rc_t 732 ef10_nvram_buffer_finish( 733 __in_bcount(buffer_size) 734 caddr_t bufferp, 735 __in size_t buffer_size); 736 737 #endif /* EFSYS_OPT_NVRAM */ 738 739 740 /* PHY */ 741 742 typedef struct ef10_link_state_s { 743 efx_phy_link_state_t epls; 744 #if EFSYS_OPT_LOOPBACK 745 efx_loopback_type_t els_loopback; 746 #endif 747 boolean_t els_mac_up; 748 } ef10_link_state_t; 749 750 LIBEFX_INTERNAL 751 extern void 752 ef10_phy_link_ev( 753 __in efx_nic_t *enp, 754 __in efx_qword_t *eqp, 755 __out efx_link_mode_t *link_modep); 756 757 LIBEFX_INTERNAL 758 extern __checkReturn efx_rc_t 759 ef10_phy_get_link( 760 __in efx_nic_t *enp, 761 __out ef10_link_state_t *elsp); 762 763 LIBEFX_INTERNAL 764 extern __checkReturn efx_rc_t 765 ef10_phy_power( 766 __in efx_nic_t *enp, 767 __in boolean_t on); 768 769 LIBEFX_INTERNAL 770 extern __checkReturn efx_rc_t 771 ef10_phy_reconfigure( 772 __in efx_nic_t *enp); 773 774 LIBEFX_INTERNAL 775 extern __checkReturn efx_rc_t 776 ef10_phy_verify( 777 __in efx_nic_t *enp); 778 779 LIBEFX_INTERNAL 780 extern __checkReturn efx_rc_t 781 ef10_phy_oui_get( 782 __in efx_nic_t *enp, 783 __out uint32_t *ouip); 784 785 LIBEFX_INTERNAL 786 extern __checkReturn efx_rc_t 787 ef10_phy_link_state_get( 788 __in efx_nic_t *enp, 789 __out efx_phy_link_state_t *eplsp); 790 791 #if EFSYS_OPT_PHY_STATS 792 793 LIBEFX_INTERNAL 794 extern __checkReturn efx_rc_t 795 ef10_phy_stats_update( 796 __in efx_nic_t *enp, 797 __in efsys_mem_t *esmp, 798 __inout_ecount(EFX_PHY_NSTATS) uint32_t *stat); 799 800 #endif /* EFSYS_OPT_PHY_STATS */ 801 802 #if EFSYS_OPT_BIST 803 804 LIBEFX_INTERNAL 805 extern __checkReturn efx_rc_t 806 ef10_bist_enable_offline( 807 __in efx_nic_t *enp); 808 809 LIBEFX_INTERNAL 810 extern __checkReturn efx_rc_t 811 ef10_bist_start( 812 __in efx_nic_t *enp, 813 __in efx_bist_type_t type); 814 815 LIBEFX_INTERNAL 816 extern __checkReturn efx_rc_t 817 ef10_bist_poll( 818 __in efx_nic_t *enp, 819 __in efx_bist_type_t type, 820 __out efx_bist_result_t *resultp, 821 __out_opt __drv_when(count > 0, __notnull) 822 uint32_t *value_maskp, 823 __out_ecount_opt(count) __drv_when(count > 0, __notnull) 824 unsigned long *valuesp, 825 __in size_t count); 826 827 LIBEFX_INTERNAL 828 extern void 829 ef10_bist_stop( 830 __in efx_nic_t *enp, 831 __in efx_bist_type_t type); 832 833 #endif /* EFSYS_OPT_BIST */ 834 835 /* TX */ 836 837 LIBEFX_INTERNAL 838 extern __checkReturn efx_rc_t 839 ef10_tx_init( 840 __in efx_nic_t *enp); 841 842 LIBEFX_INTERNAL 843 extern void 844 ef10_tx_fini( 845 __in efx_nic_t *enp); 846 847 LIBEFX_INTERNAL 848 extern __checkReturn efx_rc_t 849 ef10_tx_qcreate( 850 __in efx_nic_t *enp, 851 __in unsigned int index, 852 __in unsigned int label, 853 __in efsys_mem_t *esmp, 854 __in size_t ndescs, 855 __in uint32_t id, 856 __in uint16_t flags, 857 __in efx_evq_t *eep, 858 __in efx_txq_t *etp, 859 __out unsigned int *addedp); 860 861 LIBEFX_INTERNAL 862 extern void 863 ef10_tx_qdestroy( 864 __in efx_txq_t *etp); 865 866 LIBEFX_INTERNAL 867 extern __checkReturn efx_rc_t 868 ef10_tx_qpost( 869 __in efx_txq_t *etp, 870 __in_ecount(ndescs) efx_buffer_t *ebp, 871 __in unsigned int ndescs, 872 __in unsigned int completed, 873 __inout unsigned int *addedp); 874 875 LIBEFX_INTERNAL 876 extern void 877 ef10_tx_qpush( 878 __in efx_txq_t *etp, 879 __in unsigned int added, 880 __in unsigned int pushed); 881 882 #if EFSYS_OPT_RX_PACKED_STREAM 883 LIBEFX_INTERNAL 884 extern void 885 ef10_rx_qpush_ps_credits( 886 __in efx_rxq_t *erp); 887 888 LIBEFX_INTERNAL 889 extern __checkReturn uint8_t * 890 ef10_rx_qps_packet_info( 891 __in efx_rxq_t *erp, 892 __in uint8_t *buffer, 893 __in uint32_t buffer_length, 894 __in uint32_t current_offset, 895 __out uint16_t *lengthp, 896 __out uint32_t *next_offsetp, 897 __out uint32_t *timestamp); 898 #endif 899 900 LIBEFX_INTERNAL 901 extern __checkReturn efx_rc_t 902 ef10_tx_qpace( 903 __in efx_txq_t *etp, 904 __in unsigned int ns); 905 906 LIBEFX_INTERNAL 907 extern __checkReturn efx_rc_t 908 ef10_tx_qflush( 909 __in efx_txq_t *etp); 910 911 LIBEFX_INTERNAL 912 extern void 913 ef10_tx_qenable( 914 __in efx_txq_t *etp); 915 916 LIBEFX_INTERNAL 917 extern __checkReturn efx_rc_t 918 ef10_tx_qpio_enable( 919 __in efx_txq_t *etp); 920 921 LIBEFX_INTERNAL 922 extern void 923 ef10_tx_qpio_disable( 924 __in efx_txq_t *etp); 925 926 LIBEFX_INTERNAL 927 extern __checkReturn efx_rc_t 928 ef10_tx_qpio_write( 929 __in efx_txq_t *etp, 930 __in_ecount(buf_length) uint8_t *buffer, 931 __in size_t buf_length, 932 __in size_t pio_buf_offset); 933 934 LIBEFX_INTERNAL 935 extern __checkReturn efx_rc_t 936 ef10_tx_qpio_post( 937 __in efx_txq_t *etp, 938 __in size_t pkt_length, 939 __in unsigned int completed, 940 __inout unsigned int *addedp); 941 942 LIBEFX_INTERNAL 943 extern __checkReturn efx_rc_t 944 ef10_tx_qdesc_post( 945 __in efx_txq_t *etp, 946 __in_ecount(n) efx_desc_t *ed, 947 __in unsigned int n, 948 __in unsigned int completed, 949 __inout unsigned int *addedp); 950 951 LIBEFX_INTERNAL 952 extern void 953 ef10_tx_qdesc_dma_create( 954 __in efx_txq_t *etp, 955 __in efsys_dma_addr_t addr, 956 __in size_t size, 957 __in boolean_t eop, 958 __out efx_desc_t *edp); 959 960 LIBEFX_INTERNAL 961 extern void 962 ef10_tx_qdesc_tso_create( 963 __in efx_txq_t *etp, 964 __in uint16_t ipv4_id, 965 __in uint32_t tcp_seq, 966 __in uint8_t tcp_flags, 967 __out efx_desc_t *edp); 968 969 LIBEFX_INTERNAL 970 extern void 971 ef10_tx_qdesc_tso2_create( 972 __in efx_txq_t *etp, 973 __in uint16_t ipv4_id, 974 __in uint16_t outer_ipv4_id, 975 __in uint32_t tcp_seq, 976 __in uint16_t tcp_mss, 977 __out_ecount(count) efx_desc_t *edp, 978 __in int count); 979 980 LIBEFX_INTERNAL 981 extern void 982 ef10_tx_qdesc_vlantci_create( 983 __in efx_txq_t *etp, 984 __in uint16_t vlan_tci, 985 __out efx_desc_t *edp); 986 987 LIBEFX_INTERNAL 988 extern void 989 ef10_tx_qdesc_checksum_create( 990 __in efx_txq_t *etp, 991 __in uint16_t flags, 992 __out efx_desc_t *edp); 993 994 #if EFSYS_OPT_QSTATS 995 996 LIBEFX_INTERNAL 997 extern void 998 ef10_tx_qstats_update( 999 __in efx_txq_t *etp, 1000 __inout_ecount(TX_NQSTATS) efsys_stat_t *stat); 1001 1002 #endif /* EFSYS_OPT_QSTATS */ 1003 1004 typedef uint32_t efx_piobuf_handle_t; 1005 1006 #define EFX_PIOBUF_HANDLE_INVALID ((efx_piobuf_handle_t)-1) 1007 1008 LIBEFX_INTERNAL 1009 extern __checkReturn efx_rc_t 1010 ef10_nic_pio_alloc( 1011 __inout efx_nic_t *enp, 1012 __out uint32_t *bufnump, 1013 __out efx_piobuf_handle_t *handlep, 1014 __out uint32_t *blknump, 1015 __out uint32_t *offsetp, 1016 __out size_t *sizep); 1017 1018 LIBEFX_INTERNAL 1019 extern __checkReturn efx_rc_t 1020 ef10_nic_pio_free( 1021 __inout efx_nic_t *enp, 1022 __in uint32_t bufnum, 1023 __in uint32_t blknum); 1024 1025 LIBEFX_INTERNAL 1026 extern __checkReturn efx_rc_t 1027 ef10_nic_pio_link( 1028 __inout efx_nic_t *enp, 1029 __in uint32_t vi_index, 1030 __in efx_piobuf_handle_t handle); 1031 1032 LIBEFX_INTERNAL 1033 extern __checkReturn efx_rc_t 1034 ef10_nic_pio_unlink( 1035 __inout efx_nic_t *enp, 1036 __in uint32_t vi_index); 1037 1038 1039 /* VPD */ 1040 1041 #if EFSYS_OPT_VPD 1042 1043 LIBEFX_INTERNAL 1044 extern __checkReturn efx_rc_t 1045 ef10_vpd_init( 1046 __in efx_nic_t *enp); 1047 1048 LIBEFX_INTERNAL 1049 extern __checkReturn efx_rc_t 1050 ef10_vpd_size( 1051 __in efx_nic_t *enp, 1052 __out size_t *sizep); 1053 1054 LIBEFX_INTERNAL 1055 extern __checkReturn efx_rc_t 1056 ef10_vpd_read( 1057 __in efx_nic_t *enp, 1058 __out_bcount(size) caddr_t data, 1059 __in size_t size); 1060 1061 LIBEFX_INTERNAL 1062 extern __checkReturn efx_rc_t 1063 ef10_vpd_verify( 1064 __in efx_nic_t *enp, 1065 __in_bcount(size) caddr_t data, 1066 __in size_t size); 1067 1068 LIBEFX_INTERNAL 1069 extern __checkReturn efx_rc_t 1070 ef10_vpd_reinit( 1071 __in efx_nic_t *enp, 1072 __in_bcount(size) caddr_t data, 1073 __in size_t size); 1074 1075 LIBEFX_INTERNAL 1076 extern __checkReturn efx_rc_t 1077 ef10_vpd_get( 1078 __in efx_nic_t *enp, 1079 __in_bcount(size) caddr_t data, 1080 __in size_t size, 1081 __inout efx_vpd_value_t *evvp); 1082 1083 LIBEFX_INTERNAL 1084 extern __checkReturn efx_rc_t 1085 ef10_vpd_set( 1086 __in efx_nic_t *enp, 1087 __in_bcount(size) caddr_t data, 1088 __in size_t size, 1089 __in efx_vpd_value_t *evvp); 1090 1091 LIBEFX_INTERNAL 1092 extern __checkReturn efx_rc_t 1093 ef10_vpd_next( 1094 __in efx_nic_t *enp, 1095 __in_bcount(size) caddr_t data, 1096 __in size_t size, 1097 __out efx_vpd_value_t *evvp, 1098 __inout unsigned int *contp); 1099 1100 LIBEFX_INTERNAL 1101 extern __checkReturn efx_rc_t 1102 ef10_vpd_write( 1103 __in efx_nic_t *enp, 1104 __in_bcount(size) caddr_t data, 1105 __in size_t size); 1106 1107 LIBEFX_INTERNAL 1108 extern void 1109 ef10_vpd_fini( 1110 __in efx_nic_t *enp); 1111 1112 #endif /* EFSYS_OPT_VPD */ 1113 1114 1115 /* RX */ 1116 1117 LIBEFX_INTERNAL 1118 extern __checkReturn efx_rc_t 1119 ef10_rx_init( 1120 __in efx_nic_t *enp); 1121 1122 #if EFSYS_OPT_RX_SCATTER 1123 LIBEFX_INTERNAL 1124 extern __checkReturn efx_rc_t 1125 ef10_rx_scatter_enable( 1126 __in efx_nic_t *enp, 1127 __in unsigned int buf_size); 1128 #endif /* EFSYS_OPT_RX_SCATTER */ 1129 1130 1131 #if EFSYS_OPT_RX_SCALE 1132 1133 LIBEFX_INTERNAL 1134 extern __checkReturn efx_rc_t 1135 ef10_rx_scale_context_alloc( 1136 __in efx_nic_t *enp, 1137 __in efx_rx_scale_context_type_t type, 1138 __in uint32_t num_queues, 1139 __out uint32_t *rss_contextp); 1140 1141 LIBEFX_INTERNAL 1142 extern __checkReturn efx_rc_t 1143 ef10_rx_scale_context_free( 1144 __in efx_nic_t *enp, 1145 __in uint32_t rss_context); 1146 1147 LIBEFX_INTERNAL 1148 extern __checkReturn efx_rc_t 1149 ef10_rx_scale_mode_set( 1150 __in efx_nic_t *enp, 1151 __in uint32_t rss_context, 1152 __in efx_rx_hash_alg_t alg, 1153 __in efx_rx_hash_type_t type, 1154 __in boolean_t insert); 1155 1156 LIBEFX_INTERNAL 1157 extern __checkReturn efx_rc_t 1158 ef10_rx_scale_key_set( 1159 __in efx_nic_t *enp, 1160 __in uint32_t rss_context, 1161 __in_ecount(n) uint8_t *key, 1162 __in size_t n); 1163 1164 LIBEFX_INTERNAL 1165 extern __checkReturn efx_rc_t 1166 ef10_rx_scale_tbl_set( 1167 __in efx_nic_t *enp, 1168 __in uint32_t rss_context, 1169 __in_ecount(n) unsigned int *table, 1170 __in size_t n); 1171 1172 LIBEFX_INTERNAL 1173 extern __checkReturn uint32_t 1174 ef10_rx_prefix_hash( 1175 __in efx_nic_t *enp, 1176 __in efx_rx_hash_alg_t func, 1177 __in uint8_t *buffer); 1178 1179 #endif /* EFSYS_OPT_RX_SCALE */ 1180 1181 LIBEFX_INTERNAL 1182 extern __checkReturn efx_rc_t 1183 ef10_rx_prefix_pktlen( 1184 __in efx_nic_t *enp, 1185 __in uint8_t *buffer, 1186 __out uint16_t *lengthp); 1187 1188 LIBEFX_INTERNAL 1189 extern void 1190 ef10_rx_qpost( 1191 __in efx_rxq_t *erp, 1192 __in_ecount(ndescs) efsys_dma_addr_t *addrp, 1193 __in size_t size, 1194 __in unsigned int ndescs, 1195 __in unsigned int completed, 1196 __in unsigned int added); 1197 1198 LIBEFX_INTERNAL 1199 extern void 1200 ef10_rx_qpush( 1201 __in efx_rxq_t *erp, 1202 __in unsigned int added, 1203 __inout unsigned int *pushedp); 1204 1205 LIBEFX_INTERNAL 1206 extern __checkReturn efx_rc_t 1207 ef10_rx_qflush( 1208 __in efx_rxq_t *erp); 1209 1210 LIBEFX_INTERNAL 1211 extern void 1212 ef10_rx_qenable( 1213 __in efx_rxq_t *erp); 1214 1215 union efx_rxq_type_data_u; 1216 1217 LIBEFX_INTERNAL 1218 extern __checkReturn efx_rc_t 1219 ef10_rx_qcreate( 1220 __in efx_nic_t *enp, 1221 __in unsigned int index, 1222 __in unsigned int label, 1223 __in efx_rxq_type_t type, 1224 __in_opt const union efx_rxq_type_data_u *type_data, 1225 __in efsys_mem_t *esmp, 1226 __in size_t ndescs, 1227 __in uint32_t id, 1228 __in unsigned int flags, 1229 __in efx_evq_t *eep, 1230 __in efx_rxq_t *erp); 1231 1232 LIBEFX_INTERNAL 1233 extern void 1234 ef10_rx_qdestroy( 1235 __in efx_rxq_t *erp); 1236 1237 LIBEFX_INTERNAL 1238 extern void 1239 ef10_rx_fini( 1240 __in efx_nic_t *enp); 1241 1242 #if EFSYS_OPT_FILTER 1243 1244 enum efx_filter_replacement_policy_e; 1245 1246 typedef struct ef10_filter_handle_s { 1247 uint32_t efh_lo; 1248 uint32_t efh_hi; 1249 } ef10_filter_handle_t; 1250 1251 typedef struct ef10_filter_entry_s { 1252 uintptr_t efe_spec; /* pointer to filter spec plus busy bit */ 1253 ef10_filter_handle_t efe_handle; 1254 } ef10_filter_entry_t; 1255 1256 /* 1257 * BUSY flag indicates that an update is in progress. 1258 * AUTO_OLD flag is used to mark and sweep MAC packet filters. 1259 */ 1260 #define EFX_EF10_FILTER_FLAG_BUSY 1U 1261 #define EFX_EF10_FILTER_FLAG_AUTO_OLD 2U 1262 #define EFX_EF10_FILTER_FLAGS 3U 1263 1264 /* 1265 * Size of the hash table used by the driver. Doesn't need to be the 1266 * same size as the hardware's table. 1267 */ 1268 #define EFX_EF10_FILTER_TBL_ROWS 8192 1269 1270 /* Only need to allow for one directed and one unknown unicast filter */ 1271 #define EFX_EF10_FILTER_UNICAST_FILTERS_MAX 2 1272 1273 /* Allow for the broadcast address to be added to the multicast list */ 1274 #define EFX_EF10_FILTER_MULTICAST_FILTERS_MAX (EFX_MAC_MULTICAST_LIST_MAX + 1) 1275 1276 /* 1277 * For encapsulated packets, there is one filter each for each combination of 1278 * IPv4 or IPv6 outer frame, VXLAN, GENEVE or NVGRE packet type, and unicast or 1279 * multicast inner frames. 1280 */ 1281 #define EFX_EF10_FILTER_ENCAP_FILTERS_MAX 12 1282 1283 typedef struct ef10_filter_table_s { 1284 ef10_filter_entry_t eft_entry[EFX_EF10_FILTER_TBL_ROWS]; 1285 efx_rxq_t *eft_default_rxq; 1286 boolean_t eft_using_rss; 1287 uint32_t eft_unicst_filter_indexes[ 1288 EFX_EF10_FILTER_UNICAST_FILTERS_MAX]; 1289 uint32_t eft_unicst_filter_count; 1290 uint32_t eft_mulcst_filter_indexes[ 1291 EFX_EF10_FILTER_MULTICAST_FILTERS_MAX]; 1292 uint32_t eft_mulcst_filter_count; 1293 boolean_t eft_using_all_mulcst; 1294 uint32_t eft_encap_filter_indexes[ 1295 EFX_EF10_FILTER_ENCAP_FILTERS_MAX]; 1296 uint32_t eft_encap_filter_count; 1297 } ef10_filter_table_t; 1298 1299 LIBEFX_INTERNAL 1300 extern __checkReturn efx_rc_t 1301 ef10_filter_init( 1302 __in efx_nic_t *enp); 1303 1304 LIBEFX_INTERNAL 1305 extern void 1306 ef10_filter_fini( 1307 __in efx_nic_t *enp); 1308 1309 LIBEFX_INTERNAL 1310 extern __checkReturn efx_rc_t 1311 ef10_filter_restore( 1312 __in efx_nic_t *enp); 1313 1314 LIBEFX_INTERNAL 1315 extern __checkReturn efx_rc_t 1316 ef10_filter_add( 1317 __in efx_nic_t *enp, 1318 __inout efx_filter_spec_t *spec, 1319 __in enum efx_filter_replacement_policy_e policy); 1320 1321 LIBEFX_INTERNAL 1322 extern __checkReturn efx_rc_t 1323 ef10_filter_delete( 1324 __in efx_nic_t *enp, 1325 __inout efx_filter_spec_t *spec); 1326 1327 LIBEFX_INTERNAL 1328 extern __checkReturn efx_rc_t 1329 ef10_filter_supported_filters( 1330 __in efx_nic_t *enp, 1331 __out_ecount(buffer_length) uint32_t *buffer, 1332 __in size_t buffer_length, 1333 __out size_t *list_lengthp); 1334 1335 LIBEFX_INTERNAL 1336 extern __checkReturn efx_rc_t 1337 ef10_filter_reconfigure( 1338 __in efx_nic_t *enp, 1339 __in_ecount(6) uint8_t const *mac_addr, 1340 __in boolean_t all_unicst, 1341 __in boolean_t mulcst, 1342 __in boolean_t all_mulcst, 1343 __in boolean_t brdcst, 1344 __in_ecount(6*count) uint8_t const *addrs, 1345 __in uint32_t count); 1346 1347 LIBEFX_INTERNAL 1348 extern void 1349 ef10_filter_get_default_rxq( 1350 __in efx_nic_t *enp, 1351 __out efx_rxq_t **erpp, 1352 __out boolean_t *using_rss); 1353 1354 LIBEFX_INTERNAL 1355 extern void 1356 ef10_filter_default_rxq_set( 1357 __in efx_nic_t *enp, 1358 __in efx_rxq_t *erp, 1359 __in boolean_t using_rss); 1360 1361 LIBEFX_INTERNAL 1362 extern void 1363 ef10_filter_default_rxq_clear( 1364 __in efx_nic_t *enp); 1365 1366 1367 #endif /* EFSYS_OPT_FILTER */ 1368 1369 LIBEFX_INTERNAL 1370 extern __checkReturn efx_rc_t 1371 efx_mcdi_get_function_info( 1372 __in efx_nic_t *enp, 1373 __out uint32_t *pfp, 1374 __out_opt uint32_t *vfp); 1375 1376 LIBEFX_INTERNAL 1377 extern __checkReturn efx_rc_t 1378 efx_mcdi_privilege_mask( 1379 __in efx_nic_t *enp, 1380 __in uint32_t pf, 1381 __in uint32_t vf, 1382 __out uint32_t *maskp); 1383 1384 LIBEFX_INTERNAL 1385 extern __checkReturn efx_rc_t 1386 efx_mcdi_get_port_assignment( 1387 __in efx_nic_t *enp, 1388 __out uint32_t *portp); 1389 1390 LIBEFX_INTERNAL 1391 extern __checkReturn efx_rc_t 1392 efx_mcdi_get_port_modes( 1393 __in efx_nic_t *enp, 1394 __out uint32_t *modesp, 1395 __out_opt uint32_t *current_modep, 1396 __out_opt uint32_t *default_modep); 1397 1398 LIBEFX_INTERNAL 1399 extern __checkReturn efx_rc_t 1400 ef10_nic_get_port_mode_bandwidth( 1401 __in efx_nic_t *enp, 1402 __out uint32_t *bandwidth_mbpsp); 1403 1404 LIBEFX_INTERNAL 1405 extern __checkReturn efx_rc_t 1406 efx_mcdi_get_mac_address_pf( 1407 __in efx_nic_t *enp, 1408 __out_ecount_opt(6) uint8_t mac_addrp[6]); 1409 1410 LIBEFX_INTERNAL 1411 extern __checkReturn efx_rc_t 1412 efx_mcdi_get_mac_address_vf( 1413 __in efx_nic_t *enp, 1414 __out_ecount_opt(6) uint8_t mac_addrp[6]); 1415 1416 LIBEFX_INTERNAL 1417 extern __checkReturn efx_rc_t 1418 efx_mcdi_get_clock( 1419 __in efx_nic_t *enp, 1420 __out uint32_t *sys_freqp, 1421 __out uint32_t *dpcpu_freqp); 1422 1423 1424 LIBEFX_INTERNAL 1425 extern __checkReturn efx_rc_t 1426 efx_mcdi_get_rxdp_config( 1427 __in efx_nic_t *enp, 1428 __out uint32_t *end_paddingp); 1429 1430 LIBEFX_INTERNAL 1431 extern __checkReturn efx_rc_t 1432 efx_mcdi_get_vector_cfg( 1433 __in efx_nic_t *enp, 1434 __out_opt uint32_t *vec_basep, 1435 __out_opt uint32_t *pf_nvecp, 1436 __out_opt uint32_t *vf_nvecp); 1437 1438 LIBEFX_INTERNAL 1439 extern __checkReturn efx_rc_t 1440 efx_mcdi_alloc_vis( 1441 __in efx_nic_t *enp, 1442 __in uint32_t min_vi_count, 1443 __in uint32_t max_vi_count, 1444 __out uint32_t *vi_basep, 1445 __out uint32_t *vi_countp, 1446 __out uint32_t *vi_shiftp); 1447 1448 LIBEFX_INTERNAL 1449 extern __checkReturn efx_rc_t 1450 efx_mcdi_free_vis( 1451 __in efx_nic_t *enp); 1452 1453 LIBEFX_INTERNAL 1454 extern __checkReturn efx_rc_t 1455 ef10_get_privilege_mask( 1456 __in efx_nic_t *enp, 1457 __out uint32_t *maskp); 1458 1459 LIBEFX_INTERNAL 1460 extern __checkReturn efx_rc_t 1461 efx_mcdi_nic_board_cfg( 1462 __in efx_nic_t *enp); 1463 1464 LIBEFX_INTERNAL 1465 extern __checkReturn efx_rc_t 1466 efx_mcdi_entity_reset( 1467 __in efx_nic_t *enp); 1468 1469 #if EFSYS_OPT_FW_SUBVARIANT_AWARE 1470 1471 LIBEFX_INTERNAL 1472 extern __checkReturn efx_rc_t 1473 efx_mcdi_get_nic_global( 1474 __in efx_nic_t *enp, 1475 __in uint32_t key, 1476 __out uint32_t *valuep); 1477 1478 LIBEFX_INTERNAL 1479 extern __checkReturn efx_rc_t 1480 efx_mcdi_set_nic_global( 1481 __in efx_nic_t *enp, 1482 __in uint32_t key, 1483 __in uint32_t value); 1484 1485 #endif /* EFSYS_OPT_FW_SUBVARIANT_AWARE */ 1486 1487 #if EFSYS_OPT_EVB 1488 LIBEFX_INTERNAL 1489 extern __checkReturn efx_rc_t 1490 ef10_evb_init( 1491 __in efx_nic_t *enp); 1492 1493 LIBEFX_INTERNAL 1494 extern void 1495 ef10_evb_fini( 1496 __in efx_nic_t *enp); 1497 1498 LIBEFX_INTERNAL 1499 extern __checkReturn efx_rc_t 1500 ef10_evb_vswitch_alloc( 1501 __in efx_nic_t *enp, 1502 __out efx_vswitch_id_t *vswitch_idp); 1503 1504 1505 LIBEFX_INTERNAL 1506 extern __checkReturn efx_rc_t 1507 ef10_evb_vswitch_free( 1508 __in efx_nic_t *enp, 1509 __in efx_vswitch_id_t vswitch_id); 1510 1511 LIBEFX_INTERNAL 1512 extern __checkReturn efx_rc_t 1513 ef10_evb_vport_alloc( 1514 __in efx_nic_t *enp, 1515 __in efx_vswitch_id_t vswitch_id, 1516 __in efx_vport_type_t vport_type, 1517 __in uint16_t vid, 1518 __in boolean_t vlan_restrict, 1519 __out efx_vport_id_t *vport_idp); 1520 1521 1522 LIBEFX_INTERNAL 1523 extern __checkReturn efx_rc_t 1524 ef10_evb_vport_free( 1525 __in efx_nic_t *enp, 1526 __in efx_vswitch_id_t vswitch_id, 1527 __in efx_vport_id_t vport_id); 1528 1529 LIBEFX_INTERNAL 1530 extern __checkReturn efx_rc_t 1531 ef10_evb_vport_mac_addr_add( 1532 __in efx_nic_t *enp, 1533 __in efx_vswitch_id_t vswitch_id, 1534 __in efx_vport_id_t vport_id, 1535 __in_ecount(6) uint8_t *addrp); 1536 1537 LIBEFX_INTERNAL 1538 extern __checkReturn efx_rc_t 1539 ef10_evb_vport_mac_addr_del( 1540 __in efx_nic_t *enp, 1541 __in efx_vswitch_id_t vswitch_id, 1542 __in efx_vport_id_t vport_id, 1543 __in_ecount(6) uint8_t *addrp); 1544 1545 LIBEFX_INTERNAL 1546 extern __checkReturn efx_rc_t 1547 ef10_evb_vadaptor_alloc( 1548 __in efx_nic_t *enp, 1549 __in efx_vswitch_id_t vswitch_id, 1550 __in efx_vport_id_t vport_id); 1551 1552 1553 LIBEFX_INTERNAL 1554 extern __checkReturn efx_rc_t 1555 ef10_evb_vadaptor_free( 1556 __in efx_nic_t *enp, 1557 __in efx_vswitch_id_t vswitch_id, 1558 __in efx_vport_id_t vport_id); 1559 1560 LIBEFX_INTERNAL 1561 extern __checkReturn efx_rc_t 1562 ef10_evb_vport_assign( 1563 __in efx_nic_t *enp, 1564 __in efx_vswitch_id_t vswitch_id, 1565 __in efx_vport_id_t vport_id, 1566 __in uint32_t vf_index); 1567 1568 LIBEFX_INTERNAL 1569 extern __checkReturn efx_rc_t 1570 ef10_evb_vport_reconfigure( 1571 __in efx_nic_t *enp, 1572 __in efx_vswitch_id_t vswitch_id, 1573 __in efx_vport_id_t vport_id, 1574 __in_opt uint16_t *vidp, 1575 __in_bcount_opt(EFX_MAC_ADDR_LEN) uint8_t *addrp, 1576 __out_opt boolean_t *fn_resetp); 1577 1578 LIBEFX_INTERNAL 1579 extern __checkReturn efx_rc_t 1580 ef10_evb_vport_stats( 1581 __in efx_nic_t *enp, 1582 __in efx_vswitch_id_t vswitch_id, 1583 __in efx_vport_id_t vport_id, 1584 __out efsys_mem_t *esmp); 1585 1586 #endif /* EFSYS_OPT_EVB */ 1587 1588 #if EFSYS_OPT_MCDI_PROXY_AUTH_SERVER 1589 LIBEFX_INTERNAL 1590 extern __checkReturn efx_rc_t 1591 ef10_proxy_auth_init( 1592 __in efx_nic_t *enp); 1593 1594 LIBEFX_INTERNAL 1595 extern void 1596 ef10_proxy_auth_fini( 1597 __in efx_nic_t *enp); 1598 1599 LIBEFX_INTERNAL 1600 extern __checkReturn efx_rc_t 1601 ef10_proxy_auth_mc_config( 1602 __in efx_nic_t *enp, 1603 __in efsys_mem_t *request_bufferp, 1604 __in efsys_mem_t *response_bufferp, 1605 __in efsys_mem_t *status_bufferp, 1606 __in uint32_t block_cnt, 1607 __in_ecount(op_count) uint32_t *op_listp, 1608 __in size_t op_count); 1609 1610 LIBEFX_INTERNAL 1611 extern __checkReturn efx_rc_t 1612 ef10_proxy_auth_disable( 1613 __in efx_nic_t *enp); 1614 1615 LIBEFX_INTERNAL 1616 extern __checkReturn efx_rc_t 1617 ef10_proxy_auth_privilege_modify( 1618 __in efx_nic_t *enp, 1619 __in uint32_t fn_group, 1620 __in uint32_t pf_index, 1621 __in uint32_t vf_index, 1622 __in uint32_t add_privileges_mask, 1623 __in uint32_t remove_privileges_mask); 1624 1625 LIBEFX_INTERNAL 1626 extern __checkReturn efx_rc_t 1627 ef10_proxy_auth_set_privilege_mask( 1628 __in efx_nic_t *enp, 1629 __in uint32_t vf_index, 1630 __in uint32_t mask, 1631 __in uint32_t value); 1632 1633 LIBEFX_INTERNAL 1634 extern __checkReturn efx_rc_t 1635 ef10_proxy_auth_complete_request( 1636 __in efx_nic_t *enp, 1637 __in uint32_t fn_index, 1638 __in uint32_t proxy_result, 1639 __in uint32_t handle); 1640 1641 LIBEFX_INTERNAL 1642 extern __checkReturn efx_rc_t 1643 ef10_proxy_auth_exec_cmd( 1644 __in efx_nic_t *enp, 1645 __inout efx_proxy_cmd_params_t *paramsp); 1646 1647 LIBEFX_INTERNAL 1648 extern __checkReturn efx_rc_t 1649 ef10_proxy_auth_get_privilege_mask( 1650 __in efx_nic_t *enp, 1651 __in uint32_t pf_index, 1652 __in uint32_t vf_index, 1653 __out uint32_t *maskp); 1654 1655 #endif /* EFSYS_OPT_MCDI_PROXY_AUTH_SERVER */ 1656 1657 #if EFSYS_OPT_RX_PACKED_STREAM 1658 1659 /* Data space per credit in packed stream mode */ 1660 #define EFX_RX_PACKED_STREAM_MEM_PER_CREDIT (1 << 16) 1661 1662 /* 1663 * Received packets are always aligned at this boundary. Also there always 1664 * exists a gap of this size between packets. 1665 * (see SF-112241-TC, 4.5) 1666 */ 1667 #define EFX_RX_PACKED_STREAM_ALIGNMENT 64 1668 1669 /* 1670 * Size of a pseudo-header prepended to received packets 1671 * in packed stream mode 1672 */ 1673 #define EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE 8 1674 1675 /* Minimum space for packet in packed stream mode */ 1676 #define EFX_RX_PACKED_STREAM_MIN_PACKET_SPACE \ 1677 EFX_P2ROUNDUP(size_t, \ 1678 EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE + \ 1679 EFX_MAC_PDU_MIN + \ 1680 EFX_RX_PACKED_STREAM_ALIGNMENT, \ 1681 EFX_RX_PACKED_STREAM_ALIGNMENT) 1682 1683 /* Maximum number of credits */ 1684 #define EFX_RX_PACKED_STREAM_MAX_CREDITS 127 1685 1686 #endif /* EFSYS_OPT_RX_PACKED_STREAM */ 1687 1688 #if EFSYS_OPT_RX_ES_SUPER_BUFFER 1689 1690 /* 1691 * Maximum DMA length and buffer stride alignment. 1692 * (see SF-119419-TC, 3.2) 1693 */ 1694 #define EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT 64 1695 1696 #endif 1697 1698 #ifdef __cplusplus 1699 } 1700 #endif 1701 1702 #endif /* _SYS_EF10_IMPL_H */ 1703