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