ecore_cxt.h revision 316485
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: head/sys/dev/qlnx/qlnxe/ecore_cxt.h 316485 2017-04-04 06:16:59Z davidcs $
28316485Sdavidcs *
29316485Sdavidcs */
30316485Sdavidcs
31316485Sdavidcs
32316485Sdavidcs#ifndef _ECORE_CID_
33316485Sdavidcs#define _ECORE_CID_
34316485Sdavidcs
35316485Sdavidcs#include "ecore_hsi_common.h"
36316485Sdavidcs#include "ecore_proto_if.h"
37316485Sdavidcs#include "ecore_cxt_api.h"
38316485Sdavidcs
39316485Sdavidcs/* Tasks segments definitions  */
40316485Sdavidcs#define ECORE_CXT_ISCSI_TID_SEG			PROTOCOLID_ISCSI	/* 0 */
41316485Sdavidcs#define ECORE_CXT_FCOE_TID_SEG			PROTOCOLID_FCOE		/* 1 */
42316485Sdavidcs#define ECORE_CXT_ROCE_TID_SEG			PROTOCOLID_ROCE		/* 2 */
43316485Sdavidcs
44316485Sdavidcsenum ecore_cxt_elem_type {
45316485Sdavidcs	ECORE_ELEM_CXT,
46316485Sdavidcs	ECORE_ELEM_SRQ,
47316485Sdavidcs	ECORE_ELEM_TASK
48316485Sdavidcs};
49316485Sdavidcs
50316485Sdavidcsu32 ecore_cxt_get_proto_cid_count(struct ecore_hwfn *p_hwfn,
51316485Sdavidcs				  enum protocol_type type,
52316485Sdavidcs				  u32 *vf_cid);
53316485Sdavidcs
54316485Sdavidcsu32 ecore_cxt_get_proto_tid_count(struct ecore_hwfn *p_hwfn,
55316485Sdavidcs				  enum protocol_type type);
56316485Sdavidcs
57316485Sdavidcsu32 ecore_cxt_get_proto_cid_start(struct ecore_hwfn *p_hwfn,
58316485Sdavidcs				  enum protocol_type type);
59316485Sdavidcsu32 ecore_cxt_get_srq_count(struct ecore_hwfn *p_hwfn);
60316485Sdavidcs
61316485Sdavidcs/**
62316485Sdavidcs * @brief ecore_cxt_set_pf_params - Set the PF params for cxt init
63316485Sdavidcs *
64316485Sdavidcs * @param p_hwfn
65316485Sdavidcs *
66316485Sdavidcs * @return enum _ecore_status_t
67316485Sdavidcs */
68316485Sdavidcsenum _ecore_status_t ecore_cxt_set_pf_params(struct ecore_hwfn *p_hwfn,
69316485Sdavidcs					     u32 rdma_tasks);
70316485Sdavidcs
71316485Sdavidcs/**
72316485Sdavidcs * @brief ecore_cxt_cfg_ilt_compute - compute ILT init parameters
73316485Sdavidcs *
74316485Sdavidcs * @param p_hwfn
75316485Sdavidcs * @param last_line
76316485Sdavidcs *
77316485Sdavidcs * @return enum _ecore_status_t
78316485Sdavidcs */
79316485Sdavidcsenum _ecore_status_t ecore_cxt_cfg_ilt_compute(struct ecore_hwfn *p_hwfn,
80316485Sdavidcs					       u32 *last_line);
81316485Sdavidcs
82316485Sdavidcs/**
83316485Sdavidcs * @brief ecore_cxt_cfg_ilt_compute_excess - how many lines can be decreased
84316485Sdavidcs *
85316485Sdavidcs * @param p_hwfn
86316485Sdavidcs * @param used_lines
87316485Sdavidcs */
88316485Sdavidcsu32 ecore_cxt_cfg_ilt_compute_excess(struct ecore_hwfn *p_hwfn, u32 used_lines);
89316485Sdavidcs
90316485Sdavidcs/**
91316485Sdavidcs * @brief ecore_cxt_mngr_alloc - Allocate and init the context manager struct
92316485Sdavidcs *
93316485Sdavidcs * @param p_hwfn
94316485Sdavidcs *
95316485Sdavidcs * @return enum _ecore_status_t
96316485Sdavidcs */
97316485Sdavidcsenum _ecore_status_t ecore_cxt_mngr_alloc(struct ecore_hwfn *p_hwfn);
98316485Sdavidcs
99316485Sdavidcs/**
100316485Sdavidcs * @brief ecore_cxt_mngr_free
101316485Sdavidcs *
102316485Sdavidcs * @param p_hwfn
103316485Sdavidcs */
104316485Sdavidcsvoid ecore_cxt_mngr_free(struct ecore_hwfn *p_hwfn);
105316485Sdavidcs
106316485Sdavidcs/**
107316485Sdavidcs * @brief ecore_cxt_tables_alloc - Allocate ILT shadow, Searcher T2, acquired map
108316485Sdavidcs *
109316485Sdavidcs * @param p_hwfn
110316485Sdavidcs *
111316485Sdavidcs * @return enum _ecore_status_t
112316485Sdavidcs */
113316485Sdavidcsenum _ecore_status_t ecore_cxt_tables_alloc(struct ecore_hwfn *p_hwfn);
114316485Sdavidcs
115316485Sdavidcs/**
116316485Sdavidcs * @brief ecore_cxt_mngr_setup - Reset the acquired CIDs
117316485Sdavidcs *
118316485Sdavidcs * @param p_hwfn
119316485Sdavidcs */
120316485Sdavidcsvoid ecore_cxt_mngr_setup(struct ecore_hwfn *p_hwfn);
121316485Sdavidcs
122316485Sdavidcs/**
123316485Sdavidcs * @brief ecore_cxt_hw_init_common - Initailze ILT and DQ, common phase, per path.
124316485Sdavidcs *
125316485Sdavidcs * @param p_hwfn
126316485Sdavidcs */
127316485Sdavidcsvoid ecore_cxt_hw_init_common(struct ecore_hwfn *p_hwfn);
128316485Sdavidcs
129316485Sdavidcs/**
130316485Sdavidcs * @brief ecore_cxt_hw_init_pf - Initailze ILT and DQ, PF phase, per path.
131316485Sdavidcs *
132316485Sdavidcs * @param p_hwfn
133316485Sdavidcs */
134316485Sdavidcsvoid ecore_cxt_hw_init_pf(struct ecore_hwfn *p_hwfn);
135316485Sdavidcs
136316485Sdavidcs/**
137316485Sdavidcs * @brief ecore_qm_init_pf - Initailze the QM PF phase, per path
138316485Sdavidcs *
139316485Sdavidcs * @param p_hwfn
140316485Sdavidcs */
141316485Sdavidcsvoid ecore_qm_init_pf(struct ecore_hwfn *p_hwfn);
142316485Sdavidcs
143316485Sdavidcs /**
144316485Sdavidcs * @brief Reconfigures QM pf on the fly
145316485Sdavidcs *
146316485Sdavidcs * @param p_hwfn
147316485Sdavidcs * @param p_ptt
148316485Sdavidcs *
149316485Sdavidcs * @return enum _ecore_status_t
150316485Sdavidcs */
151316485Sdavidcsenum _ecore_status_t ecore_qm_reconf(struct ecore_hwfn *p_hwfn,
152316485Sdavidcs				     struct ecore_ptt *p_ptt);
153316485Sdavidcs
154316485Sdavidcs#define ECORE_CXT_PF_CID (0xff)
155316485Sdavidcs
156316485Sdavidcs/**
157316485Sdavidcs * @brief ecore_cxt_release - Release a cid
158316485Sdavidcs *
159316485Sdavidcs * @param p_hwfn
160316485Sdavidcs * @param cid
161316485Sdavidcs */
162316485Sdavidcsvoid ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn, u32 cid);
163316485Sdavidcs
164316485Sdavidcs/**
165316485Sdavidcs * @brief ecore_cxt_release - Release a cid belonging to a vf-queue
166316485Sdavidcs *
167316485Sdavidcs * @param p_hwfn
168316485Sdavidcs * @param cid
169316485Sdavidcs * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF
170316485Sdavidcs */
171316485Sdavidcsvoid _ecore_cxt_release_cid(struct ecore_hwfn *p_hwfn,
172316485Sdavidcs			    u32 cid, u8 vfid);
173316485Sdavidcs
174316485Sdavidcs/**
175316485Sdavidcs * @brief ecore_cxt_acquire - Acquire a new cid of a specific protocol type
176316485Sdavidcs *
177316485Sdavidcs * @param p_hwfn
178316485Sdavidcs * @param type
179316485Sdavidcs * @param p_cid
180316485Sdavidcs *
181316485Sdavidcs * @return enum _ecore_status_t
182316485Sdavidcs */
183316485Sdavidcsenum _ecore_status_t ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn,
184316485Sdavidcs					   enum protocol_type type,
185316485Sdavidcs					   u32 *p_cid);
186316485Sdavidcs
187316485Sdavidcs/**
188316485Sdavidcs * @brief _ecore_cxt_acquire - Acquire a new cid of a specific protocol type
189316485Sdavidcs *                             for a vf-queue
190316485Sdavidcs *
191316485Sdavidcs * @param p_hwfn
192316485Sdavidcs * @param type
193316485Sdavidcs * @param p_cid
194316485Sdavidcs * @param vfid - engine relative index. ECORE_CXT_PF_CID if belongs to PF
195316485Sdavidcs *
196316485Sdavidcs * @return enum _ecore_status_t
197316485Sdavidcs */
198316485Sdavidcsenum _ecore_status_t _ecore_cxt_acquire_cid(struct ecore_hwfn *p_hwfn,
199316485Sdavidcs					    enum protocol_type type,
200316485Sdavidcs					    u32 *p_cid, u8 vfid);
201316485Sdavidcs
202316485Sdavidcs/**
203316485Sdavidcs * @brief ecore_cxt_get_tid_mem_info - function checks if the
204316485Sdavidcs *        page containing the iid in the ilt is already
205316485Sdavidcs *        allocated, if it is not it allocates the page.
206316485Sdavidcs *
207316485Sdavidcs * @param p_hwfn
208316485Sdavidcs * @param elem_type
209316485Sdavidcs * @param iid
210316485Sdavidcs *
211316485Sdavidcs * @return enum _ecore_status_t
212316485Sdavidcs */
213316485Sdavidcsenum _ecore_status_t
214316485Sdavidcsecore_cxt_dynamic_ilt_alloc(struct ecore_hwfn *p_hwfn,
215316485Sdavidcs			    enum ecore_cxt_elem_type elem_type,
216316485Sdavidcs			    u32 iid);
217316485Sdavidcs
218316485Sdavidcs/**
219316485Sdavidcs * @brief ecore_cxt_free_ilt_range - function frees ilt pages
220316485Sdavidcs *        associated with the protocol and element type passed.
221316485Sdavidcs *
222316485Sdavidcs * @param p_hwfn
223316485Sdavidcs * @param proto
224316485Sdavidcs *
225316485Sdavidcs * @return enum _ecore_status_t
226316485Sdavidcs */
227316485Sdavidcsenum _ecore_status_t
228316485Sdavidcsecore_cxt_free_ilt_range(struct ecore_hwfn *p_hwfn,
229316485Sdavidcs			 enum ecore_cxt_elem_type elem_type,
230316485Sdavidcs			 u32 start_iid, u32 count);
231316485Sdavidcs
232316485Sdavidcs#define ECORE_CTX_WORKING_MEM 0
233316485Sdavidcs#define ECORE_CTX_FL_MEM 1
234316485Sdavidcsenum _ecore_status_t ecore_cxt_get_task_ctx(struct ecore_hwfn *p_hwfn,
235316485Sdavidcs					    u32 tid,
236316485Sdavidcs					    u8 ctx_type,
237316485Sdavidcs					    void **task_ctx);
238316485Sdavidcs
239316485Sdavidcs#endif /* _ECORE_CID_ */
240