11f4d4ed6SAlexander Lobakin /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2fe56b9e6SYuval Mintz /* QLogic qed NIC Driver
3e8f1cb50SMintz, Yuval  * Copyright (c) 2015-2017  QLogic Corporation
4663eacd8SAlexander Lobakin  * Copyright (c) 2019-2020 Marvell International Ltd.
5fe56b9e6SYuval Mintz  */
6fe56b9e6SYuval Mintz 
7fe56b9e6SYuval Mintz #ifndef _QED_DEV_API_H
8fe56b9e6SYuval Mintz #define _QED_DEV_API_H
9fe56b9e6SYuval Mintz 
10fe56b9e6SYuval Mintz #include <linux/types.h>
11fe56b9e6SYuval Mintz #include <linux/kernel.h>
12fe56b9e6SYuval Mintz #include <linux/slab.h>
13fe56b9e6SYuval Mintz #include <linux/qed/qed_chain.h>
14fe56b9e6SYuval Mintz #include <linux/qed/qed_if.h>
15fe56b9e6SYuval Mintz #include "qed_int.h"
16fe56b9e6SYuval Mintz 
17fe56b9e6SYuval Mintz /**
1819198e4eSPrabhakar Kushwaha  * qed_init_dp(): Initialize the debug level.
19fe56b9e6SYuval Mintz  *
2019198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
2119198e4eSPrabhakar Kushwaha  * @dp_module: Module debug parameter.
2219198e4eSPrabhakar Kushwaha  * @dp_level: Module debug level.
2319198e4eSPrabhakar Kushwaha  *
2419198e4eSPrabhakar Kushwaha  * Return: Void.
25fe56b9e6SYuval Mintz  */
26fe56b9e6SYuval Mintz void qed_init_dp(struct qed_dev *cdev,
27fe56b9e6SYuval Mintz 		 u32 dp_module,
28fe56b9e6SYuval Mintz 		 u8 dp_level);
29fe56b9e6SYuval Mintz 
30fe56b9e6SYuval Mintz /**
3119198e4eSPrabhakar Kushwaha  * qed_init_struct(): Initialize the device structure to
3219198e4eSPrabhakar Kushwaha  *                    its defaults.
33fe56b9e6SYuval Mintz  *
3419198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
3519198e4eSPrabhakar Kushwaha  *
3619198e4eSPrabhakar Kushwaha  * Return: Void.
37fe56b9e6SYuval Mintz  */
38fe56b9e6SYuval Mintz void qed_init_struct(struct qed_dev *cdev);
39fe56b9e6SYuval Mintz 
40fe56b9e6SYuval Mintz /**
4119198e4eSPrabhakar Kushwaha  * qed_resc_free: Free device resources.
42fe56b9e6SYuval Mintz  *
4319198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
4419198e4eSPrabhakar Kushwaha  *
4519198e4eSPrabhakar Kushwaha  * Return: Void.
46fe56b9e6SYuval Mintz  */
47fe56b9e6SYuval Mintz void qed_resc_free(struct qed_dev *cdev);
48fe56b9e6SYuval Mintz 
49fe56b9e6SYuval Mintz /**
5019198e4eSPrabhakar Kushwaha  * qed_resc_alloc(): Alloc device resources.
51fe56b9e6SYuval Mintz  *
5219198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
53fe56b9e6SYuval Mintz  *
5419198e4eSPrabhakar Kushwaha  * Return: Int.
55fe56b9e6SYuval Mintz  */
56fe56b9e6SYuval Mintz int qed_resc_alloc(struct qed_dev *cdev);
57fe56b9e6SYuval Mintz 
58fe56b9e6SYuval Mintz /**
5919198e4eSPrabhakar Kushwaha  * qed_resc_setup(): Setup device resources.
60fe56b9e6SYuval Mintz  *
6119198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
6219198e4eSPrabhakar Kushwaha  *
6319198e4eSPrabhakar Kushwaha  * Return: Void.
64fe56b9e6SYuval Mintz  */
65fe56b9e6SYuval Mintz void qed_resc_setup(struct qed_dev *cdev);
66fe56b9e6SYuval Mintz 
675d24bcf1STomer Tayar enum qed_override_force_load {
685d24bcf1STomer Tayar 	QED_OVERRIDE_FORCE_LOAD_NONE,
695d24bcf1STomer Tayar 	QED_OVERRIDE_FORCE_LOAD_ALWAYS,
705d24bcf1STomer Tayar 	QED_OVERRIDE_FORCE_LOAD_NEVER,
715d24bcf1STomer Tayar };
725d24bcf1STomer Tayar 
735d24bcf1STomer Tayar struct qed_drv_load_params {
745d24bcf1STomer Tayar 	/* Indicates whether the driver is running over a crash kernel.
755d24bcf1STomer Tayar 	 * As part of the load request, this will be used for providing the
765d24bcf1STomer Tayar 	 * driver role to the MFW.
775d24bcf1STomer Tayar 	 * In case of a crash kernel over PDA - this should be set to false.
785d24bcf1STomer Tayar 	 */
795d24bcf1STomer Tayar 	bool is_crash_kernel;
805d24bcf1STomer Tayar 
815d24bcf1STomer Tayar 	/* The timeout value that the MFW should use when locking the engine for
825d24bcf1STomer Tayar 	 * the driver load process.
835d24bcf1STomer Tayar 	 * A value of '0' means the default value, and '255' means no timeout.
845d24bcf1STomer Tayar 	 */
855d24bcf1STomer Tayar 	u8 mfw_timeout_val;
865d24bcf1STomer Tayar #define QED_LOAD_REQ_LOCK_TO_DEFAULT    0
875d24bcf1STomer Tayar #define QED_LOAD_REQ_LOCK_TO_NONE       255
885d24bcf1STomer Tayar 
895d24bcf1STomer Tayar 	/* Avoid engine reset when first PF loads on it */
905d24bcf1STomer Tayar 	bool avoid_eng_reset;
915d24bcf1STomer Tayar 
925d24bcf1STomer Tayar 	/* Allow overriding the default force load behavior */
935d24bcf1STomer Tayar 	enum qed_override_force_load override_force_load;
945d24bcf1STomer Tayar };
955d24bcf1STomer Tayar 
96c0c2d0b4SMintz, Yuval struct qed_hw_init_params {
97c0c2d0b4SMintz, Yuval 	/* Tunneling parameters */
9819968430SChopra, Manish 	struct qed_tunnel_info *p_tunn;
99c0c2d0b4SMintz, Yuval 
100c0c2d0b4SMintz, Yuval 	bool b_hw_start;
101c0c2d0b4SMintz, Yuval 
102c0c2d0b4SMintz, Yuval 	/* Interrupt mode [msix, inta, etc.] to use */
103c0c2d0b4SMintz, Yuval 	enum qed_int_mode int_mode;
104c0c2d0b4SMintz, Yuval 
105c0c2d0b4SMintz, Yuval 	/* NPAR tx switching to be used for vports for tx-switching */
106c0c2d0b4SMintz, Yuval 	bool allow_npar_tx_switch;
107c0c2d0b4SMintz, Yuval 
108c0c2d0b4SMintz, Yuval 	/* Binary fw data pointer in binary fw file */
109c0c2d0b4SMintz, Yuval 	const u8 *bin_fw_data;
1105d24bcf1STomer Tayar 
1115d24bcf1STomer Tayar 	/* Driver load parameters */
1125d24bcf1STomer Tayar 	struct qed_drv_load_params *p_drv_load_params;
113c0c2d0b4SMintz, Yuval };
114c0c2d0b4SMintz, Yuval 
115fe56b9e6SYuval Mintz /**
11619198e4eSPrabhakar Kushwaha  * qed_hw_init(): Init Qed hardware.
117fe56b9e6SYuval Mintz  *
11819198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
11919198e4eSPrabhakar Kushwaha  * @p_params: Pointers to params.
120fe56b9e6SYuval Mintz  *
12119198e4eSPrabhakar Kushwaha  * Return: Int.
122fe56b9e6SYuval Mintz  */
123c0c2d0b4SMintz, Yuval int qed_hw_init(struct qed_dev *cdev, struct qed_hw_init_params *p_params);
124fe56b9e6SYuval Mintz 
125fe56b9e6SYuval Mintz /**
12619198e4eSPrabhakar Kushwaha  * qed_hw_timers_stop_all(): Stop the timers HW block.
1278c925c44SYuval Mintz  *
12819198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
1298c925c44SYuval Mintz  *
13019198e4eSPrabhakar Kushwaha  * Return: void.
1318c925c44SYuval Mintz  */
1328c925c44SYuval Mintz void qed_hw_timers_stop_all(struct qed_dev *cdev);
1338c925c44SYuval Mintz 
1348c925c44SYuval Mintz /**
13519198e4eSPrabhakar Kushwaha  * qed_hw_stop(): Stop Qed hardware.
136fe56b9e6SYuval Mintz  *
13719198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
138fe56b9e6SYuval Mintz  *
13919198e4eSPrabhakar Kushwaha  * Return: int.
140fe56b9e6SYuval Mintz  */
141fe56b9e6SYuval Mintz int qed_hw_stop(struct qed_dev *cdev);
142fe56b9e6SYuval Mintz 
143fe56b9e6SYuval Mintz /**
14419198e4eSPrabhakar Kushwaha  * qed_hw_stop_fastpath(): Should be called incase
145cee4d264SManish Chopra  *		           slowpath is still required for the device,
146cee4d264SManish Chopra  *		           but fastpath is not.
147cee4d264SManish Chopra  *
14819198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
149cee4d264SManish Chopra  *
15019198e4eSPrabhakar Kushwaha  * Return: Int.
151cee4d264SManish Chopra  */
15215582962SRahul Verma int qed_hw_stop_fastpath(struct qed_dev *cdev);
153cee4d264SManish Chopra 
154cee4d264SManish Chopra /**
15519198e4eSPrabhakar Kushwaha  * qed_hw_start_fastpath(): Restart fastpath traffic,
15619198e4eSPrabhakar Kushwaha  *		            only if hw_stop_fastpath was called.
157cee4d264SManish Chopra  *
15819198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
159cee4d264SManish Chopra  *
16019198e4eSPrabhakar Kushwaha  * Return: Int.
161cee4d264SManish Chopra  */
16215582962SRahul Verma int qed_hw_start_fastpath(struct qed_hwfn *p_hwfn);
163cee4d264SManish Chopra 
164fe56b9e6SYuval Mintz /**
16519198e4eSPrabhakar Kushwaha  * qed_hw_prepare(): Prepare Qed hardware.
166fe56b9e6SYuval Mintz  *
16719198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
16819198e4eSPrabhakar Kushwaha  * @personality: Personality to initialize.
169fe56b9e6SYuval Mintz  *
17019198e4eSPrabhakar Kushwaha  * Return: Int.
171fe56b9e6SYuval Mintz  */
172fe56b9e6SYuval Mintz int qed_hw_prepare(struct qed_dev *cdev,
173fe56b9e6SYuval Mintz 		   int personality);
174fe56b9e6SYuval Mintz 
175fe56b9e6SYuval Mintz /**
17619198e4eSPrabhakar Kushwaha  * qed_hw_remove(): Remove Qed hardware.
177fe56b9e6SYuval Mintz  *
17819198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
17919198e4eSPrabhakar Kushwaha  *
18019198e4eSPrabhakar Kushwaha  * Return: Void.
181fe56b9e6SYuval Mintz  */
182fe56b9e6SYuval Mintz void qed_hw_remove(struct qed_dev *cdev);
183fe56b9e6SYuval Mintz 
184fe56b9e6SYuval Mintz /**
18519198e4eSPrabhakar Kushwaha  * qed_ptt_acquire(): Allocate a PTT window.
18619198e4eSPrabhakar Kushwaha  *
18719198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
18819198e4eSPrabhakar Kushwaha  *
18919198e4eSPrabhakar Kushwaha  * Return: struct qed_ptt.
190fe56b9e6SYuval Mintz  *
191fe56b9e6SYuval Mintz  * Should be called at the entry point to the driver (at the beginning of an
19219198e4eSPrabhakar Kushwaha  * exported function).
193fe56b9e6SYuval Mintz  */
194fe56b9e6SYuval Mintz struct qed_ptt *qed_ptt_acquire(struct qed_hwfn *p_hwfn);
195fe56b9e6SYuval Mintz 
196fe56b9e6SYuval Mintz /**
197*e346e231SKonstantin Khorenko  * qed_ptt_acquire_context(): Allocate a PTT window honoring the context
198*e346e231SKonstantin Khorenko  *			      atomicy.
199*e346e231SKonstantin Khorenko  *
200*e346e231SKonstantin Khorenko  * @p_hwfn: HW device data.
201*e346e231SKonstantin Khorenko  * @is_atomic: Hint from the caller - if the func can sleep or not.
202*e346e231SKonstantin Khorenko  *
203*e346e231SKonstantin Khorenko  * Context: The function should not sleep in case is_atomic == true.
204*e346e231SKonstantin Khorenko  * Return: struct qed_ptt.
205*e346e231SKonstantin Khorenko  *
206*e346e231SKonstantin Khorenko  * Should be called at the entry point to the driver
207*e346e231SKonstantin Khorenko  * (at the beginning of an exported function).
208*e346e231SKonstantin Khorenko  */
209*e346e231SKonstantin Khorenko struct qed_ptt *qed_ptt_acquire_context(struct qed_hwfn *p_hwfn,
210*e346e231SKonstantin Khorenko 					bool is_atomic);
211*e346e231SKonstantin Khorenko 
212*e346e231SKonstantin Khorenko /**
21319198e4eSPrabhakar Kushwaha  * qed_ptt_release(): Release PTT Window.
21419198e4eSPrabhakar Kushwaha  *
21519198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
21619198e4eSPrabhakar Kushwaha  * @p_ptt: P_ptt.
21719198e4eSPrabhakar Kushwaha  *
21819198e4eSPrabhakar Kushwaha  * Return: Void.
219fe56b9e6SYuval Mintz  *
220fe56b9e6SYuval Mintz  * Should be called at the end of a flow - at the end of the function that
221fe56b9e6SYuval Mintz  * acquired the PTT.
222fe56b9e6SYuval Mintz  */
223fe56b9e6SYuval Mintz void qed_ptt_release(struct qed_hwfn *p_hwfn,
224fe56b9e6SYuval Mintz 		     struct qed_ptt *p_ptt);
2259df2ed04SManish Chopra void qed_reset_vport_stats(struct qed_dev *cdev);
226fe56b9e6SYuval Mintz 
227fe56b9e6SYuval Mintz enum qed_dmae_address_type_t {
228fe56b9e6SYuval Mintz 	QED_DMAE_ADDRESS_HOST_VIRT,
229fe56b9e6SYuval Mintz 	QED_DMAE_ADDRESS_HOST_PHYS,
230fe56b9e6SYuval Mintz 	QED_DMAE_ADDRESS_GRC
231fe56b9e6SYuval Mintz };
232fe56b9e6SYuval Mintz 
233fe56b9e6SYuval Mintz /**
23419198e4eSPrabhakar Kushwaha  * qed_dmae_host2grc(): Copy data from source addr to
23519198e4eSPrabhakar Kushwaha  *                      dmae registers using the given ptt.
236fe56b9e6SYuval Mintz  *
23719198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
23819198e4eSPrabhakar Kushwaha  * @p_ptt: P_ptt.
23919198e4eSPrabhakar Kushwaha  * @source_addr: Source address.
24019198e4eSPrabhakar Kushwaha  * @grc_addr: GRC address (dmae_data_offset).
24119198e4eSPrabhakar Kushwaha  * @size_in_dwords: Size.
24219198e4eSPrabhakar Kushwaha  * @p_params: (default parameters will be used in case of NULL).
24319198e4eSPrabhakar Kushwaha  *
24419198e4eSPrabhakar Kushwaha  * Return: Int.
245fe56b9e6SYuval Mintz  */
246fe56b9e6SYuval Mintz int
247fe56b9e6SYuval Mintz qed_dmae_host2grc(struct qed_hwfn *p_hwfn,
248fe56b9e6SYuval Mintz 		  struct qed_ptt *p_ptt,
249fe56b9e6SYuval Mintz 		  u64 source_addr,
250fe56b9e6SYuval Mintz 		  u32 grc_addr,
251fe56b9e6SYuval Mintz 		  u32 size_in_dwords,
25283bf76e3SMichal Kalderon 		  struct qed_dmae_params *p_params);
253fe56b9e6SYuval Mintz 
254fe56b9e6SYuval Mintz  /**
25519198e4eSPrabhakar Kushwaha  * qed_dmae_grc2host(): Read data from dmae data offset
25619198e4eSPrabhakar Kushwaha  *                      to source address using the given ptt.
257722003acSSudarsana Reddy Kalluru  *
25819198e4eSPrabhakar Kushwaha  * @p_ptt: P_ptt.
25919198e4eSPrabhakar Kushwaha  * @grc_addr: GRC address (dmae_data_offset).
26019198e4eSPrabhakar Kushwaha  * @dest_addr: Destination Address.
26119198e4eSPrabhakar Kushwaha  * @size_in_dwords: Size.
26219198e4eSPrabhakar Kushwaha  * @p_params: (default parameters will be used in case of NULL).
26319198e4eSPrabhakar Kushwaha  *
26419198e4eSPrabhakar Kushwaha  * Return: Int.
265722003acSSudarsana Reddy Kalluru  */
266722003acSSudarsana Reddy Kalluru int qed_dmae_grc2host(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt,
267722003acSSudarsana Reddy Kalluru 		      u32 grc_addr, dma_addr_t dest_addr, u32 size_in_dwords,
26883bf76e3SMichal Kalderon 		      struct qed_dmae_params *p_params);
269722003acSSudarsana Reddy Kalluru 
270722003acSSudarsana Reddy Kalluru /**
27119198e4eSPrabhakar Kushwaha  * qed_dmae_host2host(): Copy data from to source address
27219198e4eSPrabhakar Kushwaha  *                       to a destination adrress (for SRIOV) using the given
27319198e4eSPrabhakar Kushwaha  *                       ptt.
27437bff2b9SYuval Mintz  *
27519198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
27619198e4eSPrabhakar Kushwaha  * @p_ptt: P_ptt.
27719198e4eSPrabhakar Kushwaha  * @source_addr: Source address.
27819198e4eSPrabhakar Kushwaha  * @dest_addr: Destination address.
27919198e4eSPrabhakar Kushwaha  * @size_in_dwords: size.
28019198e4eSPrabhakar Kushwaha  * @p_params: (default parameters will be used in case of NULL).
28119198e4eSPrabhakar Kushwaha  *
28219198e4eSPrabhakar Kushwaha  * Return: Int.
28337bff2b9SYuval Mintz  */
28437bff2b9SYuval Mintz int qed_dmae_host2host(struct qed_hwfn *p_hwfn,
28537bff2b9SYuval Mintz 		       struct qed_ptt *p_ptt,
28637bff2b9SYuval Mintz 		       dma_addr_t source_addr,
28737bff2b9SYuval Mintz 		       dma_addr_t dest_addr,
28837bff2b9SYuval Mintz 		       u32 size_in_dwords, struct qed_dmae_params *p_params);
28937bff2b9SYuval Mintz 
290b6db3f71SAlexander Lobakin int qed_chain_alloc(struct qed_dev *cdev, struct qed_chain *chain,
291b6db3f71SAlexander Lobakin 		    struct qed_chain_init_params *params);
292b6db3f71SAlexander Lobakin void qed_chain_free(struct qed_dev *cdev, struct qed_chain *chain);
293fe56b9e6SYuval Mintz 
294fe56b9e6SYuval Mintz /**
29519198e4eSPrabhakar Kushwaha  * qed_fw_l2_queue(): Get absolute L2 queue ID.
296cee4d264SManish Chopra  *
29719198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
29819198e4eSPrabhakar Kushwaha  * @src_id: Relative to p_hwfn.
29919198e4eSPrabhakar Kushwaha  * @dst_id: Absolute per engine.
300cee4d264SManish Chopra  *
30119198e4eSPrabhakar Kushwaha  * Return: Int.
302cee4d264SManish Chopra  */
303cee4d264SManish Chopra int qed_fw_l2_queue(struct qed_hwfn *p_hwfn,
304cee4d264SManish Chopra 		    u16 src_id,
305cee4d264SManish Chopra 		    u16 *dst_id);
306cee4d264SManish Chopra 
307cee4d264SManish Chopra /**
30819198e4eSPrabhakar Kushwaha  * qed_fw_vport(): Get absolute vport ID.
309cee4d264SManish Chopra  *
31019198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
31119198e4eSPrabhakar Kushwaha  * @src_id: Relative to p_hwfn.
31219198e4eSPrabhakar Kushwaha  * @dst_id: Absolute per engine.
313cee4d264SManish Chopra  *
31419198e4eSPrabhakar Kushwaha  * Return: Int.
315cee4d264SManish Chopra  */
316cee4d264SManish Chopra int qed_fw_vport(struct qed_hwfn *p_hwfn,
317cee4d264SManish Chopra 		 u8 src_id,
318cee4d264SManish Chopra 		 u8 *dst_id);
319cee4d264SManish Chopra 
320cee4d264SManish Chopra /**
32119198e4eSPrabhakar Kushwaha  * qed_fw_rss_eng(): Get absolute RSS engine ID.
322cee4d264SManish Chopra  *
32319198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
32419198e4eSPrabhakar Kushwaha  * @src_id: Relative to p_hwfn.
32519198e4eSPrabhakar Kushwaha  * @dst_id: Absolute per engine.
326cee4d264SManish Chopra  *
32719198e4eSPrabhakar Kushwaha  * Return: Int.
328cee4d264SManish Chopra  */
329cee4d264SManish Chopra int qed_fw_rss_eng(struct qed_hwfn *p_hwfn,
330cee4d264SManish Chopra 		   u8 src_id,
331cee4d264SManish Chopra 		   u8 *dst_id);
332cee4d264SManish Chopra 
333cee4d264SManish Chopra /**
33419198e4eSPrabhakar Kushwaha  * qed_llh_get_num_ppfid(): Return the allocated number of LLH filter
33579284adeSMichal Kalderon  *	                    banks that are allocated to the PF.
3360a7fb11cSYuval Mintz  *
33719198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
33879284adeSMichal Kalderon  *
33919198e4eSPrabhakar Kushwaha  * Return: u8 Number of LLH filter banks.
3400a7fb11cSYuval Mintz  */
34179284adeSMichal Kalderon u8 qed_llh_get_num_ppfid(struct qed_dev *cdev);
34279284adeSMichal Kalderon 
34379284adeSMichal Kalderon enum qed_eng {
34479284adeSMichal Kalderon 	QED_ENG0,
34579284adeSMichal Kalderon 	QED_ENG1,
34679284adeSMichal Kalderon 	QED_BOTH_ENG,
34779284adeSMichal Kalderon };
3480a7fb11cSYuval Mintz 
3490a7fb11cSYuval Mintz /**
35019198e4eSPrabhakar Kushwaha  * qed_llh_set_ppfid_affinity(): Set the engine affinity for the given
35179284adeSMichal Kalderon  *	                         LLH filter bank.
3520a7fb11cSYuval Mintz  *
35319198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
35419198e4eSPrabhakar Kushwaha  * @ppfid: Relative within the allocated ppfids ('0' is the default one).
35519198e4eSPrabhakar Kushwaha  * @eng: Engine.
35679284adeSMichal Kalderon  *
35719198e4eSPrabhakar Kushwaha  * Return: Int.
35879284adeSMichal Kalderon  */
35979284adeSMichal Kalderon int qed_llh_set_ppfid_affinity(struct qed_dev *cdev,
36079284adeSMichal Kalderon 			       u8 ppfid, enum qed_eng eng);
36179284adeSMichal Kalderon 
36279284adeSMichal Kalderon /**
36319198e4eSPrabhakar Kushwaha  * qed_llh_set_roce_affinity(): Set the RoCE engine affinity.
36479284adeSMichal Kalderon  *
36519198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
36619198e4eSPrabhakar Kushwaha  * @eng: Engine.
36779284adeSMichal Kalderon  *
36819198e4eSPrabhakar Kushwaha  * Return: Int.
36979284adeSMichal Kalderon  */
37079284adeSMichal Kalderon int qed_llh_set_roce_affinity(struct qed_dev *cdev, enum qed_eng eng);
37179284adeSMichal Kalderon 
37279284adeSMichal Kalderon /**
37319198e4eSPrabhakar Kushwaha  * qed_llh_add_mac_filter(): Add a LLH MAC filter into the given filter
37479284adeSMichal Kalderon  *	                     bank.
37579284adeSMichal Kalderon  *
37619198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
37719198e4eSPrabhakar Kushwaha  * @ppfid: Relative within the allocated ppfids ('0' is the default one).
37819198e4eSPrabhakar Kushwaha  * @mac_addr: MAC to add.
37919198e4eSPrabhakar Kushwaha  *
38019198e4eSPrabhakar Kushwaha  * Return: Int.
38179284adeSMichal Kalderon  */
38279284adeSMichal Kalderon int qed_llh_add_mac_filter(struct qed_dev *cdev,
38376660757SJakub Kicinski 			   u8 ppfid, const u8 mac_addr[ETH_ALEN]);
38479284adeSMichal Kalderon 
38579284adeSMichal Kalderon /**
38619198e4eSPrabhakar Kushwaha  * qed_llh_remove_mac_filter(): Remove a LLH MAC filter from the given
38779284adeSMichal Kalderon  *	                        filter bank.
38879284adeSMichal Kalderon  *
38919198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
39019198e4eSPrabhakar Kushwaha  * @ppfid: Ppfid.
39119198e4eSPrabhakar Kushwaha  * @mac_addr: MAC to remove
39219198e4eSPrabhakar Kushwaha  *
39319198e4eSPrabhakar Kushwaha  * Return: Void.
3940a7fb11cSYuval Mintz  */
39579284adeSMichal Kalderon void qed_llh_remove_mac_filter(struct qed_dev *cdev,
39679284adeSMichal Kalderon 			       u8 ppfid, u8 mac_addr[ETH_ALEN]);
3970a7fb11cSYuval Mintz 
39879284adeSMichal Kalderon enum qed_llh_prot_filter_type_t {
3991e128c81SArun Easi 	QED_LLH_FILTER_ETHERTYPE,
4001e128c81SArun Easi 	QED_LLH_FILTER_TCP_SRC_PORT,
4011e128c81SArun Easi 	QED_LLH_FILTER_TCP_DEST_PORT,
4021e128c81SArun Easi 	QED_LLH_FILTER_TCP_SRC_AND_DEST_PORT,
4031e128c81SArun Easi 	QED_LLH_FILTER_UDP_SRC_PORT,
4041e128c81SArun Easi 	QED_LLH_FILTER_UDP_DEST_PORT,
4051e128c81SArun Easi 	QED_LLH_FILTER_UDP_SRC_AND_DEST_PORT
4061e128c81SArun Easi };
4071e128c81SArun Easi 
4081e128c81SArun Easi /**
40919198e4eSPrabhakar Kushwaha  * qed_llh_add_protocol_filter(): Add a LLH protocol filter into the
41079284adeSMichal Kalderon  *	                          given filter bank.
4111e128c81SArun Easi  *
41219198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
41319198e4eSPrabhakar Kushwaha  * @ppfid: Relative within the allocated ppfids ('0' is the default one).
41419198e4eSPrabhakar Kushwaha  * @type: Type of filters and comparing.
41519198e4eSPrabhakar Kushwaha  * @source_port_or_eth_type: Source port or ethertype to add.
41619198e4eSPrabhakar Kushwaha  * @dest_port: Destination port to add.
41719198e4eSPrabhakar Kushwaha  *
41819198e4eSPrabhakar Kushwaha  * Return: Int.
4191e128c81SArun Easi  */
4201e128c81SArun Easi int
42179284adeSMichal Kalderon qed_llh_add_protocol_filter(struct qed_dev *cdev,
42279284adeSMichal Kalderon 			    u8 ppfid,
42379284adeSMichal Kalderon 			    enum qed_llh_prot_filter_type_t type,
42479284adeSMichal Kalderon 			    u16 source_port_or_eth_type, u16 dest_port);
4251e128c81SArun Easi 
4261e128c81SArun Easi /**
42719198e4eSPrabhakar Kushwaha  * qed_llh_remove_protocol_filter(): Remove a LLH protocol filter from
42879284adeSMichal Kalderon  *	                             the given filter bank.
4291e128c81SArun Easi  *
43019198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
43119198e4eSPrabhakar Kushwaha  * @ppfid: Relative within the allocated ppfids ('0' is the default one).
43219198e4eSPrabhakar Kushwaha  * @type: Type of filters and comparing.
43319198e4eSPrabhakar Kushwaha  * @source_port_or_eth_type: Source port or ethertype to add.
43419198e4eSPrabhakar Kushwaha  * @dest_port: Destination port to add.
4351e128c81SArun Easi  */
4361e128c81SArun Easi void
43779284adeSMichal Kalderon qed_llh_remove_protocol_filter(struct qed_dev *cdev,
43879284adeSMichal Kalderon 			       u8 ppfid,
43979284adeSMichal Kalderon 			       enum qed_llh_prot_filter_type_t type,
44079284adeSMichal Kalderon 			       u16 source_port_or_eth_type, u16 dest_port);
4411e128c81SArun Easi 
4420a7fb11cSYuval Mintz /**
44319198e4eSPrabhakar Kushwaha  * qed_final_cleanup(): Cleanup of previous driver remains prior to load.
444fe56b9e6SYuval Mintz  *
44519198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
44619198e4eSPrabhakar Kushwaha  * @p_ptt: P_ptt.
44719198e4eSPrabhakar Kushwaha  * @id: For PF, engine-relative. For VF, PF-relative.
44819198e4eSPrabhakar Kushwaha  * @is_vf: True iff cleanup is made for a VF.
449fe56b9e6SYuval Mintz  *
45019198e4eSPrabhakar Kushwaha  * Return: Int.
451fe56b9e6SYuval Mintz  */
452fe56b9e6SYuval Mintz int qed_final_cleanup(struct qed_hwfn *p_hwfn,
4530b55e27dSYuval Mintz 		      struct qed_ptt *p_ptt, u16 id, bool is_vf);
454fe56b9e6SYuval Mintz 
455722003acSSudarsana Reddy Kalluru /**
45619198e4eSPrabhakar Kushwaha  * qed_get_queue_coalesce(): Retrieve coalesce value for a given queue.
457bf5a94bfSRahul Verma  *
45819198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
45919198e4eSPrabhakar Kushwaha  * @coal: Store coalesce value read from the hardware.
46019198e4eSPrabhakar Kushwaha  * @handle: P_handle.
461bf5a94bfSRahul Verma  *
46219198e4eSPrabhakar Kushwaha  * Return: Int.
463bf5a94bfSRahul Verma  **/
464bf5a94bfSRahul Verma int qed_get_queue_coalesce(struct qed_hwfn *p_hwfn, u16 *coal, void *handle);
465bf5a94bfSRahul Verma 
466bf5a94bfSRahul Verma /**
46719198e4eSPrabhakar Kushwaha  * qed_set_queue_coalesce(): Configure coalesce parameters for Rx and
468bf5a94bfSRahul Verma  *    Tx queue. The fact that we can configure coalescing to up to 511, but on
469477f2d14SRahul Verma  *    varying accuracy [the bigger the value the less accurate] up to a mistake
470477f2d14SRahul Verma  *    of 3usec for the highest values.
471477f2d14SRahul Verma  *    While the API allows setting coalescing per-qid, all queues sharing a SB
472477f2d14SRahul Verma  *    should be in same range [i.e., either 0-0x7f, 0x80-0xff or 0x100-0x1ff]
473722003acSSudarsana Reddy Kalluru  *    otherwise configuration would break.
474722003acSSudarsana Reddy Kalluru  *
47519198e4eSPrabhakar Kushwaha  * @rx_coal: Rx Coalesce value in micro seconds.
47619198e4eSPrabhakar Kushwaha  * @tx_coal: TX Coalesce value in micro seconds.
47719198e4eSPrabhakar Kushwaha  * @p_handle: P_handle.
478bf5a94bfSRahul Verma  *
47919198e4eSPrabhakar Kushwaha  * Return: Int.
480477f2d14SRahul Verma  **/
481477f2d14SRahul Verma int
482477f2d14SRahul Verma qed_set_queue_coalesce(u16 rx_coal, u16 tx_coal, void *p_handle);
483477f2d14SRahul Verma 
48436907cd5SAriel Elior /**
48519198e4eSPrabhakar Kushwaha  * qed_pglueb_set_pfid_enable(): Enable or disable PCI BUS MASTER.
486666db486STomer Tayar  *
48719198e4eSPrabhakar Kushwaha  * @p_hwfn: HW device data.
48819198e4eSPrabhakar Kushwaha  * @p_ptt: P_ptt.
48919198e4eSPrabhakar Kushwaha  * @b_enable: True/False.
490666db486STomer Tayar  *
49119198e4eSPrabhakar Kushwaha  * Return: Int.
492666db486STomer Tayar  */
493666db486STomer Tayar int qed_pglueb_set_pfid_enable(struct qed_hwfn *p_hwfn,
494666db486STomer Tayar 			       struct qed_ptt *p_ptt, bool b_enable);
495666db486STomer Tayar 
496666db486STomer Tayar /**
49719198e4eSPrabhakar Kushwaha  * qed_db_recovery_add(): add doorbell information to the doorbell
49836907cd5SAriel Elior  *                    recovery mechanism.
49936907cd5SAriel Elior  *
50019198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
50119198e4eSPrabhakar Kushwaha  * @db_addr: Doorbell address.
50219198e4eSPrabhakar Kushwaha  * @db_data: Address of where db_data is stored.
50319198e4eSPrabhakar Kushwaha  * @db_width: Doorbell is 32b pr 64b.
50419198e4eSPrabhakar Kushwaha  * @db_space: Doorbell recovery addresses are user or kernel space.
50519198e4eSPrabhakar Kushwaha  *
50619198e4eSPrabhakar Kushwaha  * Return: Int.
50736907cd5SAriel Elior  */
50836907cd5SAriel Elior int qed_db_recovery_add(struct qed_dev *cdev,
50936907cd5SAriel Elior 			void __iomem *db_addr,
51036907cd5SAriel Elior 			void *db_data,
51136907cd5SAriel Elior 			enum qed_db_rec_width db_width,
51236907cd5SAriel Elior 			enum qed_db_rec_space db_space);
51336907cd5SAriel Elior 
51436907cd5SAriel Elior /**
51519198e4eSPrabhakar Kushwaha  * qed_db_recovery_del() - remove doorbell information from the doorbell
51636907cd5SAriel Elior  * recovery mechanism. db_data serves as key (db_addr is not unique).
51736907cd5SAriel Elior  *
51819198e4eSPrabhakar Kushwaha  * @cdev: Qed dev pointer.
51919198e4eSPrabhakar Kushwaha  * @db_addr: doorbell address.
52019198e4eSPrabhakar Kushwaha  * @db_data: address where db_data is stored. Serves as key for the
52136907cd5SAriel Elior  *                  entry to delete.
52219198e4eSPrabhakar Kushwaha  *
52319198e4eSPrabhakar Kushwaha  * Return: Int.
52436907cd5SAriel Elior  */
52536907cd5SAriel Elior int qed_db_recovery_del(struct qed_dev *cdev,
52636907cd5SAriel Elior 			void __iomem *db_addr, void *db_data);
52736907cd5SAriel Elior 
5289c8517c4STomer Tayar const char *qed_hw_get_resc_name(enum qed_resources res_id);
529fe56b9e6SYuval Mintz #endif
530