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 __in boolean_t ev_is_v2, 757 __out efx_link_mode_t *link_modep); 758 759 LIBEFX_INTERNAL 760 extern __checkReturn efx_rc_t 761 ef10_phy_get_link( 762 __in efx_nic_t *enp, 763 __out ef10_link_state_t *elsp); 764 765 LIBEFX_INTERNAL 766 extern __checkReturn efx_rc_t 767 ef10_phy_power( 768 __in efx_nic_t *enp, 769 __in boolean_t on); 770 771 LIBEFX_INTERNAL 772 extern __checkReturn efx_rc_t 773 ef10_phy_reconfigure( 774 __in efx_nic_t *enp); 775 776 LIBEFX_INTERNAL 777 extern __checkReturn efx_rc_t 778 ef10_phy_verify( 779 __in efx_nic_t *enp); 780 781 LIBEFX_INTERNAL 782 extern __checkReturn efx_rc_t 783 ef10_phy_oui_get( 784 __in efx_nic_t *enp, 785 __out uint32_t *ouip); 786 787 LIBEFX_INTERNAL 788 extern __checkReturn efx_rc_t 789 ef10_phy_link_state_get( 790 __in efx_nic_t *enp, 791 __out efx_phy_link_state_t *eplsp); 792 793 #if EFSYS_OPT_PHY_STATS 794 795 LIBEFX_INTERNAL 796 extern __checkReturn efx_rc_t 797 ef10_phy_stats_update( 798 __in efx_nic_t *enp, 799 __in efsys_mem_t *esmp, 800 __inout_ecount(EFX_PHY_NSTATS) uint32_t *stat); 801 802 #endif /* EFSYS_OPT_PHY_STATS */ 803 804 #if EFSYS_OPT_BIST 805 806 LIBEFX_INTERNAL 807 extern __checkReturn efx_rc_t 808 ef10_bist_enable_offline( 809 __in efx_nic_t *enp); 810 811 LIBEFX_INTERNAL 812 extern __checkReturn efx_rc_t 813 ef10_bist_start( 814 __in efx_nic_t *enp, 815 __in efx_bist_type_t type); 816 817 LIBEFX_INTERNAL 818 extern __checkReturn efx_rc_t 819 ef10_bist_poll( 820 __in efx_nic_t *enp, 821 __in efx_bist_type_t type, 822 __out efx_bist_result_t *resultp, 823 __out_opt __drv_when(count > 0, __notnull) 824 uint32_t *value_maskp, 825 __out_ecount_opt(count) __drv_when(count > 0, __notnull) 826 unsigned long *valuesp, 827 __in size_t count); 828 829 LIBEFX_INTERNAL 830 extern void 831 ef10_bist_stop( 832 __in efx_nic_t *enp, 833 __in efx_bist_type_t type); 834 835 #endif /* EFSYS_OPT_BIST */ 836 837 /* TX */ 838 839 LIBEFX_INTERNAL 840 extern __checkReturn efx_rc_t 841 ef10_tx_init( 842 __in efx_nic_t *enp); 843 844 LIBEFX_INTERNAL 845 extern void 846 ef10_tx_fini( 847 __in efx_nic_t *enp); 848 849 LIBEFX_INTERNAL 850 extern __checkReturn efx_rc_t 851 ef10_tx_qcreate( 852 __in efx_nic_t *enp, 853 __in unsigned int index, 854 __in unsigned int label, 855 __in efsys_mem_t *esmp, 856 __in size_t ndescs, 857 __in uint32_t id, 858 __in uint16_t flags, 859 __in efx_evq_t *eep, 860 __in efx_txq_t *etp, 861 __out unsigned int *addedp); 862 863 LIBEFX_INTERNAL 864 extern void 865 ef10_tx_qdestroy( 866 __in efx_txq_t *etp); 867 868 LIBEFX_INTERNAL 869 extern __checkReturn efx_rc_t 870 ef10_tx_qpost( 871 __in efx_txq_t *etp, 872 __in_ecount(ndescs) efx_buffer_t *ebp, 873 __in unsigned int ndescs, 874 __in unsigned int completed, 875 __inout unsigned int *addedp); 876 877 LIBEFX_INTERNAL 878 extern void 879 ef10_tx_qpush( 880 __in efx_txq_t *etp, 881 __in unsigned int added, 882 __in unsigned int pushed); 883 884 #if EFSYS_OPT_RX_PACKED_STREAM 885 LIBEFX_INTERNAL 886 extern void 887 ef10_rx_qpush_ps_credits( 888 __in efx_rxq_t *erp); 889 890 LIBEFX_INTERNAL 891 extern __checkReturn uint8_t * 892 ef10_rx_qps_packet_info( 893 __in efx_rxq_t *erp, 894 __in uint8_t *buffer, 895 __in uint32_t buffer_length, 896 __in uint32_t current_offset, 897 __out uint16_t *lengthp, 898 __out uint32_t *next_offsetp, 899 __out uint32_t *timestamp); 900 #endif 901 902 LIBEFX_INTERNAL 903 extern __checkReturn efx_rc_t 904 ef10_tx_qpace( 905 __in efx_txq_t *etp, 906 __in unsigned int ns); 907 908 LIBEFX_INTERNAL 909 extern __checkReturn efx_rc_t 910 ef10_tx_qflush( 911 __in efx_txq_t *etp); 912 913 LIBEFX_INTERNAL 914 extern void 915 ef10_tx_qenable( 916 __in efx_txq_t *etp); 917 918 LIBEFX_INTERNAL 919 extern __checkReturn efx_rc_t 920 ef10_tx_qpio_enable( 921 __in efx_txq_t *etp); 922 923 LIBEFX_INTERNAL 924 extern void 925 ef10_tx_qpio_disable( 926 __in efx_txq_t *etp); 927 928 LIBEFX_INTERNAL 929 extern __checkReturn efx_rc_t 930 ef10_tx_qpio_write( 931 __in efx_txq_t *etp, 932 __in_ecount(buf_length) uint8_t *buffer, 933 __in size_t buf_length, 934 __in size_t pio_buf_offset); 935 936 LIBEFX_INTERNAL 937 extern __checkReturn efx_rc_t 938 ef10_tx_qpio_post( 939 __in efx_txq_t *etp, 940 __in size_t pkt_length, 941 __in unsigned int completed, 942 __inout unsigned int *addedp); 943 944 LIBEFX_INTERNAL 945 extern __checkReturn efx_rc_t 946 ef10_tx_qdesc_post( 947 __in efx_txq_t *etp, 948 __in_ecount(n) efx_desc_t *ed, 949 __in unsigned int n, 950 __in unsigned int completed, 951 __inout unsigned int *addedp); 952 953 LIBEFX_INTERNAL 954 extern void 955 ef10_tx_qdesc_dma_create( 956 __in efx_txq_t *etp, 957 __in efsys_dma_addr_t addr, 958 __in size_t size, 959 __in boolean_t eop, 960 __out efx_desc_t *edp); 961 962 LIBEFX_INTERNAL 963 extern void 964 ef10_tx_qdesc_tso_create( 965 __in efx_txq_t *etp, 966 __in uint16_t ipv4_id, 967 __in uint32_t tcp_seq, 968 __in uint8_t tcp_flags, 969 __out efx_desc_t *edp); 970 971 LIBEFX_INTERNAL 972 extern void 973 ef10_tx_qdesc_tso2_create( 974 __in efx_txq_t *etp, 975 __in uint16_t ipv4_id, 976 __in uint16_t outer_ipv4_id, 977 __in uint32_t tcp_seq, 978 __in uint16_t tcp_mss, 979 __out_ecount(count) efx_desc_t *edp, 980 __in int count); 981 982 LIBEFX_INTERNAL 983 extern void 984 ef10_tx_qdesc_vlantci_create( 985 __in efx_txq_t *etp, 986 __in uint16_t vlan_tci, 987 __out efx_desc_t *edp); 988 989 LIBEFX_INTERNAL 990 extern void 991 ef10_tx_qdesc_checksum_create( 992 __in efx_txq_t *etp, 993 __in uint16_t flags, 994 __out efx_desc_t *edp); 995 996 #if EFSYS_OPT_QSTATS 997 998 LIBEFX_INTERNAL 999 extern void 1000 ef10_tx_qstats_update( 1001 __in efx_txq_t *etp, 1002 __inout_ecount(TX_NQSTATS) efsys_stat_t *stat); 1003 1004 #endif /* EFSYS_OPT_QSTATS */ 1005 1006 typedef uint32_t efx_piobuf_handle_t; 1007 1008 #define EFX_PIOBUF_HANDLE_INVALID ((efx_piobuf_handle_t)-1) 1009 1010 LIBEFX_INTERNAL 1011 extern __checkReturn efx_rc_t 1012 ef10_nic_pio_alloc( 1013 __inout efx_nic_t *enp, 1014 __out uint32_t *bufnump, 1015 __out efx_piobuf_handle_t *handlep, 1016 __out uint32_t *blknump, 1017 __out uint32_t *offsetp, 1018 __out size_t *sizep); 1019 1020 LIBEFX_INTERNAL 1021 extern __checkReturn efx_rc_t 1022 ef10_nic_pio_free( 1023 __inout efx_nic_t *enp, 1024 __in uint32_t bufnum, 1025 __in uint32_t blknum); 1026 1027 LIBEFX_INTERNAL 1028 extern __checkReturn efx_rc_t 1029 ef10_nic_pio_link( 1030 __inout efx_nic_t *enp, 1031 __in uint32_t vi_index, 1032 __in efx_piobuf_handle_t handle); 1033 1034 LIBEFX_INTERNAL 1035 extern __checkReturn efx_rc_t 1036 ef10_nic_pio_unlink( 1037 __inout efx_nic_t *enp, 1038 __in uint32_t vi_index); 1039 1040 1041 /* VPD */ 1042 1043 #if EFSYS_OPT_VPD 1044 1045 LIBEFX_INTERNAL 1046 extern __checkReturn efx_rc_t 1047 ef10_vpd_init( 1048 __in efx_nic_t *enp); 1049 1050 LIBEFX_INTERNAL 1051 extern __checkReturn efx_rc_t 1052 ef10_vpd_size( 1053 __in efx_nic_t *enp, 1054 __out size_t *sizep); 1055 1056 LIBEFX_INTERNAL 1057 extern __checkReturn efx_rc_t 1058 ef10_vpd_read( 1059 __in efx_nic_t *enp, 1060 __out_bcount(size) caddr_t data, 1061 __in size_t size); 1062 1063 LIBEFX_INTERNAL 1064 extern __checkReturn efx_rc_t 1065 ef10_vpd_verify( 1066 __in efx_nic_t *enp, 1067 __in_bcount(size) caddr_t data, 1068 __in size_t size); 1069 1070 LIBEFX_INTERNAL 1071 extern __checkReturn efx_rc_t 1072 ef10_vpd_reinit( 1073 __in efx_nic_t *enp, 1074 __in_bcount(size) caddr_t data, 1075 __in size_t size); 1076 1077 LIBEFX_INTERNAL 1078 extern __checkReturn efx_rc_t 1079 ef10_vpd_get( 1080 __in efx_nic_t *enp, 1081 __in_bcount(size) caddr_t data, 1082 __in size_t size, 1083 __inout efx_vpd_value_t *evvp); 1084 1085 LIBEFX_INTERNAL 1086 extern __checkReturn efx_rc_t 1087 ef10_vpd_set( 1088 __in efx_nic_t *enp, 1089 __in_bcount(size) caddr_t data, 1090 __in size_t size, 1091 __in efx_vpd_value_t *evvp); 1092 1093 LIBEFX_INTERNAL 1094 extern __checkReturn efx_rc_t 1095 ef10_vpd_next( 1096 __in efx_nic_t *enp, 1097 __in_bcount(size) caddr_t data, 1098 __in size_t size, 1099 __out efx_vpd_value_t *evvp, 1100 __inout unsigned int *contp); 1101 1102 LIBEFX_INTERNAL 1103 extern __checkReturn efx_rc_t 1104 ef10_vpd_write( 1105 __in efx_nic_t *enp, 1106 __in_bcount(size) caddr_t data, 1107 __in size_t size); 1108 1109 LIBEFX_INTERNAL 1110 extern void 1111 ef10_vpd_fini( 1112 __in efx_nic_t *enp); 1113 1114 #endif /* EFSYS_OPT_VPD */ 1115 1116 1117 /* RX */ 1118 1119 LIBEFX_INTERNAL 1120 extern __checkReturn efx_rc_t 1121 ef10_rx_init( 1122 __in efx_nic_t *enp); 1123 1124 #if EFSYS_OPT_RX_SCATTER 1125 LIBEFX_INTERNAL 1126 extern __checkReturn efx_rc_t 1127 ef10_rx_scatter_enable( 1128 __in efx_nic_t *enp, 1129 __in unsigned int buf_size); 1130 #endif /* EFSYS_OPT_RX_SCATTER */ 1131 1132 1133 #if EFSYS_OPT_RX_SCALE 1134 1135 LIBEFX_INTERNAL 1136 extern __checkReturn efx_rc_t 1137 ef10_rx_scale_context_alloc( 1138 __in efx_nic_t *enp, 1139 __in efx_rx_scale_context_type_t type, 1140 __in uint32_t num_queues, 1141 __in uint32_t table_nentries, 1142 __out uint32_t *rss_contextp); 1143 1144 LIBEFX_INTERNAL 1145 extern __checkReturn efx_rc_t 1146 ef10_rx_scale_context_free( 1147 __in efx_nic_t *enp, 1148 __in uint32_t rss_context); 1149 1150 LIBEFX_INTERNAL 1151 extern __checkReturn efx_rc_t 1152 ef10_rx_scale_mode_set( 1153 __in efx_nic_t *enp, 1154 __in uint32_t rss_context, 1155 __in efx_rx_hash_alg_t alg, 1156 __in efx_rx_hash_type_t type, 1157 __in boolean_t insert); 1158 1159 LIBEFX_INTERNAL 1160 extern __checkReturn efx_rc_t 1161 ef10_rx_scale_key_set( 1162 __in efx_nic_t *enp, 1163 __in uint32_t rss_context, 1164 __in_ecount(n) uint8_t *key, 1165 __in size_t n); 1166 1167 LIBEFX_INTERNAL 1168 extern __checkReturn efx_rc_t 1169 ef10_rx_scale_tbl_set( 1170 __in efx_nic_t *enp, 1171 __in uint32_t rss_context, 1172 __in_ecount(nentries) unsigned int *table, 1173 __in size_t nentries); 1174 1175 LIBEFX_INTERNAL 1176 extern __checkReturn uint32_t 1177 ef10_rx_prefix_hash( 1178 __in efx_nic_t *enp, 1179 __in efx_rx_hash_alg_t func, 1180 __in uint8_t *buffer); 1181 1182 #endif /* EFSYS_OPT_RX_SCALE */ 1183 1184 LIBEFX_INTERNAL 1185 extern __checkReturn efx_rc_t 1186 ef10_rx_prefix_pktlen( 1187 __in efx_nic_t *enp, 1188 __in uint8_t *buffer, 1189 __out uint16_t *lengthp); 1190 1191 LIBEFX_INTERNAL 1192 extern void 1193 ef10_rx_qpost( 1194 __in efx_rxq_t *erp, 1195 __in_ecount(ndescs) efsys_dma_addr_t *addrp, 1196 __in size_t size, 1197 __in unsigned int ndescs, 1198 __in unsigned int completed, 1199 __in unsigned int added); 1200 1201 LIBEFX_INTERNAL 1202 extern void 1203 ef10_rx_qpush( 1204 __in efx_rxq_t *erp, 1205 __in unsigned int added, 1206 __inout unsigned int *pushedp); 1207 1208 LIBEFX_INTERNAL 1209 extern __checkReturn efx_rc_t 1210 ef10_rx_qflush( 1211 __in efx_rxq_t *erp); 1212 1213 LIBEFX_INTERNAL 1214 extern void 1215 ef10_rx_qenable( 1216 __in efx_rxq_t *erp); 1217 1218 union efx_rxq_type_data_u; 1219 1220 LIBEFX_INTERNAL 1221 extern __checkReturn efx_rc_t 1222 ef10_rx_qcreate( 1223 __in efx_nic_t *enp, 1224 __in unsigned int index, 1225 __in unsigned int label, 1226 __in efx_rxq_type_t type, 1227 __in_opt const union efx_rxq_type_data_u *type_data, 1228 __in efsys_mem_t *esmp, 1229 __in size_t ndescs, 1230 __in uint32_t id, 1231 __in unsigned int flags, 1232 __in efx_evq_t *eep, 1233 __in efx_rxq_t *erp); 1234 1235 LIBEFX_INTERNAL 1236 extern void 1237 ef10_rx_qdestroy( 1238 __in efx_rxq_t *erp); 1239 1240 LIBEFX_INTERNAL 1241 extern void 1242 ef10_rx_fini( 1243 __in efx_nic_t *enp); 1244 1245 #if EFSYS_OPT_FILTER 1246 1247 enum efx_filter_replacement_policy_e; 1248 1249 typedef struct ef10_filter_handle_s { 1250 uint32_t efh_lo; 1251 uint32_t efh_hi; 1252 } ef10_filter_handle_t; 1253 1254 typedef struct ef10_filter_entry_s { 1255 uintptr_t efe_spec; /* pointer to filter spec plus busy bit */ 1256 ef10_filter_handle_t efe_handle; 1257 } ef10_filter_entry_t; 1258 1259 /* 1260 * BUSY flag indicates that an update is in progress. 1261 * AUTO_OLD flag is used to mark and sweep MAC packet filters. 1262 */ 1263 #define EFX_EF10_FILTER_FLAG_BUSY 1U 1264 #define EFX_EF10_FILTER_FLAG_AUTO_OLD 2U 1265 #define EFX_EF10_FILTER_FLAGS 3U 1266 1267 /* 1268 * Size of the hash table used by the driver. Doesn't need to be the 1269 * same size as the hardware's table. 1270 */ 1271 #define EFX_EF10_FILTER_TBL_ROWS 8192 1272 1273 /* Only need to allow for one directed and one unknown unicast filter */ 1274 #define EFX_EF10_FILTER_UNICAST_FILTERS_MAX 2 1275 1276 /* Allow for the broadcast address to be added to the multicast list */ 1277 #define EFX_EF10_FILTER_MULTICAST_FILTERS_MAX (EFX_MAC_MULTICAST_LIST_MAX + 1) 1278 1279 /* 1280 * For encapsulated packets, there is one filter each for each combination of 1281 * IPv4 or IPv6 outer frame, VXLAN, GENEVE or NVGRE packet type, and unicast or 1282 * multicast inner frames. 1283 */ 1284 #define EFX_EF10_FILTER_ENCAP_FILTERS_MAX 12 1285 1286 typedef struct ef10_filter_table_s { 1287 ef10_filter_entry_t eft_entry[EFX_EF10_FILTER_TBL_ROWS]; 1288 efx_rxq_t *eft_default_rxq; 1289 boolean_t eft_using_rss; 1290 uint32_t eft_unicst_filter_indexes[ 1291 EFX_EF10_FILTER_UNICAST_FILTERS_MAX]; 1292 uint32_t eft_unicst_filter_count; 1293 uint32_t eft_mulcst_filter_indexes[ 1294 EFX_EF10_FILTER_MULTICAST_FILTERS_MAX]; 1295 uint32_t eft_mulcst_filter_count; 1296 boolean_t eft_using_all_mulcst; 1297 uint32_t eft_encap_filter_indexes[ 1298 EFX_EF10_FILTER_ENCAP_FILTERS_MAX]; 1299 uint32_t eft_encap_filter_count; 1300 } ef10_filter_table_t; 1301 1302 LIBEFX_INTERNAL 1303 extern __checkReturn efx_rc_t 1304 ef10_filter_init( 1305 __in efx_nic_t *enp); 1306 1307 LIBEFX_INTERNAL 1308 extern void 1309 ef10_filter_fini( 1310 __in efx_nic_t *enp); 1311 1312 LIBEFX_INTERNAL 1313 extern __checkReturn efx_rc_t 1314 ef10_filter_restore( 1315 __in efx_nic_t *enp); 1316 1317 LIBEFX_INTERNAL 1318 extern __checkReturn efx_rc_t 1319 ef10_filter_add( 1320 __in efx_nic_t *enp, 1321 __inout efx_filter_spec_t *spec, 1322 __in enum efx_filter_replacement_policy_e policy); 1323 1324 LIBEFX_INTERNAL 1325 extern __checkReturn efx_rc_t 1326 ef10_filter_delete( 1327 __in efx_nic_t *enp, 1328 __inout efx_filter_spec_t *spec); 1329 1330 LIBEFX_INTERNAL 1331 extern __checkReturn efx_rc_t 1332 ef10_filter_supported_filters( 1333 __in efx_nic_t *enp, 1334 __out_ecount(buffer_length) uint32_t *buffer, 1335 __in size_t buffer_length, 1336 __out size_t *list_lengthp); 1337 1338 LIBEFX_INTERNAL 1339 extern __checkReturn efx_rc_t 1340 ef10_filter_reconfigure( 1341 __in efx_nic_t *enp, 1342 __in_ecount(6) uint8_t const *mac_addr, 1343 __in boolean_t all_unicst, 1344 __in boolean_t mulcst, 1345 __in boolean_t all_mulcst, 1346 __in boolean_t brdcst, 1347 __in_ecount(6*count) uint8_t const *addrs, 1348 __in uint32_t count); 1349 1350 LIBEFX_INTERNAL 1351 extern __checkReturn efx_rc_t 1352 ef10_filter_get_count( 1353 __in efx_nic_t *enp, 1354 __out uint32_t *countp); 1355 1356 LIBEFX_INTERNAL 1357 extern void 1358 ef10_filter_get_default_rxq( 1359 __in efx_nic_t *enp, 1360 __out efx_rxq_t **erpp, 1361 __out boolean_t *using_rss); 1362 1363 LIBEFX_INTERNAL 1364 extern void 1365 ef10_filter_default_rxq_set( 1366 __in efx_nic_t *enp, 1367 __in efx_rxq_t *erp, 1368 __in boolean_t using_rss); 1369 1370 LIBEFX_INTERNAL 1371 extern void 1372 ef10_filter_default_rxq_clear( 1373 __in efx_nic_t *enp); 1374 1375 1376 #endif /* EFSYS_OPT_FILTER */ 1377 1378 LIBEFX_INTERNAL 1379 extern __checkReturn efx_rc_t 1380 efx_mcdi_get_function_info( 1381 __in efx_nic_t *enp, 1382 __out uint32_t *pfp, 1383 __out_opt uint32_t *vfp, 1384 __out_opt efx_pcie_interface_t *intfp); 1385 1386 LIBEFX_INTERNAL 1387 extern __checkReturn efx_rc_t 1388 efx_mcdi_privilege_mask( 1389 __in efx_nic_t *enp, 1390 __in uint32_t pf, 1391 __in uint32_t vf, 1392 __out uint32_t *maskp); 1393 1394 LIBEFX_INTERNAL 1395 extern __checkReturn efx_rc_t 1396 efx_mcdi_get_port_assignment( 1397 __in efx_nic_t *enp, 1398 __out uint32_t *portp); 1399 1400 LIBEFX_INTERNAL 1401 extern __checkReturn efx_rc_t 1402 efx_mcdi_get_port_modes( 1403 __in efx_nic_t *enp, 1404 __out uint32_t *modesp, 1405 __out_opt uint32_t *current_modep, 1406 __out_opt uint32_t *default_modep); 1407 1408 LIBEFX_INTERNAL 1409 extern __checkReturn efx_rc_t 1410 ef10_nic_get_port_mode_bandwidth( 1411 __in efx_nic_t *enp, 1412 __out uint32_t *bandwidth_mbpsp); 1413 1414 LIBEFX_INTERNAL 1415 extern __checkReturn efx_rc_t 1416 efx_mcdi_get_mac_address_pf( 1417 __in efx_nic_t *enp, 1418 __out_ecount_opt(6) uint8_t mac_addrp[6]); 1419 1420 LIBEFX_INTERNAL 1421 extern __checkReturn efx_rc_t 1422 efx_mcdi_get_mac_address_vf( 1423 __in efx_nic_t *enp, 1424 __out_ecount_opt(6) uint8_t mac_addrp[6]); 1425 1426 LIBEFX_INTERNAL 1427 extern __checkReturn efx_rc_t 1428 efx_mcdi_get_clock( 1429 __in efx_nic_t *enp, 1430 __out uint32_t *sys_freqp, 1431 __out uint32_t *dpcpu_freqp); 1432 1433 1434 LIBEFX_INTERNAL 1435 extern __checkReturn efx_rc_t 1436 efx_mcdi_get_rxdp_config( 1437 __in efx_nic_t *enp, 1438 __out uint32_t *end_paddingp); 1439 1440 LIBEFX_INTERNAL 1441 extern __checkReturn efx_rc_t 1442 efx_mcdi_get_vector_cfg( 1443 __in efx_nic_t *enp, 1444 __out_opt uint32_t *vec_basep, 1445 __out_opt uint32_t *pf_nvecp, 1446 __out_opt uint32_t *vf_nvecp); 1447 1448 LIBEFX_INTERNAL 1449 extern __checkReturn efx_rc_t 1450 efx_mcdi_alloc_vis( 1451 __in efx_nic_t *enp, 1452 __in uint32_t min_vi_count, 1453 __in uint32_t max_vi_count, 1454 __out uint32_t *vi_basep, 1455 __out uint32_t *vi_countp, 1456 __out uint32_t *vi_shiftp); 1457 1458 LIBEFX_INTERNAL 1459 extern __checkReturn efx_rc_t 1460 efx_mcdi_free_vis( 1461 __in efx_nic_t *enp); 1462 1463 LIBEFX_INTERNAL 1464 extern __checkReturn efx_rc_t 1465 ef10_get_privilege_mask( 1466 __in efx_nic_t *enp, 1467 __out uint32_t *maskp); 1468 1469 LIBEFX_INTERNAL 1470 extern __checkReturn efx_rc_t 1471 efx_mcdi_nic_board_cfg( 1472 __in efx_nic_t *enp); 1473 1474 LIBEFX_INTERNAL 1475 extern __checkReturn efx_rc_t 1476 efx_mcdi_entity_reset( 1477 __in efx_nic_t *enp); 1478 1479 #if EFSYS_OPT_FW_SUBVARIANT_AWARE 1480 1481 LIBEFX_INTERNAL 1482 extern __checkReturn efx_rc_t 1483 efx_mcdi_get_nic_global( 1484 __in efx_nic_t *enp, 1485 __in uint32_t key, 1486 __out uint32_t *valuep); 1487 1488 LIBEFX_INTERNAL 1489 extern __checkReturn efx_rc_t 1490 efx_mcdi_set_nic_global( 1491 __in efx_nic_t *enp, 1492 __in uint32_t key, 1493 __in uint32_t value); 1494 1495 #endif /* EFSYS_OPT_FW_SUBVARIANT_AWARE */ 1496 1497 #if EFSYS_OPT_EVB 1498 LIBEFX_INTERNAL 1499 extern __checkReturn efx_rc_t 1500 ef10_evb_init( 1501 __in efx_nic_t *enp); 1502 1503 LIBEFX_INTERNAL 1504 extern void 1505 ef10_evb_fini( 1506 __in efx_nic_t *enp); 1507 1508 LIBEFX_INTERNAL 1509 extern __checkReturn efx_rc_t 1510 ef10_evb_vswitch_alloc( 1511 __in efx_nic_t *enp, 1512 __out efx_vswitch_id_t *vswitch_idp); 1513 1514 1515 LIBEFX_INTERNAL 1516 extern __checkReturn efx_rc_t 1517 ef10_evb_vswitch_free( 1518 __in efx_nic_t *enp, 1519 __in efx_vswitch_id_t vswitch_id); 1520 1521 LIBEFX_INTERNAL 1522 extern __checkReturn efx_rc_t 1523 ef10_evb_vport_alloc( 1524 __in efx_nic_t *enp, 1525 __in efx_vswitch_id_t vswitch_id, 1526 __in efx_vport_type_t vport_type, 1527 __in uint16_t vid, 1528 __in boolean_t vlan_restrict, 1529 __out efx_vport_id_t *vport_idp); 1530 1531 1532 LIBEFX_INTERNAL 1533 extern __checkReturn efx_rc_t 1534 ef10_evb_vport_free( 1535 __in efx_nic_t *enp, 1536 __in efx_vswitch_id_t vswitch_id, 1537 __in efx_vport_id_t vport_id); 1538 1539 LIBEFX_INTERNAL 1540 extern __checkReturn efx_rc_t 1541 ef10_evb_vport_mac_addr_add( 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_vport_mac_addr_del( 1550 __in efx_nic_t *enp, 1551 __in efx_vswitch_id_t vswitch_id, 1552 __in efx_vport_id_t vport_id, 1553 __in_ecount(6) uint8_t *addrp); 1554 1555 LIBEFX_INTERNAL 1556 extern __checkReturn efx_rc_t 1557 ef10_evb_vadaptor_alloc( 1558 __in efx_nic_t *enp, 1559 __in efx_vswitch_id_t vswitch_id, 1560 __in efx_vport_id_t vport_id); 1561 1562 1563 LIBEFX_INTERNAL 1564 extern __checkReturn efx_rc_t 1565 ef10_evb_vadaptor_free( 1566 __in efx_nic_t *enp, 1567 __in efx_vswitch_id_t vswitch_id, 1568 __in efx_vport_id_t vport_id); 1569 1570 LIBEFX_INTERNAL 1571 extern __checkReturn efx_rc_t 1572 ef10_evb_vport_assign( 1573 __in efx_nic_t *enp, 1574 __in efx_vswitch_id_t vswitch_id, 1575 __in efx_vport_id_t vport_id, 1576 __in uint32_t vf_index); 1577 1578 LIBEFX_INTERNAL 1579 extern __checkReturn efx_rc_t 1580 ef10_evb_vport_reconfigure( 1581 __in efx_nic_t *enp, 1582 __in efx_vswitch_id_t vswitch_id, 1583 __in efx_vport_id_t vport_id, 1584 __in_opt uint16_t *vidp, 1585 __in_bcount_opt(EFX_MAC_ADDR_LEN) uint8_t *addrp, 1586 __out_opt boolean_t *fn_resetp); 1587 1588 LIBEFX_INTERNAL 1589 extern __checkReturn efx_rc_t 1590 ef10_evb_vport_stats( 1591 __in efx_nic_t *enp, 1592 __in efx_vswitch_id_t vswitch_id, 1593 __in efx_vport_id_t vport_id, 1594 __out efsys_mem_t *esmp); 1595 1596 #endif /* EFSYS_OPT_EVB */ 1597 1598 #if EFSYS_OPT_MCDI_PROXY_AUTH_SERVER 1599 LIBEFX_INTERNAL 1600 extern __checkReturn efx_rc_t 1601 ef10_proxy_auth_init( 1602 __in efx_nic_t *enp); 1603 1604 LIBEFX_INTERNAL 1605 extern void 1606 ef10_proxy_auth_fini( 1607 __in efx_nic_t *enp); 1608 1609 LIBEFX_INTERNAL 1610 extern __checkReturn efx_rc_t 1611 ef10_proxy_auth_mc_config( 1612 __in efx_nic_t *enp, 1613 __in efsys_mem_t *request_bufferp, 1614 __in efsys_mem_t *response_bufferp, 1615 __in efsys_mem_t *status_bufferp, 1616 __in uint32_t block_cnt, 1617 __in_ecount(op_count) uint32_t *op_listp, 1618 __in size_t op_count); 1619 1620 LIBEFX_INTERNAL 1621 extern __checkReturn efx_rc_t 1622 ef10_proxy_auth_disable( 1623 __in efx_nic_t *enp); 1624 1625 LIBEFX_INTERNAL 1626 extern __checkReturn efx_rc_t 1627 ef10_proxy_auth_privilege_modify( 1628 __in efx_nic_t *enp, 1629 __in uint32_t fn_group, 1630 __in uint32_t pf_index, 1631 __in uint32_t vf_index, 1632 __in uint32_t add_privileges_mask, 1633 __in uint32_t remove_privileges_mask); 1634 1635 LIBEFX_INTERNAL 1636 extern __checkReturn efx_rc_t 1637 ef10_proxy_auth_set_privilege_mask( 1638 __in efx_nic_t *enp, 1639 __in uint32_t vf_index, 1640 __in uint32_t mask, 1641 __in uint32_t value); 1642 1643 LIBEFX_INTERNAL 1644 extern __checkReturn efx_rc_t 1645 ef10_proxy_auth_complete_request( 1646 __in efx_nic_t *enp, 1647 __in uint32_t fn_index, 1648 __in uint32_t proxy_result, 1649 __in uint32_t handle); 1650 1651 LIBEFX_INTERNAL 1652 extern __checkReturn efx_rc_t 1653 ef10_proxy_auth_exec_cmd( 1654 __in efx_nic_t *enp, 1655 __inout efx_proxy_cmd_params_t *paramsp); 1656 1657 LIBEFX_INTERNAL 1658 extern __checkReturn efx_rc_t 1659 ef10_proxy_auth_get_privilege_mask( 1660 __in efx_nic_t *enp, 1661 __in uint32_t pf_index, 1662 __in uint32_t vf_index, 1663 __out uint32_t *maskp); 1664 1665 #endif /* EFSYS_OPT_MCDI_PROXY_AUTH_SERVER */ 1666 1667 #if EFSYS_OPT_RX_PACKED_STREAM 1668 1669 /* Data space per credit in packed stream mode */ 1670 #define EFX_RX_PACKED_STREAM_MEM_PER_CREDIT (1 << 16) 1671 1672 /* 1673 * Received packets are always aligned at this boundary. Also there always 1674 * exists a gap of this size between packets. 1675 * (see SF-112241-TC, 4.5) 1676 */ 1677 #define EFX_RX_PACKED_STREAM_ALIGNMENT 64 1678 1679 /* 1680 * Size of a pseudo-header prepended to received packets 1681 * in packed stream mode 1682 */ 1683 #define EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE 8 1684 1685 /* Minimum space for packet in packed stream mode */ 1686 #define EFX_RX_PACKED_STREAM_MIN_PACKET_SPACE \ 1687 EFX_P2ROUNDUP(size_t, \ 1688 EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE + \ 1689 EFX_MAC_PDU_MIN + \ 1690 EFX_RX_PACKED_STREAM_ALIGNMENT, \ 1691 EFX_RX_PACKED_STREAM_ALIGNMENT) 1692 1693 /* Maximum number of credits */ 1694 #define EFX_RX_PACKED_STREAM_MAX_CREDITS 127 1695 1696 #endif /* EFSYS_OPT_RX_PACKED_STREAM */ 1697 1698 #if EFSYS_OPT_RX_ES_SUPER_BUFFER 1699 1700 /* 1701 * Maximum DMA length and buffer stride alignment. 1702 * (see SF-119419-TC, 3.2) 1703 */ 1704 #define EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT 64 1705 1706 #endif 1707 1708 #ifdef __cplusplus 1709 } 1710 #endif 1711 1712 #endif /* _SYS_EF10_IMPL_H */ 1713