1fe56b9e6SYuval Mintz /* QLogic qed NIC Driver
2e8f1cb50SMintz, Yuval  * Copyright (c) 2015-2017  QLogic Corporation
3fe56b9e6SYuval Mintz  *
4e8f1cb50SMintz, Yuval  * This software is available to you under a choice of one of two
5e8f1cb50SMintz, Yuval  * licenses.  You may choose to be licensed under the terms of the GNU
6e8f1cb50SMintz, Yuval  * General Public License (GPL) Version 2, available from the file
7e8f1cb50SMintz, Yuval  * COPYING in the main directory of this source tree, or the
8e8f1cb50SMintz, Yuval  * OpenIB.org BSD license below:
9e8f1cb50SMintz, Yuval  *
10e8f1cb50SMintz, Yuval  *     Redistribution and use in source and binary forms, with or
11e8f1cb50SMintz, Yuval  *     without modification, are permitted provided that the following
12e8f1cb50SMintz, Yuval  *     conditions are met:
13e8f1cb50SMintz, Yuval  *
14e8f1cb50SMintz, Yuval  *      - Redistributions of source code must retain the above
15e8f1cb50SMintz, Yuval  *        copyright notice, this list of conditions and the following
16e8f1cb50SMintz, Yuval  *        disclaimer.
17e8f1cb50SMintz, Yuval  *
18e8f1cb50SMintz, Yuval  *      - Redistributions in binary form must reproduce the above
19e8f1cb50SMintz, Yuval  *        copyright notice, this list of conditions and the following
20e8f1cb50SMintz, Yuval  *        disclaimer in the documentation and /or other materials
21e8f1cb50SMintz, Yuval  *        provided with the distribution.
22e8f1cb50SMintz, Yuval  *
23e8f1cb50SMintz, Yuval  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24e8f1cb50SMintz, Yuval  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25e8f1cb50SMintz, Yuval  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26e8f1cb50SMintz, Yuval  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27e8f1cb50SMintz, Yuval  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28e8f1cb50SMintz, Yuval  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29e8f1cb50SMintz, Yuval  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30e8f1cb50SMintz, Yuval  * SOFTWARE.
31fe56b9e6SYuval Mintz  */
32fe56b9e6SYuval Mintz 
33fe56b9e6SYuval Mintz #ifndef _QED_DEV_API_H
34fe56b9e6SYuval Mintz #define _QED_DEV_API_H
35fe56b9e6SYuval Mintz 
36fe56b9e6SYuval Mintz #include <linux/types.h>
37fe56b9e6SYuval Mintz #include <linux/kernel.h>
38fe56b9e6SYuval Mintz #include <linux/slab.h>
39fe56b9e6SYuval Mintz #include <linux/qed/qed_chain.h>
40fe56b9e6SYuval Mintz #include <linux/qed/qed_if.h>
41fe56b9e6SYuval Mintz #include "qed_int.h"
42fe56b9e6SYuval Mintz 
43fe56b9e6SYuval Mintz /**
44fe56b9e6SYuval Mintz  * @brief qed_init_dp - initialize the debug level
45fe56b9e6SYuval Mintz  *
46fe56b9e6SYuval Mintz  * @param cdev
47fe56b9e6SYuval Mintz  * @param dp_module
48fe56b9e6SYuval Mintz  * @param dp_level
49fe56b9e6SYuval Mintz  */
50fe56b9e6SYuval Mintz void qed_init_dp(struct qed_dev *cdev,
51fe56b9e6SYuval Mintz 		 u32 dp_module,
52fe56b9e6SYuval Mintz 		 u8 dp_level);
53fe56b9e6SYuval Mintz 
54fe56b9e6SYuval Mintz /**
55fe56b9e6SYuval Mintz  * @brief qed_init_struct - initialize the device structure to
56fe56b9e6SYuval Mintz  *        its defaults
57fe56b9e6SYuval Mintz  *
58fe56b9e6SYuval Mintz  * @param cdev
59fe56b9e6SYuval Mintz  */
60fe56b9e6SYuval Mintz void qed_init_struct(struct qed_dev *cdev);
61fe56b9e6SYuval Mintz 
62fe56b9e6SYuval Mintz /**
63fe56b9e6SYuval Mintz  * @brief qed_resc_free -
64fe56b9e6SYuval Mintz  *
65fe56b9e6SYuval Mintz  * @param cdev
66fe56b9e6SYuval Mintz  */
67fe56b9e6SYuval Mintz void qed_resc_free(struct qed_dev *cdev);
68fe56b9e6SYuval Mintz 
69fe56b9e6SYuval Mintz /**
70fe56b9e6SYuval Mintz  * @brief qed_resc_alloc -
71fe56b9e6SYuval Mintz  *
72fe56b9e6SYuval Mintz  * @param cdev
73fe56b9e6SYuval Mintz  *
74fe56b9e6SYuval Mintz  * @return int
75fe56b9e6SYuval Mintz  */
76fe56b9e6SYuval Mintz int qed_resc_alloc(struct qed_dev *cdev);
77fe56b9e6SYuval Mintz 
78fe56b9e6SYuval Mintz /**
79fe56b9e6SYuval Mintz  * @brief qed_resc_setup -
80fe56b9e6SYuval Mintz  *
81fe56b9e6SYuval Mintz  * @param cdev
82fe56b9e6SYuval Mintz  */
83fe56b9e6SYuval Mintz void qed_resc_setup(struct qed_dev *cdev);
84fe56b9e6SYuval Mintz 
85fe56b9e6SYuval Mintz /**
86fe56b9e6SYuval Mintz  * @brief qed_hw_init -
87fe56b9e6SYuval Mintz  *
88fe56b9e6SYuval Mintz  * @param cdev
89464f6645SManish Chopra  * @param p_tunn
90fe56b9e6SYuval Mintz  * @param b_hw_start
91fe56b9e6SYuval Mintz  * @param int_mode - interrupt mode [msix, inta, etc.] to use.
92fe56b9e6SYuval Mintz  * @param allow_npar_tx_switch - npar tx switching to be used
93fe56b9e6SYuval Mintz  *	  for vports configured for tx-switching.
94fe56b9e6SYuval Mintz  * @param bin_fw_data - binary fw data pointer in binary fw file.
95fe56b9e6SYuval Mintz  *			Pass NULL if not using binary fw file.
96fe56b9e6SYuval Mintz  *
97fe56b9e6SYuval Mintz  * @return int
98fe56b9e6SYuval Mintz  */
99fe56b9e6SYuval Mintz int qed_hw_init(struct qed_dev *cdev,
100464f6645SManish Chopra 		struct qed_tunn_start_params *p_tunn,
101fe56b9e6SYuval Mintz 		bool b_hw_start,
102fe56b9e6SYuval Mintz 		enum qed_int_mode int_mode,
103fe56b9e6SYuval Mintz 		bool allow_npar_tx_switch,
104fe56b9e6SYuval Mintz 		const u8 *bin_fw_data);
105fe56b9e6SYuval Mintz 
106fe56b9e6SYuval Mintz /**
1078c925c44SYuval Mintz  * @brief qed_hw_timers_stop_all - stop the timers HW block
1088c925c44SYuval Mintz  *
1098c925c44SYuval Mintz  * @param cdev
1108c925c44SYuval Mintz  *
1118c925c44SYuval Mintz  * @return void
1128c925c44SYuval Mintz  */
1138c925c44SYuval Mintz void qed_hw_timers_stop_all(struct qed_dev *cdev);
1148c925c44SYuval Mintz 
1158c925c44SYuval Mintz /**
116fe56b9e6SYuval Mintz  * @brief qed_hw_stop -
117fe56b9e6SYuval Mintz  *
118fe56b9e6SYuval Mintz  * @param cdev
119fe56b9e6SYuval Mintz  *
120fe56b9e6SYuval Mintz  * @return int
121fe56b9e6SYuval Mintz  */
122fe56b9e6SYuval Mintz int qed_hw_stop(struct qed_dev *cdev);
123fe56b9e6SYuval Mintz 
124fe56b9e6SYuval Mintz /**
125cee4d264SManish Chopra  * @brief qed_hw_stop_fastpath -should be called incase
126cee4d264SManish Chopra  *		slowpath is still required for the device,
127cee4d264SManish Chopra  *		but fastpath is not.
128cee4d264SManish Chopra  *
129cee4d264SManish Chopra  * @param cdev
130cee4d264SManish Chopra  *
131cee4d264SManish Chopra  */
132cee4d264SManish Chopra void qed_hw_stop_fastpath(struct qed_dev *cdev);
133cee4d264SManish Chopra 
134cee4d264SManish Chopra /**
135cee4d264SManish Chopra  * @brief qed_hw_start_fastpath -restart fastpath traffic,
136cee4d264SManish Chopra  *		only if hw_stop_fastpath was called
137cee4d264SManish Chopra  *
138cee4d264SManish Chopra  * @param cdev
139cee4d264SManish Chopra  *
140cee4d264SManish Chopra  */
141cee4d264SManish Chopra void qed_hw_start_fastpath(struct qed_hwfn *p_hwfn);
142cee4d264SManish Chopra 
143cee4d264SManish Chopra /**
144fe56b9e6SYuval Mintz  * @brief qed_hw_reset -
145fe56b9e6SYuval Mintz  *
146fe56b9e6SYuval Mintz  * @param cdev
147fe56b9e6SYuval Mintz  *
148fe56b9e6SYuval Mintz  * @return int
149fe56b9e6SYuval Mintz  */
150fe56b9e6SYuval Mintz int qed_hw_reset(struct qed_dev *cdev);
151fe56b9e6SYuval Mintz 
152fe56b9e6SYuval Mintz /**
153fe56b9e6SYuval Mintz  * @brief qed_hw_prepare -
154fe56b9e6SYuval Mintz  *
155fe56b9e6SYuval Mintz  * @param cdev
156fe56b9e6SYuval Mintz  * @param personality - personality to initialize
157fe56b9e6SYuval Mintz  *
158fe56b9e6SYuval Mintz  * @return int
159fe56b9e6SYuval Mintz  */
160fe56b9e6SYuval Mintz int qed_hw_prepare(struct qed_dev *cdev,
161fe56b9e6SYuval Mintz 		   int personality);
162fe56b9e6SYuval Mintz 
163fe56b9e6SYuval Mintz /**
164fe56b9e6SYuval Mintz  * @brief qed_hw_remove -
165fe56b9e6SYuval Mintz  *
166fe56b9e6SYuval Mintz  * @param cdev
167fe56b9e6SYuval Mintz  */
168fe56b9e6SYuval Mintz void qed_hw_remove(struct qed_dev *cdev);
169fe56b9e6SYuval Mintz 
170fe56b9e6SYuval Mintz /**
171fe56b9e6SYuval Mintz  * @brief qed_ptt_acquire - Allocate a PTT window
172fe56b9e6SYuval Mintz  *
173fe56b9e6SYuval Mintz  * Should be called at the entry point to the driver (at the beginning of an
174fe56b9e6SYuval Mintz  * exported function)
175fe56b9e6SYuval Mintz  *
176fe56b9e6SYuval Mintz  * @param p_hwfn
177fe56b9e6SYuval Mintz  *
178fe56b9e6SYuval Mintz  * @return struct qed_ptt
179fe56b9e6SYuval Mintz  */
180fe56b9e6SYuval Mintz struct qed_ptt *qed_ptt_acquire(struct qed_hwfn *p_hwfn);
181fe56b9e6SYuval Mintz 
182fe56b9e6SYuval Mintz /**
183fe56b9e6SYuval Mintz  * @brief qed_ptt_release - Release PTT Window
184fe56b9e6SYuval Mintz  *
185fe56b9e6SYuval Mintz  * Should be called at the end of a flow - at the end of the function that
186fe56b9e6SYuval Mintz  * acquired the PTT.
187fe56b9e6SYuval Mintz  *
188fe56b9e6SYuval Mintz  *
189fe56b9e6SYuval Mintz  * @param p_hwfn
190fe56b9e6SYuval Mintz  * @param p_ptt
191fe56b9e6SYuval Mintz  */
192fe56b9e6SYuval Mintz void qed_ptt_release(struct qed_hwfn *p_hwfn,
193fe56b9e6SYuval Mintz 		     struct qed_ptt *p_ptt);
1949df2ed04SManish Chopra void qed_reset_vport_stats(struct qed_dev *cdev);
195fe56b9e6SYuval Mintz 
196fe56b9e6SYuval Mintz enum qed_dmae_address_type_t {
197fe56b9e6SYuval Mintz 	QED_DMAE_ADDRESS_HOST_VIRT,
198fe56b9e6SYuval Mintz 	QED_DMAE_ADDRESS_HOST_PHYS,
199fe56b9e6SYuval Mintz 	QED_DMAE_ADDRESS_GRC
200fe56b9e6SYuval Mintz };
201fe56b9e6SYuval Mintz 
202fe56b9e6SYuval Mintz /* value of flags If QED_DMAE_FLAG_RW_REPL_SRC flag is set and the
203fe56b9e6SYuval Mintz  * source is a block of length DMAE_MAX_RW_SIZE and the
204fe56b9e6SYuval Mintz  * destination is larger, the source block will be duplicated as
205fe56b9e6SYuval Mintz  * many times as required to fill the destination block. This is
206fe56b9e6SYuval Mintz  * used mostly to write a zeroed buffer to destination address
207fe56b9e6SYuval Mintz  * using DMA
208fe56b9e6SYuval Mintz  */
209fe56b9e6SYuval Mintz #define QED_DMAE_FLAG_RW_REPL_SRC	0x00000001
21037bff2b9SYuval Mintz #define QED_DMAE_FLAG_VF_SRC		0x00000002
21137bff2b9SYuval Mintz #define QED_DMAE_FLAG_VF_DST		0x00000004
212fe56b9e6SYuval Mintz #define QED_DMAE_FLAG_COMPLETION_DST	0x00000008
213fe56b9e6SYuval Mintz 
214fe56b9e6SYuval Mintz struct qed_dmae_params {
215fe56b9e6SYuval Mintz 	u32 flags; /* consists of QED_DMAE_FLAG_* values */
21637bff2b9SYuval Mintz 	u8 src_vfid;
21737bff2b9SYuval Mintz 	u8 dst_vfid;
218fe56b9e6SYuval Mintz };
219fe56b9e6SYuval Mintz 
220fe56b9e6SYuval Mintz /**
221fe56b9e6SYuval Mintz  * @brief qed_dmae_host2grc - copy data from source addr to
222fe56b9e6SYuval Mintz  * dmae registers using the given ptt
223fe56b9e6SYuval Mintz  *
224fe56b9e6SYuval Mintz  * @param p_hwfn
225fe56b9e6SYuval Mintz  * @param p_ptt
226fe56b9e6SYuval Mintz  * @param source_addr
227fe56b9e6SYuval Mintz  * @param grc_addr (dmae_data_offset)
228fe56b9e6SYuval Mintz  * @param size_in_dwords
229fe56b9e6SYuval Mintz  * @param flags (one of the flags defined above)
230fe56b9e6SYuval Mintz  */
231fe56b9e6SYuval Mintz int
232fe56b9e6SYuval Mintz qed_dmae_host2grc(struct qed_hwfn *p_hwfn,
233fe56b9e6SYuval Mintz 		  struct qed_ptt *p_ptt,
234fe56b9e6SYuval Mintz 		  u64 source_addr,
235fe56b9e6SYuval Mintz 		  u32 grc_addr,
236fe56b9e6SYuval Mintz 		  u32 size_in_dwords,
237fe56b9e6SYuval Mintz 		  u32 flags);
238fe56b9e6SYuval Mintz 
239fe56b9e6SYuval Mintz  /**
240722003acSSudarsana Reddy Kalluru  * @brief qed_dmae_grc2host - Read data from dmae data offset
241722003acSSudarsana Reddy Kalluru  * to source address using the given ptt
242722003acSSudarsana Reddy Kalluru  *
243722003acSSudarsana Reddy Kalluru  * @param p_ptt
244722003acSSudarsana Reddy Kalluru  * @param grc_addr (dmae_data_offset)
245722003acSSudarsana Reddy Kalluru  * @param dest_addr
246722003acSSudarsana Reddy Kalluru  * @param size_in_dwords
247722003acSSudarsana Reddy Kalluru  * @param flags - one of the flags defined above
248722003acSSudarsana Reddy Kalluru  */
249722003acSSudarsana Reddy Kalluru int qed_dmae_grc2host(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt,
250722003acSSudarsana Reddy Kalluru 		      u32 grc_addr, dma_addr_t dest_addr, u32 size_in_dwords,
251722003acSSudarsana Reddy Kalluru 		      u32 flags);
252722003acSSudarsana Reddy Kalluru 
253722003acSSudarsana Reddy Kalluru /**
25437bff2b9SYuval Mintz  * @brief qed_dmae_host2host - copy data from to source address
25537bff2b9SYuval Mintz  * to a destination adress (for SRIOV) using the given ptt
25637bff2b9SYuval Mintz  *
25737bff2b9SYuval Mintz  * @param p_hwfn
25837bff2b9SYuval Mintz  * @param p_ptt
25937bff2b9SYuval Mintz  * @param source_addr
26037bff2b9SYuval Mintz  * @param dest_addr
26137bff2b9SYuval Mintz  * @param size_in_dwords
26237bff2b9SYuval Mintz  * @param params
26337bff2b9SYuval Mintz  */
26437bff2b9SYuval Mintz int qed_dmae_host2host(struct qed_hwfn *p_hwfn,
26537bff2b9SYuval Mintz 		       struct qed_ptt *p_ptt,
26637bff2b9SYuval Mintz 		       dma_addr_t source_addr,
26737bff2b9SYuval Mintz 		       dma_addr_t dest_addr,
26837bff2b9SYuval Mintz 		       u32 size_in_dwords, struct qed_dmae_params *p_params);
26937bff2b9SYuval Mintz 
27037bff2b9SYuval Mintz /**
271fe56b9e6SYuval Mintz  * @brief qed_chain_alloc - Allocate and initialize a chain
272fe56b9e6SYuval Mintz  *
273fe56b9e6SYuval Mintz  * @param p_hwfn
274fe56b9e6SYuval Mintz  * @param intended_use
275fe56b9e6SYuval Mintz  * @param mode
276fe56b9e6SYuval Mintz  * @param num_elems
277fe56b9e6SYuval Mintz  * @param elem_size
278fe56b9e6SYuval Mintz  * @param p_chain
279fe56b9e6SYuval Mintz  *
280fe56b9e6SYuval Mintz  * @return int
281fe56b9e6SYuval Mintz  */
282fe56b9e6SYuval Mintz int
283fe56b9e6SYuval Mintz qed_chain_alloc(struct qed_dev *cdev,
284fe56b9e6SYuval Mintz 		enum qed_chain_use_mode intended_use,
285fe56b9e6SYuval Mintz 		enum qed_chain_mode mode,
286a91eb52aSYuval Mintz 		enum qed_chain_cnt_type cnt_type,
287a91eb52aSYuval Mintz 		u32 num_elems, size_t elem_size, struct qed_chain *p_chain);
288fe56b9e6SYuval Mintz 
289fe56b9e6SYuval Mintz /**
290fe56b9e6SYuval Mintz  * @brief qed_chain_free - Free chain DMA memory
291fe56b9e6SYuval Mintz  *
292fe56b9e6SYuval Mintz  * @param p_hwfn
293fe56b9e6SYuval Mintz  * @param p_chain
294fe56b9e6SYuval Mintz  */
295a91eb52aSYuval Mintz void qed_chain_free(struct qed_dev *cdev, struct qed_chain *p_chain);
296fe56b9e6SYuval Mintz 
297fe56b9e6SYuval Mintz /**
298cee4d264SManish Chopra  * @@brief qed_fw_l2_queue - Get absolute L2 queue ID
299cee4d264SManish Chopra  *
300cee4d264SManish Chopra  *  @param p_hwfn
301cee4d264SManish Chopra  *  @param src_id - relative to p_hwfn
302cee4d264SManish Chopra  *  @param dst_id - absolute per engine
303cee4d264SManish Chopra  *
304cee4d264SManish Chopra  *  @return int
305cee4d264SManish Chopra  */
306cee4d264SManish Chopra int qed_fw_l2_queue(struct qed_hwfn *p_hwfn,
307cee4d264SManish Chopra 		    u16 src_id,
308cee4d264SManish Chopra 		    u16 *dst_id);
309cee4d264SManish Chopra 
310cee4d264SManish Chopra /**
311cee4d264SManish Chopra  * @@brief qed_fw_vport - Get absolute vport ID
312cee4d264SManish Chopra  *
313cee4d264SManish Chopra  *  @param p_hwfn
314cee4d264SManish Chopra  *  @param src_id - relative to p_hwfn
315cee4d264SManish Chopra  *  @param dst_id - absolute per engine
316cee4d264SManish Chopra  *
317cee4d264SManish Chopra  *  @return int
318cee4d264SManish Chopra  */
319cee4d264SManish Chopra int qed_fw_vport(struct qed_hwfn *p_hwfn,
320cee4d264SManish Chopra 		 u8 src_id,
321cee4d264SManish Chopra 		 u8 *dst_id);
322cee4d264SManish Chopra 
323cee4d264SManish Chopra /**
324cee4d264SManish Chopra  * @@brief qed_fw_rss_eng - Get absolute RSS engine ID
325cee4d264SManish Chopra  *
326cee4d264SManish Chopra  *  @param p_hwfn
327cee4d264SManish Chopra  *  @param src_id - relative to p_hwfn
328cee4d264SManish Chopra  *  @param dst_id - absolute per engine
329cee4d264SManish Chopra  *
330cee4d264SManish Chopra  *  @return int
331cee4d264SManish Chopra  */
332cee4d264SManish Chopra int qed_fw_rss_eng(struct qed_hwfn *p_hwfn,
333cee4d264SManish Chopra 		   u8 src_id,
334cee4d264SManish Chopra 		   u8 *dst_id);
335cee4d264SManish Chopra 
336cee4d264SManish Chopra /**
3370a7fb11cSYuval Mintz  * @brief qed_llh_add_mac_filter - configures a MAC filter in llh
3380a7fb11cSYuval Mintz  *
3390a7fb11cSYuval Mintz  * @param p_hwfn
3400a7fb11cSYuval Mintz  * @param p_ptt
3410a7fb11cSYuval Mintz  * @param p_filter - MAC to add
3420a7fb11cSYuval Mintz  */
3430a7fb11cSYuval Mintz int qed_llh_add_mac_filter(struct qed_hwfn *p_hwfn,
3440a7fb11cSYuval Mintz 			   struct qed_ptt *p_ptt, u8 *p_filter);
3450a7fb11cSYuval Mintz 
3460a7fb11cSYuval Mintz /**
3470a7fb11cSYuval Mintz  * @brief qed_llh_remove_mac_filter - removes a MAC filter from llh
3480a7fb11cSYuval Mintz  *
3490a7fb11cSYuval Mintz  * @param p_hwfn
3500a7fb11cSYuval Mintz  * @param p_ptt
3510a7fb11cSYuval Mintz  * @param p_filter - MAC to remove
3520a7fb11cSYuval Mintz  */
3530a7fb11cSYuval Mintz void qed_llh_remove_mac_filter(struct qed_hwfn *p_hwfn,
3540a7fb11cSYuval Mintz 			       struct qed_ptt *p_ptt, u8 *p_filter);
3550a7fb11cSYuval Mintz 
3561e128c81SArun Easi enum qed_llh_port_filter_type_t {
3571e128c81SArun Easi 	QED_LLH_FILTER_ETHERTYPE,
3581e128c81SArun Easi 	QED_LLH_FILTER_TCP_SRC_PORT,
3591e128c81SArun Easi 	QED_LLH_FILTER_TCP_DEST_PORT,
3601e128c81SArun Easi 	QED_LLH_FILTER_TCP_SRC_AND_DEST_PORT,
3611e128c81SArun Easi 	QED_LLH_FILTER_UDP_SRC_PORT,
3621e128c81SArun Easi 	QED_LLH_FILTER_UDP_DEST_PORT,
3631e128c81SArun Easi 	QED_LLH_FILTER_UDP_SRC_AND_DEST_PORT
3641e128c81SArun Easi };
3651e128c81SArun Easi 
3661e128c81SArun Easi /**
3671e128c81SArun Easi  * @brief qed_llh_add_protocol_filter - configures a protocol filter in llh
3681e128c81SArun Easi  *
3691e128c81SArun Easi  * @param p_hwfn
3701e128c81SArun Easi  * @param p_ptt
3711e128c81SArun Easi  * @param source_port_or_eth_type - source port or ethertype to add
3721e128c81SArun Easi  * @param dest_port - destination port to add
3731e128c81SArun Easi  * @param type - type of filters and comparing
3741e128c81SArun Easi  */
3751e128c81SArun Easi int
3761e128c81SArun Easi qed_llh_add_protocol_filter(struct qed_hwfn *p_hwfn,
3771e128c81SArun Easi 			    struct qed_ptt *p_ptt,
3781e128c81SArun Easi 			    u16 source_port_or_eth_type,
3791e128c81SArun Easi 			    u16 dest_port,
3801e128c81SArun Easi 			    enum qed_llh_port_filter_type_t type);
3811e128c81SArun Easi 
3821e128c81SArun Easi /**
3831e128c81SArun Easi  * @brief qed_llh_remove_protocol_filter - remove a protocol filter in llh
3841e128c81SArun Easi  *
3851e128c81SArun Easi  * @param p_hwfn
3861e128c81SArun Easi  * @param p_ptt
3871e128c81SArun Easi  * @param source_port_or_eth_type - source port or ethertype to add
3881e128c81SArun Easi  * @param dest_port - destination port to add
3891e128c81SArun Easi  * @param type - type of filters and comparing
3901e128c81SArun Easi  */
3911e128c81SArun Easi void
3921e128c81SArun Easi qed_llh_remove_protocol_filter(struct qed_hwfn *p_hwfn,
3931e128c81SArun Easi 			       struct qed_ptt *p_ptt,
3941e128c81SArun Easi 			       u16 source_port_or_eth_type,
3951e128c81SArun Easi 			       u16 dest_port,
3961e128c81SArun Easi 			       enum qed_llh_port_filter_type_t type);
3971e128c81SArun Easi 
3980a7fb11cSYuval Mintz /**
399fe56b9e6SYuval Mintz  * *@brief Cleanup of previous driver remains prior to load
400fe56b9e6SYuval Mintz  *
401fe56b9e6SYuval Mintz  * @param p_hwfn
402fe56b9e6SYuval Mintz  * @param p_ptt
403fe56b9e6SYuval Mintz  * @param id - For PF, engine-relative. For VF, PF-relative.
4040b55e27dSYuval Mintz  * @param is_vf - true iff cleanup is made for a VF.
405fe56b9e6SYuval Mintz  *
406fe56b9e6SYuval Mintz  * @return int
407fe56b9e6SYuval Mintz  */
408fe56b9e6SYuval Mintz int qed_final_cleanup(struct qed_hwfn *p_hwfn,
4090b55e27dSYuval Mintz 		      struct qed_ptt *p_ptt, u16 id, bool is_vf);
410fe56b9e6SYuval Mintz 
411722003acSSudarsana Reddy Kalluru /**
412722003acSSudarsana Reddy Kalluru  * @brief qed_set_rxq_coalesce - Configure coalesce parameters for an Rx queue
413722003acSSudarsana Reddy Kalluru  * The fact that we can configure coalescing to up to 511, but on varying
414722003acSSudarsana Reddy Kalluru  * accuracy [the bigger the value the less accurate] up to a mistake of 3usec
415722003acSSudarsana Reddy Kalluru  * for the highest values.
416722003acSSudarsana Reddy Kalluru  *
417722003acSSudarsana Reddy Kalluru  * @param p_hwfn
418722003acSSudarsana Reddy Kalluru  * @param p_ptt
419722003acSSudarsana Reddy Kalluru  * @param coalesce - Coalesce value in micro seconds.
420722003acSSudarsana Reddy Kalluru  * @param qid - Queue index.
421722003acSSudarsana Reddy Kalluru  * @param qid - SB Id
422722003acSSudarsana Reddy Kalluru  *
423722003acSSudarsana Reddy Kalluru  * @return int
424722003acSSudarsana Reddy Kalluru  */
425722003acSSudarsana Reddy Kalluru int qed_set_rxq_coalesce(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt,
426722003acSSudarsana Reddy Kalluru 			 u16 coalesce, u8 qid, u16 sb_id);
427722003acSSudarsana Reddy Kalluru 
428722003acSSudarsana Reddy Kalluru /**
429722003acSSudarsana Reddy Kalluru  * @brief qed_set_txq_coalesce - Configure coalesce parameters for a Tx queue
430722003acSSudarsana Reddy Kalluru  * While the API allows setting coalescing per-qid, all tx queues sharing a
431722003acSSudarsana Reddy Kalluru  * SB should be in same range [i.e., either 0-0x7f, 0x80-0xff or 0x100-0x1ff]
432722003acSSudarsana Reddy Kalluru  * otherwise configuration would break.
433722003acSSudarsana Reddy Kalluru  *
434722003acSSudarsana Reddy Kalluru  * @param p_hwfn
435722003acSSudarsana Reddy Kalluru  * @param p_ptt
436722003acSSudarsana Reddy Kalluru  * @param coalesce - Coalesce value in micro seconds.
437722003acSSudarsana Reddy Kalluru  * @param qid - Queue index.
438722003acSSudarsana Reddy Kalluru  * @param qid - SB Id
439722003acSSudarsana Reddy Kalluru  *
440722003acSSudarsana Reddy Kalluru  * @return int
441722003acSSudarsana Reddy Kalluru  */
442722003acSSudarsana Reddy Kalluru int qed_set_txq_coalesce(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt,
443722003acSSudarsana Reddy Kalluru 			 u16 coalesce, u8 qid, u16 sb_id);
444fe56b9e6SYuval Mintz #endif
445