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