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 
24fe56b9e6SYuval Mintz /**
25fe56b9e6SYuval Mintz  * @brief qed_cxt_acquire - Acquire a new cid of a specific protocol type
26fe56b9e6SYuval Mintz  *
27fe56b9e6SYuval Mintz  * @param p_hwfn
28fe56b9e6SYuval Mintz  * @param type
29fe56b9e6SYuval Mintz  * @param p_cid
30fe56b9e6SYuval Mintz  *
31fe56b9e6SYuval Mintz  * @return int
32fe56b9e6SYuval Mintz  */
33fe56b9e6SYuval Mintz int qed_cxt_acquire_cid(struct qed_hwfn *p_hwfn,
34fe56b9e6SYuval Mintz 			enum protocol_type type,
35fe56b9e6SYuval Mintz 			u32 *p_cid);
36fe56b9e6SYuval Mintz 
37fe56b9e6SYuval Mintz /**
38fe56b9e6SYuval Mintz  * @brief qedo_cid_get_cxt_info - Returns the context info for a specific cid
39fe56b9e6SYuval Mintz  *
40fe56b9e6SYuval Mintz  *
41fe56b9e6SYuval Mintz  * @param p_hwfn
42fe56b9e6SYuval Mintz  * @param p_info in/out
43fe56b9e6SYuval Mintz  *
44fe56b9e6SYuval Mintz  * @return int
45fe56b9e6SYuval Mintz  */
46fe56b9e6SYuval Mintz int qed_cxt_get_cid_info(struct qed_hwfn *p_hwfn,
47fe56b9e6SYuval Mintz 			 struct qed_cxt_info *p_info);
48fe56b9e6SYuval Mintz 
49fe56b9e6SYuval Mintz enum qed_cxt_elem_type {
50fe56b9e6SYuval Mintz 	QED_ELEM_CXT,
51fe56b9e6SYuval Mintz 	QED_ELEM_TASK
52fe56b9e6SYuval Mintz };
53fe56b9e6SYuval Mintz 
541408cc1fSYuval Mintz u32 qed_cxt_get_proto_cid_count(struct qed_hwfn *p_hwfn,
551408cc1fSYuval Mintz 				enum protocol_type type, u32 *vf_cid);
561408cc1fSYuval Mintz 
57fe56b9e6SYuval Mintz /**
58fe56b9e6SYuval Mintz  * @brief qed_cxt_set_pf_params - Set the PF params for cxt init
59fe56b9e6SYuval Mintz  *
60fe56b9e6SYuval Mintz  * @param p_hwfn
61fe56b9e6SYuval Mintz  *
62fe56b9e6SYuval Mintz  * @return int
63fe56b9e6SYuval Mintz  */
64fe56b9e6SYuval Mintz int qed_cxt_set_pf_params(struct qed_hwfn *p_hwfn);
65fe56b9e6SYuval Mintz 
66fe56b9e6SYuval Mintz /**
67fe56b9e6SYuval Mintz  * @brief qed_cxt_cfg_ilt_compute - compute ILT init parameters
68fe56b9e6SYuval Mintz  *
69fe56b9e6SYuval Mintz  * @param p_hwfn
70fe56b9e6SYuval Mintz  *
71fe56b9e6SYuval Mintz  * @return int
72fe56b9e6SYuval Mintz  */
73fe56b9e6SYuval Mintz int qed_cxt_cfg_ilt_compute(struct qed_hwfn *p_hwfn);
74fe56b9e6SYuval Mintz 
75fe56b9e6SYuval Mintz /**
76fe56b9e6SYuval Mintz  * @brief qed_cxt_mngr_alloc - Allocate and init the context manager struct
77fe56b9e6SYuval Mintz  *
78fe56b9e6SYuval Mintz  * @param p_hwfn
79fe56b9e6SYuval Mintz  *
80fe56b9e6SYuval Mintz  * @return int
81fe56b9e6SYuval Mintz  */
82fe56b9e6SYuval Mintz int qed_cxt_mngr_alloc(struct qed_hwfn *p_hwfn);
83fe56b9e6SYuval Mintz 
84fe56b9e6SYuval Mintz /**
85fe56b9e6SYuval Mintz  * @brief qed_cxt_mngr_free
86fe56b9e6SYuval Mintz  *
87fe56b9e6SYuval Mintz  * @param p_hwfn
88fe56b9e6SYuval Mintz  */
89fe56b9e6SYuval Mintz void qed_cxt_mngr_free(struct qed_hwfn *p_hwfn);
90fe56b9e6SYuval Mintz 
91fe56b9e6SYuval Mintz /**
92fe56b9e6SYuval Mintz  * @brief qed_cxt_tables_alloc - Allocate ILT shadow, Searcher T2, acquired map
93fe56b9e6SYuval Mintz  *
94fe56b9e6SYuval Mintz  * @param p_hwfn
95fe56b9e6SYuval Mintz  *
96fe56b9e6SYuval Mintz  * @return int
97fe56b9e6SYuval Mintz  */
98fe56b9e6SYuval Mintz int qed_cxt_tables_alloc(struct qed_hwfn *p_hwfn);
99fe56b9e6SYuval Mintz 
100fe56b9e6SYuval Mintz /**
101fe56b9e6SYuval Mintz  * @brief qed_cxt_mngr_setup - Reset the acquired CIDs
102fe56b9e6SYuval Mintz  *
103fe56b9e6SYuval Mintz  * @param p_hwfn
104fe56b9e6SYuval Mintz  */
105fe56b9e6SYuval Mintz void qed_cxt_mngr_setup(struct qed_hwfn *p_hwfn);
106fe56b9e6SYuval Mintz 
107fe56b9e6SYuval Mintz /**
108fe56b9e6SYuval Mintz  * @brief qed_cxt_hw_init_common - Initailze ILT and DQ, common phase, per path.
109fe56b9e6SYuval Mintz  *
110fe56b9e6SYuval Mintz  *
111fe56b9e6SYuval Mintz  *
112fe56b9e6SYuval Mintz  * @param p_hwfn
113fe56b9e6SYuval Mintz  */
114fe56b9e6SYuval Mintz void qed_cxt_hw_init_common(struct qed_hwfn *p_hwfn);
115fe56b9e6SYuval Mintz 
116fe56b9e6SYuval Mintz /**
117fe56b9e6SYuval Mintz  * @brief qed_cxt_hw_init_pf - Initailze ILT and DQ, PF phase, per path.
118fe56b9e6SYuval Mintz  *
119fe56b9e6SYuval Mintz  *
120fe56b9e6SYuval Mintz  *
121fe56b9e6SYuval Mintz  * @param p_hwfn
122fe56b9e6SYuval Mintz  */
123fe56b9e6SYuval Mintz void qed_cxt_hw_init_pf(struct qed_hwfn *p_hwfn);
124fe56b9e6SYuval Mintz 
125fe56b9e6SYuval Mintz /**
126fe56b9e6SYuval Mintz  * @brief qed_qm_init_pf - Initailze the QM PF phase, per path
127fe56b9e6SYuval Mintz  *
128fe56b9e6SYuval Mintz  * @param p_hwfn
129fe56b9e6SYuval Mintz  */
130fe56b9e6SYuval Mintz 
131fe56b9e6SYuval Mintz void qed_qm_init_pf(struct qed_hwfn *p_hwfn);
132fe56b9e6SYuval Mintz 
133fe56b9e6SYuval Mintz /**
13439651abdSSudarsana Reddy Kalluru  * @brief Reconfigures QM pf on the fly
13539651abdSSudarsana Reddy Kalluru  *
13639651abdSSudarsana Reddy Kalluru  * @param p_hwfn
13739651abdSSudarsana Reddy Kalluru  * @param p_ptt
13839651abdSSudarsana Reddy Kalluru  *
13939651abdSSudarsana Reddy Kalluru  * @return int
14039651abdSSudarsana Reddy Kalluru  */
14139651abdSSudarsana Reddy Kalluru int qed_qm_reconf(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
14239651abdSSudarsana Reddy Kalluru 
14339651abdSSudarsana Reddy Kalluru /**
144fe56b9e6SYuval Mintz  * @brief qed_cxt_release - Release a cid
145fe56b9e6SYuval Mintz  *
146fe56b9e6SYuval Mintz  * @param p_hwfn
147fe56b9e6SYuval Mintz  * @param cid
148fe56b9e6SYuval Mintz  */
149fe56b9e6SYuval Mintz void qed_cxt_release_cid(struct qed_hwfn *p_hwfn,
150fe56b9e6SYuval Mintz 			 u32 cid);
151fe56b9e6SYuval Mintz 
152fe56b9e6SYuval Mintz #endif
153