1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (c) 2016 - 2018 Cavium Inc. 3 * All rights reserved. 4 * www.cavium.com 5 */ 6 7 #ifndef __ECORE_VF_PF_IF_H__ 8 #define __ECORE_VF_PF_IF_H__ 9 10 /* @@@ TBD MichalK this should be HSI? */ 11 #define T_ETH_INDIRECTION_TABLE_SIZE 128 12 #define T_ETH_RSS_KEY_SIZE 10 /* @@@ TBD this should be HSI? */ 13 14 /*********************************************** 15 * 16 * Common definitions for all HVs 17 * 18 **/ 19 struct vf_pf_resc_request { 20 u8 num_rxqs; 21 u8 num_txqs; 22 u8 num_sbs; 23 u8 num_mac_filters; 24 u8 num_vlan_filters; 25 u8 num_mc_filters; /* No limit so superfluous */ 26 u8 num_cids; 27 u8 padding; 28 }; 29 30 struct hw_sb_info { 31 u16 hw_sb_id; /* aka absolute igu id, used to ack the sb */ 32 u8 sb_qid; /* used to update DHC for sb */ 33 u8 padding[5]; 34 }; 35 36 /*********************************************** 37 * 38 * HW VF-PF channel definitions 39 * 40 * A.K.A VF-PF mailbox 41 * 42 **/ 43 #define TLV_BUFFER_SIZE 1024 44 45 /* vf pf channel tlvs */ 46 /* general tlv header (used for both vf->pf request and pf->vf response) */ 47 struct channel_tlv { 48 u16 type; 49 u16 length; 50 }; 51 52 /* header of first vf->pf tlv carries the offset used to calculate response 53 * buffer address 54 */ 55 struct vfpf_first_tlv { 56 struct channel_tlv tl; 57 u32 padding; 58 u64 reply_address; 59 }; 60 61 /* header of pf->vf tlvs, carries the status of handling the request */ 62 struct pfvf_tlv { 63 struct channel_tlv tl; 64 u8 status; 65 u8 padding[3]; 66 }; 67 68 /* response tlv used for most tlvs */ 69 struct pfvf_def_resp_tlv { 70 struct pfvf_tlv hdr; 71 }; 72 73 /* used to terminate and pad a tlv list */ 74 struct channel_list_end_tlv { 75 struct channel_tlv tl; 76 u8 padding[4]; 77 }; 78 79 /* Acquire */ 80 struct vfpf_acquire_tlv { 81 struct vfpf_first_tlv first_tlv; 82 83 struct vf_pf_vfdev_info { 84 #ifndef LINUX_REMOVE 85 /* First bit was used on 8.7.x and 8.8.x versions, which had different 86 * FWs used but with the same faspath HSI. As this was prior to the 87 * fastpath versioning, wanted to have ability to override fw matching 88 * and allow them to interact. 89 */ 90 #endif 91 /* VF pre-FP hsi version */ 92 #define VFPF_ACQUIRE_CAP_PRE_FP_HSI (1 << 0) 93 #define VFPF_ACQUIRE_CAP_100G (1 << 1) /* VF can support 100g */ 94 95 /* A requirement for supporting multi-Tx queues on a single queue-zone, 96 * VF would pass qids as additional information whenever passing queue 97 * references. 98 * TODO - due to the CID limitations in Bar0, VFs currently don't pass 99 * this, and use the legacy CID scheme. 100 */ 101 #define VFPF_ACQUIRE_CAP_QUEUE_QIDS (1 << 2) 102 103 /* The VF is using the physical bar. While this is mostly internal 104 * to the VF, might affect the number of CIDs supported assuming 105 * QUEUE_QIDS is set. 106 */ 107 #define VFPF_ACQUIRE_CAP_PHYSICAL_BAR (1 << 3) 108 u64 capabilities; 109 u8 fw_major; 110 u8 fw_minor; 111 u8 fw_revision; 112 u8 fw_engineering; 113 u32 driver_version; 114 u16 opaque_fid; /* ME register value */ 115 u8 os_type; /* VFPF_ACQUIRE_OS_* value */ 116 u8 eth_fp_hsi_major; 117 u8 eth_fp_hsi_minor; 118 u8 padding[3]; 119 } vfdev_info; 120 121 struct vf_pf_resc_request resc_request; 122 123 u64 bulletin_addr; 124 u32 bulletin_size; 125 u32 padding; 126 }; 127 128 /* receive side scaling tlv */ 129 struct vfpf_vport_update_rss_tlv { 130 struct channel_tlv tl; 131 132 u8 update_rss_flags; 133 #define VFPF_UPDATE_RSS_CONFIG_FLAG (1 << 0) 134 #define VFPF_UPDATE_RSS_CAPS_FLAG (1 << 1) 135 #define VFPF_UPDATE_RSS_IND_TABLE_FLAG (1 << 2) 136 #define VFPF_UPDATE_RSS_KEY_FLAG (1 << 3) 137 138 u8 rss_enable; 139 u8 rss_caps; 140 u8 rss_table_size_log; /* The table size is 2 ^ rss_table_size_log */ 141 u16 rss_ind_table[T_ETH_INDIRECTION_TABLE_SIZE]; 142 u32 rss_key[T_ETH_RSS_KEY_SIZE]; 143 }; 144 145 struct pfvf_storm_stats { 146 u32 address; 147 u32 len; 148 }; 149 150 struct pfvf_stats_info { 151 struct pfvf_storm_stats mstats; 152 struct pfvf_storm_stats pstats; 153 struct pfvf_storm_stats tstats; 154 struct pfvf_storm_stats ustats; 155 }; 156 157 /* acquire response tlv - carries the allocated resources */ 158 struct pfvf_acquire_resp_tlv { 159 struct pfvf_tlv hdr; 160 161 struct pf_vf_pfdev_info { 162 u32 chip_num; 163 u32 mfw_ver; 164 165 u16 fw_major; 166 u16 fw_minor; 167 u16 fw_rev; 168 u16 fw_eng; 169 170 u64 capabilities; 171 #define PFVF_ACQUIRE_CAP_DEFAULT_UNTAGGED (1 << 0) 172 #define PFVF_ACQUIRE_CAP_100G (1 << 1) /* If set, 100g PF */ 173 /* There are old PF versions where the PF might mistakenly override the sanity 174 * mechanism [version-based] and allow a VF that can't be supported to pass 175 * the acquisition phase. 176 * To overcome this, PFs now indicate that they're past that point and the new 177 * VFs would fail probe on the older PFs that fail to do so. 178 */ 179 #ifndef LINUX_REMOVE 180 /* Said bug was in quest/serpens; Can't be certain no official release included 181 * the bug since the fix arrived very late in the programs. 182 */ 183 #endif 184 #define PFVF_ACQUIRE_CAP_POST_FW_OVERRIDE (1 << 2) 185 186 /* PF expects queues to be received with additional qids */ 187 #define PFVF_ACQUIRE_CAP_QUEUE_QIDS (1 << 3) 188 189 u16 db_size; 190 u8 indices_per_sb; 191 u8 os_type; 192 193 /* These should match the PF's ecore_dev values */ 194 u16 chip_rev; 195 u8 dev_type; 196 197 /* Doorbell bar size configured in HW: log(size) or 0 */ 198 u8 bar_size; 199 200 struct pfvf_stats_info stats_info; 201 202 u8 port_mac[ETH_ALEN]; 203 204 /* It's possible PF had to configure an older fastpath HSI 205 * [in case VF is newer than PF]. This is communicated back 206 * to the VF. It can also be used in case of error due to 207 * non-matching versions to shed light in VF about failure. 208 */ 209 u8 major_fp_hsi; 210 u8 minor_fp_hsi; 211 } pfdev_info; 212 213 struct pf_vf_resc { 214 /* in case of status NO_RESOURCE in message hdr, pf will fill 215 * this struct with suggested amount of resources for next 216 * acquire request 217 */ 218 #define PFVF_MAX_QUEUES_PER_VF 16 219 #define PFVF_MAX_SBS_PER_VF 16 220 struct hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF]; 221 u8 hw_qid[PFVF_MAX_QUEUES_PER_VF]; 222 u8 cid[PFVF_MAX_QUEUES_PER_VF]; 223 224 u8 num_rxqs; 225 u8 num_txqs; 226 u8 num_sbs; 227 u8 num_mac_filters; 228 u8 num_vlan_filters; 229 u8 num_mc_filters; 230 u8 num_cids; 231 u8 padding; 232 } resc; 233 234 u32 bulletin_size; 235 u32 padding; 236 }; 237 238 struct pfvf_start_queue_resp_tlv { 239 struct pfvf_tlv hdr; 240 u32 offset; /* offset to consumer/producer of queue */ 241 u8 padding[4]; 242 }; 243 244 /* Extended queue information - additional index for reference inside qzone. 245 * If commmunicated between VF/PF, each TLV relating to queues should be 246 * extended by one such [or have a future base TLV that already contains info]. 247 */ 248 struct vfpf_qid_tlv { 249 struct channel_tlv tl; 250 u8 qid; 251 u8 padding[3]; 252 }; 253 254 /* Soft FLR req */ 255 struct vfpf_soft_flr_tlv { 256 struct vfpf_first_tlv first_tlv; 257 u32 reserved1; 258 u32 reserved2; 259 }; 260 261 /* Setup Queue */ 262 struct vfpf_start_rxq_tlv { 263 struct vfpf_first_tlv first_tlv; 264 265 /* physical addresses */ 266 u64 rxq_addr; 267 u64 deprecated_sge_addr; 268 u64 cqe_pbl_addr; 269 270 u16 cqe_pbl_size; 271 u16 hw_sb; 272 u16 rx_qid; 273 u16 hc_rate; /* desired interrupts per sec. */ 274 275 u16 bd_max_bytes; 276 u16 stat_id; 277 u8 sb_index; 278 u8 padding[3]; 279 280 }; 281 282 struct vfpf_start_txq_tlv { 283 struct vfpf_first_tlv first_tlv; 284 285 /* physical addresses */ 286 u64 pbl_addr; 287 u16 pbl_size; 288 u16 stat_id; 289 u16 tx_qid; 290 u16 hw_sb; 291 292 u32 flags; /* VFPF_QUEUE_FLG_X flags */ 293 u16 hc_rate; /* desired interrupts per sec. */ 294 u8 sb_index; 295 u8 padding[3]; 296 }; 297 298 /* Stop RX Queue */ 299 struct vfpf_stop_rxqs_tlv { 300 struct vfpf_first_tlv first_tlv; 301 302 u16 rx_qid; 303 304 /* While the API supports multiple Rx-queues on a single TLV 305 * message, in practice older VFs always used it as one [ecore]. 306 * And there are PFs [starting with the CHANNEL_TLV_QID] which 307 * would start assuming this is always a '1'. So in practice this 308 * field should be considered deprecated and *Always* set to '1'. 309 */ 310 u8 num_rxqs; 311 312 u8 cqe_completion; 313 u8 padding[4]; 314 }; 315 316 /* Stop TX Queues */ 317 struct vfpf_stop_txqs_tlv { 318 struct vfpf_first_tlv first_tlv; 319 320 u16 tx_qid; 321 322 /* While the API supports multiple Tx-queues on a single TLV 323 * message, in practice older VFs always used it as one [ecore]. 324 * And there are PFs [starting with the CHANNEL_TLV_QID] which 325 * would start assuming this is always a '1'. So in practice this 326 * field should be considered deprecated and *Always* set to '1'. 327 */ 328 u8 num_txqs; 329 u8 padding[5]; 330 }; 331 332 struct vfpf_update_rxq_tlv { 333 struct vfpf_first_tlv first_tlv; 334 335 u64 deprecated_sge_addr[PFVF_MAX_QUEUES_PER_VF]; 336 337 u16 rx_qid; 338 u8 num_rxqs; 339 u8 flags; 340 #define VFPF_RXQ_UPD_INIT_SGE_DEPRECATE_FLAG (1 << 0) 341 #define VFPF_RXQ_UPD_COMPLETE_CQE_FLAG (1 << 1) 342 #define VFPF_RXQ_UPD_COMPLETE_EVENT_FLAG (1 << 2) 343 344 u8 padding[4]; 345 }; 346 347 /* Set Queue Filters */ 348 struct vfpf_q_mac_vlan_filter { 349 u32 flags; 350 #define VFPF_Q_FILTER_DEST_MAC_VALID 0x01 351 #define VFPF_Q_FILTER_VLAN_TAG_VALID 0x02 352 #define VFPF_Q_FILTER_SET_MAC 0x100 /* set/clear */ 353 354 u8 mac[ETH_ALEN]; 355 u16 vlan_tag; 356 357 u8 padding[4]; 358 }; 359 360 /* Start a vport */ 361 struct vfpf_vport_start_tlv { 362 struct vfpf_first_tlv first_tlv; 363 364 u64 sb_addr[PFVF_MAX_SBS_PER_VF]; 365 366 u32 tpa_mode; 367 u16 dep1; 368 u16 mtu; 369 370 u8 vport_id; 371 u8 inner_vlan_removal; 372 373 u8 only_untagged; 374 u8 max_buffers_per_cqe; 375 376 u8 padding[4]; 377 }; 378 379 /* Extended tlvs - need to add rss, mcast, accept mode tlvs */ 380 struct vfpf_vport_update_activate_tlv { 381 struct channel_tlv tl; 382 u8 update_rx; 383 u8 update_tx; 384 u8 active_rx; 385 u8 active_tx; 386 }; 387 388 struct vfpf_vport_update_tx_switch_tlv { 389 struct channel_tlv tl; 390 u8 tx_switching; 391 u8 padding[3]; 392 }; 393 394 struct vfpf_vport_update_vlan_strip_tlv { 395 struct channel_tlv tl; 396 u8 remove_vlan; 397 u8 padding[3]; 398 }; 399 400 struct vfpf_vport_update_mcast_bin_tlv { 401 struct channel_tlv tl; 402 u8 padding[4]; 403 404 /* This was a mistake; There are only 256 approx bins, 405 * and in HSI they're divided into 32-bit values. 406 * As old VFs used to set-bit to the values on its side, 407 * the upper half of the array is never expected to contain any data. 408 */ 409 u64 bins[4]; 410 u64 obsolete_bins[4]; 411 }; 412 413 struct vfpf_vport_update_accept_param_tlv { 414 struct channel_tlv tl; 415 u8 update_rx_mode; 416 u8 update_tx_mode; 417 u8 rx_accept_filter; 418 u8 tx_accept_filter; 419 }; 420 421 struct vfpf_vport_update_accept_any_vlan_tlv { 422 struct channel_tlv tl; 423 u8 update_accept_any_vlan_flg; 424 u8 accept_any_vlan; 425 426 u8 padding[2]; 427 }; 428 429 struct vfpf_vport_update_sge_tpa_tlv { 430 struct channel_tlv tl; 431 432 u16 sge_tpa_flags; 433 #define VFPF_TPA_IPV4_EN_FLAG (1 << 0) 434 #define VFPF_TPA_IPV6_EN_FLAG (1 << 1) 435 #define VFPF_TPA_PKT_SPLIT_FLAG (1 << 2) 436 #define VFPF_TPA_HDR_DATA_SPLIT_FLAG (1 << 3) 437 #define VFPF_TPA_GRO_CONSIST_FLAG (1 << 4) 438 #define VFPF_TPA_TUNN_IPV4_EN_FLAG (1 << 5) 439 #define VFPF_TPA_TUNN_IPV6_EN_FLAG (1 << 6) 440 441 u8 update_sge_tpa_flags; 442 #define VFPF_UPDATE_SGE_DEPRECATED_FLAG (1 << 0) 443 #define VFPF_UPDATE_TPA_EN_FLAG (1 << 1) 444 #define VFPF_UPDATE_TPA_PARAM_FLAG (1 << 2) 445 446 u8 max_buffers_per_cqe; 447 448 u16 deprecated_sge_buff_size; 449 u16 tpa_max_size; 450 u16 tpa_min_size_to_start; 451 u16 tpa_min_size_to_cont; 452 453 u8 tpa_max_aggs_num; 454 u8 padding[7]; 455 456 }; 457 458 /* Primary tlv as a header for various extended tlvs for 459 * various functionalities in vport update ramrod. 460 */ 461 struct vfpf_vport_update_tlv { 462 struct vfpf_first_tlv first_tlv; 463 }; 464 465 struct vfpf_ucast_filter_tlv { 466 struct vfpf_first_tlv first_tlv; 467 468 u8 opcode; 469 u8 type; 470 471 u8 mac[ETH_ALEN]; 472 473 u16 vlan; 474 u16 padding[3]; 475 }; 476 477 /* tunnel update param tlv */ 478 struct vfpf_update_tunn_param_tlv { 479 struct vfpf_first_tlv first_tlv; 480 481 u8 tun_mode_update_mask; 482 u8 tunn_mode; 483 u8 update_tun_cls; 484 u8 vxlan_clss; 485 u8 l2gre_clss; 486 u8 ipgre_clss; 487 u8 l2geneve_clss; 488 u8 ipgeneve_clss; 489 u8 update_geneve_port; 490 u8 update_vxlan_port; 491 u16 geneve_port; 492 u16 vxlan_port; 493 u8 padding[2]; 494 }; 495 496 struct pfvf_update_tunn_param_tlv { 497 struct pfvf_tlv hdr; 498 499 u16 tunn_feature_mask; 500 u8 vxlan_mode; 501 u8 l2geneve_mode; 502 u8 ipgeneve_mode; 503 u8 l2gre_mode; 504 u8 ipgre_mode; 505 u8 vxlan_clss; 506 u8 l2gre_clss; 507 u8 ipgre_clss; 508 u8 l2geneve_clss; 509 u8 ipgeneve_clss; 510 u16 vxlan_udp_port; 511 u16 geneve_udp_port; 512 }; 513 514 struct tlv_buffer_size { 515 u8 tlv_buffer[TLV_BUFFER_SIZE]; 516 }; 517 518 struct vfpf_update_coalesce { 519 struct vfpf_first_tlv first_tlv; 520 u16 rx_coal; 521 u16 tx_coal; 522 u16 qid; 523 u8 padding[2]; 524 }; 525 526 struct vfpf_read_coal_req_tlv { 527 struct vfpf_first_tlv first_tlv; 528 u16 qid; 529 u8 is_rx; 530 u8 padding[5]; 531 }; 532 533 struct pfvf_read_coal_resp_tlv { 534 struct pfvf_tlv hdr; 535 u16 coal; 536 u8 padding[6]; 537 }; 538 539 struct vfpf_bulletin_update_mac_tlv { 540 struct vfpf_first_tlv first_tlv; 541 u8 mac[ETH_ALEN]; 542 u8 padding[2]; 543 }; 544 545 struct vfpf_update_mtu_tlv { 546 struct vfpf_first_tlv first_tlv; 547 u16 mtu; 548 u8 padding[6]; 549 }; 550 551 union vfpf_tlvs { 552 struct vfpf_first_tlv first_tlv; 553 struct vfpf_acquire_tlv acquire; 554 struct vfpf_start_rxq_tlv start_rxq; 555 struct vfpf_start_txq_tlv start_txq; 556 struct vfpf_stop_rxqs_tlv stop_rxqs; 557 struct vfpf_stop_txqs_tlv stop_txqs; 558 struct vfpf_update_rxq_tlv update_rxq; 559 struct vfpf_vport_start_tlv start_vport; 560 struct vfpf_vport_update_tlv vport_update; 561 struct vfpf_ucast_filter_tlv ucast_filter; 562 struct vfpf_update_tunn_param_tlv tunn_param_update; 563 struct vfpf_update_coalesce update_coalesce; 564 struct vfpf_read_coal_req_tlv read_coal_req; 565 struct vfpf_bulletin_update_mac_tlv bulletin_update_mac; 566 struct vfpf_update_mtu_tlv update_mtu; 567 struct vfpf_soft_flr_tlv soft_flr; 568 struct tlv_buffer_size tlv_buf_size; 569 }; 570 571 union pfvf_tlvs { 572 struct pfvf_def_resp_tlv default_resp; 573 struct pfvf_acquire_resp_tlv acquire_resp; 574 struct tlv_buffer_size tlv_buf_size; 575 struct pfvf_start_queue_resp_tlv queue_start; 576 struct pfvf_update_tunn_param_tlv tunn_param_resp; 577 struct pfvf_read_coal_resp_tlv read_coal_resp; 578 }; 579 580 /* This is a structure which is allocated in the VF, which the PF may update 581 * when it deems it necessary to do so. The bulletin board is sampled 582 * periodically by the VF. A copy per VF is maintained in the PF (to prevent 583 * loss of data upon multiple updates (or the need for read modify write)). 584 */ 585 enum ecore_bulletin_bit { 586 /* Alert the VF that a forced MAC was set by the PF */ 587 MAC_ADDR_FORCED = 0, 588 589 /* The VF should not access the vfpf channel */ 590 VFPF_CHANNEL_INVALID = 1, 591 592 /* Alert the VF that a forced VLAN was set by the PF */ 593 VLAN_ADDR_FORCED = 2, 594 595 /* Indicate that `default_only_untagged' contains actual data */ 596 VFPF_BULLETIN_UNTAGGED_DEFAULT = 3, 597 VFPF_BULLETIN_UNTAGGED_DEFAULT_FORCED = 4, 598 599 /* Alert the VF that suggested mac was sent by the PF. 600 * MAC_ADDR will be disabled in case MAC_ADDR_FORCED is set 601 */ 602 VFPF_BULLETIN_MAC_ADDR = 5 603 }; 604 605 struct ecore_bulletin_content { 606 /* crc of structure to ensure is not in mid-update */ 607 u32 crc; 608 609 u32 version; 610 611 /* bitmap indicating which fields hold valid values */ 612 u64 valid_bitmap; 613 614 /* used for MAC_ADDR or MAC_ADDR_FORCED */ 615 u8 mac[ETH_ALEN]; 616 617 /* If valid, 1 => only untagged Rx if no vlan is configured */ 618 u8 default_only_untagged; 619 u8 padding; 620 621 /* The following is a 'copy' of ecore_mcp_link_state, 622 * ecore_mcp_link_params and ecore_mcp_link_capabilities. Since it's 623 * possible the structs will increase further along the road we cannot 624 * have it here; Instead we need to have all of its fields. 625 */ 626 u8 req_autoneg; 627 u8 req_autoneg_pause; 628 u8 req_forced_rx; 629 u8 req_forced_tx; 630 u8 padding2[4]; 631 632 u32 req_adv_speed; 633 u32 req_forced_speed; 634 u32 req_loopback; 635 u32 padding3; 636 637 u8 link_up; 638 u8 full_duplex; 639 u8 autoneg; 640 u8 autoneg_complete; 641 u8 parallel_detection; 642 u8 pfc_enabled; 643 u8 partner_tx_flow_ctrl_en; 644 u8 partner_rx_flow_ctrl_en; 645 646 u8 partner_adv_pause; 647 u8 sfp_tx_fault; 648 u16 vxlan_udp_port; 649 u16 geneve_udp_port; 650 u8 padding4[2]; 651 652 u32 speed; 653 u32 partner_adv_speed; 654 655 u32 capability_speed; 656 657 /* Forced vlan */ 658 u16 pvid; 659 u16 padding5; 660 }; 661 662 struct ecore_bulletin { 663 dma_addr_t phys; 664 struct ecore_bulletin_content *p_virt; 665 u32 size; 666 }; 667 668 enum { 669 /*!!!!! Make sure to update STRINGS structure accordingly !!!!!*/ 670 671 CHANNEL_TLV_NONE, /* ends tlv sequence */ 672 CHANNEL_TLV_ACQUIRE, 673 CHANNEL_TLV_VPORT_START, 674 CHANNEL_TLV_VPORT_UPDATE, 675 CHANNEL_TLV_VPORT_TEARDOWN, 676 CHANNEL_TLV_START_RXQ, 677 CHANNEL_TLV_START_TXQ, 678 CHANNEL_TLV_STOP_RXQS, 679 CHANNEL_TLV_STOP_TXQS, 680 CHANNEL_TLV_UPDATE_RXQ, 681 CHANNEL_TLV_INT_CLEANUP, 682 CHANNEL_TLV_CLOSE, 683 CHANNEL_TLV_RELEASE, 684 CHANNEL_TLV_LIST_END, 685 CHANNEL_TLV_UCAST_FILTER, 686 CHANNEL_TLV_VPORT_UPDATE_ACTIVATE, 687 CHANNEL_TLV_VPORT_UPDATE_TX_SWITCH, 688 CHANNEL_TLV_VPORT_UPDATE_VLAN_STRIP, 689 CHANNEL_TLV_VPORT_UPDATE_MCAST, 690 CHANNEL_TLV_VPORT_UPDATE_ACCEPT_PARAM, 691 CHANNEL_TLV_VPORT_UPDATE_RSS, 692 CHANNEL_TLV_VPORT_UPDATE_ACCEPT_ANY_VLAN, 693 CHANNEL_TLV_VPORT_UPDATE_SGE_TPA, 694 CHANNEL_TLV_UPDATE_TUNN_PARAM, 695 CHANNEL_TLV_COALESCE_UPDATE, 696 CHANNEL_TLV_QID, 697 CHANNEL_TLV_COALESCE_READ, 698 CHANNEL_TLV_BULLETIN_UPDATE_MAC, 699 CHANNEL_TLV_UPDATE_MTU, 700 CHANNEL_TLV_RDMA_ACQUIRE, 701 CHANNEL_TLV_RDMA_START, 702 CHANNEL_TLV_RDMA_STOP, 703 CHANNEL_TLV_RDMA_ADD_USER, 704 CHANNEL_TLV_RDMA_REMOVE_USER, 705 CHANNEL_TLV_RDMA_QUERY_COUNTERS, 706 CHANNEL_TLV_RDMA_ALLOC_TID, 707 CHANNEL_TLV_RDMA_REGISTER_TID, 708 CHANNEL_TLV_RDMA_DEREGISTER_TID, 709 CHANNEL_TLV_RDMA_FREE_TID, 710 CHANNEL_TLV_RDMA_CREATE_CQ, 711 CHANNEL_TLV_RDMA_RESIZE_CQ, 712 CHANNEL_TLV_RDMA_DESTROY_CQ, 713 CHANNEL_TLV_RDMA_CREATE_QP, 714 CHANNEL_TLV_RDMA_MODIFY_QP, 715 CHANNEL_TLV_RDMA_QUERY_QP, 716 CHANNEL_TLV_RDMA_DESTROY_QP, 717 CHANNEL_TLV_RDMA_QUERY_PORT, 718 CHANNEL_TLV_RDMA_QUERY_DEVICE, 719 CHANNEL_TLV_RDMA_IWARP_CONNECT, 720 CHANNEL_TLV_RDMA_IWARP_ACCEPT, 721 CHANNEL_TLV_RDMA_IWARP_CREATE_LISTEN, 722 CHANNEL_TLV_RDMA_IWARP_DESTROY_LISTEN, 723 CHANNEL_TLV_RDMA_IWARP_PAUSE_LISTEN, 724 CHANNEL_TLV_RDMA_IWARP_REJECT, 725 CHANNEL_TLV_RDMA_IWARP_SEND_RTR, 726 CHANNEL_TLV_ESTABLISH_LL2_CONN, 727 CHANNEL_TLV_TERMINATE_LL2_CONN, 728 CHANNEL_TLV_ASYNC_EVENT, 729 CHANNEL_TLV_RDMA_CREATE_SRQ, 730 CHANNEL_TLV_RDMA_MODIFY_SRQ, 731 CHANNEL_TLV_RDMA_DESTROY_SRQ, 732 CHANNEL_TLV_SOFT_FLR, 733 CHANNEL_TLV_MAX, 734 735 /* Required for iterating over vport-update tlvs. 736 * Will break in case non-sequential vport-update tlvs. 737 */ 738 CHANNEL_TLV_VPORT_UPDATE_MAX = CHANNEL_TLV_VPORT_UPDATE_SGE_TPA + 1, 739 740 /*!!!!! Make sure to update STRINGS structure accordingly !!!!!*/ 741 }; 742 extern const char *qede_ecore_channel_tlvs_string[]; 743 744 #endif /* __ECORE_VF_PF_IF_H__ */ 745