dpdk/drivers/net/qede/base/ecore_vfpf_if.h
<<
>>
Prefs
   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 **/
  19struct 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
  30struct 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) */
  47struct 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 */
  55struct 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 */
  62struct pfvf_tlv {
  63        struct channel_tlv tl;
  64        u8 status;
  65        u8 padding[3];
  66};
  67
  68/* response tlv used for most tlvs */
  69struct pfvf_def_resp_tlv {
  70        struct pfvf_tlv hdr;
  71};
  72
  73/* used to terminate and pad a tlv list */
  74struct channel_list_end_tlv {
  75        struct channel_tlv tl;
  76        u8 padding[4];
  77};
  78
  79/* Acquire */
  80struct 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 */
 129struct 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
 145struct pfvf_storm_stats {
 146        u32 address;
 147        u32 len;
 148};
 149
 150struct 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 */
 158struct 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
 238struct 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 */
 248struct vfpf_qid_tlv {
 249        struct channel_tlv      tl;
 250        u8                      qid;
 251        u8                      padding[3];
 252};
 253
 254/* Soft FLR req */
 255struct vfpf_soft_flr_tlv {
 256        struct vfpf_first_tlv first_tlv;
 257        u32 reserved1;
 258        u32 reserved2;
 259};
 260
 261/* Setup Queue */
 262struct 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
 282struct 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 */
 299struct 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 */
 317struct 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
 332struct 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 */
 348struct 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 */
 361struct 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 */
 380struct 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
 388struct vfpf_vport_update_tx_switch_tlv {
 389        struct channel_tlv      tl;
 390        u8                      tx_switching;
 391        u8                      padding[3];
 392};
 393
 394struct vfpf_vport_update_vlan_strip_tlv {
 395        struct channel_tlv      tl;
 396        u8                      remove_vlan;
 397        u8                      padding[3];
 398};
 399
 400struct 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
 413struct 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
 421struct 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
 429struct 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 */
 461struct vfpf_vport_update_tlv {
 462        struct vfpf_first_tlv first_tlv;
 463};
 464
 465struct 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 */
 478struct 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
 496struct 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
 514struct tlv_buffer_size {
 515        u8 tlv_buffer[TLV_BUFFER_SIZE];
 516};
 517
 518struct 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
 526struct 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
 533struct pfvf_read_coal_resp_tlv {
 534        struct pfvf_tlv hdr;
 535        u16 coal;
 536        u8 padding[6];
 537};
 538
 539struct vfpf_bulletin_update_mac_tlv {
 540        struct vfpf_first_tlv first_tlv;
 541        u8 mac[ETH_ALEN];
 542        u8 padding[2];
 543};
 544
 545struct vfpf_update_mtu_tlv {
 546        struct vfpf_first_tlv first_tlv;
 547        u16 mtu;
 548        u8 padding[6];
 549};
 550
 551union 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
 571union 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 */
 585enum 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
 605struct 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
 662struct ecore_bulletin {
 663        dma_addr_t phys;
 664        struct ecore_bulletin_content *p_virt;
 665        u32 size;
 666};
 667
 668enum {
 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};
 742extern const char *qede_ecore_channel_tlvs_string[];
 743
 744#endif /* __ECORE_VF_PF_IF_H__ */
 745