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);
173fe56b9e6SYuval Mintz 
174dbb799c3SYuval Mintz #define QED_CTX_WORKING_MEM 0
175dbb799c3SYuval Mintz #define QED_CTX_FL_MEM 1
176fe56b9e6SYuval Mintz #endif
177