ecore_cxt.h revision 337517
1316485Sdavidcs/* 2316485Sdavidcs * Copyright (c) 2017-2018 Cavium, Inc. 3316485Sdavidcs * All rights reserved. 4316485Sdavidcs * 5316485Sdavidcs * Redistribution and use in source and binary forms, with or without 6316485Sdavidcs * modification, are permitted provided that the following conditions 7316485Sdavidcs * are met: 8316485Sdavidcs * 9316485Sdavidcs * 1. Redistributions of source code must retain the above copyright 10316485Sdavidcs * notice, this list of conditions and the following disclaimer. 11316485Sdavidcs * 2. Redistributions in binary form must reproduce the above copyright 12316485Sdavidcs * notice, this list of conditions and the following disclaimer in the 13316485Sdavidcs * documentation and/or other materials provided with the distribution. 14316485Sdavidcs * 15316485Sdavidcs * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16316485Sdavidcs * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17316485Sdavidcs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18316485Sdavidcs * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19316485Sdavidcs * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20316485Sdavidcs * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21316485Sdavidcs * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22316485Sdavidcs * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23316485Sdavidcs * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24316485Sdavidcs * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25316485Sdavidcs * POSSIBILITY OF SUCH DAMAGE. 26316485Sdavidcs * 27316485Sdavidcs * $FreeBSD: stable/11/sys/dev/qlnx/qlnxe/ecore_cxt.h 337517 2018-08-09 01:17:35Z davidcs $ 28316485Sdavidcs * 29316485Sdavidcs */ 30316485Sdavidcs 31316485Sdavidcs#ifndef _ECORE_CID_ 32316485Sdavidcs#define _ECORE_CID_ 33316485Sdavidcs 34316485Sdavidcs#include "ecore_hsi_common.h" 35316485Sdavidcs#include "ecore_proto_if.h" 36316485Sdavidcs#include "ecore_cxt_api.h" 37316485Sdavidcs 38316485Sdavidcs/* Tasks segments definitions */ 39316485Sdavidcs#define ECORE_CXT_ISCSI_TID_SEG PROTOCOLID_ISCSI /* 0 */ 40316485Sdavidcs#define ECORE_CXT_FCOE_TID_SEG PROTOCOLID_FCOE /* 1 */ 41316485Sdavidcs#define ECORE_CXT_ROCE_TID_SEG PROTOCOLID_ROCE /* 2 */ 42316485Sdavidcs 43316485Sdavidcsenum ecore_cxt_elem_type { 44316485Sdavidcs ECORE_ELEM_CXT, 45316485Sdavidcs ECORE_ELEM_SRQ, 46337517Sdavidcs ECORE_ELEM_TASK, 47337517Sdavidcs ECORE_ELEM_XRC_SRQ, 48316485Sdavidcs}; 49316485Sdavidcs 50337517Sdavidcsenum ilt_clients { 51337517Sdavidcs ILT_CLI_CDUC, 52337517Sdavidcs ILT_CLI_CDUT, 53337517Sdavidcs ILT_CLI_QM, 54337517Sdavidcs ILT_CLI_TM, 55337517Sdavidcs ILT_CLI_SRC, 56337517Sdavidcs ILT_CLI_TSDM, 57337517Sdavidcs ILT_CLI_MAX 58337517Sdavidcs}; 59337517Sdavidcs 60316485Sdavidcsu32 ecore_cxt_get_proto_cid_count(struct ecore_hwfn *p_hwfn, 61316485Sdavidcs enum protocol_type type, 62316485Sdavidcs u32 *vf_cid); 63316485Sdavidcs 64316485Sdavidcsu32 ecore_cxt_get_proto_tid_count(struct ecore_hwfn *p_hwfn, 65316485Sdavidcs enum protocol_type type); 66316485Sdavidcs 67316485Sdavidcsu32 ecore_cxt_get_proto_cid_start(struct ecore_hwfn *p_hwfn, 68316485Sdavidcs enum protocol_type type); 69337517Sdavidcs 70316485Sdavidcsu32 ecore_cxt_get_srq_count(struct ecore_hwfn *p_hwfn); 71316485Sdavidcs 72337517Sdavidcsu32 ecore_cxt_get_xrc_srq_count(struct ecore_hwfn *p_hwfn); 73337517Sdavidcs 74316485Sdavidcs/** 75316485Sdavidcs * @brief ecore_cxt_set_pf_params - Set the PF params for cxt init 76316485Sdavidcs * 77316485Sdavidcs * @param p_hwfn 78316485Sdavidcs * 79316485Sdavidcs * @return enum _ecore_status_t 80316485Sdavidcs */ 81316485Sdavidcsenum _ecore_status_t ecore_cxt_set_pf_params(struct ecore_hwfn *p_hwfn, 82316485Sdavidcs u32 rdma_tasks); 83316485Sdavidcs 84316485Sdavidcs/** 85316485Sdavidcs * @brief ecore_cxt_cfg_ilt_compute - compute ILT init parameters 86316485Sdavidcs * 87316485Sdavidcs * @param p_hwfn 88316485Sdavidcs * @param last_line 89316485Sdavidcs * 90316485Sdavidcs * @return enum _ecore_status_t 91316485Sdavidcs */ 92316485Sdavidcsenum _ecore_status_t ecore_cxt_cfg_ilt_compute(struct ecore_hwfn *p_hwfn, 93316485Sdavidcs u32 *last_line); 94316485Sdavidcs 95316485Sdavidcs/** 96316485Sdavidcs * @brief ecore_cxt_cfg_ilt_compute_excess - how many lines can be decreased 97316485Sdavidcs * 98316485Sdavidcs * @param p_hwfn 99316485Sdavidcs * @param used_lines 100316485Sdavidcs */ 101316485Sdavidcsu32 ecore_cxt_cfg_ilt_compute_excess(struct ecore_hwfn *p_hwfn, u32 used_lines); 102316485Sdavidcs 103316485Sdavidcs/** 104316485Sdavidcs * @brief ecore_cxt_mngr_alloc - Allocate and init the context manager struct 105316485Sdavidcs * 106316485Sdavidcs * @param p_hwfn 107316485Sdavidcs * 108316485Sdavidcs * @return enum _ecore_status_t 109316485Sdavidcs */ 110316485Sdavidcsenum _ecore_status_t ecore_cxt_mngr_alloc(struct ecore_hwfn *p_hwfn); 111316485Sdavidcs 112316485Sdavidcs/** 113316485Sdavidcs * @brief ecore_cxt_mngr_free 114316485Sdavidcs * 115316485Sdavidcs * @param p_hwfn 116316485Sdavidcs */ 117316485Sdavidcsvoid ecore_cxt_mngr_free(struct ecore_hwfn *p_hwfn); 118316485Sdavidcs 119316485Sdavidcs/** 120316485Sdavidcs * @brief ecore_cxt_tables_alloc - Allocate ILT shadow, Searcher T2, acquired map 121316485Sdavidcs * 122316485Sdavidcs * @param p_hwfn 123316485Sdavidcs * 124316485Sdavidcs * @return enum _ecore_status_t 125316485Sdavidcs */ 126316485Sdavidcsenum _ecore_status_t ecore_cxt_tables_alloc(struct ecore_hwfn *p_hwfn); 127316485Sdavidcs 128316485Sdavidcs/** 129316485Sdavidcs * @brief ecore_cxt_mngr_setup - Reset the acquired CIDs 130316485Sdavidcs * 131316485Sdavidcs * @param p_hwfn 132316485Sdavidcs */ 133316485Sdavidcsvoid ecore_cxt_mngr_setup(struct ecore_hwfn *p_hwfn); 134316485Sdavidcs 135316485Sdavidcs/** 136316485Sdavidcs * @brief ecore_cxt_hw_init_common - Initailze ILT and DQ, common phase, per path. 137316485Sdavidcs * 138316485Sdavidcs * @param p_hwfn 139316485Sdavidcs */ 140316485Sdavidcsvoid ecore_cxt_hw_init_common(struct ecore_hwfn *p_hwfn); 141316485Sdavidcs 142316485Sdavidcs/** 143316485Sdavidcs * @brief ecore_cxt_hw_init_pf - Initailze ILT and DQ, PF phase, per path. 144316485Sdavidcs * 145316485Sdavidcs * @param p_hwfn 146320164Sdavidcs * @param p_ptt 147316485Sdavidcs */ 148320164Sdavidcsvoid ecore_cxt_hw_init_pf(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt); 149316485Sdavidcs 150316485Sdavidcs/** 151316485Sdavidcs * @brief ecore_qm_init_pf - Initailze the QM PF phase, per path 152316485Sdavidcs * 153316485Sdavidcs * @param p_hwfn 154320164Sdavidcs * @param p_ptt 155337517Sdavidcs * @param is_pf_loading 156316485Sdavidcs */ 157337517Sdavidcsvoid ecore_qm_init_pf(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 158337517Sdavidcs bool is_pf_loading); 159316485Sdavidcs 160316485Sdavidcs /** 161316485Sdavidcs * @brief Reconfigures QM pf on the fly 162316485Sdavidcs * 163316485Sdavidcs * @param p_hwfn 164316485Sdavidcs * @param p_ptt 165316485Sdavidcs * 166316485Sdavidcs * @return enum _ecore_status_t 167316485Sdavidcs */ 168316485Sdavidcsenum _ecore_status_t ecore_qm_reconf(struct ecore_hwfn *p_hwfn, 169316485Sdavidcs struct ecore_ptt *p_ptt); 170316485Sdavidcs 171316485Sdavidcs#define ECORE_CXT_PF_CID (0xff) 172316485Sdavidcs 173316485Sdavidcs/** 174316485Sdavidcs * @brief ecore_cxt_release - Release a cid 175316485Sdavidcs * 176316485Sdavidcs * @param p_hwfn 177316485Sdavidcs * @param cid 178316485Sdavidcs */ 179316485Sdavidcsvoid ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn, u32 cid); 180316485Sdavidcs 181316485Sdavidcs/** 182316485Sdavidcs * @brief ecore_cxt_release - Release a cid belonging to a vf-queue 183316485Sdavidcs * 184316485Sdavidcs * @param p_hwfn 185316485Sdavidcs * @param cid 186316485Sdavidcs * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF 187316485Sdavidcs */ 188316485Sdavidcsvoid _ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn, 189316485Sdavidcs u32 cid, u8 vfid); 190316485Sdavidcs 191316485Sdavidcs/** 192316485Sdavidcs * @brief ecore_cxt_acquire - Acquire a new cid of a specific protocol type 193316485Sdavidcs * 194316485Sdavidcs * @param p_hwfn 195316485Sdavidcs * @param type 196316485Sdavidcs * @param p_cid 197316485Sdavidcs * 198316485Sdavidcs * @return enum _ecore_status_t 199316485Sdavidcs */ 200316485Sdavidcsenum _ecore_status_t ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn, 201316485Sdavidcs enum protocol_type type, 202316485Sdavidcs u32 *p_cid); 203316485Sdavidcs 204316485Sdavidcs/** 205316485Sdavidcs * @brief _ecore_cxt_acquire - Acquire a new cid of a specific protocol type 206316485Sdavidcs * for a vf-queue 207316485Sdavidcs * 208316485Sdavidcs * @param p_hwfn 209316485Sdavidcs * @param type 210316485Sdavidcs * @param p_cid 211316485Sdavidcs * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF 212316485Sdavidcs * 213316485Sdavidcs * @return enum _ecore_status_t 214316485Sdavidcs */ 215316485Sdavidcsenum _ecore_status_t _ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn, 216316485Sdavidcs enum protocol_type type, 217316485Sdavidcs u32 *p_cid, u8 vfid); 218316485Sdavidcs 219316485Sdavidcs/** 220316485Sdavidcs * @brief ecore_cxt_get_tid_mem_info - function checks if the 221316485Sdavidcs * page containing the iid in the ilt is already 222316485Sdavidcs * allocated, if it is not it allocates the page. 223316485Sdavidcs * 224316485Sdavidcs * @param p_hwfn 225316485Sdavidcs * @param elem_type 226316485Sdavidcs * @param iid 227316485Sdavidcs * 228316485Sdavidcs * @return enum _ecore_status_t 229316485Sdavidcs */ 230316485Sdavidcsenum _ecore_status_t 231316485Sdavidcsecore_cxt_dynamic_ilt_alloc(struct ecore_hwfn *p_hwfn, 232316485Sdavidcs enum ecore_cxt_elem_type elem_type, 233316485Sdavidcs u32 iid); 234316485Sdavidcs 235316485Sdavidcs/** 236316485Sdavidcs * @brief ecore_cxt_free_ilt_range - function frees ilt pages 237316485Sdavidcs * associated with the protocol and element type passed. 238316485Sdavidcs * 239316485Sdavidcs * @param p_hwfn 240316485Sdavidcs * @param proto 241316485Sdavidcs * 242316485Sdavidcs * @return enum _ecore_status_t 243316485Sdavidcs */ 244316485Sdavidcsenum _ecore_status_t 245316485Sdavidcsecore_cxt_free_ilt_range(struct ecore_hwfn *p_hwfn, 246316485Sdavidcs enum ecore_cxt_elem_type elem_type, 247316485Sdavidcs u32 start_iid, u32 count); 248316485Sdavidcs 249316485Sdavidcs#define ECORE_CTX_WORKING_MEM 0 250316485Sdavidcs#define ECORE_CTX_FL_MEM 1 251316485Sdavidcsenum _ecore_status_t ecore_cxt_get_task_ctx(struct ecore_hwfn *p_hwfn, 252316485Sdavidcs u32 tid, 253316485Sdavidcs u8 ctx_type, 254316485Sdavidcs void **task_ctx); 255316485Sdavidcs 256337517Sdavidcsu32 ecore_cxt_get_ilt_page_size(struct ecore_hwfn *p_hwfn, 257337517Sdavidcs enum ilt_clients ilt_client); 258337517Sdavidcs 259337517Sdavidcsu32 ecore_cxt_get_total_srq_count(struct ecore_hwfn *p_hwfn); 260337517Sdavidcs 261316485Sdavidcs#endif /* _ECORE_CID_ */ 262