xref: /freebsd/sys/dev/qlnx/qlnxe/ecore_cxt.h (revision 0957b409)
1 /*
2  * Copyright (c) 2017-2018 Cavium, Inc.
3  * All rights reserved.
4  *
5  *  Redistribution and use in source and binary forms, with or without
6  *  modification, are permitted provided that the following conditions
7  *  are met:
8  *
9  *  1. Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer.
11  *  2. Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution.
14  *
15  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25  *  POSSIBILITY OF SUCH DAMAGE.
26  *
27  * $FreeBSD$
28  *
29  */
30 
31 #ifndef _ECORE_CID_
32 #define _ECORE_CID_
33 
34 #include "ecore_hsi_common.h"
35 #include "ecore_proto_if.h"
36 #include "ecore_cxt_api.h"
37 
38 /* Tasks segments definitions  */
39 #define ECORE_CXT_ISCSI_TID_SEG			PROTOCOLID_ISCSI	/* 0 */
40 #define ECORE_CXT_FCOE_TID_SEG			PROTOCOLID_FCOE		/* 1 */
41 #define ECORE_CXT_ROCE_TID_SEG			PROTOCOLID_ROCE		/* 2 */
42 
43 enum ecore_cxt_elem_type {
44 	ECORE_ELEM_CXT,
45 	ECORE_ELEM_SRQ,
46 	ECORE_ELEM_TASK,
47 	ECORE_ELEM_XRC_SRQ,
48 };
49 
50 enum ilt_clients {
51 	ILT_CLI_CDUC,
52 	ILT_CLI_CDUT,
53 	ILT_CLI_QM,
54 	ILT_CLI_TM,
55 	ILT_CLI_SRC,
56 	ILT_CLI_TSDM,
57 	ILT_CLI_MAX
58 };
59 
60 u32 ecore_cxt_get_proto_cid_count(struct ecore_hwfn *p_hwfn,
61 				  enum protocol_type type,
62 				  u32 *vf_cid);
63 
64 u32 ecore_cxt_get_proto_tid_count(struct ecore_hwfn *p_hwfn,
65 				  enum protocol_type type);
66 
67 u32 ecore_cxt_get_proto_cid_start(struct ecore_hwfn *p_hwfn,
68 				  enum protocol_type type);
69 
70 u32 ecore_cxt_get_srq_count(struct ecore_hwfn *p_hwfn);
71 
72 u32 ecore_cxt_get_xrc_srq_count(struct ecore_hwfn *p_hwfn);
73 
74 /**
75  * @brief ecore_cxt_set_pf_params - Set the PF params for cxt init
76  *
77  * @param p_hwfn
78  *
79  * @return enum _ecore_status_t
80  */
81 enum _ecore_status_t ecore_cxt_set_pf_params(struct ecore_hwfn *p_hwfn,
82 					     u32 rdma_tasks);
83 
84 /**
85  * @brief ecore_cxt_cfg_ilt_compute - compute ILT init parameters
86  *
87  * @param p_hwfn
88  * @param last_line
89  *
90  * @return enum _ecore_status_t
91  */
92 enum _ecore_status_t ecore_cxt_cfg_ilt_compute(struct ecore_hwfn *p_hwfn,
93 					       u32 *last_line);
94 
95 /**
96  * @brief ecore_cxt_cfg_ilt_compute_excess - how many lines can be decreased
97  *
98  * @param p_hwfn
99  * @param used_lines
100  */
101 u32 ecore_cxt_cfg_ilt_compute_excess(struct ecore_hwfn *p_hwfn, u32 used_lines);
102 
103 /**
104  * @brief ecore_cxt_mngr_alloc - Allocate and init the context manager struct
105  *
106  * @param p_hwfn
107  *
108  * @return enum _ecore_status_t
109  */
110 enum _ecore_status_t ecore_cxt_mngr_alloc(struct ecore_hwfn *p_hwfn);
111 
112 /**
113  * @brief ecore_cxt_mngr_free
114  *
115  * @param p_hwfn
116  */
117 void ecore_cxt_mngr_free(struct ecore_hwfn *p_hwfn);
118 
119 /**
120  * @brief ecore_cxt_tables_alloc - Allocate ILT shadow, Searcher T2, acquired map
121  *
122  * @param p_hwfn
123  *
124  * @return enum _ecore_status_t
125  */
126 enum _ecore_status_t ecore_cxt_tables_alloc(struct ecore_hwfn *p_hwfn);
127 
128 /**
129  * @brief ecore_cxt_mngr_setup - Reset the acquired CIDs
130  *
131  * @param p_hwfn
132  */
133 void ecore_cxt_mngr_setup(struct ecore_hwfn *p_hwfn);
134 
135 /**
136  * @brief ecore_cxt_hw_init_common - Initailze ILT and DQ, common phase, per path.
137  *
138  * @param p_hwfn
139  */
140 void ecore_cxt_hw_init_common(struct ecore_hwfn *p_hwfn);
141 
142 /**
143  * @brief ecore_cxt_hw_init_pf - Initailze ILT and DQ, PF phase, per path.
144  *
145  * @param p_hwfn
146  * @param p_ptt
147  */
148 void ecore_cxt_hw_init_pf(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt);
149 
150 /**
151  * @brief ecore_qm_init_pf - Initailze the QM PF phase, per path
152  *
153  * @param p_hwfn
154  * @param p_ptt
155  * @param is_pf_loading
156  */
157 void ecore_qm_init_pf(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
158 		      bool is_pf_loading);
159 
160  /**
161  * @brief Reconfigures QM pf on the fly
162  *
163  * @param p_hwfn
164  * @param p_ptt
165  *
166  * @return enum _ecore_status_t
167  */
168 enum _ecore_status_t ecore_qm_reconf(struct ecore_hwfn *p_hwfn,
169 				     struct ecore_ptt *p_ptt);
170 
171 #define ECORE_CXT_PF_CID (0xff)
172 
173 /**
174  * @brief ecore_cxt_release - Release a cid
175  *
176  * @param p_hwfn
177  * @param cid
178  */
179 void ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn, u32 cid);
180 
181 /**
182  * @brief ecore_cxt_release - Release a cid belonging to a vf-queue
183  *
184  * @param p_hwfn
185  * @param cid
186  * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF
187  */
188 void _ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn,
189 			    u32 cid, u8 vfid);
190 
191 /**
192  * @brief ecore_cxt_acquire - Acquire a new cid of a specific protocol type
193  *
194  * @param p_hwfn
195  * @param type
196  * @param p_cid
197  *
198  * @return enum _ecore_status_t
199  */
200 enum _ecore_status_t ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn,
201 					   enum protocol_type type,
202 					   u32 *p_cid);
203 
204 /**
205  * @brief _ecore_cxt_acquire - Acquire a new cid of a specific protocol type
206  *                             for a vf-queue
207  *
208  * @param p_hwfn
209  * @param type
210  * @param p_cid
211  * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF
212  *
213  * @return enum _ecore_status_t
214  */
215 enum _ecore_status_t _ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn,
216 					    enum protocol_type type,
217 					    u32 *p_cid, u8 vfid);
218 
219 /**
220  * @brief ecore_cxt_get_tid_mem_info - function checks if the
221  *        page containing the iid in the ilt is already
222  *        allocated, if it is not it allocates the page.
223  *
224  * @param p_hwfn
225  * @param elem_type
226  * @param iid
227  *
228  * @return enum _ecore_status_t
229  */
230 enum _ecore_status_t
231 ecore_cxt_dynamic_ilt_alloc(struct ecore_hwfn *p_hwfn,
232 			    enum ecore_cxt_elem_type elem_type,
233 			    u32 iid);
234 
235 /**
236  * @brief ecore_cxt_free_ilt_range - function frees ilt pages
237  *        associated with the protocol and element type passed.
238  *
239  * @param p_hwfn
240  * @param proto
241  *
242  * @return enum _ecore_status_t
243  */
244 enum _ecore_status_t
245 ecore_cxt_free_ilt_range(struct ecore_hwfn *p_hwfn,
246 			 enum ecore_cxt_elem_type elem_type,
247 			 u32 start_iid, u32 count);
248 
249 #define ECORE_CTX_WORKING_MEM 0
250 #define ECORE_CTX_FL_MEM 1
251 enum _ecore_status_t ecore_cxt_get_task_ctx(struct ecore_hwfn *p_hwfn,
252 					    u32 tid,
253 					    u8 ctx_type,
254 					    void **task_ctx);
255 
256 u32 ecore_cxt_get_ilt_page_size(struct ecore_hwfn *p_hwfn,
257 				enum ilt_clients ilt_client);
258 
259 u32 ecore_cxt_get_total_srq_count(struct ecore_hwfn *p_hwfn);
260 
261 #endif /* _ECORE_CID_ */
262