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 
54fe56b9e6SYuval Mintz /**
55fe56b9e6SYuval Mintz  * @brief qed_cxt_set_pf_params - Set the PF params for cxt init
56fe56b9e6SYuval Mintz  *
57fe56b9e6SYuval Mintz  * @param p_hwfn
58fe56b9e6SYuval Mintz  *
59fe56b9e6SYuval Mintz  * @return int
60fe56b9e6SYuval Mintz  */
61fe56b9e6SYuval Mintz int qed_cxt_set_pf_params(struct qed_hwfn *p_hwfn);
62fe56b9e6SYuval Mintz 
63fe56b9e6SYuval Mintz /**
64fe56b9e6SYuval Mintz  * @brief qed_cxt_cfg_ilt_compute - compute ILT init parameters
65fe56b9e6SYuval Mintz  *
66fe56b9e6SYuval Mintz  * @param p_hwfn
67fe56b9e6SYuval Mintz  *
68fe56b9e6SYuval Mintz  * @return int
69fe56b9e6SYuval Mintz  */
70fe56b9e6SYuval Mintz int qed_cxt_cfg_ilt_compute(struct qed_hwfn *p_hwfn);
71fe56b9e6SYuval Mintz 
72fe56b9e6SYuval Mintz /**
73fe56b9e6SYuval Mintz  * @brief qed_cxt_mngr_alloc - Allocate and init the context manager struct
74fe56b9e6SYuval Mintz  *
75fe56b9e6SYuval Mintz  * @param p_hwfn
76fe56b9e6SYuval Mintz  *
77fe56b9e6SYuval Mintz  * @return int
78fe56b9e6SYuval Mintz  */
79fe56b9e6SYuval Mintz int qed_cxt_mngr_alloc(struct qed_hwfn *p_hwfn);
80fe56b9e6SYuval Mintz 
81fe56b9e6SYuval Mintz /**
82fe56b9e6SYuval Mintz  * @brief qed_cxt_mngr_free
83fe56b9e6SYuval Mintz  *
84fe56b9e6SYuval Mintz  * @param p_hwfn
85fe56b9e6SYuval Mintz  */
86fe56b9e6SYuval Mintz void qed_cxt_mngr_free(struct qed_hwfn *p_hwfn);
87fe56b9e6SYuval Mintz 
88fe56b9e6SYuval Mintz /**
89fe56b9e6SYuval Mintz  * @brief qed_cxt_tables_alloc - Allocate ILT shadow, Searcher T2, acquired map
90fe56b9e6SYuval Mintz  *
91fe56b9e6SYuval Mintz  * @param p_hwfn
92fe56b9e6SYuval Mintz  *
93fe56b9e6SYuval Mintz  * @return int
94fe56b9e6SYuval Mintz  */
95fe56b9e6SYuval Mintz int qed_cxt_tables_alloc(struct qed_hwfn *p_hwfn);
96fe56b9e6SYuval Mintz 
97fe56b9e6SYuval Mintz /**
98fe56b9e6SYuval Mintz  * @brief qed_cxt_mngr_setup - Reset the acquired CIDs
99fe56b9e6SYuval Mintz  *
100fe56b9e6SYuval Mintz  * @param p_hwfn
101fe56b9e6SYuval Mintz  */
102fe56b9e6SYuval Mintz void qed_cxt_mngr_setup(struct qed_hwfn *p_hwfn);
103fe56b9e6SYuval Mintz 
104fe56b9e6SYuval Mintz /**
105fe56b9e6SYuval Mintz  * @brief qed_cxt_hw_init_common - Initailze ILT and DQ, common phase, per path.
106fe56b9e6SYuval Mintz  *
107fe56b9e6SYuval Mintz  *
108fe56b9e6SYuval Mintz  *
109fe56b9e6SYuval Mintz  * @param p_hwfn
110fe56b9e6SYuval Mintz  */
111fe56b9e6SYuval Mintz void qed_cxt_hw_init_common(struct qed_hwfn *p_hwfn);
112fe56b9e6SYuval Mintz 
113fe56b9e6SYuval Mintz /**
114fe56b9e6SYuval Mintz  * @brief qed_cxt_hw_init_pf - Initailze ILT and DQ, PF phase, per path.
115fe56b9e6SYuval Mintz  *
116fe56b9e6SYuval Mintz  *
117fe56b9e6SYuval Mintz  *
118fe56b9e6SYuval Mintz  * @param p_hwfn
119fe56b9e6SYuval Mintz  */
120fe56b9e6SYuval Mintz void qed_cxt_hw_init_pf(struct qed_hwfn *p_hwfn);
121fe56b9e6SYuval Mintz 
122fe56b9e6SYuval Mintz /**
123fe56b9e6SYuval Mintz  * @brief qed_qm_init_pf - Initailze the QM PF phase, per path
124fe56b9e6SYuval Mintz  *
125fe56b9e6SYuval Mintz  * @param p_hwfn
126fe56b9e6SYuval Mintz  */
127fe56b9e6SYuval Mintz 
128fe56b9e6SYuval Mintz void qed_qm_init_pf(struct qed_hwfn *p_hwfn);
129fe56b9e6SYuval Mintz 
130fe56b9e6SYuval Mintz /**
131fe56b9e6SYuval Mintz  * @brief qed_cxt_release - Release a cid
132fe56b9e6SYuval Mintz  *
133fe56b9e6SYuval Mintz  * @param p_hwfn
134fe56b9e6SYuval Mintz  * @param cid
135fe56b9e6SYuval Mintz  */
136fe56b9e6SYuval Mintz void qed_cxt_release_cid(struct qed_hwfn *p_hwfn,
137fe56b9e6SYuval Mintz 			 u32 cid);
138fe56b9e6SYuval Mintz 
139fe56b9e6SYuval Mintz #endif
140