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