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