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