xref: /freebsd/sys/dev/qlnx/qlnxe/ecore_cxt.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
111e25f0dSDavid C Somayajulu /*
211e25f0dSDavid C Somayajulu  * Copyright (c) 2017-2018 Cavium, Inc.
311e25f0dSDavid C Somayajulu  * All rights reserved.
411e25f0dSDavid C Somayajulu  *
511e25f0dSDavid C Somayajulu  *  Redistribution and use in source and binary forms, with or without
611e25f0dSDavid C Somayajulu  *  modification, are permitted provided that the following conditions
711e25f0dSDavid C Somayajulu  *  are met:
811e25f0dSDavid C Somayajulu  *
911e25f0dSDavid C Somayajulu  *  1. Redistributions of source code must retain the above copyright
1011e25f0dSDavid C Somayajulu  *     notice, this list of conditions and the following disclaimer.
1111e25f0dSDavid C Somayajulu  *  2. Redistributions in binary form must reproduce the above copyright
1211e25f0dSDavid C Somayajulu  *     notice, this list of conditions and the following disclaimer in the
1311e25f0dSDavid C Somayajulu  *     documentation and/or other materials provided with the distribution.
1411e25f0dSDavid C Somayajulu  *
1511e25f0dSDavid C Somayajulu  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1611e25f0dSDavid C Somayajulu  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1711e25f0dSDavid C Somayajulu  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1811e25f0dSDavid C Somayajulu  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
1911e25f0dSDavid C Somayajulu  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2011e25f0dSDavid C Somayajulu  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2111e25f0dSDavid C Somayajulu  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2211e25f0dSDavid C Somayajulu  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2311e25f0dSDavid C Somayajulu  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2411e25f0dSDavid C Somayajulu  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2511e25f0dSDavid C Somayajulu  *  POSSIBILITY OF SUCH DAMAGE.
2611e25f0dSDavid C Somayajulu  *
2711e25f0dSDavid C Somayajulu  */
2811e25f0dSDavid C Somayajulu 
2911e25f0dSDavid C Somayajulu #ifndef _ECORE_CID_
3011e25f0dSDavid C Somayajulu #define _ECORE_CID_
3111e25f0dSDavid C Somayajulu 
3211e25f0dSDavid C Somayajulu #include "ecore_hsi_common.h"
3311e25f0dSDavid C Somayajulu #include "ecore_proto_if.h"
3411e25f0dSDavid C Somayajulu #include "ecore_cxt_api.h"
3511e25f0dSDavid C Somayajulu 
3611e25f0dSDavid C Somayajulu /* Tasks segments definitions  */
3711e25f0dSDavid C Somayajulu #define ECORE_CXT_ISCSI_TID_SEG			PROTOCOLID_ISCSI	/* 0 */
3811e25f0dSDavid C Somayajulu #define ECORE_CXT_FCOE_TID_SEG			PROTOCOLID_FCOE		/* 1 */
3911e25f0dSDavid C Somayajulu #define ECORE_CXT_ROCE_TID_SEG			PROTOCOLID_ROCE		/* 2 */
4011e25f0dSDavid C Somayajulu 
4111e25f0dSDavid C Somayajulu enum ecore_cxt_elem_type {
4211e25f0dSDavid C Somayajulu 	ECORE_ELEM_CXT,
4311e25f0dSDavid C Somayajulu 	ECORE_ELEM_SRQ,
44*217ec208SDavid C Somayajulu 	ECORE_ELEM_TASK,
45*217ec208SDavid C Somayajulu 	ECORE_ELEM_XRC_SRQ,
46*217ec208SDavid C Somayajulu };
47*217ec208SDavid C Somayajulu 
48*217ec208SDavid C Somayajulu enum ilt_clients {
49*217ec208SDavid C Somayajulu 	ILT_CLI_CDUC,
50*217ec208SDavid C Somayajulu 	ILT_CLI_CDUT,
51*217ec208SDavid C Somayajulu 	ILT_CLI_QM,
52*217ec208SDavid C Somayajulu 	ILT_CLI_TM,
53*217ec208SDavid C Somayajulu 	ILT_CLI_SRC,
54*217ec208SDavid C Somayajulu 	ILT_CLI_TSDM,
55*217ec208SDavid C Somayajulu 	ILT_CLI_MAX
5611e25f0dSDavid C Somayajulu };
5711e25f0dSDavid C Somayajulu 
5811e25f0dSDavid C Somayajulu u32 ecore_cxt_get_proto_cid_count(struct ecore_hwfn *p_hwfn,
5911e25f0dSDavid C Somayajulu 				  enum protocol_type type,
6011e25f0dSDavid C Somayajulu 				  u32 *vf_cid);
6111e25f0dSDavid C Somayajulu 
6211e25f0dSDavid C Somayajulu u32 ecore_cxt_get_proto_tid_count(struct ecore_hwfn *p_hwfn,
6311e25f0dSDavid C Somayajulu 				  enum protocol_type type);
6411e25f0dSDavid C Somayajulu 
6511e25f0dSDavid C Somayajulu u32 ecore_cxt_get_proto_cid_start(struct ecore_hwfn *p_hwfn,
6611e25f0dSDavid C Somayajulu 				  enum protocol_type type);
67*217ec208SDavid C Somayajulu 
6811e25f0dSDavid C Somayajulu u32 ecore_cxt_get_srq_count(struct ecore_hwfn *p_hwfn);
6911e25f0dSDavid C Somayajulu 
70*217ec208SDavid C Somayajulu u32 ecore_cxt_get_xrc_srq_count(struct ecore_hwfn *p_hwfn);
71*217ec208SDavid C Somayajulu 
7211e25f0dSDavid C Somayajulu /**
7311e25f0dSDavid C Somayajulu  * @brief ecore_cxt_set_pf_params - Set the PF params for cxt init
7411e25f0dSDavid C Somayajulu  *
7511e25f0dSDavid C Somayajulu  * @param p_hwfn
7611e25f0dSDavid C Somayajulu  *
7711e25f0dSDavid C Somayajulu  * @return enum _ecore_status_t
7811e25f0dSDavid C Somayajulu  */
7911e25f0dSDavid C Somayajulu enum _ecore_status_t ecore_cxt_set_pf_params(struct ecore_hwfn *p_hwfn,
8011e25f0dSDavid C Somayajulu 					     u32 rdma_tasks);
8111e25f0dSDavid C Somayajulu 
8211e25f0dSDavid C Somayajulu /**
8311e25f0dSDavid C Somayajulu  * @brief ecore_cxt_cfg_ilt_compute - compute ILT init parameters
8411e25f0dSDavid C Somayajulu  *
8511e25f0dSDavid C Somayajulu  * @param p_hwfn
8611e25f0dSDavid C Somayajulu  * @param last_line
8711e25f0dSDavid C Somayajulu  *
8811e25f0dSDavid C Somayajulu  * @return enum _ecore_status_t
8911e25f0dSDavid C Somayajulu  */
9011e25f0dSDavid C Somayajulu enum _ecore_status_t ecore_cxt_cfg_ilt_compute(struct ecore_hwfn *p_hwfn,
9111e25f0dSDavid C Somayajulu 					       u32 *last_line);
9211e25f0dSDavid C Somayajulu 
9311e25f0dSDavid C Somayajulu /**
9411e25f0dSDavid C Somayajulu  * @brief ecore_cxt_cfg_ilt_compute_excess - how many lines can be decreased
9511e25f0dSDavid C Somayajulu  *
9611e25f0dSDavid C Somayajulu  * @param p_hwfn
9711e25f0dSDavid C Somayajulu  * @param used_lines
9811e25f0dSDavid C Somayajulu  */
9911e25f0dSDavid C Somayajulu u32 ecore_cxt_cfg_ilt_compute_excess(struct ecore_hwfn *p_hwfn, u32 used_lines);
10011e25f0dSDavid C Somayajulu 
10111e25f0dSDavid C Somayajulu /**
10211e25f0dSDavid C Somayajulu  * @brief ecore_cxt_mngr_alloc - Allocate and init the context manager struct
10311e25f0dSDavid C Somayajulu  *
10411e25f0dSDavid C Somayajulu  * @param p_hwfn
10511e25f0dSDavid C Somayajulu  *
10611e25f0dSDavid C Somayajulu  * @return enum _ecore_status_t
10711e25f0dSDavid C Somayajulu  */
10811e25f0dSDavid C Somayajulu enum _ecore_status_t ecore_cxt_mngr_alloc(struct ecore_hwfn *p_hwfn);
10911e25f0dSDavid C Somayajulu 
11011e25f0dSDavid C Somayajulu /**
11111e25f0dSDavid C Somayajulu  * @brief ecore_cxt_mngr_free
11211e25f0dSDavid C Somayajulu  *
11311e25f0dSDavid C Somayajulu  * @param p_hwfn
11411e25f0dSDavid C Somayajulu  */
11511e25f0dSDavid C Somayajulu void ecore_cxt_mngr_free(struct ecore_hwfn *p_hwfn);
11611e25f0dSDavid C Somayajulu 
11711e25f0dSDavid C Somayajulu /**
11811e25f0dSDavid C Somayajulu  * @brief ecore_cxt_tables_alloc - Allocate ILT shadow, Searcher T2, acquired map
11911e25f0dSDavid C Somayajulu  *
12011e25f0dSDavid C Somayajulu  * @param p_hwfn
12111e25f0dSDavid C Somayajulu  *
12211e25f0dSDavid C Somayajulu  * @return enum _ecore_status_t
12311e25f0dSDavid C Somayajulu  */
12411e25f0dSDavid C Somayajulu enum _ecore_status_t ecore_cxt_tables_alloc(struct ecore_hwfn *p_hwfn);
12511e25f0dSDavid C Somayajulu 
12611e25f0dSDavid C Somayajulu /**
12711e25f0dSDavid C Somayajulu  * @brief ecore_cxt_mngr_setup - Reset the acquired CIDs
12811e25f0dSDavid C Somayajulu  *
12911e25f0dSDavid C Somayajulu  * @param p_hwfn
13011e25f0dSDavid C Somayajulu  */
13111e25f0dSDavid C Somayajulu void ecore_cxt_mngr_setup(struct ecore_hwfn *p_hwfn);
13211e25f0dSDavid C Somayajulu 
13311e25f0dSDavid C Somayajulu /**
13411e25f0dSDavid C Somayajulu  * @brief ecore_cxt_hw_init_common - Initailze ILT and DQ, common phase, per path.
13511e25f0dSDavid C Somayajulu  *
13611e25f0dSDavid C Somayajulu  * @param p_hwfn
13711e25f0dSDavid C Somayajulu  */
13811e25f0dSDavid C Somayajulu void ecore_cxt_hw_init_common(struct ecore_hwfn *p_hwfn);
13911e25f0dSDavid C Somayajulu 
14011e25f0dSDavid C Somayajulu /**
14111e25f0dSDavid C Somayajulu  * @brief ecore_cxt_hw_init_pf - Initailze ILT and DQ, PF phase, per path.
14211e25f0dSDavid C Somayajulu  *
14311e25f0dSDavid C Somayajulu  * @param p_hwfn
1449efd0ba7SDavid C Somayajulu  * @param p_ptt
14511e25f0dSDavid C Somayajulu  */
1469efd0ba7SDavid C Somayajulu void ecore_cxt_hw_init_pf(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt);
14711e25f0dSDavid C Somayajulu 
14811e25f0dSDavid C Somayajulu /**
14911e25f0dSDavid C Somayajulu  * @brief ecore_qm_init_pf - Initailze the QM PF phase, per path
15011e25f0dSDavid C Somayajulu  *
15111e25f0dSDavid C Somayajulu  * @param p_hwfn
1529efd0ba7SDavid C Somayajulu  * @param p_ptt
153*217ec208SDavid C Somayajulu  * @param is_pf_loading
15411e25f0dSDavid C Somayajulu  */
155*217ec208SDavid C Somayajulu void ecore_qm_init_pf(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
156*217ec208SDavid C Somayajulu 		      bool is_pf_loading);
15711e25f0dSDavid C Somayajulu 
15811e25f0dSDavid C Somayajulu  /**
15911e25f0dSDavid C Somayajulu  * @brief Reconfigures QM pf on the fly
16011e25f0dSDavid C Somayajulu  *
16111e25f0dSDavid C Somayajulu  * @param p_hwfn
16211e25f0dSDavid C Somayajulu  * @param p_ptt
16311e25f0dSDavid C Somayajulu  *
16411e25f0dSDavid C Somayajulu  * @return enum _ecore_status_t
16511e25f0dSDavid C Somayajulu  */
16611e25f0dSDavid C Somayajulu enum _ecore_status_t ecore_qm_reconf(struct ecore_hwfn *p_hwfn,
16711e25f0dSDavid C Somayajulu 				     struct ecore_ptt *p_ptt);
16811e25f0dSDavid C Somayajulu 
16911e25f0dSDavid C Somayajulu #define ECORE_CXT_PF_CID (0xff)
17011e25f0dSDavid C Somayajulu 
17111e25f0dSDavid C Somayajulu /**
17211e25f0dSDavid C Somayajulu  * @brief ecore_cxt_release - Release a cid
17311e25f0dSDavid C Somayajulu  *
17411e25f0dSDavid C Somayajulu  * @param p_hwfn
17511e25f0dSDavid C Somayajulu  * @param cid
17611e25f0dSDavid C Somayajulu  */
17711e25f0dSDavid C Somayajulu void ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn, u32 cid);
17811e25f0dSDavid C Somayajulu 
17911e25f0dSDavid C Somayajulu /**
18011e25f0dSDavid C Somayajulu  * @brief ecore_cxt_release - Release a cid belonging to a vf-queue
18111e25f0dSDavid C Somayajulu  *
18211e25f0dSDavid C Somayajulu  * @param p_hwfn
18311e25f0dSDavid C Somayajulu  * @param cid
18411e25f0dSDavid C Somayajulu  * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF
18511e25f0dSDavid C Somayajulu  */
18611e25f0dSDavid C Somayajulu void _ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn,
18711e25f0dSDavid C Somayajulu 			    u32 cid, u8 vfid);
18811e25f0dSDavid C Somayajulu 
18911e25f0dSDavid C Somayajulu /**
19011e25f0dSDavid C Somayajulu  * @brief ecore_cxt_acquire - Acquire a new cid of a specific protocol type
19111e25f0dSDavid C Somayajulu  *
19211e25f0dSDavid C Somayajulu  * @param p_hwfn
19311e25f0dSDavid C Somayajulu  * @param type
19411e25f0dSDavid C Somayajulu  * @param p_cid
19511e25f0dSDavid C Somayajulu  *
19611e25f0dSDavid C Somayajulu  * @return enum _ecore_status_t
19711e25f0dSDavid C Somayajulu  */
19811e25f0dSDavid C Somayajulu enum _ecore_status_t ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn,
19911e25f0dSDavid C Somayajulu 					   enum protocol_type type,
20011e25f0dSDavid C Somayajulu 					   u32 *p_cid);
20111e25f0dSDavid C Somayajulu 
20211e25f0dSDavid C Somayajulu /**
20311e25f0dSDavid C Somayajulu  * @brief _ecore_cxt_acquire - Acquire a new cid of a specific protocol type
20411e25f0dSDavid C Somayajulu  *                             for a vf-queue
20511e25f0dSDavid C Somayajulu  *
20611e25f0dSDavid C Somayajulu  * @param p_hwfn
20711e25f0dSDavid C Somayajulu  * @param type
20811e25f0dSDavid C Somayajulu  * @param p_cid
20911e25f0dSDavid C Somayajulu  * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF
21011e25f0dSDavid C Somayajulu  *
21111e25f0dSDavid C Somayajulu  * @return enum _ecore_status_t
21211e25f0dSDavid C Somayajulu  */
21311e25f0dSDavid C Somayajulu enum _ecore_status_t _ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn,
21411e25f0dSDavid C Somayajulu 					    enum protocol_type type,
21511e25f0dSDavid C Somayajulu 					    u32 *p_cid, u8 vfid);
21611e25f0dSDavid C Somayajulu 
21711e25f0dSDavid C Somayajulu /**
21811e25f0dSDavid C Somayajulu  * @brief ecore_cxt_get_tid_mem_info - function checks if the
21911e25f0dSDavid C Somayajulu  *        page containing the iid in the ilt is already
22011e25f0dSDavid C Somayajulu  *        allocated, if it is not it allocates the page.
22111e25f0dSDavid C Somayajulu  *
22211e25f0dSDavid C Somayajulu  * @param p_hwfn
22311e25f0dSDavid C Somayajulu  * @param elem_type
22411e25f0dSDavid C Somayajulu  * @param iid
22511e25f0dSDavid C Somayajulu  *
22611e25f0dSDavid C Somayajulu  * @return enum _ecore_status_t
22711e25f0dSDavid C Somayajulu  */
22811e25f0dSDavid C Somayajulu enum _ecore_status_t
22911e25f0dSDavid C Somayajulu ecore_cxt_dynamic_ilt_alloc(struct ecore_hwfn *p_hwfn,
23011e25f0dSDavid C Somayajulu 			    enum ecore_cxt_elem_type elem_type,
23111e25f0dSDavid C Somayajulu 			    u32 iid);
23211e25f0dSDavid C Somayajulu 
23311e25f0dSDavid C Somayajulu /**
23411e25f0dSDavid C Somayajulu  * @brief ecore_cxt_free_ilt_range - function frees ilt pages
23511e25f0dSDavid C Somayajulu  *        associated with the protocol and element type passed.
23611e25f0dSDavid C Somayajulu  *
23711e25f0dSDavid C Somayajulu  * @param p_hwfn
23811e25f0dSDavid C Somayajulu  * @param proto
23911e25f0dSDavid C Somayajulu  *
24011e25f0dSDavid C Somayajulu  * @return enum _ecore_status_t
24111e25f0dSDavid C Somayajulu  */
24211e25f0dSDavid C Somayajulu enum _ecore_status_t
24311e25f0dSDavid C Somayajulu ecore_cxt_free_ilt_range(struct ecore_hwfn *p_hwfn,
24411e25f0dSDavid C Somayajulu 			 enum ecore_cxt_elem_type elem_type,
24511e25f0dSDavid C Somayajulu 			 u32 start_iid, u32 count);
24611e25f0dSDavid C Somayajulu 
24711e25f0dSDavid C Somayajulu #define ECORE_CTX_WORKING_MEM 0
24811e25f0dSDavid C Somayajulu #define ECORE_CTX_FL_MEM 1
24911e25f0dSDavid C Somayajulu enum _ecore_status_t ecore_cxt_get_task_ctx(struct ecore_hwfn *p_hwfn,
25011e25f0dSDavid C Somayajulu 					    u32 tid,
25111e25f0dSDavid C Somayajulu 					    u8 ctx_type,
25211e25f0dSDavid C Somayajulu 					    void **task_ctx);
25311e25f0dSDavid C Somayajulu 
254*217ec208SDavid C Somayajulu u32 ecore_cxt_get_ilt_page_size(struct ecore_hwfn *p_hwfn,
255*217ec208SDavid C Somayajulu 				enum ilt_clients ilt_client);
256*217ec208SDavid C Somayajulu 
257*217ec208SDavid C Somayajulu u32 ecore_cxt_get_total_srq_count(struct ecore_hwfn *p_hwfn);
258*217ec208SDavid C Somayajulu 
25911e25f0dSDavid C Somayajulu #endif /* _ECORE_CID_ */
260