]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - sys/dev/qlnx/qlnxe/ecore_cxt.h
MFC r316485
[FreeBSD/stable/10.git] / sys / dev / qlnx / qlnxe / ecore_cxt.h
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
32 #ifndef _ECORE_CID_
33 #define _ECORE_CID_
34
35 #include "ecore_hsi_common.h"
36 #include "ecore_proto_if.h"
37 #include "ecore_cxt_api.h"
38
39 /* Tasks segments definitions  */
40 #define ECORE_CXT_ISCSI_TID_SEG                 PROTOCOLID_ISCSI        /* 0 */
41 #define ECORE_CXT_FCOE_TID_SEG                  PROTOCOLID_FCOE         /* 1 */
42 #define ECORE_CXT_ROCE_TID_SEG                  PROTOCOLID_ROCE         /* 2 */
43
44 enum ecore_cxt_elem_type {
45         ECORE_ELEM_CXT,
46         ECORE_ELEM_SRQ,
47         ECORE_ELEM_TASK
48 };
49
50 u32 ecore_cxt_get_proto_cid_count(struct ecore_hwfn *p_hwfn,
51                                   enum protocol_type type,
52                                   u32 *vf_cid);
53
54 u32 ecore_cxt_get_proto_tid_count(struct ecore_hwfn *p_hwfn,
55                                   enum protocol_type type);
56
57 u32 ecore_cxt_get_proto_cid_start(struct ecore_hwfn *p_hwfn,
58                                   enum protocol_type type);
59 u32 ecore_cxt_get_srq_count(struct ecore_hwfn *p_hwfn);
60
61 /**
62  * @brief ecore_cxt_set_pf_params - Set the PF params for cxt init
63  *
64  * @param p_hwfn
65  *
66  * @return enum _ecore_status_t
67  */
68 enum _ecore_status_t ecore_cxt_set_pf_params(struct ecore_hwfn *p_hwfn,
69                                              u32 rdma_tasks);
70
71 /**
72  * @brief ecore_cxt_cfg_ilt_compute - compute ILT init parameters
73  *
74  * @param p_hwfn
75  * @param last_line
76  *
77  * @return enum _ecore_status_t
78  */
79 enum _ecore_status_t ecore_cxt_cfg_ilt_compute(struct ecore_hwfn *p_hwfn,
80                                                u32 *last_line);
81
82 /**
83  * @brief ecore_cxt_cfg_ilt_compute_excess - how many lines can be decreased
84  *
85  * @param p_hwfn
86  * @param used_lines
87  */
88 u32 ecore_cxt_cfg_ilt_compute_excess(struct ecore_hwfn *p_hwfn, u32 used_lines);
89
90 /**
91  * @brief ecore_cxt_mngr_alloc - Allocate and init the context manager struct
92  *
93  * @param p_hwfn
94  *
95  * @return enum _ecore_status_t
96  */
97 enum _ecore_status_t ecore_cxt_mngr_alloc(struct ecore_hwfn *p_hwfn);
98
99 /**
100  * @brief ecore_cxt_mngr_free
101  *
102  * @param p_hwfn
103  */
104 void ecore_cxt_mngr_free(struct ecore_hwfn *p_hwfn);
105
106 /**
107  * @brief ecore_cxt_tables_alloc - Allocate ILT shadow, Searcher T2, acquired map
108  *
109  * @param p_hwfn
110  *
111  * @return enum _ecore_status_t
112  */
113 enum _ecore_status_t ecore_cxt_tables_alloc(struct ecore_hwfn *p_hwfn);
114
115 /**
116  * @brief ecore_cxt_mngr_setup - Reset the acquired CIDs
117  *
118  * @param p_hwfn
119  */
120 void ecore_cxt_mngr_setup(struct ecore_hwfn *p_hwfn);
121
122 /**
123  * @brief ecore_cxt_hw_init_common - Initailze ILT and DQ, common phase, per path.
124  *
125  * @param p_hwfn
126  */
127 void ecore_cxt_hw_init_common(struct ecore_hwfn *p_hwfn);
128
129 /**
130  * @brief ecore_cxt_hw_init_pf - Initailze ILT and DQ, PF phase, per path.
131  *
132  * @param p_hwfn
133  */
134 void ecore_cxt_hw_init_pf(struct ecore_hwfn *p_hwfn);
135
136 /**
137  * @brief ecore_qm_init_pf - Initailze the QM PF phase, per path
138  *
139  * @param p_hwfn
140  */
141 void ecore_qm_init_pf(struct ecore_hwfn *p_hwfn);
142
143  /**
144  * @brief Reconfigures QM pf on the fly
145  *
146  * @param p_hwfn
147  * @param p_ptt
148  *
149  * @return enum _ecore_status_t
150  */
151 enum _ecore_status_t ecore_qm_reconf(struct ecore_hwfn *p_hwfn,
152                                      struct ecore_ptt *p_ptt);
153
154 #define ECORE_CXT_PF_CID (0xff)
155
156 /**
157  * @brief ecore_cxt_release - Release a cid
158  *
159  * @param p_hwfn
160  * @param cid
161  */
162 void ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn, u32 cid);
163
164 /**
165  * @brief ecore_cxt_release - Release a cid belonging to a vf-queue
166  *
167  * @param p_hwfn
168  * @param cid
169  * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF
170  */
171 void _ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn,
172                             u32 cid, u8 vfid);
173
174 /**
175  * @brief ecore_cxt_acquire - Acquire a new cid of a specific protocol type
176  *
177  * @param p_hwfn
178  * @param type
179  * @param p_cid
180  *
181  * @return enum _ecore_status_t
182  */
183 enum _ecore_status_t ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn,
184                                            enum protocol_type type,
185                                            u32 *p_cid);
186
187 /**
188  * @brief _ecore_cxt_acquire - Acquire a new cid of a specific protocol type
189  *                             for a vf-queue
190  *
191  * @param p_hwfn
192  * @param type
193  * @param p_cid
194  * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF
195  *
196  * @return enum _ecore_status_t
197  */
198 enum _ecore_status_t _ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn,
199                                             enum protocol_type type,
200                                             u32 *p_cid, u8 vfid);
201
202 /**
203  * @brief ecore_cxt_get_tid_mem_info - function checks if the
204  *        page containing the iid in the ilt is already
205  *        allocated, if it is not it allocates the page.
206  *
207  * @param p_hwfn
208  * @param elem_type
209  * @param iid
210  *
211  * @return enum _ecore_status_t
212  */
213 enum _ecore_status_t
214 ecore_cxt_dynamic_ilt_alloc(struct ecore_hwfn *p_hwfn,
215                             enum ecore_cxt_elem_type elem_type,
216                             u32 iid);
217
218 /**
219  * @brief ecore_cxt_free_ilt_range - function frees ilt pages
220  *        associated with the protocol and element type passed.
221  *
222  * @param p_hwfn
223  * @param proto
224  *
225  * @return enum _ecore_status_t
226  */
227 enum _ecore_status_t
228 ecore_cxt_free_ilt_range(struct ecore_hwfn *p_hwfn,
229                          enum ecore_cxt_elem_type elem_type,
230                          u32 start_iid, u32 count);
231
232 #define ECORE_CTX_WORKING_MEM 0
233 #define ECORE_CTX_FL_MEM 1
234 enum _ecore_status_t ecore_cxt_get_task_ctx(struct ecore_hwfn *p_hwfn,
235                                             u32 tid,
236                                             u8 ctx_type,
237                                             void **task_ctx);
238
239 #endif /* _ECORE_CID_ */