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