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