1*14b24e2bSVaishali Kulkarni /*
2*14b24e2bSVaishali Kulkarni * CDDL HEADER START
3*14b24e2bSVaishali Kulkarni *
4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the
5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1,  (the "License").
6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
7*14b24e2bSVaishali Kulkarni *
8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0.
10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions
11*14b24e2bSVaishali Kulkarni * and limitations under the License.
12*14b24e2bSVaishali Kulkarni *
13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each
14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the
16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying
17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner]
18*14b24e2bSVaishali Kulkarni *
19*14b24e2bSVaishali Kulkarni * CDDL HEADER END
20*14b24e2bSVaishali Kulkarni */
21*14b24e2bSVaishali Kulkarni 
22*14b24e2bSVaishali Kulkarni /*
23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc.
24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development
25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1,  (the "License").
26*14b24e2bSVaishali Kulkarni 
27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
28*14b24e2bSVaishali Kulkarni 
29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available
30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0
31*14b24e2bSVaishali Kulkarni 
32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and
33*14b24e2bSVaishali Kulkarni * limitations under the License.
34*14b24e2bSVaishali Kulkarni */
35*14b24e2bSVaishali Kulkarni 
36*14b24e2bSVaishali Kulkarni #ifndef __ECORE_ISCSI_API_H__
37*14b24e2bSVaishali Kulkarni #define __ECORE_ISCSI_API_H__
38*14b24e2bSVaishali Kulkarni 
39*14b24e2bSVaishali Kulkarni #ifndef __EXTRACT__LINUX__
40*14b24e2bSVaishali Kulkarni typedef enum _ecore_status_t (*iscsi_event_cb_t)(void *context,
41*14b24e2bSVaishali Kulkarni 						 u8 fw_event_code,
42*14b24e2bSVaishali Kulkarni 						 void *fw_handle);
43*14b24e2bSVaishali Kulkarni #endif
44*14b24e2bSVaishali Kulkarni 
45*14b24e2bSVaishali Kulkarni struct ecore_iscsi_conn {
46*14b24e2bSVaishali Kulkarni 	osal_list_entry_t	list_entry;
47*14b24e2bSVaishali Kulkarni 	bool			free_on_delete;
48*14b24e2bSVaishali Kulkarni 
49*14b24e2bSVaishali Kulkarni 	u16			conn_id;
50*14b24e2bSVaishali Kulkarni 	u32			icid;
51*14b24e2bSVaishali Kulkarni 	u32			fw_cid;
52*14b24e2bSVaishali Kulkarni 
53*14b24e2bSVaishali Kulkarni 	u8			layer_code;
54*14b24e2bSVaishali Kulkarni 	u8			offl_flags;
55*14b24e2bSVaishali Kulkarni 	u8			connect_mode;
56*14b24e2bSVaishali Kulkarni 	u32			initial_ack;
57*14b24e2bSVaishali Kulkarni 	dma_addr_t		sq_pbl_addr;
58*14b24e2bSVaishali Kulkarni 	struct ecore_chain	r2tq;
59*14b24e2bSVaishali Kulkarni 	struct ecore_chain	xhq;
60*14b24e2bSVaishali Kulkarni 	struct ecore_chain	uhq;
61*14b24e2bSVaishali Kulkarni 
62*14b24e2bSVaishali Kulkarni 	struct tcp_upload_params *tcp_upload_params_virt_addr;
63*14b24e2bSVaishali Kulkarni 	dma_addr_t		tcp_upload_params_phys_addr;
64*14b24e2bSVaishali Kulkarni 	struct scsi_terminate_extra_params *queue_cnts_virt_addr;
65*14b24e2bSVaishali Kulkarni 	dma_addr_t		queue_cnts_phys_addr;
66*14b24e2bSVaishali Kulkarni 	dma_addr_t		syn_phy_addr;
67*14b24e2bSVaishali Kulkarni 
68*14b24e2bSVaishali Kulkarni 	u16			syn_ip_payload_length;
69*14b24e2bSVaishali Kulkarni 	u8			local_mac[6];
70*14b24e2bSVaishali Kulkarni 	u8			remote_mac[6];
71*14b24e2bSVaishali Kulkarni 	u16			vlan_id;
72*14b24e2bSVaishali Kulkarni 	u8			tcp_flags;
73*14b24e2bSVaishali Kulkarni 	u8			ip_version;
74*14b24e2bSVaishali Kulkarni 	u32			remote_ip[4];
75*14b24e2bSVaishali Kulkarni 	u32			local_ip[4];
76*14b24e2bSVaishali Kulkarni 	u8			ka_max_probe_cnt;
77*14b24e2bSVaishali Kulkarni 	u8			dup_ack_theshold;
78*14b24e2bSVaishali Kulkarni 	u32			rcv_next;
79*14b24e2bSVaishali Kulkarni 	u32			snd_una;
80*14b24e2bSVaishali Kulkarni 	u32			snd_next;
81*14b24e2bSVaishali Kulkarni 	u32			snd_max;
82*14b24e2bSVaishali Kulkarni 	u32			snd_wnd;
83*14b24e2bSVaishali Kulkarni 	u32			rcv_wnd;
84*14b24e2bSVaishali Kulkarni 	u32			snd_wl1;
85*14b24e2bSVaishali Kulkarni 	u32			cwnd;
86*14b24e2bSVaishali Kulkarni 	u32			ss_thresh;
87*14b24e2bSVaishali Kulkarni 	u16			srtt;
88*14b24e2bSVaishali Kulkarni 	u16			rtt_var;
89*14b24e2bSVaishali Kulkarni 	u32			ts_recent;
90*14b24e2bSVaishali Kulkarni 	u32			ts_recent_age;
91*14b24e2bSVaishali Kulkarni 	u32			total_rt;
92*14b24e2bSVaishali Kulkarni 	u32			ka_timeout_delta;
93*14b24e2bSVaishali Kulkarni 	u32			rt_timeout_delta;
94*14b24e2bSVaishali Kulkarni 	u8			dup_ack_cnt;
95*14b24e2bSVaishali Kulkarni 	u8			snd_wnd_probe_cnt;
96*14b24e2bSVaishali Kulkarni 	u8			ka_probe_cnt;
97*14b24e2bSVaishali Kulkarni 	u8			rt_cnt;
98*14b24e2bSVaishali Kulkarni 	u32			flow_label;
99*14b24e2bSVaishali Kulkarni 	u32			ka_timeout;
100*14b24e2bSVaishali Kulkarni 	u32			ka_interval;
101*14b24e2bSVaishali Kulkarni 	u32			max_rt_time;
102*14b24e2bSVaishali Kulkarni 	u32			initial_rcv_wnd;
103*14b24e2bSVaishali Kulkarni 	u8			ttl;
104*14b24e2bSVaishali Kulkarni 	u8			tos_or_tc;
105*14b24e2bSVaishali Kulkarni 	u16			remote_port;
106*14b24e2bSVaishali Kulkarni 	u16			local_port;
107*14b24e2bSVaishali Kulkarni 	u16			mss;
108*14b24e2bSVaishali Kulkarni 	u8			snd_wnd_scale;
109*14b24e2bSVaishali Kulkarni 	u8			rcv_wnd_scale;
110*14b24e2bSVaishali Kulkarni 	u16			da_timeout_value;
111*14b24e2bSVaishali Kulkarni 	u8			ack_frequency;
112*14b24e2bSVaishali Kulkarni 
113*14b24e2bSVaishali Kulkarni 	u8			update_flag;
114*14b24e2bSVaishali Kulkarni #define	ECORE_ISCSI_CONN_HD_EN		0x01
115*14b24e2bSVaishali Kulkarni #define	ECORE_ISCSI_CONN_DD_EN		0x02
116*14b24e2bSVaishali Kulkarni #define	ECORE_ISCSI_CONN_INITIAL_R2T	0x04
117*14b24e2bSVaishali Kulkarni #define	ECORE_ISCSI_CONN_IMMEDIATE_DATA	0x08
118*14b24e2bSVaishali Kulkarni 
119*14b24e2bSVaishali Kulkarni 	u8			default_cq;
120*14b24e2bSVaishali Kulkarni 	u32			max_seq_size;
121*14b24e2bSVaishali Kulkarni 	u32			max_recv_pdu_length;
122*14b24e2bSVaishali Kulkarni 	u32			max_send_pdu_length;
123*14b24e2bSVaishali Kulkarni 	u32			first_seq_length;
124*14b24e2bSVaishali Kulkarni 	u32			exp_stat_sn;
125*14b24e2bSVaishali Kulkarni 	u32			stat_sn;
126*14b24e2bSVaishali Kulkarni 	u16			physical_q0;
127*14b24e2bSVaishali Kulkarni 	u16			physical_q1;
128*14b24e2bSVaishali Kulkarni 	u8			abortive_dsconnect;
129*14b24e2bSVaishali Kulkarni };
130*14b24e2bSVaishali Kulkarni 
131*14b24e2bSVaishali Kulkarni #ifndef __EXTRACT__LINUX__
132*14b24e2bSVaishali Kulkarni struct ecore_iscsi_stats
133*14b24e2bSVaishali Kulkarni {
134*14b24e2bSVaishali Kulkarni 	u64 iscsi_rx_bytes_cnt;
135*14b24e2bSVaishali Kulkarni 	u64 iscsi_rx_packet_cnt;
136*14b24e2bSVaishali Kulkarni 	u64 iscsi_rx_new_ooo_isle_events_cnt;
137*14b24e2bSVaishali Kulkarni 	u32 iscsi_cmdq_threshold_cnt;
138*14b24e2bSVaishali Kulkarni 	u32 iscsi_rq_threshold_cnt;
139*14b24e2bSVaishali Kulkarni 	u32 iscsi_immq_threshold_cnt;
140*14b24e2bSVaishali Kulkarni 
141*14b24e2bSVaishali Kulkarni 	u64 iscsi_rx_dropped_pdus_task_not_valid;
142*14b24e2bSVaishali Kulkarni 
143*14b24e2bSVaishali Kulkarni 	u64 iscsi_rx_data_pdu_cnt;
144*14b24e2bSVaishali Kulkarni 	u64 iscsi_rx_r2t_pdu_cnt;
145*14b24e2bSVaishali Kulkarni 	u64 iscsi_rx_total_pdu_cnt;
146*14b24e2bSVaishali Kulkarni 
147*14b24e2bSVaishali Kulkarni 	u64 iscsi_tx_go_to_slow_start_event_cnt;
148*14b24e2bSVaishali Kulkarni 	u64 iscsi_tx_fast_retransmit_event_cnt;
149*14b24e2bSVaishali Kulkarni 
150*14b24e2bSVaishali Kulkarni 	u64 iscsi_tx_data_pdu_cnt;
151*14b24e2bSVaishali Kulkarni 	u64 iscsi_tx_r2t_pdu_cnt;
152*14b24e2bSVaishali Kulkarni 	u64 iscsi_tx_total_pdu_cnt;
153*14b24e2bSVaishali Kulkarni 
154*14b24e2bSVaishali Kulkarni 	u64 iscsi_tx_bytes_cnt;
155*14b24e2bSVaishali Kulkarni 	u64 iscsi_tx_packet_cnt;
156*14b24e2bSVaishali Kulkarni };
157*14b24e2bSVaishali Kulkarni #endif
158*14b24e2bSVaishali Kulkarni 
159*14b24e2bSVaishali Kulkarni /**
160*14b24e2bSVaishali Kulkarni  * @brief ecore_iscsi_acquire_connection - allocate resources,
161*14b24e2bSVaishali Kulkarni  *        provides connecion handle (CID)as out parameter.
162*14b24e2bSVaishali Kulkarni  *
163*14b24e2bSVaishali Kulkarni  * @param p_path
164*14b24e2bSVaishali Kulkarni  * @param p_conn  partially initialized incoming container of
165*14b24e2bSVaishali Kulkarni  *                iSCSI connection data
166*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
167*14b24e2bSVaishali Kulkarni  */
168*14b24e2bSVaishali Kulkarni enum _ecore_status_t
169*14b24e2bSVaishali Kulkarni ecore_iscsi_acquire_connection(struct ecore_hwfn *p_hwfn,
170*14b24e2bSVaishali Kulkarni 			       struct ecore_iscsi_conn *p_in_conn,
171*14b24e2bSVaishali Kulkarni 			       struct ecore_iscsi_conn **p_out_conn);
172*14b24e2bSVaishali Kulkarni 
173*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_iscsi_get_db_addr(struct ecore_hwfn *p_hwfn,
174*14b24e2bSVaishali Kulkarni 					 u32 cid);
175*14b24e2bSVaishali Kulkarni 
176*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_iscsi_get_global_cmdq_cons(struct ecore_hwfn *p_hwfn,
177*14b24e2bSVaishali Kulkarni 						  u8 relative_q_id);
178*14b24e2bSVaishali Kulkarni 
179*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_iscsi_get_primary_bdq_prod(struct ecore_hwfn *p_hwfn,
180*14b24e2bSVaishali Kulkarni 						  u8 bdq_id);
181*14b24e2bSVaishali Kulkarni 
182*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_iscsi_get_secondary_bdq_prod(struct ecore_hwfn *p_hwfn,
183*14b24e2bSVaishali Kulkarni 						    u8 bdq_id);
184*14b24e2bSVaishali Kulkarni 
185*14b24e2bSVaishali Kulkarni /**
186*14b24e2bSVaishali Kulkarni  * @brief ecore_iscsi_offload_connection - offload previously
187*14b24e2bSVaishali Kulkarni  *        allocated iSCSI connection
188*14b24e2bSVaishali Kulkarni  *
189*14b24e2bSVaishali Kulkarni  * @param p_path
190*14b24e2bSVaishali Kulkarni  * @param p_conn  container of iSCSI connection data
191*14b24e2bSVaishali Kulkarni  *
192*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
193*14b24e2bSVaishali Kulkarni  */
194*14b24e2bSVaishali Kulkarni enum _ecore_status_t
195*14b24e2bSVaishali Kulkarni ecore_iscsi_offload_connection(struct ecore_hwfn *p_hwfn,
196*14b24e2bSVaishali Kulkarni 			       struct ecore_iscsi_conn *p_conn);
197*14b24e2bSVaishali Kulkarni 
198*14b24e2bSVaishali Kulkarni /**
199*14b24e2bSVaishali Kulkarni  * @brief ecore_iscsi_release_connection - deletes connecton
200*14b24e2bSVaishali Kulkarni  *        resources (incliding container of iSCSI connection
201*14b24e2bSVaishali Kulkarni  *        data)
202*14b24e2bSVaishali Kulkarni  *
203*14b24e2bSVaishali Kulkarni  * @param p_path
204*14b24e2bSVaishali Kulkarni  * @param p_conn  container of iSCSI connection data
205*14b24e2bSVaishali Kulkarni  */
206*14b24e2bSVaishali Kulkarni void ecore_iscsi_release_connection(struct ecore_hwfn *p_hwfn,
207*14b24e2bSVaishali Kulkarni 				    struct ecore_iscsi_conn *p_conn);
208*14b24e2bSVaishali Kulkarni 
209*14b24e2bSVaishali Kulkarni /**
210*14b24e2bSVaishali Kulkarni  * @brief ecore_iscsi_terminate_connection - destroys previously
211*14b24e2bSVaishali Kulkarni  *        offloaded iSCSI connection
212*14b24e2bSVaishali Kulkarni  *
213*14b24e2bSVaishali Kulkarni  * @param p_path
214*14b24e2bSVaishali Kulkarni  * @param p_conn  container of iSCSI connection data
215*14b24e2bSVaishali Kulkarni  *
216*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
217*14b24e2bSVaishali Kulkarni  */
218*14b24e2bSVaishali Kulkarni enum _ecore_status_t
219*14b24e2bSVaishali Kulkarni ecore_iscsi_terminate_connection(struct ecore_hwfn *p_hwfn,
220*14b24e2bSVaishali Kulkarni 				 struct ecore_iscsi_conn *p_conn);
221*14b24e2bSVaishali Kulkarni 
222*14b24e2bSVaishali Kulkarni 
223*14b24e2bSVaishali Kulkarni /**
224*14b24e2bSVaishali Kulkarni  * @brief ecore_iscsi_update_connection - updates previously
225*14b24e2bSVaishali Kulkarni  *        offloaded iSCSI connection
226*14b24e2bSVaishali Kulkarni  *
227*14b24e2bSVaishali Kulkarni  *
228*14b24e2bSVaishali Kulkarni  * @param p_path
229*14b24e2bSVaishali Kulkarni  * @param p_conn  container of iSCSI connection data
230*14b24e2bSVaishali Kulkarni  *
231*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
232*14b24e2bSVaishali Kulkarni  */
233*14b24e2bSVaishali Kulkarni enum _ecore_status_t
234*14b24e2bSVaishali Kulkarni ecore_iscsi_update_connection(struct ecore_hwfn *p_hwfn,
235*14b24e2bSVaishali Kulkarni 			      struct ecore_iscsi_conn *p_conn);
236*14b24e2bSVaishali Kulkarni 
237*14b24e2bSVaishali Kulkarni /**
238*14b24e2bSVaishali Kulkarni  * @brief ecore_iscsi_mac_update_connection - updates remote MAC for previously
239*14b24e2bSVaishali Kulkarni  *        offloaded iSCSI connection
240*14b24e2bSVaishali Kulkarni  *
241*14b24e2bSVaishali Kulkarni  *
242*14b24e2bSVaishali Kulkarni  * @param p_path
243*14b24e2bSVaishali Kulkarni  * @param p_conn  container of iSCSI connection data
244*14b24e2bSVaishali Kulkarni  *
245*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
246*14b24e2bSVaishali Kulkarni  */
247*14b24e2bSVaishali Kulkarni enum _ecore_status_t
248*14b24e2bSVaishali Kulkarni ecore_iscsi_update_remote_mac(struct ecore_hwfn *p_hwfn,
249*14b24e2bSVaishali Kulkarni 			      struct ecore_iscsi_conn *p_conn);
250*14b24e2bSVaishali Kulkarni 
251*14b24e2bSVaishali Kulkarni /**
252*14b24e2bSVaishali Kulkarni  * @brief ecore_iscsi_clear_connection_sq - clear SQ
253*14b24e2bSVaishali Kulkarni  *        offloaded iSCSI connection
254*14b24e2bSVaishali Kulkarni  *
255*14b24e2bSVaishali Kulkarni  *
256*14b24e2bSVaishali Kulkarni  * @param p_path
257*14b24e2bSVaishali Kulkarni  * @param p_conn  container of iSCSI connection data
258*14b24e2bSVaishali Kulkarni  *
259*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
260*14b24e2bSVaishali Kulkarni  */
261*14b24e2bSVaishali Kulkarni enum _ecore_status_t
262*14b24e2bSVaishali Kulkarni ecore_iscsi_clear_connection_sq(struct ecore_hwfn *p_hwfn,
263*14b24e2bSVaishali Kulkarni 				struct ecore_iscsi_conn *p_conn);
264*14b24e2bSVaishali Kulkarni 
265*14b24e2bSVaishali Kulkarni /**
266*14b24e2bSVaishali Kulkarni  * @brief ecore_sp_iscsi_func_start
267*14b24e2bSVaishali Kulkarni  *
268*14b24e2bSVaishali Kulkarni  * This ramrod inits iSCSI functionality in FW
269*14b24e2bSVaishali Kulkarni  *
270*14b24e2bSVaishali Kulkarni  * @param p_path
271*14b24e2bSVaishali Kulkarni  * @param comp_mode
272*14b24e2bSVaishali Kulkarni  * @param comp_addr
273*14b24e2bSVaishali Kulkarni  *
274*14b24e2bSVaishali Kulkarni  * @return enum _ecore_status_t
275*14b24e2bSVaishali Kulkarni  */
276*14b24e2bSVaishali Kulkarni enum _ecore_status_t
277*14b24e2bSVaishali Kulkarni ecore_sp_iscsi_func_start(struct ecore_hwfn *p_hwfn,
278*14b24e2bSVaishali Kulkarni 			  enum spq_mode comp_mode,
279*14b24e2bSVaishali Kulkarni 			  struct ecore_spq_comp_cb *p_comp_addr,
280*14b24e2bSVaishali Kulkarni 			  void *async_event_context,
281*14b24e2bSVaishali Kulkarni 			  iscsi_event_cb_t async_event_cb);
282*14b24e2bSVaishali Kulkarni 
283*14b24e2bSVaishali Kulkarni enum _ecore_status_t
284*14b24e2bSVaishali Kulkarni ecore_sp_iscsi_func_stop(struct ecore_hwfn *p_hwfn,
285*14b24e2bSVaishali Kulkarni 			 enum spq_mode comp_mode,
286*14b24e2bSVaishali Kulkarni 			 struct ecore_spq_comp_cb *p_comp_addr);
287*14b24e2bSVaishali Kulkarni 
288*14b24e2bSVaishali Kulkarni enum _ecore_status_t
289*14b24e2bSVaishali Kulkarni ecore_iscsi_get_stats(struct ecore_hwfn *p_hwfn,
290*14b24e2bSVaishali Kulkarni 		      struct ecore_iscsi_stats *stats);
291*14b24e2bSVaishali Kulkarni 
292*14b24e2bSVaishali Kulkarni #endif
293