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