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_SPQ_H__
37*14b24e2bSVaishali Kulkarni #define __ECORE_SPQ_H__
38*14b24e2bSVaishali Kulkarni 
39*14b24e2bSVaishali Kulkarni #include "ecore_hsi_common.h"
40*14b24e2bSVaishali Kulkarni #include "ecore_status.h"
41*14b24e2bSVaishali Kulkarni #include "ecore_hsi_eth.h"
42*14b24e2bSVaishali Kulkarni #include "ecore_hsi_fcoe.h"
43*14b24e2bSVaishali Kulkarni #include "tcp_common.h"
44*14b24e2bSVaishali Kulkarni #include "ecore_hsi_iscsi.h"
45*14b24e2bSVaishali Kulkarni #include "ecore_hsi_roce.h"
46*14b24e2bSVaishali Kulkarni #include "ecore_hsi_iwarp.h"
47*14b24e2bSVaishali Kulkarni #include "ecore_chain.h"
48*14b24e2bSVaishali Kulkarni #include "ecore_sp_api.h"
49*14b24e2bSVaishali Kulkarni 
50*14b24e2bSVaishali Kulkarni union ramrod_data
51*14b24e2bSVaishali Kulkarni {
52*14b24e2bSVaishali Kulkarni 	struct pf_start_ramrod_data			pf_start;
53*14b24e2bSVaishali Kulkarni 	struct pf_update_ramrod_data			pf_update;
54*14b24e2bSVaishali Kulkarni 	struct rl_update_ramrod_data			rl_update;
55*14b24e2bSVaishali Kulkarni 	struct rx_queue_start_ramrod_data		rx_queue_start;
56*14b24e2bSVaishali Kulkarni 	struct rx_queue_update_ramrod_data		rx_queue_update;
57*14b24e2bSVaishali Kulkarni 	struct rx_queue_stop_ramrod_data		rx_queue_stop;
58*14b24e2bSVaishali Kulkarni 	struct tx_queue_start_ramrod_data		tx_queue_start;
59*14b24e2bSVaishali Kulkarni 	struct tx_queue_stop_ramrod_data		tx_queue_stop;
60*14b24e2bSVaishali Kulkarni 	struct vport_start_ramrod_data			vport_start;
61*14b24e2bSVaishali Kulkarni 	struct vport_stop_ramrod_data			vport_stop;
62*14b24e2bSVaishali Kulkarni 	struct rx_update_gft_filter_data		rx_update_gft;
63*14b24e2bSVaishali Kulkarni 	struct vport_update_ramrod_data			vport_update;
64*14b24e2bSVaishali Kulkarni 	struct core_rx_start_ramrod_data		core_rx_queue_start;
65*14b24e2bSVaishali Kulkarni 	struct core_rx_stop_ramrod_data			core_rx_queue_stop;
66*14b24e2bSVaishali Kulkarni 	struct core_tx_start_ramrod_data		core_tx_queue_start;
67*14b24e2bSVaishali Kulkarni 	struct core_tx_stop_ramrod_data			core_tx_queue_stop;
68*14b24e2bSVaishali Kulkarni 	struct vport_filter_update_ramrod_data		vport_filter_update;
69*14b24e2bSVaishali Kulkarni 
70*14b24e2bSVaishali Kulkarni 	struct rdma_init_func_ramrod_data		rdma_init_func;
71*14b24e2bSVaishali Kulkarni 	struct rdma_close_func_ramrod_data		rdma_close_func;
72*14b24e2bSVaishali Kulkarni 	struct rdma_register_tid_ramrod_data		rdma_register_tid;
73*14b24e2bSVaishali Kulkarni 	struct rdma_deregister_tid_ramrod_data		rdma_deregister_tid;
74*14b24e2bSVaishali Kulkarni 	struct roce_create_qp_resp_ramrod_data		roce_create_qp_resp;
75*14b24e2bSVaishali Kulkarni 	struct roce_create_qp_req_ramrod_data		roce_create_qp_req;
76*14b24e2bSVaishali Kulkarni 	struct roce_modify_qp_resp_ramrod_data		roce_modify_qp_resp;
77*14b24e2bSVaishali Kulkarni 	struct roce_modify_qp_req_ramrod_data		roce_modify_qp_req;
78*14b24e2bSVaishali Kulkarni 	struct roce_query_qp_resp_ramrod_data		roce_query_qp_resp;
79*14b24e2bSVaishali Kulkarni 	struct roce_query_qp_req_ramrod_data		roce_query_qp_req;
80*14b24e2bSVaishali Kulkarni 	struct roce_destroy_qp_resp_ramrod_data		roce_destroy_qp_resp;
81*14b24e2bSVaishali Kulkarni 	struct roce_destroy_qp_req_ramrod_data		roce_destroy_qp_req;
82*14b24e2bSVaishali Kulkarni 	struct roce_init_func_ramrod_data		roce_init_func;
83*14b24e2bSVaishali Kulkarni 
84*14b24e2bSVaishali Kulkarni 	struct rdma_create_cq_ramrod_data		rdma_create_cq;
85*14b24e2bSVaishali Kulkarni 	struct rdma_resize_cq_ramrod_data		rdma_resize_cq;
86*14b24e2bSVaishali Kulkarni 	struct rdma_destroy_cq_ramrod_data		rdma_destroy_cq;
87*14b24e2bSVaishali Kulkarni 	struct rdma_srq_create_ramrod_data		rdma_create_srq;
88*14b24e2bSVaishali Kulkarni 	struct rdma_srq_destroy_ramrod_data		rdma_destroy_srq;
89*14b24e2bSVaishali Kulkarni 	struct rdma_srq_modify_ramrod_data		rdma_modify_srq;
90*14b24e2bSVaishali Kulkarni 
91*14b24e2bSVaishali Kulkarni 	struct iwarp_create_qp_ramrod_data		iwarp_create_qp;
92*14b24e2bSVaishali Kulkarni 	struct iwarp_tcp_offload_ramrod_data		iwarp_tcp_offload;
93*14b24e2bSVaishali Kulkarni 	struct iwarp_mpa_offload_ramrod_data		iwarp_mpa_offload;
94*14b24e2bSVaishali Kulkarni 	struct iwarp_modify_qp_ramrod_data		iwarp_modify_qp;
95*14b24e2bSVaishali Kulkarni 	struct iwarp_query_qp_ramrod_data		iwarp_query_qp;
96*14b24e2bSVaishali Kulkarni 	struct iwarp_init_func_ramrod_data		iwarp_init_func;
97*14b24e2bSVaishali Kulkarni 
98*14b24e2bSVaishali Kulkarni 	struct fcoe_init_ramrod_params			fcoe_init;
99*14b24e2bSVaishali Kulkarni 	struct fcoe_conn_offload_ramrod_params		fcoe_conn_ofld;
100*14b24e2bSVaishali Kulkarni 	struct fcoe_conn_terminate_ramrod_params	fcoe_conn_terminate;
101*14b24e2bSVaishali Kulkarni 	struct fcoe_stat_ramrod_params			fcoe_stat;
102*14b24e2bSVaishali Kulkarni 
103*14b24e2bSVaishali Kulkarni 	struct iscsi_slow_path_hdr			iscsi_empty;
104*14b24e2bSVaishali Kulkarni 	struct iscsi_init_ramrod_params			iscsi_init;
105*14b24e2bSVaishali Kulkarni 	struct iscsi_spe_func_dstry			iscsi_destroy;
106*14b24e2bSVaishali Kulkarni 	struct iscsi_spe_conn_offload			iscsi_conn_offload;
107*14b24e2bSVaishali Kulkarni 	struct iscsi_conn_update_ramrod_params		iscsi_conn_update;
108*14b24e2bSVaishali Kulkarni 	struct iscsi_spe_conn_mac_update		iscsi_conn_mac_update;
109*14b24e2bSVaishali Kulkarni 	struct iscsi_spe_conn_termination		iscsi_conn_terminate;
110*14b24e2bSVaishali Kulkarni 
111*14b24e2bSVaishali Kulkarni 	struct vf_start_ramrod_data			vf_start;
112*14b24e2bSVaishali Kulkarni 	struct vf_stop_ramrod_data			vf_stop;
113*14b24e2bSVaishali Kulkarni };
114*14b24e2bSVaishali Kulkarni 
115*14b24e2bSVaishali Kulkarni #define EQ_MAX_CREDIT	0xffffffff
116*14b24e2bSVaishali Kulkarni 
117*14b24e2bSVaishali Kulkarni enum spq_priority {
118*14b24e2bSVaishali Kulkarni 	ECORE_SPQ_PRIORITY_NORMAL,
119*14b24e2bSVaishali Kulkarni 	ECORE_SPQ_PRIORITY_HIGH,
120*14b24e2bSVaishali Kulkarni };
121*14b24e2bSVaishali Kulkarni 
122*14b24e2bSVaishali Kulkarni union ecore_spq_req_comp {
123*14b24e2bSVaishali Kulkarni 	struct ecore_spq_comp_cb cb;
124*14b24e2bSVaishali Kulkarni 	u64			 *done_addr;
125*14b24e2bSVaishali Kulkarni };
126*14b24e2bSVaishali Kulkarni 
127*14b24e2bSVaishali Kulkarni /* SPQ_MODE_EBLOCK */
128*14b24e2bSVaishali Kulkarni struct ecore_spq_comp_done {
129*14b24e2bSVaishali Kulkarni 	u64 done;
130*14b24e2bSVaishali Kulkarni 	u8  fw_return_code;
131*14b24e2bSVaishali Kulkarni };
132*14b24e2bSVaishali Kulkarni 
133*14b24e2bSVaishali Kulkarni struct ecore_spq_entry {
134*14b24e2bSVaishali Kulkarni 	osal_list_entry_t		list;
135*14b24e2bSVaishali Kulkarni 
136*14b24e2bSVaishali Kulkarni 	u8				flags;
137*14b24e2bSVaishali Kulkarni 
138*14b24e2bSVaishali Kulkarni 	/* HSI slow path element */
139*14b24e2bSVaishali Kulkarni 	struct slow_path_element	elem;
140*14b24e2bSVaishali Kulkarni 
141*14b24e2bSVaishali Kulkarni 	union ramrod_data		ramrod;
142*14b24e2bSVaishali Kulkarni 
143*14b24e2bSVaishali Kulkarni 	enum spq_priority		priority;
144*14b24e2bSVaishali Kulkarni 
145*14b24e2bSVaishali Kulkarni 	/* pending queue for this entry */
146*14b24e2bSVaishali Kulkarni 	osal_list_t			*queue;
147*14b24e2bSVaishali Kulkarni 
148*14b24e2bSVaishali Kulkarni 	enum spq_mode			comp_mode;
149*14b24e2bSVaishali Kulkarni 	struct ecore_spq_comp_cb	comp_cb;
150*14b24e2bSVaishali Kulkarni 	struct ecore_spq_comp_done	comp_done; /* SPQ_MODE_EBLOCK */
151*14b24e2bSVaishali Kulkarni };
152*14b24e2bSVaishali Kulkarni 
153*14b24e2bSVaishali Kulkarni struct ecore_eq {
154*14b24e2bSVaishali Kulkarni 	struct ecore_chain	chain;
155*14b24e2bSVaishali Kulkarni 	u8			eq_sb_index;	/* index within the SB */
156*14b24e2bSVaishali Kulkarni 	__le16			*p_fw_cons;	/* ptr to index value */
157*14b24e2bSVaishali Kulkarni };
158*14b24e2bSVaishali Kulkarni 
159*14b24e2bSVaishali Kulkarni struct ecore_consq {
160*14b24e2bSVaishali Kulkarni 	struct ecore_chain	chain;
161*14b24e2bSVaishali Kulkarni };
162*14b24e2bSVaishali Kulkarni 
163*14b24e2bSVaishali Kulkarni struct ecore_spq {
164*14b24e2bSVaishali Kulkarni 	osal_spinlock_t			lock;
165*14b24e2bSVaishali Kulkarni 
166*14b24e2bSVaishali Kulkarni 	osal_list_t			unlimited_pending;
167*14b24e2bSVaishali Kulkarni 	osal_list_t			pending;
168*14b24e2bSVaishali Kulkarni 	osal_list_t			completion_pending;
169*14b24e2bSVaishali Kulkarni 	osal_list_t			free_pool;
170*14b24e2bSVaishali Kulkarni 
171*14b24e2bSVaishali Kulkarni 	struct ecore_chain		chain;
172*14b24e2bSVaishali Kulkarni 
173*14b24e2bSVaishali Kulkarni 	/* allocated dma-able memory for spq entries (+ramrod data) */
174*14b24e2bSVaishali Kulkarni 	dma_addr_t			p_phys;
175*14b24e2bSVaishali Kulkarni 	struct ecore_spq_entry		*p_virt;
176*14b24e2bSVaishali Kulkarni 
177*14b24e2bSVaishali Kulkarni 	/* Bitmap for handling out-of-order completions */
178*14b24e2bSVaishali Kulkarni #define SPQ_RING_SIZE		\
179*14b24e2bSVaishali Kulkarni 	(CORE_SPQE_PAGE_SIZE_BYTES / sizeof(struct slow_path_element))
180*14b24e2bSVaishali Kulkarni #define SPQ_COMP_BMAP_SIZE	(SPQ_RING_SIZE / (sizeof(unsigned long) * 8 /* BITS_PER_LONG */))
181*14b24e2bSVaishali Kulkarni 	unsigned long			p_comp_bitmap[SPQ_COMP_BMAP_SIZE];
182*14b24e2bSVaishali Kulkarni 	u8				comp_bitmap_idx;
183*14b24e2bSVaishali Kulkarni #define SPQ_COMP_BMAP_SET_BIT(p_spq, idx)					\
184*14b24e2bSVaishali Kulkarni 	do {									\
185*14b24e2bSVaishali Kulkarni 		OSAL_SET_BIT(((idx) % SPQ_RING_SIZE), (p_spq)->p_comp_bitmap);	\
186*14b24e2bSVaishali Kulkarni 	} while (0)
187*14b24e2bSVaishali Kulkarni #define SPQ_COMP_BMAP_CLEAR_BIT(p_spq, idx)						\
188*14b24e2bSVaishali Kulkarni 	do {										\
189*14b24e2bSVaishali Kulkarni 		OSAL_CLEAR_BIT(((idx) % SPQ_RING_SIZE), (p_spq)->p_comp_bitmap);	\
190*14b24e2bSVaishali Kulkarni 	} while (0)
191*14b24e2bSVaishali Kulkarni #define SPQ_COMP_BMAP_TEST_BIT(p_spq, idx)	\
192*14b24e2bSVaishali Kulkarni 	(OSAL_TEST_BIT(((idx) % SPQ_RING_SIZE), (p_spq)->p_comp_bitmap))
193*14b24e2bSVaishali Kulkarni 
194*14b24e2bSVaishali Kulkarni 	/* Statistics */
195*14b24e2bSVaishali Kulkarni 	u32				unlimited_pending_count;
196*14b24e2bSVaishali Kulkarni 	u32				normal_count;
197*14b24e2bSVaishali Kulkarni 	u32				high_count;
198*14b24e2bSVaishali Kulkarni 	u32				comp_sent_count;
199*14b24e2bSVaishali Kulkarni 	u32				comp_count;
200*14b24e2bSVaishali Kulkarni 
201*14b24e2bSVaishali Kulkarni 	u32				cid;
202*14b24e2bSVaishali Kulkarni };
203*14b24e2bSVaishali Kulkarni 
204*14b24e2bSVaishali Kulkarni struct ecore_port;
205*14b24e2bSVaishali Kulkarni struct ecore_hwfn;
206*14b24e2bSVaishali Kulkarni 
207*14b24e2bSVaishali Kulkarni /**
208*14b24e2bSVaishali Kulkarni  * @brief ecore_spq_post - Posts a Slow hwfn request to FW, or lacking that
209*14b24e2bSVaishali Kulkarni  *        Pends it to the future list.
210*14b24e2bSVaishali Kulkarni  *
211*14b24e2bSVaishali Kulkarni  * @param p_hwfn
212*14b24e2bSVaishali Kulkarni  * @param p_req
213*14b24e2bSVaishali Kulkarni  *
214*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
215*14b24e2bSVaishali Kulkarni  */
216*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_spq_post(struct ecore_hwfn	   *p_hwfn,
217*14b24e2bSVaishali Kulkarni 				    struct ecore_spq_entry *p_ent,
218*14b24e2bSVaishali Kulkarni 				    u8                     *fw_return_code);
219*14b24e2bSVaishali Kulkarni 
220*14b24e2bSVaishali Kulkarni /**
221*14b24e2bSVaishali Kulkarni  * @brief ecore_spq_allocate - Alloocates & initializes the SPQ and EQ.
222*14b24e2bSVaishali Kulkarni  *
223*14b24e2bSVaishali Kulkarni  * @param p_hwfn
224*14b24e2bSVaishali Kulkarni  *
225*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
226*14b24e2bSVaishali Kulkarni  */
227*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_spq_alloc(struct ecore_hwfn	*p_hwfn);
228*14b24e2bSVaishali Kulkarni 
229*14b24e2bSVaishali Kulkarni /**
230*14b24e2bSVaishali Kulkarni  * @brief ecore_spq_setup - Reset the SPQ to its start state.
231*14b24e2bSVaishali Kulkarni  *
232*14b24e2bSVaishali Kulkarni  * @param p_hwfn
233*14b24e2bSVaishali Kulkarni  */
234*14b24e2bSVaishali Kulkarni void ecore_spq_setup(struct ecore_hwfn *p_hwfn);
235*14b24e2bSVaishali Kulkarni 
236*14b24e2bSVaishali Kulkarni /**
237*14b24e2bSVaishali Kulkarni  * @brief ecore_spq_deallocate - Deallocates the given SPQ struct.
238*14b24e2bSVaishali Kulkarni  *
239*14b24e2bSVaishali Kulkarni  * @param p_hwfn
240*14b24e2bSVaishali Kulkarni  */
241*14b24e2bSVaishali Kulkarni void ecore_spq_free(struct ecore_hwfn *p_hwfn);
242*14b24e2bSVaishali Kulkarni 
243*14b24e2bSVaishali Kulkarni /**
244*14b24e2bSVaishali Kulkarni  * @brief ecore_spq_get_entry - Obtain an entrry from the spq
245*14b24e2bSVaishali Kulkarni  *        free pool list.
246*14b24e2bSVaishali Kulkarni  *
247*14b24e2bSVaishali Kulkarni  *
248*14b24e2bSVaishali Kulkarni  *
249*14b24e2bSVaishali Kulkarni  * @param p_hwfn
250*14b24e2bSVaishali Kulkarni  * @param pp_ent
251*14b24e2bSVaishali Kulkarni  *
252*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
253*14b24e2bSVaishali Kulkarni  */
254*14b24e2bSVaishali Kulkarni enum _ecore_status_t
255*14b24e2bSVaishali Kulkarni ecore_spq_get_entry(struct ecore_hwfn		*p_hwfn,
256*14b24e2bSVaishali Kulkarni 		    struct ecore_spq_entry	**pp_ent);
257*14b24e2bSVaishali Kulkarni 
258*14b24e2bSVaishali Kulkarni /**
259*14b24e2bSVaishali Kulkarni  * @brief ecore_spq_return_entry - Return an entry to spq free
260*14b24e2bSVaishali Kulkarni  *                                 pool list
261*14b24e2bSVaishali Kulkarni  *
262*14b24e2bSVaishali Kulkarni  * @param p_hwfn
263*14b24e2bSVaishali Kulkarni  * @param p_ent
264*14b24e2bSVaishali Kulkarni  */
265*14b24e2bSVaishali Kulkarni void ecore_spq_return_entry(struct ecore_hwfn		*p_hwfn,
266*14b24e2bSVaishali Kulkarni 			    struct ecore_spq_entry      *p_ent);
267*14b24e2bSVaishali Kulkarni /**
268*14b24e2bSVaishali Kulkarni  * @brief ecore_eq_allocate - Allocates & initializes an EQ struct
269*14b24e2bSVaishali Kulkarni  *
270*14b24e2bSVaishali Kulkarni  * @param p_hwfn
271*14b24e2bSVaishali Kulkarni  * @param num_elem number of elements in the eq
272*14b24e2bSVaishali Kulkarni  *
273*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
274*14b24e2bSVaishali Kulkarni  */
275*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_eq_alloc(struct ecore_hwfn	*p_hwfn, u16 num_elem);
276*14b24e2bSVaishali Kulkarni 
277*14b24e2bSVaishali Kulkarni /**
278*14b24e2bSVaishali Kulkarni  * @brief ecore_eq_setup - Reset the EQ to its start state.
279*14b24e2bSVaishali Kulkarni  *
280*14b24e2bSVaishali Kulkarni  * @param p_hwfn
281*14b24e2bSVaishali Kulkarni  */
282*14b24e2bSVaishali Kulkarni void ecore_eq_setup(struct ecore_hwfn *p_hwfn);
283*14b24e2bSVaishali Kulkarni 
284*14b24e2bSVaishali Kulkarni /**
285*14b24e2bSVaishali Kulkarni  * @brief ecore_eq_free - deallocates the given EQ struct.
286*14b24e2bSVaishali Kulkarni  *
287*14b24e2bSVaishali Kulkarni  * @param p_hwfn
288*14b24e2bSVaishali Kulkarni  */
289*14b24e2bSVaishali Kulkarni void ecore_eq_free(struct ecore_hwfn *p_hwfn);
290*14b24e2bSVaishali Kulkarni 
291*14b24e2bSVaishali Kulkarni /**
292*14b24e2bSVaishali Kulkarni  * @brief ecore_eq_prod_update - update the FW with default EQ producer
293*14b24e2bSVaishali Kulkarni  *
294*14b24e2bSVaishali Kulkarni  * @param p_hwfn
295*14b24e2bSVaishali Kulkarni  * @param prod
296*14b24e2bSVaishali Kulkarni  */
297*14b24e2bSVaishali Kulkarni void ecore_eq_prod_update(struct ecore_hwfn	*p_hwfn,
298*14b24e2bSVaishali Kulkarni 			  u16			prod);
299*14b24e2bSVaishali Kulkarni 
300*14b24e2bSVaishali Kulkarni /**
301*14b24e2bSVaishali Kulkarni  * @brief ecore_eq_completion - Completes currently pending EQ elements
302*14b24e2bSVaishali Kulkarni  *
303*14b24e2bSVaishali Kulkarni  * @param p_hwfn
304*14b24e2bSVaishali Kulkarni  * @param cookie
305*14b24e2bSVaishali Kulkarni  *
306*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
307*14b24e2bSVaishali Kulkarni  */
308*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_eq_completion(struct ecore_hwfn	*p_hwfn,
309*14b24e2bSVaishali Kulkarni 					 void			*cookie);
310*14b24e2bSVaishali Kulkarni 
311*14b24e2bSVaishali Kulkarni /**
312*14b24e2bSVaishali Kulkarni  * @brief ecore_spq_completion - Completes a single event
313*14b24e2bSVaishali Kulkarni  *
314*14b24e2bSVaishali Kulkarni  * @param p_hwfn
315*14b24e2bSVaishali Kulkarni  * @param echo - echo value from cookie (used for determining completion)
316*14b24e2bSVaishali Kulkarni  * @param p_data - data from cookie (used in callback function if applicable)
317*14b24e2bSVaishali Kulkarni  *
318*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
319*14b24e2bSVaishali Kulkarni  */
320*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_spq_completion(struct ecore_hwfn	*p_hwfn,
321*14b24e2bSVaishali Kulkarni 					  __le16		echo,
322*14b24e2bSVaishali Kulkarni 					  u8                    fw_return_code,
323*14b24e2bSVaishali Kulkarni 					  union event_ring_data	*p_data);
324*14b24e2bSVaishali Kulkarni 
325*14b24e2bSVaishali Kulkarni /**
326*14b24e2bSVaishali Kulkarni  * @brief ecore_spq_get_cid - Given p_hwfn, return cid for the hwfn's SPQ
327*14b24e2bSVaishali Kulkarni  *
328*14b24e2bSVaishali Kulkarni  * @param p_hwfn
329*14b24e2bSVaishali Kulkarni  *
330*14b24e2bSVaishali Kulkarni  * @return u32 - SPQ CID
331*14b24e2bSVaishali Kulkarni  */
332*14b24e2bSVaishali Kulkarni u32 ecore_spq_get_cid(struct ecore_hwfn *p_hwfn);
333*14b24e2bSVaishali Kulkarni 
334*14b24e2bSVaishali Kulkarni /**
335*14b24e2bSVaishali Kulkarni  * @brief ecore_consq_alloc - Allocates & initializes an ConsQ struct
336*14b24e2bSVaishali Kulkarni  *
337*14b24e2bSVaishali Kulkarni  * @param p_hwfn
338*14b24e2bSVaishali Kulkarni  *
339*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
340*14b24e2bSVaishali Kulkarni  */
341*14b24e2bSVaishali Kulkarni enum _ecore_status_t ecore_consq_alloc(struct ecore_hwfn *p_hwfn);
342*14b24e2bSVaishali Kulkarni 
343*14b24e2bSVaishali Kulkarni /**
344*14b24e2bSVaishali Kulkarni  * @brief ecore_consq_setup - Reset the ConsQ to its start state.
345*14b24e2bSVaishali Kulkarni  *
346*14b24e2bSVaishali Kulkarni  * @param p_hwfn
347*14b24e2bSVaishali Kulkarni  */
348*14b24e2bSVaishali Kulkarni void ecore_consq_setup(struct ecore_hwfn *p_hwfn);
349*14b24e2bSVaishali Kulkarni 
350*14b24e2bSVaishali Kulkarni /**
351*14b24e2bSVaishali Kulkarni  * @brief ecore_consq_free - deallocates the given ConsQ struct.
352*14b24e2bSVaishali Kulkarni  *
353*14b24e2bSVaishali Kulkarni  * @param p_hwfn
354*14b24e2bSVaishali Kulkarni  */
355*14b24e2bSVaishali Kulkarni void ecore_consq_free(struct ecore_hwfn *p_hwfn);
356*14b24e2bSVaishali Kulkarni 
357*14b24e2bSVaishali Kulkarni #endif /* __ECORE_SPQ_H__ */
358