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 __in uint32_t table_nentries, 1141 __out uint32_t *rss_contextp); 1142 1143 LIBEFX_INTERNAL 1144 extern __checkReturn efx_rc_t 1145 ef10_rx_scale_context_free( 1146 __in efx_nic_t *enp, 1147 __in uint32_t rss_context); 1148 1149 LIBEFX_INTERNAL 1150 extern __checkReturn efx_rc_t 1151 ef10_rx_scale_mode_set( 1152 __in efx_nic_t *enp, 1153 __in uint32_t rss_context, 1154 __in efx_rx_hash_alg_t alg, 1155 __in efx_rx_hash_type_t type, 1156 __in boolean_t insert); 1157 1158 LIBEFX_INTERNAL 1159 extern __checkReturn efx_rc_t 1160 ef10_rx_scale_key_set( 1161 __in efx_nic_t *enp, 1162 __in uint32_t rss_context, 1163 __in_ecount(n) uint8_t *key, 1164 __in size_t n); 1165 1166 LIBEFX_INTERNAL 1167 extern __checkReturn efx_rc_t 1168 ef10_rx_scale_tbl_set( 1169 __in efx_nic_t *enp, 1170 __in uint32_t rss_context, 1171 __in_ecount(nentries) unsigned int *table, 1172 __in size_t nentries); 1173 1174 LIBEFX_INTERNAL 1175 extern __checkReturn uint32_t 1176 ef10_rx_prefix_hash( 1177 __in efx_nic_t *enp, 1178 __in efx_rx_hash_alg_t func, 1179 __in uint8_t *buffer); 1180 1181 #endif /* EFSYS_OPT_RX_SCALE */ 1182 1183 LIBEFX_INTERNAL 1184 extern __checkReturn efx_rc_t 1185 ef10_rx_prefix_pktlen( 1186 __in efx_nic_t *enp, 1187 __in uint8_t *buffer, 1188 __out uint16_t *lengthp); 1189 1190 LIBEFX_INTERNAL 1191 extern void 1192 ef10_rx_qpost( 1193 __in efx_rxq_t *erp, 1194 __in_ecount(ndescs) efsys_dma_addr_t *addrp, 1195 __in size_t size, 1196 __in unsigned int ndescs, 1197 __in unsigned int completed, 1198 __in unsigned int added); 1199 1200 LIBEFX_INTERNAL 1201 extern void 1202 ef10_rx_qpush( 1203 __in efx_rxq_t *erp, 1204 __in unsigned int added, 1205 __inout unsigned int *pushedp); 1206 1207 LIBEFX_INTERNAL 1208 extern __checkReturn efx_rc_t 1209 ef10_rx_qflush( 1210 __in efx_rxq_t *erp); 1211 1212 LIBEFX_INTERNAL 1213 extern void 1214 ef10_rx_qenable( 1215 __in efx_rxq_t *erp); 1216 1217 union efx_rxq_type_data_u; 1218 1219 LIBEFX_INTERNAL 1220 extern __checkReturn efx_rc_t 1221 ef10_rx_qcreate( 1222 __in efx_nic_t *enp, 1223 __in unsigned int index, 1224 __in unsigned int label, 1225 __in efx_rxq_type_t type, 1226 __in_opt const union efx_rxq_type_data_u *type_data, 1227 __in efsys_mem_t *esmp, 1228 __in size_t ndescs, 1229 __in uint32_t id, 1230 __in unsigned int flags, 1231 __in efx_evq_t *eep, 1232 __in efx_rxq_t *erp); 1233 1234 LIBEFX_INTERNAL 1235 extern void 1236 ef10_rx_qdestroy( 1237 __in efx_rxq_t *erp); 1238 1239 LIBEFX_INTERNAL 1240 extern void 1241 ef10_rx_fini( 1242 __in efx_nic_t *enp); 1243 1244 #if EFSYS_OPT_FILTER 1245 1246 enum efx_filter_replacement_policy_e; 1247 1248 typedef struct ef10_filter_handle_s { 1249 uint32_t efh_lo; 1250 uint32_t efh_hi; 1251 } ef10_filter_handle_t; 1252 1253 typedef struct ef10_filter_entry_s { 1254 uintptr_t efe_spec; /* pointer to filter spec plus busy bit */ 1255 ef10_filter_handle_t efe_handle; 1256 } ef10_filter_entry_t; 1257 1258 /* 1259 * BUSY flag indicates that an update is in progress. 1260 * AUTO_OLD flag is used to mark and sweep MAC packet filters. 1261 */ 1262 #define EFX_EF10_FILTER_FLAG_BUSY 1U 1263 #define EFX_EF10_FILTER_FLAG_AUTO_OLD 2U 1264 #define EFX_EF10_FILTER_FLAGS 3U 1265 1266 /* 1267 * Size of the hash table used by the driver. Doesn't need to be the 1268 * same size as the hardware's table. 1269 */ 1270 #define EFX_EF10_FILTER_TBL_ROWS 8192 1271 1272 /* Only need to allow for one directed and one unknown unicast filter */ 1273 #define EFX_EF10_FILTER_UNICAST_FILTERS_MAX 2 1274 1275 /* Allow for the broadcast address to be added to the multicast list */ 1276 #define EFX_EF10_FILTER_MULTICAST_FILTERS_MAX (EFX_MAC_MULTICAST_LIST_MAX + 1) 1277 1278 /* 1279 * For encapsulated packets, there is one filter each for each combination of 1280 * IPv4 or IPv6 outer frame, VXLAN, GENEVE or NVGRE packet type, and unicast or 1281 * multicast inner frames. 1282 */ 1283 #define EFX_EF10_FILTER_ENCAP_FILTERS_MAX 12 1284 1285 typedef struct ef10_filter_table_s { 1286 ef10_filter_entry_t eft_entry[EFX_EF10_FILTER_TBL_ROWS]; 1287 efx_rxq_t *eft_default_rxq; 1288 boolean_t eft_using_rss; 1289 uint32_t eft_unicst_filter_indexes[ 1290 EFX_EF10_FILTER_UNICAST_FILTERS_MAX]; 1291 uint32_t eft_unicst_filter_count; 1292 uint32_t eft_mulcst_filter_indexes[ 1293 EFX_EF10_FILTER_MULTICAST_FILTERS_MAX]; 1294 uint32_t eft_mulcst_filter_count; 1295 boolean_t eft_using_all_mulcst; 1296 uint32_t eft_encap_filter_indexes[ 1297 EFX_EF10_FILTER_ENCAP_FILTERS_MAX]; 1298 uint32_t eft_encap_filter_count; 1299 } ef10_filter_table_t; 1300 1301 LIBEFX_INTERNAL 1302 extern __checkReturn efx_rc_t 1303 ef10_filter_init( 1304 __in efx_nic_t *enp); 1305 1306 LIBEFX_INTERNAL 1307 extern void 1308 ef10_filter_fini( 1309 __in efx_nic_t *enp); 1310 1311 LIBEFX_INTERNAL 1312 extern __checkReturn efx_rc_t 1313 ef10_filter_restore( 1314 __in efx_nic_t *enp); 1315 1316 LIBEFX_INTERNAL 1317 extern __checkReturn efx_rc_t 1318 ef10_filter_add( 1319 __in efx_nic_t *enp, 1320 __inout efx_filter_spec_t *spec, 1321 __in enum efx_filter_replacement_policy_e policy); 1322 1323 LIBEFX_INTERNAL 1324 extern __checkReturn efx_rc_t 1325 ef10_filter_delete( 1326 __in efx_nic_t *enp, 1327 __inout efx_filter_spec_t *spec); 1328 1329 LIBEFX_INTERNAL 1330 extern __checkReturn efx_rc_t 1331 ef10_filter_supported_filters( 1332 __in efx_nic_t *enp, 1333 __out_ecount(buffer_length) uint32_t *buffer, 1334 __in size_t buffer_length, 1335 __out size_t *list_lengthp); 1336 1337 LIBEFX_INTERNAL 1338 extern __checkReturn efx_rc_t 1339 ef10_filter_reconfigure( 1340 __in efx_nic_t *enp, 1341 __in_ecount(6) uint8_t const *mac_addr, 1342 __in boolean_t all_unicst, 1343 __in boolean_t mulcst, 1344 __in boolean_t all_mulcst, 1345 __in boolean_t brdcst, 1346 __in_ecount(6*count) uint8_t const *addrs, 1347 __in uint32_t count); 1348 1349 LIBEFX_INTERNAL 1350 extern void 1351 ef10_filter_get_default_rxq( 1352 __in efx_nic_t *enp, 1353 __out efx_rxq_t **erpp, 1354 __out boolean_t *using_rss); 1355 1356 LIBEFX_INTERNAL 1357 extern void 1358 ef10_filter_default_rxq_set( 1359 __in efx_nic_t *enp, 1360 __in efx_rxq_t *erp, 1361 __in boolean_t using_rss); 1362 1363 LIBEFX_INTERNAL 1364 extern void 1365 ef10_filter_default_rxq_clear( 1366 __in efx_nic_t *enp); 1367 1368 1369 #endif /* EFSYS_OPT_FILTER */ 1370 1371 LIBEFX_INTERNAL 1372 extern __checkReturn efx_rc_t 1373 efx_mcdi_get_function_info( 1374 __in efx_nic_t *enp, 1375 __out uint32_t *pfp, 1376 __out_opt uint32_t *vfp, 1377 __out_opt efx_pcie_interface_t *intfp); 1378 1379 LIBEFX_INTERNAL 1380 extern __checkReturn efx_rc_t 1381 efx_mcdi_privilege_mask( 1382 __in efx_nic_t *enp, 1383 __in uint32_t pf, 1384 __in uint32_t vf, 1385 __out uint32_t *maskp); 1386 1387 LIBEFX_INTERNAL 1388 extern __checkReturn efx_rc_t 1389 efx_mcdi_get_port_assignment( 1390 __in efx_nic_t *enp, 1391 __out uint32_t *portp); 1392 1393 LIBEFX_INTERNAL 1394 extern __checkReturn efx_rc_t 1395 efx_mcdi_get_port_modes( 1396 __in efx_nic_t *enp, 1397 __out uint32_t *modesp, 1398 __out_opt uint32_t *current_modep, 1399 __out_opt uint32_t *default_modep); 1400 1401 LIBEFX_INTERNAL 1402 extern __checkReturn efx_rc_t 1403 ef10_nic_get_port_mode_bandwidth( 1404 __in efx_nic_t *enp, 1405 __out uint32_t *bandwidth_mbpsp); 1406 1407 LIBEFX_INTERNAL 1408 extern __checkReturn efx_rc_t 1409 efx_mcdi_get_mac_address_pf( 1410 __in efx_nic_t *enp, 1411 __out_ecount_opt(6) uint8_t mac_addrp[6]); 1412 1413 LIBEFX_INTERNAL 1414 extern __checkReturn efx_rc_t 1415 efx_mcdi_get_mac_address_vf( 1416 __in efx_nic_t *enp, 1417 __out_ecount_opt(6) uint8_t mac_addrp[6]); 1418 1419 LIBEFX_INTERNAL 1420 extern __checkReturn efx_rc_t 1421 efx_mcdi_get_clock( 1422 __in efx_nic_t *enp, 1423 __out uint32_t *sys_freqp, 1424 __out uint32_t *dpcpu_freqp); 1425 1426 1427 LIBEFX_INTERNAL 1428 extern __checkReturn efx_rc_t 1429 efx_mcdi_get_rxdp_config( 1430 __in efx_nic_t *enp, 1431 __out uint32_t *end_paddingp); 1432 1433 LIBEFX_INTERNAL 1434 extern __checkReturn efx_rc_t 1435 efx_mcdi_get_vector_cfg( 1436 __in efx_nic_t *enp, 1437 __out_opt uint32_t *vec_basep, 1438 __out_opt uint32_t *pf_nvecp, 1439 __out_opt uint32_t *vf_nvecp); 1440 1441 LIBEFX_INTERNAL 1442 extern __checkReturn efx_rc_t 1443 efx_mcdi_alloc_vis( 1444 __in efx_nic_t *enp, 1445 __in uint32_t min_vi_count, 1446 __in uint32_t max_vi_count, 1447 __out uint32_t *vi_basep, 1448 __out uint32_t *vi_countp, 1449 __out uint32_t *vi_shiftp); 1450 1451 LIBEFX_INTERNAL 1452 extern __checkReturn efx_rc_t 1453 efx_mcdi_free_vis( 1454 __in efx_nic_t *enp); 1455 1456 LIBEFX_INTERNAL 1457 extern __checkReturn efx_rc_t 1458 ef10_get_privilege_mask( 1459 __in efx_nic_t *enp, 1460 __out uint32_t *maskp); 1461 1462 LIBEFX_INTERNAL 1463 extern __checkReturn efx_rc_t 1464 efx_mcdi_nic_board_cfg( 1465 __in efx_nic_t *enp); 1466 1467 LIBEFX_INTERNAL 1468 extern __checkReturn efx_rc_t 1469 efx_mcdi_entity_reset( 1470 __in efx_nic_t *enp); 1471 1472 #if EFSYS_OPT_FW_SUBVARIANT_AWARE 1473 1474 LIBEFX_INTERNAL 1475 extern __checkReturn efx_rc_t 1476 efx_mcdi_get_nic_global( 1477 __in efx_nic_t *enp, 1478 __in uint32_t key, 1479 __out uint32_t *valuep); 1480 1481 LIBEFX_INTERNAL 1482 extern __checkReturn efx_rc_t 1483 efx_mcdi_set_nic_global( 1484 __in efx_nic_t *enp, 1485 __in uint32_t key, 1486 __in uint32_t value); 1487 1488 #endif /* EFSYS_OPT_FW_SUBVARIANT_AWARE */ 1489 1490 #if EFSYS_OPT_EVB 1491 LIBEFX_INTERNAL 1492 extern __checkReturn efx_rc_t 1493 ef10_evb_init( 1494 __in efx_nic_t *enp); 1495 1496 LIBEFX_INTERNAL 1497 extern void 1498 ef10_evb_fini( 1499 __in efx_nic_t *enp); 1500 1501 LIBEFX_INTERNAL 1502 extern __checkReturn efx_rc_t 1503 ef10_evb_vswitch_alloc( 1504 __in efx_nic_t *enp, 1505 __out efx_vswitch_id_t *vswitch_idp); 1506 1507 1508 LIBEFX_INTERNAL 1509 extern __checkReturn efx_rc_t 1510 ef10_evb_vswitch_free( 1511 __in efx_nic_t *enp, 1512 __in efx_vswitch_id_t vswitch_id); 1513 1514 LIBEFX_INTERNAL 1515 extern __checkReturn efx_rc_t 1516 ef10_evb_vport_alloc( 1517 __in efx_nic_t *enp, 1518 __in efx_vswitch_id_t vswitch_id, 1519 __in efx_vport_type_t vport_type, 1520 __in uint16_t vid, 1521 __in boolean_t vlan_restrict, 1522 __out efx_vport_id_t *vport_idp); 1523 1524 1525 LIBEFX_INTERNAL 1526 extern __checkReturn efx_rc_t 1527 ef10_evb_vport_free( 1528 __in efx_nic_t *enp, 1529 __in efx_vswitch_id_t vswitch_id, 1530 __in efx_vport_id_t vport_id); 1531 1532 LIBEFX_INTERNAL 1533 extern __checkReturn efx_rc_t 1534 ef10_evb_vport_mac_addr_add( 1535 __in efx_nic_t *enp, 1536 __in efx_vswitch_id_t vswitch_id, 1537 __in efx_vport_id_t vport_id, 1538 __in_ecount(6) uint8_t *addrp); 1539 1540 LIBEFX_INTERNAL 1541 extern __checkReturn efx_rc_t 1542 ef10_evb_vport_mac_addr_del( 1543 __in efx_nic_t *enp, 1544 __in efx_vswitch_id_t vswitch_id, 1545 __in efx_vport_id_t vport_id, 1546 __in_ecount(6) uint8_t *addrp); 1547 1548 LIBEFX_INTERNAL 1549 extern __checkReturn efx_rc_t 1550 ef10_evb_vadaptor_alloc( 1551 __in efx_nic_t *enp, 1552 __in efx_vswitch_id_t vswitch_id, 1553 __in efx_vport_id_t vport_id); 1554 1555 1556 LIBEFX_INTERNAL 1557 extern __checkReturn efx_rc_t 1558 ef10_evb_vadaptor_free( 1559 __in efx_nic_t *enp, 1560 __in efx_vswitch_id_t vswitch_id, 1561 __in efx_vport_id_t vport_id); 1562 1563 LIBEFX_INTERNAL 1564 extern __checkReturn efx_rc_t 1565 ef10_evb_vport_assign( 1566 __in efx_nic_t *enp, 1567 __in efx_vswitch_id_t vswitch_id, 1568 __in efx_vport_id_t vport_id, 1569 __in uint32_t vf_index); 1570 1571 LIBEFX_INTERNAL 1572 extern __checkReturn efx_rc_t 1573 ef10_evb_vport_reconfigure( 1574 __in efx_nic_t *enp, 1575 __in efx_vswitch_id_t vswitch_id, 1576 __in efx_vport_id_t vport_id, 1577 __in_opt uint16_t *vidp, 1578 __in_bcount_opt(EFX_MAC_ADDR_LEN) uint8_t *addrp, 1579 __out_opt boolean_t *fn_resetp); 1580 1581 LIBEFX_INTERNAL 1582 extern __checkReturn efx_rc_t 1583 ef10_evb_vport_stats( 1584 __in efx_nic_t *enp, 1585 __in efx_vswitch_id_t vswitch_id, 1586 __in efx_vport_id_t vport_id, 1587 __out efsys_mem_t *esmp); 1588 1589 #endif /* EFSYS_OPT_EVB */ 1590 1591 #if EFSYS_OPT_MCDI_PROXY_AUTH_SERVER 1592 LIBEFX_INTERNAL 1593 extern __checkReturn efx_rc_t 1594 ef10_proxy_auth_init( 1595 __in efx_nic_t *enp); 1596 1597 LIBEFX_INTERNAL 1598 extern void 1599 ef10_proxy_auth_fini( 1600 __in efx_nic_t *enp); 1601 1602 LIBEFX_INTERNAL 1603 extern __checkReturn efx_rc_t 1604 ef10_proxy_auth_mc_config( 1605 __in efx_nic_t *enp, 1606 __in efsys_mem_t *request_bufferp, 1607 __in efsys_mem_t *response_bufferp, 1608 __in efsys_mem_t *status_bufferp, 1609 __in uint32_t block_cnt, 1610 __in_ecount(op_count) uint32_t *op_listp, 1611 __in size_t op_count); 1612 1613 LIBEFX_INTERNAL 1614 extern __checkReturn efx_rc_t 1615 ef10_proxy_auth_disable( 1616 __in efx_nic_t *enp); 1617 1618 LIBEFX_INTERNAL 1619 extern __checkReturn efx_rc_t 1620 ef10_proxy_auth_privilege_modify( 1621 __in efx_nic_t *enp, 1622 __in uint32_t fn_group, 1623 __in uint32_t pf_index, 1624 __in uint32_t vf_index, 1625 __in uint32_t add_privileges_mask, 1626 __in uint32_t remove_privileges_mask); 1627 1628 LIBEFX_INTERNAL 1629 extern __checkReturn efx_rc_t 1630 ef10_proxy_auth_set_privilege_mask( 1631 __in efx_nic_t *enp, 1632 __in uint32_t vf_index, 1633 __in uint32_t mask, 1634 __in uint32_t value); 1635 1636 LIBEFX_INTERNAL 1637 extern __checkReturn efx_rc_t 1638 ef10_proxy_auth_complete_request( 1639 __in efx_nic_t *enp, 1640 __in uint32_t fn_index, 1641 __in uint32_t proxy_result, 1642 __in uint32_t handle); 1643 1644 LIBEFX_INTERNAL 1645 extern __checkReturn efx_rc_t 1646 ef10_proxy_auth_exec_cmd( 1647 __in efx_nic_t *enp, 1648 __inout efx_proxy_cmd_params_t *paramsp); 1649 1650 LIBEFX_INTERNAL 1651 extern __checkReturn efx_rc_t 1652 ef10_proxy_auth_get_privilege_mask( 1653 __in efx_nic_t *enp, 1654 __in uint32_t pf_index, 1655 __in uint32_t vf_index, 1656 __out uint32_t *maskp); 1657 1658 #endif /* EFSYS_OPT_MCDI_PROXY_AUTH_SERVER */ 1659 1660 #if EFSYS_OPT_RX_PACKED_STREAM 1661 1662 /* Data space per credit in packed stream mode */ 1663 #define EFX_RX_PACKED_STREAM_MEM_PER_CREDIT (1 << 16) 1664 1665 /* 1666 * Received packets are always aligned at this boundary. Also there always 1667 * exists a gap of this size between packets. 1668 * (see SF-112241-TC, 4.5) 1669 */ 1670 #define EFX_RX_PACKED_STREAM_ALIGNMENT 64 1671 1672 /* 1673 * Size of a pseudo-header prepended to received packets 1674 * in packed stream mode 1675 */ 1676 #define EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE 8 1677 1678 /* Minimum space for packet in packed stream mode */ 1679 #define EFX_RX_PACKED_STREAM_MIN_PACKET_SPACE \ 1680 EFX_P2ROUNDUP(size_t, \ 1681 EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE + \ 1682 EFX_MAC_PDU_MIN + \ 1683 EFX_RX_PACKED_STREAM_ALIGNMENT, \ 1684 EFX_RX_PACKED_STREAM_ALIGNMENT) 1685 1686 /* Maximum number of credits */ 1687 #define EFX_RX_PACKED_STREAM_MAX_CREDITS 127 1688 1689 #endif /* EFSYS_OPT_RX_PACKED_STREAM */ 1690 1691 #if EFSYS_OPT_RX_ES_SUPER_BUFFER 1692 1693 /* 1694 * Maximum DMA length and buffer stride alignment. 1695 * (see SF-119419-TC, 3.2) 1696 */ 1697 #define EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT 64 1698 1699 #endif 1700 1701 #ifdef __cplusplus 1702 } 1703 #endif 1704 1705 #endif /* _SYS_EF10_IMPL_H */ 1706