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_DEV_API_H__
37*14b24e2bSVaishali Kulkarni #define __ECORE_DEV_API_H__
38*14b24e2bSVaishali Kulkarni 
39*14b24e2bSVaishali Kulkarni #include "ecore_status.h"
40*14b24e2bSVaishali Kulkarni #include "ecore_chain.h"
41*14b24e2bSVaishali Kulkarni #include "ecore_int_api.h"
42*14b24e2bSVaishali Kulkarni 
43*14b24e2bSVaishali Kulkarni struct ecore_wake_info {
44*14b24e2bSVaishali Kulkarni 	u32 wk_info;
45*14b24e2bSVaishali Kulkarni 	u32 wk_details;
46*14b24e2bSVaishali Kulkarni 	u32 wk_pkt_len;
47*14b24e2bSVaishali Kulkarni 	u8  wk_buffer[256];
48*14b24e2bSVaishali Kulkarni };
49*14b24e2bSVaishali Kulkarni 
50*14b24e2bSVaishali Kulkarni /**
51*14b24e2bSVaishali Kulkarni  * @brief ecore_init_dp - initialize the debug level
52*14b24e2bSVaishali Kulkarni  *
53*14b24e2bSVaishali Kulkarni  * @param p_dev
54*14b24e2bSVaishali Kulkarni  * @param dp_module
55*14b24e2bSVaishali Kulkarni  * @param dp_level
56*14b24e2bSVaishali Kulkarni  * @param dp_ctx
57*14b24e2bSVaishali Kulkarni  */
58*14b24e2bSVaishali Kulkarni void ecore_init_dp(struct ecore_dev *p_dev,
59*14b24e2bSVaishali Kulkarni 		   u32 dp_module,
60*14b24e2bSVaishali Kulkarni 		   u8 dp_level,
61*14b24e2bSVaishali Kulkarni 		   void *dp_ctx);
62*14b24e2bSVaishali Kulkarni 
63*14b24e2bSVaishali Kulkarni /**
64*14b24e2bSVaishali Kulkarni  * @brief ecore_init_struct - initialize the device structure to
65*14b24e2bSVaishali Kulkarni  *        its defaults
66*14b24e2bSVaishali Kulkarni  *
67*14b24e2bSVaishali Kulkarni  * @param p_dev
68*14b24e2bSVaishali Kulkarni  */
69*14b24e2bSVaishali Kulkarni void ecore_init_struct(struct ecore_dev *p_dev);
70*14b24e2bSVaishali Kulkarni 
71*14b24e2bSVaishali Kulkarni /**
72*14b24e2bSVaishali Kulkarni  * @brief ecore_resc_free -
73*14b24e2bSVaishali Kulkarni  *
74*14b24e2bSVaishali Kulkarni  * @param p_dev
75*14b24e2bSVaishali Kulkarni  */
76*14b24e2bSVaishali Kulkarni void ecore_resc_free(struct ecore_dev *p_dev);
77*14b24e2bSVaishali Kulkarni 
78*14b24e2bSVaishali Kulkarni /**
79*14b24e2bSVaishali Kulkarni  * @brief ecore_resc_alloc -
80*14b24e2bSVaishali Kulkarni  *
81*14b24e2bSVaishali Kulkarni  * @param p_dev
82*14b24e2bSVaishali Kulkarni  *
83*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
84*14b24e2bSVaishali Kulkarni  */
85*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_resc_alloc(struct ecore_dev *p_dev);
86*14b24e2bSVaishali Kulkarni 
87*14b24e2bSVaishali Kulkarni /**
88*14b24e2bSVaishali Kulkarni  * @brief ecore_resc_setup -
89*14b24e2bSVaishali Kulkarni  *
90*14b24e2bSVaishali Kulkarni  * @param p_dev
91*14b24e2bSVaishali Kulkarni  */
92*14b24e2bSVaishali Kulkarni void ecore_resc_setup(struct ecore_dev *p_dev);
93*14b24e2bSVaishali Kulkarni 
94*14b24e2bSVaishali Kulkarni enum ecore_override_force_load {
95*14b24e2bSVaishali Kulkarni 	ECORE_OVERRIDE_FORCE_LOAD_NONE,
96*14b24e2bSVaishali Kulkarni 	ECORE_OVERRIDE_FORCE_LOAD_ALWAYS,
97*14b24e2bSVaishali Kulkarni 	ECORE_OVERRIDE_FORCE_LOAD_NEVER,
98*14b24e2bSVaishali Kulkarni };
99*14b24e2bSVaishali Kulkarni 
100*14b24e2bSVaishali Kulkarni struct ecore_drv_load_params {
101*14b24e2bSVaishali Kulkarni 	/* Indicates whether the driver is running over a crash kernel.
102*14b24e2bSVaishali Kulkarni 	 * As part of the load request, this will be used for providing the
103*14b24e2bSVaishali Kulkarni 	 * driver role to the MFW.
104*14b24e2bSVaishali Kulkarni 	 * In case of a crash kernel over PDA - this should be set to false.
105*14b24e2bSVaishali Kulkarni 	 */
106*14b24e2bSVaishali Kulkarni 	bool is_crash_kernel;
107*14b24e2bSVaishali Kulkarni 
108*14b24e2bSVaishali Kulkarni 	/* The timeout value that the MFW should use when locking the engine for
109*14b24e2bSVaishali Kulkarni 	 * the driver load process.
110*14b24e2bSVaishali Kulkarni 	 * A value of '0' means the default value, and '255' means no timeout.
111*14b24e2bSVaishali Kulkarni 	 */
112*14b24e2bSVaishali Kulkarni 	u8 mfw_timeout_val;
113*14b24e2bSVaishali Kulkarni #define ECORE_LOAD_REQ_LOCK_TO_DEFAULT	0
114*14b24e2bSVaishali Kulkarni #define ECORE_LOAD_REQ_LOCK_TO_NONE	255
115*14b24e2bSVaishali Kulkarni 
116*14b24e2bSVaishali Kulkarni 	/* Avoid engine reset when first PF loads on it */
117*14b24e2bSVaishali Kulkarni 	bool avoid_eng_reset;
118*14b24e2bSVaishali Kulkarni 
119*14b24e2bSVaishali Kulkarni 	/* Allow overriding the default force load behavior */
120*14b24e2bSVaishali Kulkarni 	enum ecore_override_force_load override_force_load;
121*14b24e2bSVaishali Kulkarni };
122*14b24e2bSVaishali Kulkarni 
123*14b24e2bSVaishali Kulkarni struct ecore_hw_init_params {
124*14b24e2bSVaishali Kulkarni 	/* Tunneling parameters */
125*14b24e2bSVaishali Kulkarni 	struct ecore_tunnel_info *p_tunn;
126*14b24e2bSVaishali Kulkarni 
127*14b24e2bSVaishali Kulkarni 	bool b_hw_start;
128*14b24e2bSVaishali Kulkarni 
129*14b24e2bSVaishali Kulkarni 	/* Interrupt mode [msix, inta, etc.] to use */
130*14b24e2bSVaishali Kulkarni 	enum ecore_int_mode int_mode;
131*14b24e2bSVaishali Kulkarni 
132*14b24e2bSVaishali Kulkarni 	/* NPAR tx switching to be used for vports configured for tx-switching */
133*14b24e2bSVaishali Kulkarni 	bool allow_npar_tx_switch;
134*14b24e2bSVaishali Kulkarni 
135*14b24e2bSVaishali Kulkarni 	/* Binary fw data pointer in binary fw file */
136*14b24e2bSVaishali Kulkarni 	const u8 *bin_fw_data;
137*14b24e2bSVaishali Kulkarni 
138*14b24e2bSVaishali Kulkarni 	/* Driver load parameters */
139*14b24e2bSVaishali Kulkarni 	struct ecore_drv_load_params *p_drv_load_params;
140*14b24e2bSVaishali Kulkarni };
141*14b24e2bSVaishali Kulkarni 
142*14b24e2bSVaishali Kulkarni /**
143*14b24e2bSVaishali Kulkarni  * @brief ecore_hw_init -
144*14b24e2bSVaishali Kulkarni  *
145*14b24e2bSVaishali Kulkarni  * @param p_dev
146*14b24e2bSVaishali Kulkarni  * @param p_params
147*14b24e2bSVaishali Kulkarni  *
148*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
149*14b24e2bSVaishali Kulkarni  */
150*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev,
151*14b24e2bSVaishali Kulkarni 				   struct ecore_hw_init_params *p_params);
152*14b24e2bSVaishali Kulkarni 
153*14b24e2bSVaishali Kulkarni /**
154*14b24e2bSVaishali Kulkarni  * @brief ecore_hw_timers_stop_all -
155*14b24e2bSVaishali Kulkarni  *
156*14b24e2bSVaishali Kulkarni  * @param p_dev
157*14b24e2bSVaishali Kulkarni  *
158*14b24e2bSVaishali Kulkarni  * @return void
159*14b24e2bSVaishali Kulkarni  */
160*14b24e2bSVaishali Kulkarni void ecore_hw_timers_stop_all(struct ecore_dev *p_dev);
161*14b24e2bSVaishali Kulkarni 
162*14b24e2bSVaishali Kulkarni /**
163*14b24e2bSVaishali Kulkarni  * @brief ecore_hw_stop -
164*14b24e2bSVaishali Kulkarni  *
165*14b24e2bSVaishali Kulkarni  * @param p_dev
166*14b24e2bSVaishali Kulkarni  *
167*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
168*14b24e2bSVaishali Kulkarni  */
169*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_hw_stop(struct ecore_dev *p_dev);
170*14b24e2bSVaishali Kulkarni 
171*14b24e2bSVaishali Kulkarni /**
172*14b24e2bSVaishali Kulkarni  * @brief ecore_hw_stop_fastpath -should be called incase
173*14b24e2bSVaishali Kulkarni  *        slowpath is still required for the device,
174*14b24e2bSVaishali Kulkarni  *        but fastpath is not.
175*14b24e2bSVaishali Kulkarni  *
176*14b24e2bSVaishali Kulkarni  * @param p_dev
177*14b24e2bSVaishali Kulkarni  *
178*14b24e2bSVaishali Kulkarni  */
179*14b24e2bSVaishali Kulkarni void ecore_hw_stop_fastpath(struct ecore_dev *p_dev);
180*14b24e2bSVaishali Kulkarni 
181*14b24e2bSVaishali Kulkarni #ifndef LINUX_REMOVE
182*14b24e2bSVaishali Kulkarni /**
183*14b24e2bSVaishali Kulkarni  * @brief ecore_hw_hibernate_prepare -should be called when
184*14b24e2bSVaishali Kulkarni  *        the system is going into the hibernate state
185*14b24e2bSVaishali Kulkarni  *
186*14b24e2bSVaishali Kulkarni  * @param p_dev
187*14b24e2bSVaishali Kulkarni  *
188*14b24e2bSVaishali Kulkarni  */
189*14b24e2bSVaishali Kulkarni void ecore_hw_hibernate_prepare(struct ecore_dev *p_dev);
190*14b24e2bSVaishali Kulkarni 
191*14b24e2bSVaishali Kulkarni /**
192*14b24e2bSVaishali Kulkarni  * @brief ecore_hw_hibernate_resume -should be called when the system is
193*14b24e2bSVaishali Kulkarni 	  resuming from D3 power state and before calling ecore_hw_init.
194*14b24e2bSVaishali Kulkarni  *
195*14b24e2bSVaishali Kulkarni  * @param p_hwfn
196*14b24e2bSVaishali Kulkarni  *
197*14b24e2bSVaishali Kulkarni  */
198*14b24e2bSVaishali Kulkarni void ecore_hw_hibernate_resume(struct ecore_dev *p_dev);
199*14b24e2bSVaishali Kulkarni 
200*14b24e2bSVaishali Kulkarni #endif
201*14b24e2bSVaishali Kulkarni 
202*14b24e2bSVaishali Kulkarni /**
203*14b24e2bSVaishali Kulkarni  * @brief ecore_hw_start_fastpath -restart fastpath traffic,
204*14b24e2bSVaishali Kulkarni  *        only if hw_stop_fastpath was called
205*14b24e2bSVaishali Kulkarni 
206*14b24e2bSVaishali Kulkarni  * @param p_dev
207*14b24e2bSVaishali Kulkarni  *
208*14b24e2bSVaishali Kulkarni  */
209*14b24e2bSVaishali Kulkarni void ecore_hw_start_fastpath(struct ecore_hwfn *p_hwfn);
210*14b24e2bSVaishali Kulkarni 
211*14b24e2bSVaishali Kulkarni enum ecore_hw_prepare_result {
212*14b24e2bSVaishali Kulkarni 	ECORE_HW_PREPARE_SUCCESS,
213*14b24e2bSVaishali Kulkarni 
214*14b24e2bSVaishali Kulkarni 	/* FAILED results indicate probe has failed & cleaned up */
215*14b24e2bSVaishali Kulkarni 	ECORE_HW_PREPARE_FAILED_ENG2,
216*14b24e2bSVaishali Kulkarni 	ECORE_HW_PREPARE_FAILED_ME,
217*14b24e2bSVaishali Kulkarni 	ECORE_HW_PREPARE_FAILED_MEM,
218*14b24e2bSVaishali Kulkarni 	ECORE_HW_PREPARE_FAILED_DEV,
219*14b24e2bSVaishali Kulkarni 	ECORE_HW_PREPARE_FAILED_NVM,
220*14b24e2bSVaishali Kulkarni 
221*14b24e2bSVaishali Kulkarni 	/* BAD results indicate probe is passed even though some wrongness
222*14b24e2bSVaishali Kulkarni 	 * has occurred; Trying to actually use [I.e., hw_init()] might have
223*14b24e2bSVaishali Kulkarni 	 * dire reprecautions.
224*14b24e2bSVaishali Kulkarni 	 */
225*14b24e2bSVaishali Kulkarni 	ECORE_HW_PREPARE_BAD_IOV,
226*14b24e2bSVaishali Kulkarni 	ECORE_HW_PREPARE_BAD_MCP,
227*14b24e2bSVaishali Kulkarni 	ECORE_HW_PREPARE_BAD_IGU,
228*14b24e2bSVaishali Kulkarni };
229*14b24e2bSVaishali Kulkarni 
230*14b24e2bSVaishali Kulkarni struct ecore_hw_prepare_params {
231*14b24e2bSVaishali Kulkarni 	/* Personality to initialize */
232*14b24e2bSVaishali Kulkarni 	int personality;
233*14b24e2bSVaishali Kulkarni 
234*14b24e2bSVaishali Kulkarni 	/* Force the driver's default resource allocation */
235*14b24e2bSVaishali Kulkarni 	bool drv_resc_alloc;
236*14b24e2bSVaishali Kulkarni 
237*14b24e2bSVaishali Kulkarni 	/* Check the reg_fifo after any register access */
238*14b24e2bSVaishali Kulkarni 	bool chk_reg_fifo;
239*14b24e2bSVaishali Kulkarni 
240*14b24e2bSVaishali Kulkarni 	/* Request the MFW to initiate PF FLR */
241*14b24e2bSVaishali Kulkarni 	bool initiate_pf_flr;
242*14b24e2bSVaishali Kulkarni 
243*14b24e2bSVaishali Kulkarni 	/* The OS Epoch time in seconds */
244*14b24e2bSVaishali Kulkarni 	u32 epoch;
245*14b24e2bSVaishali Kulkarni 
246*14b24e2bSVaishali Kulkarni 	/* Allow the MFW to collect a crash dump */
247*14b24e2bSVaishali Kulkarni 	bool allow_mdump;
248*14b24e2bSVaishali Kulkarni 
249*14b24e2bSVaishali Kulkarni 	/* Allow prepare to pass even if some initializations are failing.
250*14b24e2bSVaishali Kulkarni 	 * If set, the `p_prepare_res' field would be set with the return,
251*14b24e2bSVaishali Kulkarni 	 * and might allow probe to pass even if there are certain issues.
252*14b24e2bSVaishali Kulkarni 	 */
253*14b24e2bSVaishali Kulkarni 	bool b_relaxed_probe;
254*14b24e2bSVaishali Kulkarni 	enum ecore_hw_prepare_result p_relaxed_res;
255*14b24e2bSVaishali Kulkarni };
256*14b24e2bSVaishali Kulkarni 
257*14b24e2bSVaishali Kulkarni /**
258*14b24e2bSVaishali Kulkarni  * @brief ecore_hw_prepare -
259*14b24e2bSVaishali Kulkarni  *
260*14b24e2bSVaishali Kulkarni  * @param p_dev
261*14b24e2bSVaishali Kulkarni  * @param p_params
262*14b24e2bSVaishali Kulkarni  *
263*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
264*14b24e2bSVaishali Kulkarni  */
265*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_hw_prepare(struct ecore_dev *p_dev,
266*14b24e2bSVaishali Kulkarni 				      struct ecore_hw_prepare_params *p_params);
267*14b24e2bSVaishali Kulkarni 
268*14b24e2bSVaishali Kulkarni /**
269*14b24e2bSVaishali Kulkarni  * @brief ecore_hw_remove -
270*14b24e2bSVaishali Kulkarni  *
271*14b24e2bSVaishali Kulkarni  * @param p_dev
272*14b24e2bSVaishali Kulkarni  */
273*14b24e2bSVaishali Kulkarni void ecore_hw_remove(struct ecore_dev *p_dev);
274*14b24e2bSVaishali Kulkarni 
275*14b24e2bSVaishali Kulkarni /**
276*14b24e2bSVaishali Kulkarni * @brief ecore_set_nwuf_reg -
277*14b24e2bSVaishali Kulkarni *
278*14b24e2bSVaishali Kulkarni * @param p_dev
279*14b24e2bSVaishali Kulkarni * @param wol_flag - wol_capability
280*14b24e2bSVaishali Kulkarni * @param reg_idx - Index of the pattern register
281*14b24e2bSVaishali Kulkarni * @param pattern_size - size of pattern
282*14b24e2bSVaishali Kulkarni * @param crc - CRC value of patter & mask
283*14b24e2bSVaishali Kulkarni *
284*14b24e2bSVaishali Kulkarni * @return enum _ecore_status_t
285*14b24e2bSVaishali Kulkarni */
286*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_set_nwuf_reg(struct ecore_dev *p_dev,
287*14b24e2bSVaishali Kulkarni 	const bool b_enable,
288*14b24e2bSVaishali Kulkarni 	u32 reg_idx,
289*14b24e2bSVaishali Kulkarni 	u32 pattern_size,
290*14b24e2bSVaishali Kulkarni 	u32 crc);
291*14b24e2bSVaishali Kulkarni 
292*14b24e2bSVaishali Kulkarni /**
293*14b24e2bSVaishali Kulkarni * @brief ecore_get_wake_info - get magic packet buffer
294*14b24e2bSVaishali Kulkarni *
295*14b24e2bSVaishali Kulkarni * @param p_dev
296*14b24e2bSVaishali Kulkarni * @param wake_info - pointer to ecore_wake_info buffer
297*14b24e2bSVaishali Kulkarni *
298*14b24e2bSVaishali Kulkarni * @return enum _ecore_status_t
299*14b24e2bSVaishali Kulkarni */
300*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_get_wake_info(struct ecore_dev *p_dev,
301*14b24e2bSVaishali Kulkarni 	struct ecore_wake_info *wake_info);
302*14b24e2bSVaishali Kulkarni 
303*14b24e2bSVaishali Kulkarni /**
304*14b24e2bSVaishali Kulkarni * @brief ecore_wol_buffer_clear - Clear magic package buffer
305*14b24e2bSVaishali Kulkarni *
306*14b24e2bSVaishali Kulkarni * @param p_dev
307*14b24e2bSVaishali Kulkarni *
308*14b24e2bSVaishali Kulkarni * @return void
309*14b24e2bSVaishali Kulkarni */
310*14b24e2bSVaishali Kulkarni void ecore_wol_buffer_clear(struct ecore_dev *p_dev);
311*14b24e2bSVaishali Kulkarni 
312*14b24e2bSVaishali Kulkarni /**
313*14b24e2bSVaishali Kulkarni  * @brief ecore_ptt_acquire - Allocate a PTT window
314*14b24e2bSVaishali Kulkarni  *
315*14b24e2bSVaishali Kulkarni  * Should be called at the entry point to the driver (at the beginning of an
316*14b24e2bSVaishali Kulkarni  * exported function)
317*14b24e2bSVaishali Kulkarni  *
318*14b24e2bSVaishali Kulkarni  * @param p_hwfn
319*14b24e2bSVaishali Kulkarni  *
320*14b24e2bSVaishali Kulkarni  * @return struct ecore_ptt
321*14b24e2bSVaishali Kulkarni  */
322*14b24e2bSVaishali Kulkarni struct ecore_ptt *ecore_ptt_acquire(struct ecore_hwfn *p_hwfn);
323*14b24e2bSVaishali Kulkarni 
324*14b24e2bSVaishali Kulkarni /**
325*14b24e2bSVaishali Kulkarni  * @brief ecore_ptt_release - Release PTT Window
326*14b24e2bSVaishali Kulkarni  *
327*14b24e2bSVaishali Kulkarni  * Should be called at the end of a flow - at the end of the function that
328*14b24e2bSVaishali Kulkarni  * acquired the PTT.
329*14b24e2bSVaishali Kulkarni  *
330*14b24e2bSVaishali Kulkarni  *
331*14b24e2bSVaishali Kulkarni  * @param p_hwfn
332*14b24e2bSVaishali Kulkarni  * @param p_ptt
333*14b24e2bSVaishali Kulkarni  */
334*14b24e2bSVaishali Kulkarni void ecore_ptt_release(struct ecore_hwfn *p_hwfn,
335*14b24e2bSVaishali Kulkarni 		       struct ecore_ptt *p_ptt);
336*14b24e2bSVaishali Kulkarni 
337*14b24e2bSVaishali Kulkarni #ifndef __EXTRACT__LINUX__
338*14b24e2bSVaishali Kulkarni struct ecore_eth_stats_common {
339*14b24e2bSVaishali Kulkarni 	u64 no_buff_discards;
340*14b24e2bSVaishali Kulkarni 	u64 packet_too_big_discard;
341*14b24e2bSVaishali Kulkarni 	u64 ttl0_discard;
342*14b24e2bSVaishali Kulkarni 	u64 rx_ucast_bytes;
343*14b24e2bSVaishali Kulkarni 	u64 rx_mcast_bytes;
344*14b24e2bSVaishali Kulkarni 	u64 rx_bcast_bytes;
345*14b24e2bSVaishali Kulkarni 	u64 rx_ucast_pkts;
346*14b24e2bSVaishali Kulkarni 	u64 rx_mcast_pkts;
347*14b24e2bSVaishali Kulkarni 	u64 rx_bcast_pkts;
348*14b24e2bSVaishali Kulkarni 	u64 mftag_filter_discards;
349*14b24e2bSVaishali Kulkarni 	u64 mac_filter_discards;
350*14b24e2bSVaishali Kulkarni 	u64 tx_ucast_bytes;
351*14b24e2bSVaishali Kulkarni 	u64 tx_mcast_bytes;
352*14b24e2bSVaishali Kulkarni 	u64 tx_bcast_bytes;
353*14b24e2bSVaishali Kulkarni 	u64 tx_ucast_pkts;
354*14b24e2bSVaishali Kulkarni 	u64 tx_mcast_pkts;
355*14b24e2bSVaishali Kulkarni 	u64 tx_bcast_pkts;
356*14b24e2bSVaishali Kulkarni 	u64 tx_err_drop_pkts;
357*14b24e2bSVaishali Kulkarni 	u64 tpa_coalesced_pkts;
358*14b24e2bSVaishali Kulkarni 	u64 tpa_coalesced_events;
359*14b24e2bSVaishali Kulkarni 	u64 tpa_aborts_num;
360*14b24e2bSVaishali Kulkarni 	u64 tpa_not_coalesced_pkts;
361*14b24e2bSVaishali Kulkarni 	u64 tpa_coalesced_bytes;
362*14b24e2bSVaishali Kulkarni 
363*14b24e2bSVaishali Kulkarni 	/* port */
364*14b24e2bSVaishali Kulkarni 	u64 rx_64_byte_packets;
365*14b24e2bSVaishali Kulkarni 	u64 rx_65_to_127_byte_packets;
366*14b24e2bSVaishali Kulkarni 	u64 rx_128_to_255_byte_packets;
367*14b24e2bSVaishali Kulkarni 	u64 rx_256_to_511_byte_packets;
368*14b24e2bSVaishali Kulkarni 	u64 rx_512_to_1023_byte_packets;
369*14b24e2bSVaishali Kulkarni 	u64 rx_1024_to_1518_byte_packets;
370*14b24e2bSVaishali Kulkarni 	u64 rx_crc_errors;
371*14b24e2bSVaishali Kulkarni 	u64 rx_mac_crtl_frames;
372*14b24e2bSVaishali Kulkarni 	u64 rx_pause_frames;
373*14b24e2bSVaishali Kulkarni 	u64 rx_pfc_frames;
374*14b24e2bSVaishali Kulkarni 	u64 rx_align_errors;
375*14b24e2bSVaishali Kulkarni 	u64 rx_carrier_errors;
376*14b24e2bSVaishali Kulkarni 	u64 rx_oversize_packets;
377*14b24e2bSVaishali Kulkarni 	u64 rx_jabbers;
378*14b24e2bSVaishali Kulkarni 	u64 rx_undersize_packets;
379*14b24e2bSVaishali Kulkarni 	u64 rx_fragments;
380*14b24e2bSVaishali Kulkarni 	u64 tx_64_byte_packets;
381*14b24e2bSVaishali Kulkarni 	u64 tx_65_to_127_byte_packets;
382*14b24e2bSVaishali Kulkarni 	u64 tx_128_to_255_byte_packets;
383*14b24e2bSVaishali Kulkarni 	u64 tx_256_to_511_byte_packets;
384*14b24e2bSVaishali Kulkarni 	u64 tx_512_to_1023_byte_packets;
385*14b24e2bSVaishali Kulkarni 	u64 tx_1024_to_1518_byte_packets;
386*14b24e2bSVaishali Kulkarni 	u64 tx_pause_frames;
387*14b24e2bSVaishali Kulkarni 	u64 tx_pfc_frames;
388*14b24e2bSVaishali Kulkarni 	u64 brb_truncates;
389*14b24e2bSVaishali Kulkarni 	u64 brb_discards;
390*14b24e2bSVaishali Kulkarni 	u64 rx_mac_bytes;
391*14b24e2bSVaishali Kulkarni 	u64 rx_mac_uc_packets;
392*14b24e2bSVaishali Kulkarni 	u64 rx_mac_mc_packets;
393*14b24e2bSVaishali Kulkarni 	u64 rx_mac_bc_packets;
394*14b24e2bSVaishali Kulkarni 	u64 rx_mac_frames_ok;
395*14b24e2bSVaishali Kulkarni 	u64 tx_mac_bytes;
396*14b24e2bSVaishali Kulkarni 	u64 tx_mac_uc_packets;
397*14b24e2bSVaishali Kulkarni 	u64 tx_mac_mc_packets;
398*14b24e2bSVaishali Kulkarni 	u64 tx_mac_bc_packets;
399*14b24e2bSVaishali Kulkarni 	u64 tx_mac_ctrl_frames;
400*14b24e2bSVaishali Kulkarni };
401*14b24e2bSVaishali Kulkarni 
402*14b24e2bSVaishali Kulkarni struct ecore_eth_stats_bb {
403*14b24e2bSVaishali Kulkarni 	u64 rx_1519_to_1522_byte_packets;
404*14b24e2bSVaishali Kulkarni 	u64 rx_1519_to_2047_byte_packets;
405*14b24e2bSVaishali Kulkarni 	u64 rx_2048_to_4095_byte_packets;
406*14b24e2bSVaishali Kulkarni 	u64 rx_4096_to_9216_byte_packets;
407*14b24e2bSVaishali Kulkarni 	u64 rx_9217_to_16383_byte_packets;
408*14b24e2bSVaishali Kulkarni 	u64 tx_1519_to_2047_byte_packets;
409*14b24e2bSVaishali Kulkarni 	u64 tx_2048_to_4095_byte_packets;
410*14b24e2bSVaishali Kulkarni 	u64 tx_4096_to_9216_byte_packets;
411*14b24e2bSVaishali Kulkarni 	u64 tx_9217_to_16383_byte_packets;
412*14b24e2bSVaishali Kulkarni 	u64 tx_lpi_entry_count;
413*14b24e2bSVaishali Kulkarni 	u64 tx_total_collisions;
414*14b24e2bSVaishali Kulkarni };
415*14b24e2bSVaishali Kulkarni 
416*14b24e2bSVaishali Kulkarni struct ecore_eth_stats_ah {
417*14b24e2bSVaishali Kulkarni 	u64 rx_1519_to_max_byte_packets;
418*14b24e2bSVaishali Kulkarni 	u64 tx_1519_to_max_byte_packets;
419*14b24e2bSVaishali Kulkarni };
420*14b24e2bSVaishali Kulkarni 
421*14b24e2bSVaishali Kulkarni struct ecore_eth_stats {
422*14b24e2bSVaishali Kulkarni 	struct ecore_eth_stats_common common;
423*14b24e2bSVaishali Kulkarni 	union {
424*14b24e2bSVaishali Kulkarni 		struct ecore_eth_stats_bb bb;
425*14b24e2bSVaishali Kulkarni 		struct ecore_eth_stats_ah ah;
426*14b24e2bSVaishali Kulkarni 	};
427*14b24e2bSVaishali Kulkarni };
428*14b24e2bSVaishali Kulkarni #endif
429*14b24e2bSVaishali Kulkarni 
430*14b24e2bSVaishali Kulkarni enum ecore_dmae_address_type_t {
431*14b24e2bSVaishali Kulkarni 	ECORE_DMAE_ADDRESS_HOST_VIRT,
432*14b24e2bSVaishali Kulkarni 	ECORE_DMAE_ADDRESS_HOST_PHYS,
433*14b24e2bSVaishali Kulkarni 	ECORE_DMAE_ADDRESS_GRC
434*14b24e2bSVaishali Kulkarni };
435*14b24e2bSVaishali Kulkarni 
436*14b24e2bSVaishali Kulkarni /* value of flags If ECORE_DMAE_FLAG_RW_REPL_SRC flag is set and the
437*14b24e2bSVaishali Kulkarni  * source is a block of length DMAE_MAX_RW_SIZE and the
438*14b24e2bSVaishali Kulkarni  * destination is larger, the source block will be duplicated as
439*14b24e2bSVaishali Kulkarni  * many times as required to fill the destination block. This is
440*14b24e2bSVaishali Kulkarni  * used mostly to write a zeroed buffer to destination address
441*14b24e2bSVaishali Kulkarni  * using DMA
442*14b24e2bSVaishali Kulkarni  */
443*14b24e2bSVaishali Kulkarni #define ECORE_DMAE_FLAG_RW_REPL_SRC	0x00000001
444*14b24e2bSVaishali Kulkarni #define ECORE_DMAE_FLAG_VF_SRC		0x00000002
445*14b24e2bSVaishali Kulkarni #define ECORE_DMAE_FLAG_VF_DST		0x00000004
446*14b24e2bSVaishali Kulkarni #define ECORE_DMAE_FLAG_COMPLETION_DST	0x00000008
447*14b24e2bSVaishali Kulkarni 
448*14b24e2bSVaishali Kulkarni struct ecore_dmae_params {
449*14b24e2bSVaishali Kulkarni 	u32 flags; /* consists of ECORE_DMAE_FLAG_* values */
450*14b24e2bSVaishali Kulkarni 	u8 src_vfid;
451*14b24e2bSVaishali Kulkarni 	u8 dst_vfid;
452*14b24e2bSVaishali Kulkarni };
453*14b24e2bSVaishali Kulkarni 
454*14b24e2bSVaishali Kulkarni /**
455*14b24e2bSVaishali Kulkarni  * @brief ecore_dmae_host2grc - copy data from source addr to
456*14b24e2bSVaishali Kulkarni  * dmae registers using the given ptt
457*14b24e2bSVaishali Kulkarni  *
458*14b24e2bSVaishali Kulkarni  * @param p_hwfn
459*14b24e2bSVaishali Kulkarni  * @param p_ptt
460*14b24e2bSVaishali Kulkarni  * @param source_addr
461*14b24e2bSVaishali Kulkarni  * @param grc_addr (dmae_data_offset)
462*14b24e2bSVaishali Kulkarni  * @param size_in_dwords
463*14b24e2bSVaishali Kulkarni  * @param flags (one of the flags defined above)
464*14b24e2bSVaishali Kulkarni  */
465*14b24e2bSVaishali Kulkarni enum _ecore_status_t
466*14b24e2bSVaishali Kulkarni ecore_dmae_host2grc(struct ecore_hwfn *p_hwfn,
467*14b24e2bSVaishali Kulkarni 		    struct ecore_ptt *p_ptt,
468*14b24e2bSVaishali Kulkarni 		    u64 source_addr,
469*14b24e2bSVaishali Kulkarni 		    u32 grc_addr,
470*14b24e2bSVaishali Kulkarni 		    u32 size_in_dwords,
471*14b24e2bSVaishali Kulkarni 		    u32 flags);
472*14b24e2bSVaishali Kulkarni 
473*14b24e2bSVaishali Kulkarni /**
474*14b24e2bSVaishali Kulkarni  * @brief ecore_dmae_grc2host - Read data from dmae data offset
475*14b24e2bSVaishali Kulkarni  * to source address using the given ptt
476*14b24e2bSVaishali Kulkarni  *
477*14b24e2bSVaishali Kulkarni  * @param p_ptt
478*14b24e2bSVaishali Kulkarni  * @param grc_addr (dmae_data_offset)
479*14b24e2bSVaishali Kulkarni  * @param dest_addr
480*14b24e2bSVaishali Kulkarni  * @param size_in_dwords
481*14b24e2bSVaishali Kulkarni  * @param flags - one of the flags defined above
482*14b24e2bSVaishali Kulkarni  */
483*14b24e2bSVaishali Kulkarni enum _ecore_status_t
484*14b24e2bSVaishali Kulkarni ecore_dmae_grc2host(struct ecore_hwfn *p_hwfn,
485*14b24e2bSVaishali Kulkarni 		    struct ecore_ptt *p_ptt,
486*14b24e2bSVaishali Kulkarni 		    u32 grc_addr,
487*14b24e2bSVaishali Kulkarni 		    dma_addr_t dest_addr,
488*14b24e2bSVaishali Kulkarni 		    u32 size_in_dwords,
489*14b24e2bSVaishali Kulkarni 		    u32 flags);
490*14b24e2bSVaishali Kulkarni 
491*14b24e2bSVaishali Kulkarni /**
492*14b24e2bSVaishali Kulkarni  * @brief ecore_dmae_host2host - copy data from to source address
493*14b24e2bSVaishali Kulkarni  * to a destination adress (for SRIOV) using the given ptt
494*14b24e2bSVaishali Kulkarni  *
495*14b24e2bSVaishali Kulkarni  * @param p_hwfn
496*14b24e2bSVaishali Kulkarni  * @param p_ptt
497*14b24e2bSVaishali Kulkarni  * @param source_addr
498*14b24e2bSVaishali Kulkarni  * @param dest_addr
499*14b24e2bSVaishali Kulkarni  * @param size_in_dwords
500*14b24e2bSVaishali Kulkarni  * @param params
501*14b24e2bSVaishali Kulkarni  */
502*14b24e2bSVaishali Kulkarni enum _ecore_status_t
503*14b24e2bSVaishali Kulkarni ecore_dmae_host2host(struct ecore_hwfn *p_hwfn,
504*14b24e2bSVaishali Kulkarni 		     struct ecore_ptt *p_ptt,
505*14b24e2bSVaishali Kulkarni 		     dma_addr_t source_addr,
506*14b24e2bSVaishali Kulkarni 		     dma_addr_t dest_addr,
507*14b24e2bSVaishali Kulkarni 		     u32 size_in_dwords,
508*14b24e2bSVaishali Kulkarni 		     struct ecore_dmae_params *p_params);
509*14b24e2bSVaishali Kulkarni 
510*14b24e2bSVaishali Kulkarni /**
511*14b24e2bSVaishali Kulkarni  * @brief ecore_chain_alloc - Allocate and initialize a chain
512*14b24e2bSVaishali Kulkarni  *
513*14b24e2bSVaishali Kulkarni  * @param p_hwfn
514*14b24e2bSVaishali Kulkarni  * @param intended_use
515*14b24e2bSVaishali Kulkarni  * @param mode
516*14b24e2bSVaishali Kulkarni  * @param num_elems
517*14b24e2bSVaishali Kulkarni  * @param elem_size
518*14b24e2bSVaishali Kulkarni  * @param p_chain
519*14b24e2bSVaishali Kulkarni  *
520*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
521*14b24e2bSVaishali Kulkarni  */
522*14b24e2bSVaishali Kulkarni enum _ecore_status_t
523*14b24e2bSVaishali Kulkarni ecore_chain_alloc(struct ecore_dev *p_dev,
524*14b24e2bSVaishali Kulkarni 		  enum ecore_chain_use_mode intended_use,
525*14b24e2bSVaishali Kulkarni 		  enum ecore_chain_mode mode,
526*14b24e2bSVaishali Kulkarni 		  enum ecore_chain_cnt_type cnt_type,
527*14b24e2bSVaishali Kulkarni 		  u32 num_elems,
528*14b24e2bSVaishali Kulkarni 		  osal_size_t elem_size,
529*14b24e2bSVaishali Kulkarni 		  struct ecore_chain *p_chain,
530*14b24e2bSVaishali Kulkarni 		  struct ecore_chain_ext_pbl *ext_pbl);
531*14b24e2bSVaishali Kulkarni 
532*14b24e2bSVaishali Kulkarni /**
533*14b24e2bSVaishali Kulkarni  * @brief ecore_chain_free - Free chain DMA memory
534*14b24e2bSVaishali Kulkarni  *
535*14b24e2bSVaishali Kulkarni  * @param p_hwfn
536*14b24e2bSVaishali Kulkarni  * @param p_chain
537*14b24e2bSVaishali Kulkarni  */
538*14b24e2bSVaishali Kulkarni void ecore_chain_free(struct ecore_dev *p_dev,
539*14b24e2bSVaishali Kulkarni 		      struct ecore_chain *p_chain);
540*14b24e2bSVaishali Kulkarni 
541*14b24e2bSVaishali Kulkarni /**
542*14b24e2bSVaishali Kulkarni  * @@brief ecore_fw_l2_queue - Get absolute L2 queue ID
543*14b24e2bSVaishali Kulkarni  *
544*14b24e2bSVaishali Kulkarni  *  @param p_hwfn
545*14b24e2bSVaishali Kulkarni  *  @param src_id - relative to p_hwfn
546*14b24e2bSVaishali Kulkarni  *  @param dst_id - absolute per engine
547*14b24e2bSVaishali Kulkarni  *
548*14b24e2bSVaishali Kulkarni  *  @return enum _ecore_status_t
549*14b24e2bSVaishali Kulkarni  */
550*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_fw_l2_queue(struct ecore_hwfn *p_hwfn,
551*14b24e2bSVaishali Kulkarni 				       u16 src_id,
552*14b24e2bSVaishali Kulkarni 				       u16 *dst_id);
553*14b24e2bSVaishali Kulkarni 
554*14b24e2bSVaishali Kulkarni /**
555*14b24e2bSVaishali Kulkarni  * @@brief ecore_fw_vport - Get absolute vport ID
556*14b24e2bSVaishali Kulkarni  *
557*14b24e2bSVaishali Kulkarni  *  @param p_hwfn
558*14b24e2bSVaishali Kulkarni  *  @param src_id - relative to p_hwfn
559*14b24e2bSVaishali Kulkarni  *  @param dst_id - absolute per engine
560*14b24e2bSVaishali Kulkarni  *
561*14b24e2bSVaishali Kulkarni  *  @return enum _ecore_status_t
562*14b24e2bSVaishali Kulkarni  */
563*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_fw_vport(struct ecore_hwfn *p_hwfn,
564*14b24e2bSVaishali Kulkarni 				    u8 src_id,
565*14b24e2bSVaishali Kulkarni 				    u8 *dst_id);
566*14b24e2bSVaishali Kulkarni 
567*14b24e2bSVaishali Kulkarni /**
568*14b24e2bSVaishali Kulkarni  * @@brief ecore_fw_rss_eng - Get absolute RSS engine ID
569*14b24e2bSVaishali Kulkarni  *
570*14b24e2bSVaishali Kulkarni  *  @param p_hwfn
571*14b24e2bSVaishali Kulkarni  *  @param src_id - relative to p_hwfn
572*14b24e2bSVaishali Kulkarni  *  @param dst_id - absolute per engine
573*14b24e2bSVaishali Kulkarni  *
574*14b24e2bSVaishali Kulkarni  *  @return enum _ecore_status_t
575*14b24e2bSVaishali Kulkarni  */
576*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_fw_rss_eng(struct ecore_hwfn *p_hwfn,
577*14b24e2bSVaishali Kulkarni 				      u8 src_id,
578*14b24e2bSVaishali Kulkarni 				      u8 *dst_id);
579*14b24e2bSVaishali Kulkarni 
580*14b24e2bSVaishali Kulkarni /**
581*14b24e2bSVaishali Kulkarni  * @brief ecore_llh_add_mac_filter - configures a MAC filter in llh
582*14b24e2bSVaishali Kulkarni  *
583*14b24e2bSVaishali Kulkarni  * @param p_hwfn
584*14b24e2bSVaishali Kulkarni  * @param p_ptt
585*14b24e2bSVaishali Kulkarni  * @param p_filter - MAC to add
586*14b24e2bSVaishali Kulkarni  */
587*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_llh_add_mac_filter(struct ecore_hwfn *p_hwfn,
588*14b24e2bSVaishali Kulkarni 					  struct ecore_ptt *p_ptt,
589*14b24e2bSVaishali Kulkarni 					  u8 *p_filter);
590*14b24e2bSVaishali Kulkarni 
591*14b24e2bSVaishali Kulkarni /**
592*14b24e2bSVaishali Kulkarni  * @brief ecore_llh_remove_mac_filter - removes a MAC filtre from llh
593*14b24e2bSVaishali Kulkarni  *
594*14b24e2bSVaishali Kulkarni  * @param p_hwfn
595*14b24e2bSVaishali Kulkarni  * @param p_ptt
596*14b24e2bSVaishali Kulkarni  * @param p_filter - MAC to remove
597*14b24e2bSVaishali Kulkarni  */
598*14b24e2bSVaishali Kulkarni void ecore_llh_remove_mac_filter(struct ecore_hwfn *p_hwfn,
599*14b24e2bSVaishali Kulkarni 			     struct ecore_ptt *p_ptt,
600*14b24e2bSVaishali Kulkarni 			     u8 *p_filter);
601*14b24e2bSVaishali Kulkarni 
602*14b24e2bSVaishali Kulkarni enum ecore_llh_port_filter_type_t {
603*14b24e2bSVaishali Kulkarni 	ECORE_LLH_FILTER_ETHERTYPE,
604*14b24e2bSVaishali Kulkarni 	ECORE_LLH_FILTER_TCP_SRC_PORT,
605*14b24e2bSVaishali Kulkarni 	ECORE_LLH_FILTER_TCP_DEST_PORT,
606*14b24e2bSVaishali Kulkarni 	ECORE_LLH_FILTER_TCP_SRC_AND_DEST_PORT,
607*14b24e2bSVaishali Kulkarni 	ECORE_LLH_FILTER_UDP_SRC_PORT,
608*14b24e2bSVaishali Kulkarni 	ECORE_LLH_FILTER_UDP_DEST_PORT,
609*14b24e2bSVaishali Kulkarni 	ECORE_LLH_FILTER_UDP_SRC_AND_DEST_PORT
610*14b24e2bSVaishali Kulkarni };
611*14b24e2bSVaishali Kulkarni 
612*14b24e2bSVaishali Kulkarni /**
613*14b24e2bSVaishali Kulkarni  * @brief ecore_llh_add_protocol_filter - configures a protocol filter in llh
614*14b24e2bSVaishali Kulkarni  *
615*14b24e2bSVaishali Kulkarni  * @param p_hwfn
616*14b24e2bSVaishali Kulkarni  * @param p_ptt
617*14b24e2bSVaishali Kulkarni  * @param source_port_or_eth_type - source port or ethertype to add
618*14b24e2bSVaishali Kulkarni  * @param dest_port - destination port to add
619*14b24e2bSVaishali Kulkarni  * @param type - type of filters and comparing
620*14b24e2bSVaishali Kulkarni  */
621*14b24e2bSVaishali Kulkarni enum _ecore_status_t
622*14b24e2bSVaishali Kulkarni ecore_llh_add_protocol_filter(struct ecore_hwfn *p_hwfn,
623*14b24e2bSVaishali Kulkarni 			      struct ecore_ptt *p_ptt,
624*14b24e2bSVaishali Kulkarni 			      u16 source_port_or_eth_type,
625*14b24e2bSVaishali Kulkarni 			      u16 dest_port,
626*14b24e2bSVaishali Kulkarni 			      enum ecore_llh_port_filter_type_t type);
627*14b24e2bSVaishali Kulkarni 
628*14b24e2bSVaishali Kulkarni /**
629*14b24e2bSVaishali Kulkarni  * @brief ecore_llh_remove_protocol_filter - remove a protocol filter in llh
630*14b24e2bSVaishali Kulkarni  *
631*14b24e2bSVaishali Kulkarni  * @param p_hwfn
632*14b24e2bSVaishali Kulkarni  * @param p_ptt
633*14b24e2bSVaishali Kulkarni  * @param source_port_or_eth_type - source port or ethertype to add
634*14b24e2bSVaishali Kulkarni  * @param dest_port - destination port to add
635*14b24e2bSVaishali Kulkarni  * @param type - type of filters and comparing
636*14b24e2bSVaishali Kulkarni  */
637*14b24e2bSVaishali Kulkarni void
638*14b24e2bSVaishali Kulkarni ecore_llh_remove_protocol_filter(struct ecore_hwfn *p_hwfn,
639*14b24e2bSVaishali Kulkarni 				 struct ecore_ptt *p_ptt,
640*14b24e2bSVaishali Kulkarni 				 u16 source_port_or_eth_type,
641*14b24e2bSVaishali Kulkarni 				 u16 dest_port,
642*14b24e2bSVaishali Kulkarni 				 enum ecore_llh_port_filter_type_t type);
643*14b24e2bSVaishali Kulkarni 
644*14b24e2bSVaishali Kulkarni /**
645*14b24e2bSVaishali Kulkarni  * @brief ecore_llh_clear_all_filters - removes all MAC filters from llh
646*14b24e2bSVaishali Kulkarni  *
647*14b24e2bSVaishali Kulkarni  * @param p_hwfn
648*14b24e2bSVaishali Kulkarni  * @param p_ptt
649*14b24e2bSVaishali Kulkarni  */
650*14b24e2bSVaishali Kulkarni void ecore_llh_clear_all_filters(struct ecore_hwfn *p_hwfn,
651*14b24e2bSVaishali Kulkarni 			     struct ecore_ptt *p_ptt);
652*14b24e2bSVaishali Kulkarni 
653*14b24e2bSVaishali Kulkarni /**
654*14b24e2bSVaishali Kulkarni  * @brief ecore_llh_set_function_as_default - set function as defult per port
655*14b24e2bSVaishali Kulkarni  *
656*14b24e2bSVaishali Kulkarni  * @param p_hwfn
657*14b24e2bSVaishali Kulkarni  * @param p_ptt
658*14b24e2bSVaishali Kulkarni  */
659*14b24e2bSVaishali Kulkarni enum _ecore_status_t
660*14b24e2bSVaishali Kulkarni ecore_llh_set_function_as_default(struct ecore_hwfn *p_hwfn,
661*14b24e2bSVaishali Kulkarni 				  struct ecore_ptt *p_ptt);
662*14b24e2bSVaishali Kulkarni 
663*14b24e2bSVaishali Kulkarni /**
664*14b24e2bSVaishali Kulkarni  *@brief Cleanup of previous driver remains prior to load
665*14b24e2bSVaishali Kulkarni  *
666*14b24e2bSVaishali Kulkarni  * @param p_hwfn
667*14b24e2bSVaishali Kulkarni  * @param p_ptt
668*14b24e2bSVaishali Kulkarni  * @param id - For PF, engine-relative. For VF, PF-relative.
669*14b24e2bSVaishali Kulkarni  * @param is_vf - true iff cleanup is made for a VF.
670*14b24e2bSVaishali Kulkarni  *
671*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
672*14b24e2bSVaishali Kulkarni  */
673*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_final_cleanup(struct ecore_hwfn	*p_hwfn,
674*14b24e2bSVaishali Kulkarni 					 struct ecore_ptt	*p_ptt,
675*14b24e2bSVaishali Kulkarni 					 u16			id,
676*14b24e2bSVaishali Kulkarni 					 bool			is_vf);
677*14b24e2bSVaishali Kulkarni /**
678*14b24e2bSVaishali Kulkarni  * @brief ecore_set_queue_coalesce - Configure coalesce parameters for Rx and
679*14b24e2bSVaishali Kulkarni  *    Tx queue. The fact that we can configure coalescing to up to 511, but on
680*14b24e2bSVaishali Kulkarni  *    varying accuracy [the bigger the value the less accurate] up to a mistake
681*14b24e2bSVaishali Kulkarni  *    of 3usec for the highest values.
682*14b24e2bSVaishali Kulkarni  *    While the API allows setting coalescing per-qid, all queues sharing a SB
683*14b24e2bSVaishali Kulkarni  *    should be in same range [i.e., either 0-0x7f, 0x80-0xff or 0x100-0x1ff]
684*14b24e2bSVaishali Kulkarni  *    otherwise configuration would break.
685*14b24e2bSVaishali Kulkarni  *
686*14b24e2bSVaishali Kulkarni  * @param p_hwfn
687*14b24e2bSVaishali Kulkarni  * @param rx_coal - Rx Coalesce value in micro seconds.
688*14b24e2bSVaishali Kulkarni  * @param tx_coal - TX Coalesce value in micro seconds.
689*14b24e2bSVaishali Kulkarni  * @param p_handle
690*14b24e2bSVaishali Kulkarni  *
691*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
692*14b24e2bSVaishali Kulkarni  **/
693*14b24e2bSVaishali Kulkarni enum _ecore_status_t
694*14b24e2bSVaishali Kulkarni ecore_set_queue_coalesce(struct ecore_hwfn *p_hwfn, u16 rx_coal,
695*14b24e2bSVaishali Kulkarni 			 u16 tx_coal, void *p_handle);
696*14b24e2bSVaishali Kulkarni 
697*14b24e2bSVaishali Kulkarni /**
698*14b24e2bSVaishali Kulkarni  * @brief - Recalculate feature distributions based on HW resources and
699*14b24e2bSVaishali Kulkarni  * user inputs. Currently this affects RDMA_CNQ, PF_L2_QUE and VF_L2_QUE.
700*14b24e2bSVaishali Kulkarni  * As a result, this must not be called while RDMA is active or while VFs
701*14b24e2bSVaishali Kulkarni  * are enabled.
702*14b24e2bSVaishali Kulkarni  *
703*14b24e2bSVaishali Kulkarni  * @param p_hwfn
704*14b24e2bSVaishali Kulkarni  */
705*14b24e2bSVaishali Kulkarni void ecore_hw_set_feat(struct ecore_hwfn *p_hwfn);
706*14b24e2bSVaishali Kulkarni 
707*14b24e2bSVaishali Kulkarni /**
708*14b24e2bSVaishali Kulkarni  * @brief ecore_change_pci_hwfn - Enable or disable PCI BUS MASTER
709*14b24e2bSVaishali Kulkarni  *
710*14b24e2bSVaishali Kulkarni  * @param p_hwfn
711*14b24e2bSVaishali Kulkarni  * @param p_ptt
712*14b24e2bSVaishali Kulkarni  * @param enable - true/false
713*14b24e2bSVaishali Kulkarni  *
714*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
715*14b24e2bSVaishali Kulkarni  */
716*14b24e2bSVaishali Kulkarni enum _ecore_status_t
717*14b24e2bSVaishali Kulkarni ecore_change_pci_hwfn(struct ecore_hwfn *p_hwfn,
718*14b24e2bSVaishali Kulkarni 		      struct ecore_ptt *p_ptt,
719*14b24e2bSVaishali Kulkarni 		      u8 enable);
720*14b24e2bSVaishali Kulkarni 
721*14b24e2bSVaishali Kulkarni #endif
722