2 * Copyright (c) 2017-2018 Cavium, Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
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.
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.
35 #include "ecore_hsi_common.h"
36 #include "ecore_proto_if.h"
37 #include "ecore_cxt_api.h"
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 */
44 enum ecore_cxt_elem_type {
50 u32 ecore_cxt_get_proto_cid_count(struct ecore_hwfn *p_hwfn,
51 enum protocol_type type,
54 u32 ecore_cxt_get_proto_tid_count(struct ecore_hwfn *p_hwfn,
55 enum protocol_type type);
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);
62 * @brief ecore_cxt_set_pf_params - Set the PF params for cxt init
66 * @return enum _ecore_status_t
68 enum _ecore_status_t ecore_cxt_set_pf_params(struct ecore_hwfn *p_hwfn,
72 * @brief ecore_cxt_cfg_ilt_compute - compute ILT init parameters
77 * @return enum _ecore_status_t
79 enum _ecore_status_t ecore_cxt_cfg_ilt_compute(struct ecore_hwfn *p_hwfn,
83 * @brief ecore_cxt_cfg_ilt_compute_excess - how many lines can be decreased
88 u32 ecore_cxt_cfg_ilt_compute_excess(struct ecore_hwfn *p_hwfn, u32 used_lines);
91 * @brief ecore_cxt_mngr_alloc - Allocate and init the context manager struct
95 * @return enum _ecore_status_t
97 enum _ecore_status_t ecore_cxt_mngr_alloc(struct ecore_hwfn *p_hwfn);
100 * @brief ecore_cxt_mngr_free
104 void ecore_cxt_mngr_free(struct ecore_hwfn *p_hwfn);
107 * @brief ecore_cxt_tables_alloc - Allocate ILT shadow, Searcher T2, acquired map
111 * @return enum _ecore_status_t
113 enum _ecore_status_t ecore_cxt_tables_alloc(struct ecore_hwfn *p_hwfn);
116 * @brief ecore_cxt_mngr_setup - Reset the acquired CIDs
120 void ecore_cxt_mngr_setup(struct ecore_hwfn *p_hwfn);
123 * @brief ecore_cxt_hw_init_common - Initailze ILT and DQ, common phase, per path.
127 void ecore_cxt_hw_init_common(struct ecore_hwfn *p_hwfn);
130 * @brief ecore_cxt_hw_init_pf - Initailze ILT and DQ, PF phase, per path.
134 void ecore_cxt_hw_init_pf(struct ecore_hwfn *p_hwfn);
137 * @brief ecore_qm_init_pf - Initailze the QM PF phase, per path
141 void ecore_qm_init_pf(struct ecore_hwfn *p_hwfn);
144 * @brief Reconfigures QM pf on the fly
149 * @return enum _ecore_status_t
151 enum _ecore_status_t ecore_qm_reconf(struct ecore_hwfn *p_hwfn,
152 struct ecore_ptt *p_ptt);
154 #define ECORE_CXT_PF_CID (0xff)
157 * @brief ecore_cxt_release - Release a cid
162 void ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn, u32 cid);
165 * @brief ecore_cxt_release - Release a cid belonging to a vf-queue
169 * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF
171 void _ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn,
175 * @brief ecore_cxt_acquire - Acquire a new cid of a specific protocol type
181 * @return enum _ecore_status_t
183 enum _ecore_status_t ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn,
184 enum protocol_type type,
188 * @brief _ecore_cxt_acquire - Acquire a new cid of a specific protocol type
194 * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF
196 * @return enum _ecore_status_t
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);
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.
211 * @return enum _ecore_status_t
214 ecore_cxt_dynamic_ilt_alloc(struct ecore_hwfn *p_hwfn,
215 enum ecore_cxt_elem_type elem_type,
219 * @brief ecore_cxt_free_ilt_range - function frees ilt pages
220 * associated with the protocol and element type passed.
225 * @return 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);
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,
239 #endif /* _ECORE_CID_ */