1fe56b9e6SYuval Mintz /* QLogic qed NIC Driver 2fe56b9e6SYuval Mintz * Copyright (c) 2015 QLogic Corporation 3fe56b9e6SYuval Mintz * 4fe56b9e6SYuval Mintz * This software is available under the terms of the GNU General Public License 5fe56b9e6SYuval Mintz * (GPL) Version 2, available from the file COPYING in the main directory of 6fe56b9e6SYuval Mintz * this source tree. 7fe56b9e6SYuval Mintz */ 8fe56b9e6SYuval Mintz 9fe56b9e6SYuval Mintz #ifndef _QED_CXT_H 10fe56b9e6SYuval Mintz #define _QED_CXT_H 11fe56b9e6SYuval Mintz 12fe56b9e6SYuval Mintz #include <linux/types.h> 13fe56b9e6SYuval Mintz #include <linux/slab.h> 14fe56b9e6SYuval Mintz #include <linux/qed/qed_if.h> 15fe56b9e6SYuval Mintz #include "qed_hsi.h" 16fe56b9e6SYuval Mintz #include "qed.h" 17fe56b9e6SYuval Mintz 18fe56b9e6SYuval Mintz struct qed_cxt_info { 19fe56b9e6SYuval Mintz void *p_cxt; 20fe56b9e6SYuval Mintz u32 iid; 21fe56b9e6SYuval Mintz enum protocol_type type; 22fe56b9e6SYuval Mintz }; 23fe56b9e6SYuval Mintz 24dbb799c3SYuval Mintz #define MAX_TID_BLOCKS 512 25dbb799c3SYuval Mintz struct qed_tid_mem { 26dbb799c3SYuval Mintz u32 tid_size; 27dbb799c3SYuval Mintz u32 num_tids_per_block; 28dbb799c3SYuval Mintz u32 waste; 29dbb799c3SYuval Mintz u8 *blocks[MAX_TID_BLOCKS]; /* 4K */ 30dbb799c3SYuval Mintz }; 31dbb799c3SYuval Mintz 32fe56b9e6SYuval Mintz /** 33fe56b9e6SYuval Mintz * @brief qed_cxt_acquire - Acquire a new cid of a specific protocol type 34fe56b9e6SYuval Mintz * 35fe56b9e6SYuval Mintz * @param p_hwfn 36fe56b9e6SYuval Mintz * @param type 37fe56b9e6SYuval Mintz * @param p_cid 38fe56b9e6SYuval Mintz * 39fe56b9e6SYuval Mintz * @return int 40fe56b9e6SYuval Mintz */ 41fe56b9e6SYuval Mintz int qed_cxt_acquire_cid(struct qed_hwfn *p_hwfn, 42fe56b9e6SYuval Mintz enum protocol_type type, 43fe56b9e6SYuval Mintz u32 *p_cid); 44fe56b9e6SYuval Mintz 45fe56b9e6SYuval Mintz /** 46fe56b9e6SYuval Mintz * @brief qedo_cid_get_cxt_info - Returns the context info for a specific cid 47fe56b9e6SYuval Mintz * 48fe56b9e6SYuval Mintz * 49fe56b9e6SYuval Mintz * @param p_hwfn 50fe56b9e6SYuval Mintz * @param p_info in/out 51fe56b9e6SYuval Mintz * 52fe56b9e6SYuval Mintz * @return int 53fe56b9e6SYuval Mintz */ 54fe56b9e6SYuval Mintz int qed_cxt_get_cid_info(struct qed_hwfn *p_hwfn, 55fe56b9e6SYuval Mintz struct qed_cxt_info *p_info); 56fe56b9e6SYuval Mintz 57dbb799c3SYuval Mintz /** 58dbb799c3SYuval Mintz * @brief qed_cxt_get_tid_mem_info 59dbb799c3SYuval Mintz * 60dbb799c3SYuval Mintz * @param p_hwfn 61dbb799c3SYuval Mintz * @param p_info 62dbb799c3SYuval Mintz * 63dbb799c3SYuval Mintz * @return int 64dbb799c3SYuval Mintz */ 65dbb799c3SYuval Mintz int qed_cxt_get_tid_mem_info(struct qed_hwfn *p_hwfn, 66dbb799c3SYuval Mintz struct qed_tid_mem *p_info); 67dbb799c3SYuval Mintz 68dbb799c3SYuval Mintz #define QED_CXT_ISCSI_TID_SEG PROTOCOLID_ISCSI 69dbb799c3SYuval Mintz #define QED_CXT_ROCE_TID_SEG PROTOCOLID_ROCE 70fe56b9e6SYuval Mintz enum qed_cxt_elem_type { 71fe56b9e6SYuval Mintz QED_ELEM_CXT, 72dbb799c3SYuval Mintz QED_ELEM_SRQ, 73fe56b9e6SYuval Mintz QED_ELEM_TASK 74fe56b9e6SYuval Mintz }; 75fe56b9e6SYuval Mintz 761408cc1fSYuval Mintz u32 qed_cxt_get_proto_cid_count(struct qed_hwfn *p_hwfn, 771408cc1fSYuval Mintz enum protocol_type type, u32 *vf_cid); 781408cc1fSYuval Mintz 79fe56b9e6SYuval Mintz /** 80fe56b9e6SYuval Mintz * @brief qed_cxt_set_pf_params - Set the PF params for cxt init 81fe56b9e6SYuval Mintz * 82fe56b9e6SYuval Mintz * @param p_hwfn 83fe56b9e6SYuval Mintz * 84fe56b9e6SYuval Mintz * @return int 85fe56b9e6SYuval Mintz */ 86fe56b9e6SYuval Mintz int qed_cxt_set_pf_params(struct qed_hwfn *p_hwfn); 87fe56b9e6SYuval Mintz 88fe56b9e6SYuval Mintz /** 89fe56b9e6SYuval Mintz * @brief qed_cxt_cfg_ilt_compute - compute ILT init parameters 90fe56b9e6SYuval Mintz * 91fe56b9e6SYuval Mintz * @param p_hwfn 92fe56b9e6SYuval Mintz * 93fe56b9e6SYuval Mintz * @return int 94fe56b9e6SYuval Mintz */ 95fe56b9e6SYuval Mintz int qed_cxt_cfg_ilt_compute(struct qed_hwfn *p_hwfn); 96fe56b9e6SYuval Mintz 97fe56b9e6SYuval Mintz /** 98fe56b9e6SYuval Mintz * @brief qed_cxt_mngr_alloc - Allocate and init the context manager struct 99fe56b9e6SYuval Mintz * 100fe56b9e6SYuval Mintz * @param p_hwfn 101fe56b9e6SYuval Mintz * 102fe56b9e6SYuval Mintz * @return int 103fe56b9e6SYuval Mintz */ 104fe56b9e6SYuval Mintz int qed_cxt_mngr_alloc(struct qed_hwfn *p_hwfn); 105fe56b9e6SYuval Mintz 106fe56b9e6SYuval Mintz /** 107fe56b9e6SYuval Mintz * @brief qed_cxt_mngr_free 108fe56b9e6SYuval Mintz * 109fe56b9e6SYuval Mintz * @param p_hwfn 110fe56b9e6SYuval Mintz */ 111fe56b9e6SYuval Mintz void qed_cxt_mngr_free(struct qed_hwfn *p_hwfn); 112fe56b9e6SYuval Mintz 113fe56b9e6SYuval Mintz /** 114fe56b9e6SYuval Mintz * @brief qed_cxt_tables_alloc - Allocate ILT shadow, Searcher T2, acquired map 115fe56b9e6SYuval Mintz * 116fe56b9e6SYuval Mintz * @param p_hwfn 117fe56b9e6SYuval Mintz * 118fe56b9e6SYuval Mintz * @return int 119fe56b9e6SYuval Mintz */ 120fe56b9e6SYuval Mintz int qed_cxt_tables_alloc(struct qed_hwfn *p_hwfn); 121fe56b9e6SYuval Mintz 122fe56b9e6SYuval Mintz /** 123fe56b9e6SYuval Mintz * @brief qed_cxt_mngr_setup - Reset the acquired CIDs 124fe56b9e6SYuval Mintz * 125fe56b9e6SYuval Mintz * @param p_hwfn 126fe56b9e6SYuval Mintz */ 127fe56b9e6SYuval Mintz void qed_cxt_mngr_setup(struct qed_hwfn *p_hwfn); 128fe56b9e6SYuval Mintz 129fe56b9e6SYuval Mintz /** 130fe56b9e6SYuval Mintz * @brief qed_cxt_hw_init_common - Initailze ILT and DQ, common phase, per path. 131fe56b9e6SYuval Mintz * 132fe56b9e6SYuval Mintz * 133fe56b9e6SYuval Mintz * 134fe56b9e6SYuval Mintz * @param p_hwfn 135fe56b9e6SYuval Mintz */ 136fe56b9e6SYuval Mintz void qed_cxt_hw_init_common(struct qed_hwfn *p_hwfn); 137fe56b9e6SYuval Mintz 138fe56b9e6SYuval Mintz /** 139fe56b9e6SYuval Mintz * @brief qed_cxt_hw_init_pf - Initailze ILT and DQ, PF phase, per path. 140fe56b9e6SYuval Mintz * 141fe56b9e6SYuval Mintz * 142fe56b9e6SYuval Mintz * 143fe56b9e6SYuval Mintz * @param p_hwfn 144fe56b9e6SYuval Mintz */ 145fe56b9e6SYuval Mintz void qed_cxt_hw_init_pf(struct qed_hwfn *p_hwfn); 146fe56b9e6SYuval Mintz 147fe56b9e6SYuval Mintz /** 148fe56b9e6SYuval Mintz * @brief qed_qm_init_pf - Initailze the QM PF phase, per path 149fe56b9e6SYuval Mintz * 150fe56b9e6SYuval Mintz * @param p_hwfn 151fe56b9e6SYuval Mintz */ 152fe56b9e6SYuval Mintz 153fe56b9e6SYuval Mintz void qed_qm_init_pf(struct qed_hwfn *p_hwfn); 154fe56b9e6SYuval Mintz 155fe56b9e6SYuval Mintz /** 15639651abdSSudarsana Reddy Kalluru * @brief Reconfigures QM pf on the fly 15739651abdSSudarsana Reddy Kalluru * 15839651abdSSudarsana Reddy Kalluru * @param p_hwfn 15939651abdSSudarsana Reddy Kalluru * @param p_ptt 16039651abdSSudarsana Reddy Kalluru * 16139651abdSSudarsana Reddy Kalluru * @return int 16239651abdSSudarsana Reddy Kalluru */ 16339651abdSSudarsana Reddy Kalluru int qed_qm_reconf(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt); 16439651abdSSudarsana Reddy Kalluru 16539651abdSSudarsana Reddy Kalluru /** 166fe56b9e6SYuval Mintz * @brief qed_cxt_release - Release a cid 167fe56b9e6SYuval Mintz * 168fe56b9e6SYuval Mintz * @param p_hwfn 169fe56b9e6SYuval Mintz * @param cid 170fe56b9e6SYuval Mintz */ 171fe56b9e6SYuval Mintz void qed_cxt_release_cid(struct qed_hwfn *p_hwfn, 172fe56b9e6SYuval Mintz u32 cid); 17351ff1725SRam Amrani int qed_cxt_dynamic_ilt_alloc(struct qed_hwfn *p_hwfn, 17451ff1725SRam Amrani enum qed_cxt_elem_type elem_type, u32 iid); 17551ff1725SRam Amrani u32 qed_cxt_get_proto_tid_count(struct qed_hwfn *p_hwfn, 17651ff1725SRam Amrani enum protocol_type type); 17751ff1725SRam Amrani u32 qed_cxt_get_proto_cid_start(struct qed_hwfn *p_hwfn, 17851ff1725SRam Amrani enum protocol_type type); 179f1093940SRam Amrani int qed_cxt_free_proto_ilt(struct qed_hwfn *p_hwfn, enum protocol_type proto); 180fe56b9e6SYuval Mintz 181dbb799c3SYuval Mintz #define QED_CTX_WORKING_MEM 0 182dbb799c3SYuval Mintz #define QED_CTX_FL_MEM 1 183fe56b9e6SYuval Mintz #endif 184