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