1316485Sdavidcs/*
2316485Sdavidcs * Copyright (c) 2017-2018 Cavium, Inc.
3316485Sdavidcs * All rights reserved.
4316485Sdavidcs *
5316485Sdavidcs *  Redistribution and use in source and binary forms, with or without
6316485Sdavidcs *  modification, are permitted provided that the following conditions
7316485Sdavidcs *  are met:
8316485Sdavidcs *
9316485Sdavidcs *  1. Redistributions of source code must retain the above copyright
10316485Sdavidcs *     notice, this list of conditions and the following disclaimer.
11316485Sdavidcs *  2. Redistributions in binary form must reproduce the above copyright
12316485Sdavidcs *     notice, this list of conditions and the following disclaimer in the
13316485Sdavidcs *     documentation and/or other materials provided with the distribution.
14316485Sdavidcs *
15316485Sdavidcs *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16316485Sdavidcs *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17316485Sdavidcs *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18316485Sdavidcs *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19316485Sdavidcs *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20316485Sdavidcs *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21316485Sdavidcs *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22316485Sdavidcs *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23316485Sdavidcs *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24316485Sdavidcs *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25316485Sdavidcs *  POSSIBILITY OF SUCH DAMAGE.
26316485Sdavidcs *
27316485Sdavidcs * $FreeBSD: stable/11/sys/dev/qlnx/qlnxe/ecore_dev_api.h 337517 2018-08-09 01:17:35Z davidcs $
28316485Sdavidcs *
29316485Sdavidcs */
30316485Sdavidcs
31316485Sdavidcs#ifndef __ECORE_DEV_API_H__
32316485Sdavidcs#define __ECORE_DEV_API_H__
33316485Sdavidcs
34316485Sdavidcs#include "ecore_status.h"
35316485Sdavidcs#include "ecore_chain.h"
36316485Sdavidcs#include "ecore_int_api.h"
37316485Sdavidcs
38337517Sdavidcs#define ECORE_DEFAULT_ILT_PAGE_SIZE 4
39337517Sdavidcs
40316485Sdavidcsstruct ecore_wake_info {
41316485Sdavidcs	u32 wk_info;
42316485Sdavidcs	u32 wk_details;
43316485Sdavidcs	u32 wk_pkt_len;
44316485Sdavidcs	u8  wk_buffer[256];
45316485Sdavidcs};
46316485Sdavidcs
47316485Sdavidcs/**
48316485Sdavidcs * @brief ecore_init_dp - initialize the debug level
49316485Sdavidcs *
50316485Sdavidcs * @param p_dev
51316485Sdavidcs * @param dp_module
52316485Sdavidcs * @param dp_level
53316485Sdavidcs * @param dp_ctx
54316485Sdavidcs */
55316485Sdavidcsvoid ecore_init_dp(struct ecore_dev *p_dev,
56316485Sdavidcs		   u32 dp_module,
57316485Sdavidcs		   u8 dp_level,
58316485Sdavidcs		   void *dp_ctx);
59316485Sdavidcs
60316485Sdavidcs/**
61316485Sdavidcs * @brief ecore_init_struct - initialize the device structure to
62316485Sdavidcs *        its defaults
63316485Sdavidcs *
64316485Sdavidcs * @param p_dev
65316485Sdavidcs */
66337517Sdavidcsenum _ecore_status_t ecore_init_struct(struct ecore_dev *p_dev);
67316485Sdavidcs
68316485Sdavidcs/**
69316485Sdavidcs * @brief ecore_resc_free -
70316485Sdavidcs *
71316485Sdavidcs * @param p_dev
72316485Sdavidcs */
73316485Sdavidcsvoid ecore_resc_free(struct ecore_dev *p_dev);
74316485Sdavidcs
75316485Sdavidcs/**
76316485Sdavidcs * @brief ecore_resc_alloc -
77316485Sdavidcs *
78316485Sdavidcs * @param p_dev
79316485Sdavidcs *
80316485Sdavidcs * @return enum _ecore_status_t
81316485Sdavidcs */
82316485Sdavidcsenum _ecore_status_t ecore_resc_alloc(struct ecore_dev *p_dev);
83316485Sdavidcs
84316485Sdavidcs/**
85316485Sdavidcs * @brief ecore_resc_setup -
86316485Sdavidcs *
87316485Sdavidcs * @param p_dev
88316485Sdavidcs */
89316485Sdavidcsvoid ecore_resc_setup(struct ecore_dev *p_dev);
90316485Sdavidcs
91337517Sdavidcsenum ecore_mfw_timeout_fallback {
92337517Sdavidcs	ECORE_TO_FALLBACK_TO_NONE,
93337517Sdavidcs	ECORE_TO_FALLBACK_TO_DEFAULT,
94337517Sdavidcs	ECORE_TO_FALLBACK_FAIL_LOAD,
95337517Sdavidcs};
96337517Sdavidcs
97316485Sdavidcsenum ecore_override_force_load {
98316485Sdavidcs	ECORE_OVERRIDE_FORCE_LOAD_NONE,
99316485Sdavidcs	ECORE_OVERRIDE_FORCE_LOAD_ALWAYS,
100316485Sdavidcs	ECORE_OVERRIDE_FORCE_LOAD_NEVER,
101316485Sdavidcs};
102316485Sdavidcs
103316485Sdavidcsstruct ecore_drv_load_params {
104316485Sdavidcs	/* Indicates whether the driver is running over a crash kernel.
105316485Sdavidcs	 * As part of the load request, this will be used for providing the
106316485Sdavidcs	 * driver role to the MFW.
107316485Sdavidcs	 * In case of a crash kernel over PDA - this should be set to false.
108316485Sdavidcs	 */
109316485Sdavidcs	bool is_crash_kernel;
110316485Sdavidcs
111316485Sdavidcs	/* The timeout value that the MFW should use when locking the engine for
112316485Sdavidcs	 * the driver load process.
113316485Sdavidcs	 * A value of '0' means the default value, and '255' means no timeout.
114316485Sdavidcs	 */
115316485Sdavidcs	u8 mfw_timeout_val;
116316485Sdavidcs#define ECORE_LOAD_REQ_LOCK_TO_DEFAULT	0
117316485Sdavidcs#define ECORE_LOAD_REQ_LOCK_TO_NONE	255
118316485Sdavidcs
119337517Sdavidcs	/* Action to take in case the MFW doesn't support timeout values other
120337517Sdavidcs	 * then default and none.
121337517Sdavidcs	 */
122337517Sdavidcs	enum ecore_mfw_timeout_fallback mfw_timeout_fallback;
123337517Sdavidcs
124316485Sdavidcs	/* Avoid engine reset when first PF loads on it */
125316485Sdavidcs	bool avoid_eng_reset;
126316485Sdavidcs
127316485Sdavidcs	/* Allow overriding the default force load behavior */
128316485Sdavidcs	enum ecore_override_force_load override_force_load;
129316485Sdavidcs};
130316485Sdavidcs
131316485Sdavidcsstruct ecore_hw_init_params {
132316485Sdavidcs	/* Tunneling parameters */
133316485Sdavidcs	struct ecore_tunnel_info *p_tunn;
134316485Sdavidcs
135316485Sdavidcs	bool b_hw_start;
136316485Sdavidcs
137316485Sdavidcs	/* Interrupt mode [msix, inta, etc.] to use */
138316485Sdavidcs	enum ecore_int_mode int_mode;
139316485Sdavidcs
140316485Sdavidcs	/* NPAR tx switching to be used for vports configured for tx-switching */
141316485Sdavidcs	bool allow_npar_tx_switch;
142316485Sdavidcs
143337517Sdavidcs	/* PCI relax ordering to be configured by MFW or ecore client */
144337517Sdavidcs	enum ecore_pci_rlx_odr pci_rlx_odr_mode;
145337517Sdavidcs
146316485Sdavidcs	/* Binary fw data pointer in binary fw file */
147316485Sdavidcs	const u8 *bin_fw_data;
148316485Sdavidcs
149316485Sdavidcs	/* Driver load parameters */
150316485Sdavidcs	struct ecore_drv_load_params *p_drv_load_params;
151337517Sdavidcs
152337517Sdavidcs	/* Avoid engine affinity for RoCE/storage in case of CMT mode */
153337517Sdavidcs	bool avoid_eng_affin;
154316485Sdavidcs};
155316485Sdavidcs
156316485Sdavidcs/**
157316485Sdavidcs * @brief ecore_hw_init -
158316485Sdavidcs *
159316485Sdavidcs * @param p_dev
160316485Sdavidcs * @param p_params
161316485Sdavidcs *
162316485Sdavidcs * @return enum _ecore_status_t
163316485Sdavidcs */
164316485Sdavidcsenum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev,
165316485Sdavidcs				   struct ecore_hw_init_params *p_params);
166316485Sdavidcs
167316485Sdavidcs/**
168316485Sdavidcs * @brief ecore_hw_timers_stop_all -
169316485Sdavidcs *
170316485Sdavidcs * @param p_dev
171316485Sdavidcs *
172316485Sdavidcs * @return void
173316485Sdavidcs */
174316485Sdavidcsvoid ecore_hw_timers_stop_all(struct ecore_dev *p_dev);
175316485Sdavidcs
176316485Sdavidcs/**
177316485Sdavidcs * @brief ecore_hw_stop -
178316485Sdavidcs *
179316485Sdavidcs * @param p_dev
180316485Sdavidcs *
181316485Sdavidcs * @return enum _ecore_status_t
182316485Sdavidcs */
183316485Sdavidcsenum _ecore_status_t ecore_hw_stop(struct ecore_dev *p_dev);
184316485Sdavidcs
185316485Sdavidcs/**
186316485Sdavidcs * @brief ecore_hw_stop_fastpath -should be called incase
187316485Sdavidcs *        slowpath is still required for the device,
188316485Sdavidcs *        but fastpath is not.
189316485Sdavidcs *
190316485Sdavidcs * @param p_dev
191316485Sdavidcs *
192320164Sdavidcs * @return enum _ecore_status_t
193316485Sdavidcs */
194320164Sdavidcsenum _ecore_status_t ecore_hw_stop_fastpath(struct ecore_dev *p_dev);
195316485Sdavidcs
196337517Sdavidcs#ifndef LINUX_REMOVE
197316485Sdavidcs/**
198316485Sdavidcs * @brief ecore_hw_hibernate_prepare -should be called when
199316485Sdavidcs *        the system is going into the hibernate state
200316485Sdavidcs *
201316485Sdavidcs * @param p_dev
202316485Sdavidcs *
203316485Sdavidcs */
204316485Sdavidcsvoid ecore_hw_hibernate_prepare(struct ecore_dev *p_dev);
205316485Sdavidcs
206316485Sdavidcs/**
207316485Sdavidcs * @brief ecore_hw_hibernate_resume -should be called when the system is
208316485Sdavidcs	  resuming from D3 power state and before calling ecore_hw_init.
209316485Sdavidcs *
210316485Sdavidcs * @param p_hwfn
211316485Sdavidcs *
212316485Sdavidcs */
213316485Sdavidcsvoid ecore_hw_hibernate_resume(struct ecore_dev *p_dev);
214316485Sdavidcs
215337517Sdavidcs#endif
216316485Sdavidcs
217316485Sdavidcs/**
218316485Sdavidcs * @brief ecore_hw_start_fastpath -restart fastpath traffic,
219316485Sdavidcs *        only if hw_stop_fastpath was called
220316485Sdavidcs
221320164Sdavidcs * @param p_hwfn
222316485Sdavidcs *
223320164Sdavidcs * @return enum _ecore_status_t
224316485Sdavidcs */
225320164Sdavidcsenum _ecore_status_t ecore_hw_start_fastpath(struct ecore_hwfn *p_hwfn);
226316485Sdavidcs
227316485Sdavidcsenum ecore_hw_prepare_result {
228316485Sdavidcs	ECORE_HW_PREPARE_SUCCESS,
229316485Sdavidcs
230316485Sdavidcs	/* FAILED results indicate probe has failed & cleaned up */
231316485Sdavidcs	ECORE_HW_PREPARE_FAILED_ENG2,
232316485Sdavidcs	ECORE_HW_PREPARE_FAILED_ME,
233316485Sdavidcs	ECORE_HW_PREPARE_FAILED_MEM,
234316485Sdavidcs	ECORE_HW_PREPARE_FAILED_DEV,
235316485Sdavidcs	ECORE_HW_PREPARE_FAILED_NVM,
236316485Sdavidcs
237316485Sdavidcs	/* BAD results indicate probe is passed even though some wrongness
238316485Sdavidcs	 * has occurred; Trying to actually use [I.e., hw_init()] might have
239316485Sdavidcs	 * dire reprecautions.
240316485Sdavidcs	 */
241316485Sdavidcs	ECORE_HW_PREPARE_BAD_IOV,
242316485Sdavidcs	ECORE_HW_PREPARE_BAD_MCP,
243316485Sdavidcs	ECORE_HW_PREPARE_BAD_IGU,
244316485Sdavidcs};
245316485Sdavidcs
246316485Sdavidcsstruct ecore_hw_prepare_params {
247316485Sdavidcs	/* Personality to initialize */
248316485Sdavidcs	int personality;
249316485Sdavidcs
250316485Sdavidcs	/* Force the driver's default resource allocation */
251316485Sdavidcs	bool drv_resc_alloc;
252316485Sdavidcs
253316485Sdavidcs	/* Check the reg_fifo after any register access */
254316485Sdavidcs	bool chk_reg_fifo;
255316485Sdavidcs
256316485Sdavidcs	/* Request the MFW to initiate PF FLR */
257316485Sdavidcs	bool initiate_pf_flr;
258316485Sdavidcs
259316485Sdavidcs	/* The OS Epoch time in seconds */
260316485Sdavidcs	u32 epoch;
261316485Sdavidcs
262316485Sdavidcs	/* Allow the MFW to collect a crash dump */
263316485Sdavidcs	bool allow_mdump;
264316485Sdavidcs
265316485Sdavidcs	/* Allow prepare to pass even if some initializations are failing.
266316485Sdavidcs	 * If set, the `p_prepare_res' field would be set with the return,
267316485Sdavidcs	 * and might allow probe to pass even if there are certain issues.
268316485Sdavidcs	 */
269316485Sdavidcs	bool b_relaxed_probe;
270316485Sdavidcs	enum ecore_hw_prepare_result p_relaxed_res;
271316485Sdavidcs};
272316485Sdavidcs
273316485Sdavidcs/**
274316485Sdavidcs * @brief ecore_hw_prepare -
275316485Sdavidcs *
276316485Sdavidcs * @param p_dev
277316485Sdavidcs * @param p_params
278316485Sdavidcs *
279316485Sdavidcs * @return enum _ecore_status_t
280316485Sdavidcs */
281316485Sdavidcsenum _ecore_status_t ecore_hw_prepare(struct ecore_dev *p_dev,
282316485Sdavidcs				      struct ecore_hw_prepare_params *p_params);
283316485Sdavidcs
284316485Sdavidcs/**
285316485Sdavidcs * @brief ecore_hw_remove -
286316485Sdavidcs *
287316485Sdavidcs * @param p_dev
288316485Sdavidcs */
289316485Sdavidcsvoid ecore_hw_remove(struct ecore_dev *p_dev);
290316485Sdavidcs
291316485Sdavidcs/**
292316485Sdavidcs* @brief ecore_set_nwuf_reg -
293316485Sdavidcs*
294316485Sdavidcs* @param p_dev
295316485Sdavidcs* @param reg_idx - Index of the pattern register
296316485Sdavidcs* @param pattern_size - size of pattern
297316485Sdavidcs* @param crc - CRC value of patter & mask
298316485Sdavidcs*
299316485Sdavidcs* @return enum _ecore_status_t
300316485Sdavidcs*/
301316485Sdavidcsenum _ecore_status_t ecore_set_nwuf_reg(struct ecore_dev *p_dev,
302320164Sdavidcs					u32 reg_idx, u32 pattern_size, u32 crc);
303316485Sdavidcs
304316485Sdavidcs/**
305316485Sdavidcs* @brief ecore_get_wake_info - get magic packet buffer
306316485Sdavidcs*
307320164Sdavidcs* @param p_hwfn
308320164Sdavidcs* @param p_ppt
309316485Sdavidcs* @param wake_info - pointer to ecore_wake_info buffer
310316485Sdavidcs*
311316485Sdavidcs* @return enum _ecore_status_t
312316485Sdavidcs*/
313320164Sdavidcsenum _ecore_status_t ecore_get_wake_info(struct ecore_hwfn *p_hwfn,
314320164Sdavidcs					 struct ecore_ptt *p_ptt,
315320164Sdavidcs					 struct ecore_wake_info *wake_info);
316316485Sdavidcs
317316485Sdavidcs/**
318316485Sdavidcs* @brief ecore_wol_buffer_clear - Clear magic package buffer
319316485Sdavidcs*
320320164Sdavidcs* @param p_hwfn
321320164Sdavidcs* @param p_ptt
322316485Sdavidcs*
323316485Sdavidcs* @return void
324316485Sdavidcs*/
325320164Sdavidcsvoid ecore_wol_buffer_clear(struct ecore_hwfn *p_hwfn,
326320164Sdavidcs			    struct ecore_ptt *p_ptt);
327316485Sdavidcs
328316485Sdavidcs/**
329316485Sdavidcs * @brief ecore_ptt_acquire - Allocate a PTT window
330316485Sdavidcs *
331316485Sdavidcs * Should be called at the entry point to the driver (at the beginning of an
332316485Sdavidcs * exported function)
333316485Sdavidcs *
334316485Sdavidcs * @param p_hwfn
335316485Sdavidcs *
336316485Sdavidcs * @return struct ecore_ptt
337316485Sdavidcs */
338316485Sdavidcsstruct ecore_ptt *ecore_ptt_acquire(struct ecore_hwfn *p_hwfn);
339316485Sdavidcs
340316485Sdavidcs/**
341316485Sdavidcs * @brief ecore_ptt_release - Release PTT Window
342316485Sdavidcs *
343316485Sdavidcs * Should be called at the end of a flow - at the end of the function that
344316485Sdavidcs * acquired the PTT.
345316485Sdavidcs *
346316485Sdavidcs *
347316485Sdavidcs * @param p_hwfn
348316485Sdavidcs * @param p_ptt
349316485Sdavidcs */
350316485Sdavidcsvoid ecore_ptt_release(struct ecore_hwfn *p_hwfn,
351316485Sdavidcs		       struct ecore_ptt *p_ptt);
352316485Sdavidcs
353337517Sdavidcs/**
354337517Sdavidcs * @brief ecore_get_dev_name - get device name, e.g., "BB B0"
355337517Sdavidcs *
356337517Sdavidcs * @param p_hwfn
357337517Sdavidcs * @param name - this is where the name will be written to
358337517Sdavidcs * @param max_chars - maximum chars that can be written to name including '\0'
359337517Sdavidcs */
360337517Sdavidcsvoid ecore_get_dev_name(struct ecore_dev *p_dev,
361337517Sdavidcs			u8 *name,
362337517Sdavidcs			u8 max_chars);
363337517Sdavidcs
364337517Sdavidcs#ifndef __EXTRACT__LINUX__IF__
365316485Sdavidcsstruct ecore_eth_stats_common {
366316485Sdavidcs	u64 no_buff_discards;
367316485Sdavidcs	u64 packet_too_big_discard;
368316485Sdavidcs	u64 ttl0_discard;
369316485Sdavidcs	u64 rx_ucast_bytes;
370316485Sdavidcs	u64 rx_mcast_bytes;
371316485Sdavidcs	u64 rx_bcast_bytes;
372316485Sdavidcs	u64 rx_ucast_pkts;
373316485Sdavidcs	u64 rx_mcast_pkts;
374316485Sdavidcs	u64 rx_bcast_pkts;
375316485Sdavidcs	u64 mftag_filter_discards;
376316485Sdavidcs	u64 mac_filter_discards;
377316485Sdavidcs	u64 tx_ucast_bytes;
378316485Sdavidcs	u64 tx_mcast_bytes;
379316485Sdavidcs	u64 tx_bcast_bytes;
380316485Sdavidcs	u64 tx_ucast_pkts;
381316485Sdavidcs	u64 tx_mcast_pkts;
382316485Sdavidcs	u64 tx_bcast_pkts;
383316485Sdavidcs	u64 tx_err_drop_pkts;
384316485Sdavidcs	u64 tpa_coalesced_pkts;
385316485Sdavidcs	u64 tpa_coalesced_events;
386316485Sdavidcs	u64 tpa_aborts_num;
387316485Sdavidcs	u64 tpa_not_coalesced_pkts;
388316485Sdavidcs	u64 tpa_coalesced_bytes;
389316485Sdavidcs
390316485Sdavidcs	/* port */
391316485Sdavidcs	u64 rx_64_byte_packets;
392316485Sdavidcs	u64 rx_65_to_127_byte_packets;
393316485Sdavidcs	u64 rx_128_to_255_byte_packets;
394316485Sdavidcs	u64 rx_256_to_511_byte_packets;
395316485Sdavidcs	u64 rx_512_to_1023_byte_packets;
396316485Sdavidcs	u64 rx_1024_to_1518_byte_packets;
397316485Sdavidcs	u64 rx_crc_errors;
398316485Sdavidcs	u64 rx_mac_crtl_frames;
399316485Sdavidcs	u64 rx_pause_frames;
400316485Sdavidcs	u64 rx_pfc_frames;
401316485Sdavidcs	u64 rx_align_errors;
402316485Sdavidcs	u64 rx_carrier_errors;
403316485Sdavidcs	u64 rx_oversize_packets;
404316485Sdavidcs	u64 rx_jabbers;
405316485Sdavidcs	u64 rx_undersize_packets;
406316485Sdavidcs	u64 rx_fragments;
407316485Sdavidcs	u64 tx_64_byte_packets;
408316485Sdavidcs	u64 tx_65_to_127_byte_packets;
409316485Sdavidcs	u64 tx_128_to_255_byte_packets;
410316485Sdavidcs	u64 tx_256_to_511_byte_packets;
411316485Sdavidcs	u64 tx_512_to_1023_byte_packets;
412316485Sdavidcs	u64 tx_1024_to_1518_byte_packets;
413316485Sdavidcs	u64 tx_pause_frames;
414316485Sdavidcs	u64 tx_pfc_frames;
415316485Sdavidcs	u64 brb_truncates;
416316485Sdavidcs	u64 brb_discards;
417316485Sdavidcs	u64 rx_mac_bytes;
418316485Sdavidcs	u64 rx_mac_uc_packets;
419316485Sdavidcs	u64 rx_mac_mc_packets;
420316485Sdavidcs	u64 rx_mac_bc_packets;
421316485Sdavidcs	u64 rx_mac_frames_ok;
422316485Sdavidcs	u64 tx_mac_bytes;
423316485Sdavidcs	u64 tx_mac_uc_packets;
424316485Sdavidcs	u64 tx_mac_mc_packets;
425316485Sdavidcs	u64 tx_mac_bc_packets;
426316485Sdavidcs	u64 tx_mac_ctrl_frames;
427337517Sdavidcs	u64 link_change_count;
428316485Sdavidcs};
429316485Sdavidcs
430316485Sdavidcsstruct ecore_eth_stats_bb {
431316485Sdavidcs	u64 rx_1519_to_1522_byte_packets;
432316485Sdavidcs	u64 rx_1519_to_2047_byte_packets;
433316485Sdavidcs	u64 rx_2048_to_4095_byte_packets;
434316485Sdavidcs	u64 rx_4096_to_9216_byte_packets;
435316485Sdavidcs	u64 rx_9217_to_16383_byte_packets;
436316485Sdavidcs	u64 tx_1519_to_2047_byte_packets;
437316485Sdavidcs	u64 tx_2048_to_4095_byte_packets;
438316485Sdavidcs	u64 tx_4096_to_9216_byte_packets;
439316485Sdavidcs	u64 tx_9217_to_16383_byte_packets;
440316485Sdavidcs	u64 tx_lpi_entry_count;
441316485Sdavidcs	u64 tx_total_collisions;
442316485Sdavidcs};
443316485Sdavidcs
444316485Sdavidcsstruct ecore_eth_stats_ah {
445316485Sdavidcs	u64 rx_1519_to_max_byte_packets;
446316485Sdavidcs	u64 tx_1519_to_max_byte_packets;
447316485Sdavidcs};
448316485Sdavidcs
449316485Sdavidcsstruct ecore_eth_stats {
450316485Sdavidcs	struct ecore_eth_stats_common common;
451316485Sdavidcs	union {
452316485Sdavidcs		struct ecore_eth_stats_bb bb;
453316485Sdavidcs		struct ecore_eth_stats_ah ah;
454316485Sdavidcs	};
455316485Sdavidcs};
456320164Sdavidcs#endif
457316485Sdavidcs
458316485Sdavidcsenum ecore_dmae_address_type_t {
459316485Sdavidcs	ECORE_DMAE_ADDRESS_HOST_VIRT,
460316485Sdavidcs	ECORE_DMAE_ADDRESS_HOST_PHYS,
461316485Sdavidcs	ECORE_DMAE_ADDRESS_GRC
462316485Sdavidcs};
463316485Sdavidcs
464316485Sdavidcs/* value of flags If ECORE_DMAE_FLAG_RW_REPL_SRC flag is set and the
465316485Sdavidcs * source is a block of length DMAE_MAX_RW_SIZE and the
466316485Sdavidcs * destination is larger, the source block will be duplicated as
467316485Sdavidcs * many times as required to fill the destination block. This is
468316485Sdavidcs * used mostly to write a zeroed buffer to destination address
469316485Sdavidcs * using DMA
470316485Sdavidcs */
471316485Sdavidcs#define ECORE_DMAE_FLAG_RW_REPL_SRC	0x00000001
472316485Sdavidcs#define ECORE_DMAE_FLAG_VF_SRC		0x00000002
473316485Sdavidcs#define ECORE_DMAE_FLAG_VF_DST		0x00000004
474316485Sdavidcs#define ECORE_DMAE_FLAG_COMPLETION_DST	0x00000008
475337517Sdavidcs#define ECORE_DMAE_FLAG_PORT		0x00000010
476337517Sdavidcs#define ECORE_DMAE_FLAG_PF_SRC		0x00000020
477337517Sdavidcs#define ECORE_DMAE_FLAG_PF_DST		0x00000040
478316485Sdavidcs
479316485Sdavidcsstruct ecore_dmae_params {
480316485Sdavidcs	u32 flags; /* consists of ECORE_DMAE_FLAG_* values */
481316485Sdavidcs	u8 src_vfid;
482316485Sdavidcs	u8 dst_vfid;
483337517Sdavidcs	u8 port_id;
484337517Sdavidcs	u8 src_pfid;
485337517Sdavidcs	u8 dst_pfid;
486316485Sdavidcs};
487316485Sdavidcs
488316485Sdavidcs/**
489316485Sdavidcs * @brief ecore_dmae_host2grc - copy data from source addr to
490316485Sdavidcs * dmae registers using the given ptt
491316485Sdavidcs *
492316485Sdavidcs * @param p_hwfn
493316485Sdavidcs * @param p_ptt
494316485Sdavidcs * @param source_addr
495316485Sdavidcs * @param grc_addr (dmae_data_offset)
496316485Sdavidcs * @param size_in_dwords
497337517Sdavidcs * @param p_params (default parameters will be used in case of OSAL_NULL)
498337517Sdavidcs *
499337517Sdavidcs * @return enum _ecore_status_t
500316485Sdavidcs */
501316485Sdavidcsenum _ecore_status_t
502316485Sdavidcsecore_dmae_host2grc(struct ecore_hwfn *p_hwfn,
503316485Sdavidcs		    struct ecore_ptt *p_ptt,
504316485Sdavidcs		    u64 source_addr,
505316485Sdavidcs		    u32 grc_addr,
506316485Sdavidcs		    u32 size_in_dwords,
507337517Sdavidcs		    struct ecore_dmae_params *p_params);
508316485Sdavidcs
509316485Sdavidcs/**
510316485Sdavidcs * @brief ecore_dmae_grc2host - Read data from dmae data offset
511316485Sdavidcs * to source address using the given ptt
512316485Sdavidcs *
513316485Sdavidcs * @param p_ptt
514316485Sdavidcs * @param grc_addr (dmae_data_offset)
515316485Sdavidcs * @param dest_addr
516316485Sdavidcs * @param size_in_dwords
517337517Sdavidcs * @param p_params (default parameters will be used in case of OSAL_NULL)
518337517Sdavidcs *
519337517Sdavidcs * @return enum _ecore_status_t
520316485Sdavidcs */
521316485Sdavidcsenum _ecore_status_t
522316485Sdavidcsecore_dmae_grc2host(struct ecore_hwfn *p_hwfn,
523316485Sdavidcs		    struct ecore_ptt *p_ptt,
524316485Sdavidcs		    u32 grc_addr,
525316485Sdavidcs		    dma_addr_t dest_addr,
526316485Sdavidcs		    u32 size_in_dwords,
527337517Sdavidcs		    struct ecore_dmae_params *p_params);
528316485Sdavidcs
529316485Sdavidcs/**
530316485Sdavidcs * @brief ecore_dmae_host2host - copy data from to source address
531320164Sdavidcs * to a destination adress (for SRIOV) using the given ptt
532316485Sdavidcs *
533316485Sdavidcs * @param p_hwfn
534316485Sdavidcs * @param p_ptt
535316485Sdavidcs * @param source_addr
536316485Sdavidcs * @param dest_addr
537316485Sdavidcs * @param size_in_dwords
538337517Sdavidcs * @param p_params (default parameters will be used in case of OSAL_NULL)
539337517Sdavidcs *
540337517Sdavidcs * @return enum _ecore_status_t
541316485Sdavidcs */
542316485Sdavidcsenum _ecore_status_t
543316485Sdavidcsecore_dmae_host2host(struct ecore_hwfn *p_hwfn,
544316485Sdavidcs		     struct ecore_ptt *p_ptt,
545316485Sdavidcs		     dma_addr_t source_addr,
546316485Sdavidcs		     dma_addr_t dest_addr,
547316485Sdavidcs		     u32 size_in_dwords,
548316485Sdavidcs		     struct ecore_dmae_params *p_params);
549316485Sdavidcs
550316485Sdavidcs/**
551316485Sdavidcs * @brief ecore_chain_alloc - Allocate and initialize a chain
552316485Sdavidcs *
553316485Sdavidcs * @param p_hwfn
554316485Sdavidcs * @param intended_use
555316485Sdavidcs * @param mode
556316485Sdavidcs * @param num_elems
557316485Sdavidcs * @param elem_size
558316485Sdavidcs * @param p_chain
559316485Sdavidcs *
560316485Sdavidcs * @return enum _ecore_status_t
561316485Sdavidcs */
562316485Sdavidcsenum _ecore_status_t
563316485Sdavidcsecore_chain_alloc(struct ecore_dev *p_dev,
564316485Sdavidcs		  enum ecore_chain_use_mode intended_use,
565316485Sdavidcs		  enum ecore_chain_mode mode,
566316485Sdavidcs		  enum ecore_chain_cnt_type cnt_type,
567316485Sdavidcs		  u32 num_elems,
568316485Sdavidcs		  osal_size_t elem_size,
569316485Sdavidcs		  struct ecore_chain *p_chain,
570316485Sdavidcs		  struct ecore_chain_ext_pbl *ext_pbl);
571316485Sdavidcs
572316485Sdavidcs/**
573316485Sdavidcs * @brief ecore_chain_free - Free chain DMA memory
574316485Sdavidcs *
575316485Sdavidcs * @param p_hwfn
576316485Sdavidcs * @param p_chain
577316485Sdavidcs */
578316485Sdavidcsvoid ecore_chain_free(struct ecore_dev *p_dev,
579316485Sdavidcs		      struct ecore_chain *p_chain);
580316485Sdavidcs
581316485Sdavidcs/**
582316485Sdavidcs * @@brief ecore_fw_l2_queue - Get absolute L2 queue ID
583316485Sdavidcs *
584316485Sdavidcs *  @param p_hwfn
585316485Sdavidcs *  @param src_id - relative to p_hwfn
586316485Sdavidcs *  @param dst_id - absolute per engine
587316485Sdavidcs *
588316485Sdavidcs *  @return enum _ecore_status_t
589316485Sdavidcs */
590316485Sdavidcsenum _ecore_status_t ecore_fw_l2_queue(struct ecore_hwfn *p_hwfn,
591316485Sdavidcs				       u16 src_id,
592316485Sdavidcs				       u16 *dst_id);
593316485Sdavidcs
594316485Sdavidcs/**
595316485Sdavidcs * @@brief ecore_fw_vport - Get absolute vport ID
596316485Sdavidcs *
597316485Sdavidcs *  @param p_hwfn
598316485Sdavidcs *  @param src_id - relative to p_hwfn
599316485Sdavidcs *  @param dst_id - absolute per engine
600316485Sdavidcs *
601316485Sdavidcs *  @return enum _ecore_status_t
602316485Sdavidcs */
603316485Sdavidcsenum _ecore_status_t ecore_fw_vport(struct ecore_hwfn *p_hwfn,
604316485Sdavidcs				    u8 src_id,
605316485Sdavidcs				    u8 *dst_id);
606316485Sdavidcs
607316485Sdavidcs/**
608316485Sdavidcs * @@brief ecore_fw_rss_eng - Get absolute RSS engine ID
609316485Sdavidcs *
610316485Sdavidcs *  @param p_hwfn
611316485Sdavidcs *  @param src_id - relative to p_hwfn
612316485Sdavidcs *  @param dst_id - absolute per engine
613316485Sdavidcs *
614316485Sdavidcs *  @return enum _ecore_status_t
615316485Sdavidcs */
616316485Sdavidcsenum _ecore_status_t ecore_fw_rss_eng(struct ecore_hwfn *p_hwfn,
617316485Sdavidcs				      u8 src_id,
618316485Sdavidcs				      u8 *dst_id);
619316485Sdavidcs
620316485Sdavidcs/**
621337517Sdavidcs * @brief ecore_llh_get_num_ppfid - Return the allocated number of LLH filter
622337517Sdavidcs *	banks that are allocated to the PF.
623316485Sdavidcs *
624337517Sdavidcs * @param p_dev
625337517Sdavidcs *
626337517Sdavidcs * @return u8 - Number of LLH filter banks
627316485Sdavidcs */
628337517Sdavidcsu8 ecore_llh_get_num_ppfid(struct ecore_dev *p_dev);
629316485Sdavidcs
630337517Sdavidcsenum ecore_eng {
631337517Sdavidcs	ECORE_ENG0,
632337517Sdavidcs	ECORE_ENG1,
633337517Sdavidcs	ECORE_BOTH_ENG,
634337517Sdavidcs};
635337517Sdavidcs
636316485Sdavidcs/**
637337517Sdavidcs * @brief ecore_llh_get_l2_affinity_hint - Return the hint for the L2 affinity
638316485Sdavidcs *
639337517Sdavidcs * @param p_dev
640337517Sdavidcs *
641337517Sdavidcs * @return enum ecore_eng - L2 affintiy hint
642316485Sdavidcs */
643337517Sdavidcsenum ecore_eng ecore_llh_get_l2_affinity_hint(struct ecore_dev *p_dev);
644316485Sdavidcs
645337517Sdavidcs/**
646337517Sdavidcs * @brief ecore_llh_set_ppfid_affinity - Set the engine affinity for the given
647337517Sdavidcs *	LLH filter bank.
648337517Sdavidcs *
649337517Sdavidcs * @param p_dev
650337517Sdavidcs * @param ppfid - relative within the allocated ppfids ('0' is the default one).
651337517Sdavidcs * @param eng
652337517Sdavidcs *
653337517Sdavidcs * @return enum _ecore_status_t
654337517Sdavidcs */
655337517Sdavidcsenum _ecore_status_t ecore_llh_set_ppfid_affinity(struct ecore_dev *p_dev,
656337517Sdavidcs						  u8 ppfid, enum ecore_eng eng);
657337517Sdavidcs
658337517Sdavidcs/**
659337517Sdavidcs * @brief ecore_llh_set_roce_affinity - Set the RoCE engine affinity
660337517Sdavidcs *
661337517Sdavidcs * @param p_dev
662337517Sdavidcs * @param eng
663337517Sdavidcs *
664337517Sdavidcs * @return enum _ecore_status_t
665337517Sdavidcs */
666337517Sdavidcsenum _ecore_status_t ecore_llh_set_roce_affinity(struct ecore_dev *p_dev,
667337517Sdavidcs						 enum ecore_eng eng);
668337517Sdavidcs
669337517Sdavidcs/**
670337517Sdavidcs * @brief ecore_llh_add_mac_filter - Add a LLH MAC filter into the given filter
671337517Sdavidcs *	bank.
672337517Sdavidcs *
673337517Sdavidcs * @param p_dev
674337517Sdavidcs * @param ppfid - relative within the allocated ppfids ('0' is the default one).
675337517Sdavidcs * @param mac_addr - MAC to add
676337517Sdavidcs *
677337517Sdavidcs * @return enum _ecore_status_t
678337517Sdavidcs */
679337517Sdavidcsenum _ecore_status_t ecore_llh_add_mac_filter(struct ecore_dev *p_dev, u8 ppfid,
680337517Sdavidcs					      u8 mac_addr[ETH_ALEN]);
681337517Sdavidcs
682337517Sdavidcs/**
683337517Sdavidcs * @brief ecore_llh_remove_mac_filter - Remove a LLH MAC filter from the given
684337517Sdavidcs *	filter bank.
685337517Sdavidcs *
686337517Sdavidcs * @param p_dev
687337517Sdavidcs * @param ppfid - relative within the allocated ppfids ('0' is the default one).
688337517Sdavidcs * @param mac_addr - MAC to remove
689337517Sdavidcs */
690337517Sdavidcsvoid ecore_llh_remove_mac_filter(struct ecore_dev *p_dev, u8 ppfid,
691337517Sdavidcs				 u8 mac_addr[ETH_ALEN]);
692337517Sdavidcs
693337517Sdavidcsenum ecore_llh_prot_filter_type_t {
694316485Sdavidcs	ECORE_LLH_FILTER_ETHERTYPE,
695316485Sdavidcs	ECORE_LLH_FILTER_TCP_SRC_PORT,
696316485Sdavidcs	ECORE_LLH_FILTER_TCP_DEST_PORT,
697316485Sdavidcs	ECORE_LLH_FILTER_TCP_SRC_AND_DEST_PORT,
698316485Sdavidcs	ECORE_LLH_FILTER_UDP_SRC_PORT,
699316485Sdavidcs	ECORE_LLH_FILTER_UDP_DEST_PORT,
700316485Sdavidcs	ECORE_LLH_FILTER_UDP_SRC_AND_DEST_PORT
701316485Sdavidcs};
702316485Sdavidcs
703316485Sdavidcs/**
704337517Sdavidcs * @brief ecore_llh_add_protocol_filter - Add a LLH protocol filter into the
705337517Sdavidcs *	given filter bank.
706316485Sdavidcs *
707337517Sdavidcs * @param p_dev
708337517Sdavidcs * @param ppfid - relative within the allocated ppfids ('0' is the default one).
709337517Sdavidcs * @param type - type of filters and comparing
710316485Sdavidcs * @param source_port_or_eth_type - source port or ethertype to add
711316485Sdavidcs * @param dest_port - destination port to add
712337517Sdavidcs *
713337517Sdavidcs * @return enum _ecore_status_t
714316485Sdavidcs */
715316485Sdavidcsenum _ecore_status_t
716337517Sdavidcsecore_llh_add_protocol_filter(struct ecore_dev *p_dev, u8 ppfid,
717337517Sdavidcs			      enum ecore_llh_prot_filter_type_t type,
718337517Sdavidcs			      u16 source_port_or_eth_type, u16 dest_port);
719316485Sdavidcs
720316485Sdavidcs/**
721337517Sdavidcs * @brief ecore_llh_remove_protocol_filter - Remove a LLH protocol filter from
722337517Sdavidcs *	the given filter bank.
723316485Sdavidcs *
724337517Sdavidcs * @param p_dev
725337517Sdavidcs * @param ppfid - relative within the allocated ppfids ('0' is the default one).
726337517Sdavidcs * @param type - type of filters and comparing
727316485Sdavidcs * @param source_port_or_eth_type - source port or ethertype to add
728316485Sdavidcs * @param dest_port - destination port to add
729316485Sdavidcs */
730337517Sdavidcsvoid ecore_llh_remove_protocol_filter(struct ecore_dev *p_dev, u8 ppfid,
731337517Sdavidcs				      enum ecore_llh_prot_filter_type_t type,
732337517Sdavidcs				      u16 source_port_or_eth_type,
733337517Sdavidcs				      u16 dest_port);
734316485Sdavidcs
735316485Sdavidcs/**
736337517Sdavidcs * @brief ecore_llh_clear_ppfid_filters - Remove all LLH filters from the given
737337517Sdavidcs *	filter bank.
738316485Sdavidcs *
739337517Sdavidcs * @param p_dev
740337517Sdavidcs * @param ppfid - relative within the allocated ppfids ('0' is the default one).
741316485Sdavidcs */
742337517Sdavidcsvoid ecore_llh_clear_ppfid_filters(struct ecore_dev *p_dev, u8 ppfid);
743316485Sdavidcs
744316485Sdavidcs/**
745337517Sdavidcs * @brief ecore_llh_clear_all_filters - Remove all LLH filters
746337517Sdavidcs *
747337517Sdavidcs * @param p_dev
748337517Sdavidcs */
749337517Sdavidcsvoid ecore_llh_clear_all_filters(struct ecore_dev *p_dev);
750337517Sdavidcs
751337517Sdavidcs/**
752316485Sdavidcs * @brief ecore_llh_set_function_as_default - set function as defult per port
753316485Sdavidcs *
754316485Sdavidcs * @param p_hwfn
755316485Sdavidcs * @param p_ptt
756316485Sdavidcs */
757316485Sdavidcsenum _ecore_status_t
758316485Sdavidcsecore_llh_set_function_as_default(struct ecore_hwfn *p_hwfn,
759316485Sdavidcs				  struct ecore_ptt *p_ptt);
760316485Sdavidcs
761316485Sdavidcs/**
762316485Sdavidcs *@brief Cleanup of previous driver remains prior to load
763316485Sdavidcs *
764316485Sdavidcs * @param p_hwfn
765316485Sdavidcs * @param p_ptt
766316485Sdavidcs * @param id - For PF, engine-relative. For VF, PF-relative.
767316485Sdavidcs * @param is_vf - true iff cleanup is made for a VF.
768316485Sdavidcs *
769316485Sdavidcs * @return enum _ecore_status_t
770316485Sdavidcs */
771316485Sdavidcsenum _ecore_status_t ecore_final_cleanup(struct ecore_hwfn	*p_hwfn,
772316485Sdavidcs					 struct ecore_ptt	*p_ptt,
773316485Sdavidcs					 u16			id,
774316485Sdavidcs					 bool			is_vf);
775337517Sdavidcs
776316485Sdavidcs/**
777337517Sdavidcs * @brief ecore_get_queue_coalesce - Retrieve coalesce value for a given queue.
778337517Sdavidcs *
779337517Sdavidcs * @param p_hwfn
780337517Sdavidcs * @param p_coal - store coalesce value read from the hardware.
781337517Sdavidcs * @param p_handle
782337517Sdavidcs *
783337517Sdavidcs * @return enum _ecore_status_t
784337517Sdavidcs **/
785337517Sdavidcsenum _ecore_status_t
786337517Sdavidcsecore_get_queue_coalesce(struct ecore_hwfn *p_hwfn, u16 *coal,
787337517Sdavidcs			 void *handle);
788337517Sdavidcs
789337517Sdavidcs/**
790316485Sdavidcs * @brief ecore_set_queue_coalesce - Configure coalesce parameters for Rx and
791316485Sdavidcs *    Tx queue. The fact that we can configure coalescing to up to 511, but on
792316485Sdavidcs *    varying accuracy [the bigger the value the less accurate] up to a mistake
793316485Sdavidcs *    of 3usec for the highest values.
794316485Sdavidcs *    While the API allows setting coalescing per-qid, all queues sharing a SB
795316485Sdavidcs *    should be in same range [i.e., either 0-0x7f, 0x80-0xff or 0x100-0x1ff]
796316485Sdavidcs *    otherwise configuration would break.
797316485Sdavidcs *
798316485Sdavidcs * @param p_hwfn
799316485Sdavidcs * @param rx_coal - Rx Coalesce value in micro seconds.
800316485Sdavidcs * @param tx_coal - TX Coalesce value in micro seconds.
801316485Sdavidcs * @param p_handle
802316485Sdavidcs *
803316485Sdavidcs * @return enum _ecore_status_t
804316485Sdavidcs **/
805316485Sdavidcsenum _ecore_status_t
806316485Sdavidcsecore_set_queue_coalesce(struct ecore_hwfn *p_hwfn, u16 rx_coal,
807316485Sdavidcs			 u16 tx_coal, void *p_handle);
808316485Sdavidcs
809316485Sdavidcs/**
810316485Sdavidcs * @brief - Recalculate feature distributions based on HW resources and
811316485Sdavidcs * user inputs. Currently this affects RDMA_CNQ, PF_L2_QUE and VF_L2_QUE.
812316485Sdavidcs * As a result, this must not be called while RDMA is active or while VFs
813316485Sdavidcs * are enabled.
814316485Sdavidcs *
815316485Sdavidcs * @param p_hwfn
816316485Sdavidcs */
817316485Sdavidcsvoid ecore_hw_set_feat(struct ecore_hwfn *p_hwfn);
818316485Sdavidcs
819316485Sdavidcs/**
820337517Sdavidcs * @brief ecore_pglueb_set_pfid_enable - Enable or disable PCI BUS MASTER
821316485Sdavidcs *
822316485Sdavidcs * @param p_hwfn
823316485Sdavidcs * @param p_ptt
824337517Sdavidcs * @param b_enable - true/false
825316485Sdavidcs *
826316485Sdavidcs * @return enum _ecore_status_t
827316485Sdavidcs */
828337517Sdavidcsenum _ecore_status_t ecore_pglueb_set_pfid_enable(struct ecore_hwfn *p_hwfn,
829337517Sdavidcs						  struct ecore_ptt *p_ptt,
830337517Sdavidcs						  bool b_enable);
831316485Sdavidcs
832337517Sdavidcs#ifndef __EXTRACT__LINUX__IF__
833320164Sdavidcsenum ecore_db_rec_width {
834320164Sdavidcs	DB_REC_WIDTH_32B,
835320164Sdavidcs	DB_REC_WIDTH_64B,
836320164Sdavidcs};
837320164Sdavidcs
838320164Sdavidcsenum ecore_db_rec_space {
839320164Sdavidcs	DB_REC_KERNEL,
840320164Sdavidcs	DB_REC_USER,
841320164Sdavidcs};
842316485Sdavidcs#endif
843320164Sdavidcs
844320164Sdavidcs/**
845320164Sdavidcs * @brief db_recovery_add - add doorbell information to the doorbell
846320164Sdavidcs * recovery mechanism.
847320164Sdavidcs *
848320164Sdavidcs * @param p_dev
849320164Sdavidcs * @param db_addr - doorbell address
850320164Sdavidcs * @param db_data - address of where db_data is stored
851320164Sdavidcs * @param db_width - doorbell is 32b pr 64b
852320164Sdavidcs * @param db_space - doorbell recovery addresses are user or kernel space
853320164Sdavidcs */
854320164Sdavidcsenum _ecore_status_t ecore_db_recovery_add(struct ecore_dev *p_dev,
855320164Sdavidcs					   void OSAL_IOMEM *db_addr,
856320164Sdavidcs					   void *db_data,
857320164Sdavidcs					   enum ecore_db_rec_width db_width,
858320164Sdavidcs					   enum ecore_db_rec_space db_space);
859320164Sdavidcs
860320164Sdavidcs/**
861320164Sdavidcs * @brief db_recovery_del - remove doorbell information from the doorbell
862320164Sdavidcs * recovery mechanism. db_data serves as key (db_addr is not unique).
863320164Sdavidcs *
864320164Sdavidcs * @param cdev
865320164Sdavidcs * @param db_addr - doorbell address
866320164Sdavidcs * @param db_data - address where db_data is stored. Serves as key for the
867320164Sdavidcs *                  entry to delete.
868320164Sdavidcs */
869320164Sdavidcsenum _ecore_status_t ecore_db_recovery_del(struct ecore_dev *p_dev,
870320164Sdavidcs					   void OSAL_IOMEM *db_addr,
871320164Sdavidcs					   void *db_data);
872337517Sdavidcs
873337517Sdavidcs#ifndef __EXTRACT__LINUX__THROW__
874337517Sdavidcsstatic OSAL_INLINE bool ecore_is_mf_ufp(struct ecore_hwfn *p_hwfn)
875337517Sdavidcs{
876337517Sdavidcs	return !!OSAL_TEST_BIT(ECORE_MF_UFP_SPECIFIC, &p_hwfn->p_dev->mf_bits);
877337517Sdavidcs}
878320164Sdavidcs#endif
879337517Sdavidcs
880337517Sdavidcs/**
881337517Sdavidcs * @brief ecore_set_dev_access_enable - Enable or disable access to the device
882337517Sdavidcs *
883337517Sdavidcs * @param p_hwfn
884337517Sdavidcs * @param b_enable - true/false
885337517Sdavidcs */
886337517Sdavidcsvoid ecore_set_dev_access_enable(struct ecore_dev *p_dev, bool b_enable);
887337517Sdavidcs
888337517Sdavidcs/**
889337517Sdavidcs * @brief ecore_set_ilt_page_size - Set ILT page size
890337517Sdavidcs *
891337517Sdavidcs * @param p_dev
892337517Sdavidcs * @param ilt_size
893337517Sdavidcs *
894337517Sdavidcs * @return enum _ecore_status_t
895337517Sdavidcs */
896337517Sdavidcsvoid ecore_set_ilt_page_size(struct ecore_dev *p_dev, u8 ilt_size);
897337517Sdavidcs
898337517Sdavidcs#endif
899