1 /*
2 * Copyright (c) 2017-2018 Cavium, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 *
27 */
28
29 #ifndef __ECORE_ISCSI_H__
30 #define __ECORE_ISCSI_H__
31
32 #include "ecore.h"
33 #include "ecore_chain.h"
34 #include "ecore_hsi_common.h"
35 #include "tcp_common.h"
36 #include "ecore_hsi_iscsi.h"
37 #include "ecore_sp_commands.h"
38 #include "ecore_iscsi_api.h"
39
40 #ifndef __EXTRACT__LINUX__H__
41 struct ecore_iscsi_info {
42 osal_spinlock_t lock;
43 osal_list_t free_list;
44 u16 max_num_outstanding_tasks;
45 void *event_context;
46 iscsi_event_cb_t event_cb;
47 };
48
49 #ifdef CONFIG_ECORE_ISCSI
50 enum _ecore_status_t ecore_iscsi_alloc(struct ecore_hwfn *p_hwfn);
51
52 void ecore_iscsi_setup(struct ecore_hwfn *p_hwfn);
53
54 void ecore_iscsi_free(struct ecore_hwfn *p_hwfn);
55 #else
56 static inline enum _ecore_status_t
ecore_iscsi_alloc(struct ecore_hwfn OSAL_UNUSED * p_hwfn)57 ecore_iscsi_alloc(struct ecore_hwfn OSAL_UNUSED *p_hwfn)
58 {
59 return ECORE_INVAL;
60 }
61
62 static inline void
ecore_iscsi_setup(struct ecore_hwfn OSAL_UNUSED * p_hwfn)63 ecore_iscsi_setup(struct ecore_hwfn OSAL_UNUSED *p_hwfn) {}
64
65 static inline void
ecore_iscsi_free(struct ecore_hwfn OSAL_UNUSED * p_hwfn)66 ecore_iscsi_free(struct ecore_hwfn OSAL_UNUSED *p_hwfn) {}
67 #endif
68 #endif
69
70 void ecore_iscsi_free_connection(struct ecore_hwfn *p_hwfn,
71 struct ecore_iscsi_conn *p_conn);
72
73 /**
74 * @brief ecore_sp_iscsi_conn_offload - iSCSI connection offload
75 *
76 * This ramrod offloads iSCSI connection to FW
77 *
78 * @param p_path
79 * @param p_conn
80 * @param comp_mode
81 * @param comp_addr
82 *
83 * @return enum _ecore_status_t
84 */
85 enum _ecore_status_t
86 ecore_sp_iscsi_conn_offload(struct ecore_hwfn *p_hwfn,
87 struct ecore_iscsi_conn *p_conn,
88 enum spq_mode comp_mode,
89 struct ecore_spq_comp_cb *p_comp_addr);
90
91 /**
92 * @brief ecore_sp_iscsi_conn_update - iSCSI connection update
93 *
94 * This ramrod updatess iSCSI ofloadedconnection in FW
95 *
96 * @param p_path
97 * @param p_conn
98 * @param comp_mode
99 * @param comp_addr
100 *
101 * @return enum _ecore_status_t
102 */
103 enum _ecore_status_t
104 ecore_sp_iscsi_conn_update(struct ecore_hwfn *p_hwfn,
105 struct ecore_iscsi_conn *p_conn,
106 enum spq_mode comp_mode,
107 struct ecore_spq_comp_cb *p_comp_addr);
108
109 /**
110 * @brief ecore_sp_iscsi_mac_update - iSCSI connection's MAC update
111 *
112 * This ramrod updates remote MAC for iSCSI offloaded connection in FW
113 *
114 * @param p_path
115 * @param p_conn
116 * @param comp_mode
117 * @param comp_addr
118 *
119 * @return enum _ecore_status_t
120 */
121 enum _ecore_status_t
122 ecore_sp_iscsi_mac_update(struct ecore_hwfn *p_hwfn,
123 struct ecore_iscsi_conn *p_conn,
124 enum spq_mode comp_mode,
125 struct ecore_spq_comp_cb *p_comp_addr);
126
127 /**
128 * @brief ecore_sp_iscsi_mac_update - iSCSI connection's MAC update
129 *
130 * This ramrod updates remote MAC for iSCSI offloaded connection in FW
131 *
132 * @param p_path
133 * @param p_conn
134 * @param reset
135 * @param comp_mode
136 * @param comp_addr
137 *
138 * @return enum _ecore_status_t
139 */
140 enum _ecore_status_t
141 ecore_sp_iscsi_stats_tcp_update(struct ecore_hwfn *p_hwfn,
142 struct ecore_iscsi_conn *p_conn,
143 bool reset,
144 enum spq_mode comp_mode,
145 struct ecore_spq_comp_cb *p_comp_addr);
146
147 /**
148 * @brief ecore_sp_iscsi_conn_terminate - iSCSI connection
149 * terminate
150 *
151 * This ramrod deletes iSCSI offloaded connection in FW
152 *
153 * @param p_path
154 * @param p_conn
155 * @param comp_mode
156 * @param comp_addr
157 *
158 * @return enum _ecore_status_t
159 */
160 enum _ecore_status_t
161 ecore_sp_iscsi_conn_terminate(struct ecore_hwfn *p_hwfn,
162 struct ecore_iscsi_conn *p_conn,
163 enum spq_mode comp_mode,
164 struct ecore_spq_comp_cb *p_comp_addr);
165
166 /**
167 * @brief ecore_sp_iscsi_conn_clear_sq - iSCSI connection
168 * clear SQ
169 *
170 * This ramrod clears connection's SQ in FW
171 *
172 * @param p_path
173 * @param p_conn
174 * @param comp_mode
175 * @param comp_addr
176 *
177 * @return enum _ecore_status_t
178 */
179 enum _ecore_status_t
180 ecore_sp_iscsi_conn_clear_sq(struct ecore_hwfn *p_hwfn,
181 struct ecore_iscsi_conn *p_conn,
182 enum spq_mode comp_mode,
183 struct ecore_spq_comp_cb *p_comp_addr);
184
185 #endif /*__ECORE_ISCSI_H__*/
186