]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/qlnx/qlnxe/ecore_vfpf_if.h
Import libedit 2019-09-10
[FreeBSD/FreeBSD.git] / sys / dev / qlnx / qlnxe / ecore_vfpf_if.h
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 #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  **/
48 struct 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
59 struct 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) */
76 struct 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  */
84 struct 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 */
91 struct pfvf_tlv {
92         struct channel_tlv tl;
93         u8 status;
94         u8 padding[3];
95 };
96
97 /* response tlv used for most tlvs */
98 struct pfvf_def_resp_tlv {
99         struct pfvf_tlv hdr;
100 };
101
102 /* used to terminate and pad a tlv list */
103 struct channel_list_end_tlv {
104         struct channel_tlv tl;
105         u8 padding[4];
106 };
107
108 /* Acquire */
109 struct 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 */
157 struct 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
173 struct pfvf_storm_stats {
174         u32 address;
175         u32 len;
176 };
177
178 struct 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 */
186 struct 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
266 struct 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  */
276 struct vfpf_qid_tlv {
277         struct channel_tlv      tl;
278         u8                      qid;
279         u8                      padding[3];
280 };
281
282 /* Setup Queue */
283 struct 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
303 struct 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 */
320 struct 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 */
338 struct 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
353 struct 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 */
369 struct 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 */
382 struct 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 */
402 struct 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
410 struct vfpf_vport_update_tx_switch_tlv {
411         struct channel_tlv      tl;
412         u8                      tx_switching;
413         u8                      padding[3];
414 };
415
416 struct vfpf_vport_update_vlan_strip_tlv {
417         struct channel_tlv      tl;
418         u8                      remove_vlan;
419         u8                      padding[3];
420 };
421
422 struct 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
435 struct 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
443 struct 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
451 struct 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  */
481 struct vfpf_vport_update_tlv {
482         struct vfpf_first_tlv first_tlv;
483 };
484
485 struct 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 */
498 struct 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
516 struct 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
534 struct tlv_buffer_size {
535         u8 tlv_buffer[TLV_BUFFER_SIZE];
536 };
537
538 struct 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
546 struct 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
553 struct pfvf_read_coal_resp_tlv {
554         struct pfvf_tlv hdr;
555         u16 coal;
556         u8 padding[6];
557 };
558
559 union 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
576 union 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  */
590 enum 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
610 struct 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
667 struct ecore_bulletin {
668         dma_addr_t phys;
669         struct ecore_bulletin_content *p_virt;
670         u32 size;
671 };
672
673 enum {
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 };
712 extern const char *ecore_channel_tlvs_string[];
713
714 #endif /* __ECORE_VF_PF_IF_H__ */