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