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