1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33#ifndef _QED_ISCSI_IF_H
34#define _QED_ISCSI_IF_H
35#include <linux/types.h>
36#include <linux/qed/qed_if.h>
37
38typedef int (*iscsi_event_cb_t) (void *context,
39 u8 fw_event_code, void *fw_handle);
40struct qed_iscsi_stats {
41 u64 iscsi_rx_bytes_cnt;
42 u64 iscsi_rx_packet_cnt;
43 u64 iscsi_rx_new_ooo_isle_events_cnt;
44 u32 iscsi_cmdq_threshold_cnt;
45 u32 iscsi_rq_threshold_cnt;
46 u32 iscsi_immq_threshold_cnt;
47
48 u64 iscsi_rx_dropped_pdus_task_not_valid;
49
50 u64 iscsi_rx_data_pdu_cnt;
51 u64 iscsi_rx_r2t_pdu_cnt;
52 u64 iscsi_rx_total_pdu_cnt;
53
54 u64 iscsi_tx_go_to_slow_start_event_cnt;
55 u64 iscsi_tx_fast_retransmit_event_cnt;
56
57 u64 iscsi_tx_data_pdu_cnt;
58 u64 iscsi_tx_r2t_pdu_cnt;
59 u64 iscsi_tx_total_pdu_cnt;
60
61 u64 iscsi_tx_bytes_cnt;
62 u64 iscsi_tx_packet_cnt;
63};
64
65struct qed_dev_iscsi_info {
66 struct qed_dev_info common;
67
68 void __iomem *primary_dbq_rq_addr;
69 void __iomem *secondary_bdq_rq_addr;
70
71 u8 num_cqs;
72};
73
74struct qed_iscsi_id_params {
75 u8 mac[ETH_ALEN];
76 u32 ip[4];
77 u16 port;
78};
79
80struct qed_iscsi_params_offload {
81 u8 layer_code;
82 dma_addr_t sq_pbl_addr;
83 u32 initial_ack;
84
85 struct qed_iscsi_id_params src;
86 struct qed_iscsi_id_params dst;
87 u16 vlan_id;
88 u8 tcp_flags;
89 u8 ip_version;
90 u8 default_cq;
91
92 u8 ka_max_probe_cnt;
93 u8 dup_ack_theshold;
94 u32 rcv_next;
95 u32 snd_una;
96 u32 snd_next;
97 u32 snd_max;
98 u32 snd_wnd;
99 u32 rcv_wnd;
100 u32 snd_wl1;
101 u32 cwnd;
102 u32 ss_thresh;
103 u16 srtt;
104 u16 rtt_var;
105 u32 ts_time;
106 u32 ts_recent;
107 u32 ts_recent_age;
108 u32 total_rt;
109 u32 ka_timeout_delta;
110 u32 rt_timeout_delta;
111 u8 dup_ack_cnt;
112 u8 snd_wnd_probe_cnt;
113 u8 ka_probe_cnt;
114 u8 rt_cnt;
115 u32 flow_label;
116 u32 ka_timeout;
117 u32 ka_interval;
118 u32 max_rt_time;
119 u32 initial_rcv_wnd;
120 u8 ttl;
121 u8 tos_or_tc;
122 u16 remote_port;
123 u16 local_port;
124 u16 mss;
125 u8 snd_wnd_scale;
126 u8 rcv_wnd_scale;
127 u32 ts_ticks_per_second;
128 u16 da_timeout_value;
129 u8 ack_frequency;
130};
131
132struct qed_iscsi_params_update {
133 u8 update_flag;
134#define QED_ISCSI_CONN_HD_EN BIT(0)
135#define QED_ISCSI_CONN_DD_EN BIT(1)
136#define QED_ISCSI_CONN_INITIAL_R2T BIT(2)
137#define QED_ISCSI_CONN_IMMEDIATE_DATA BIT(3)
138
139 u32 max_seq_size;
140 u32 max_recv_pdu_length;
141 u32 max_send_pdu_length;
142 u32 first_seq_length;
143 u32 exp_stat_sn;
144};
145
146#define MAX_TID_BLOCKS_ISCSI (512)
147struct qed_iscsi_tid {
148 u32 size;
149 u32 num_tids_per_block;
150 u8 *blocks[MAX_TID_BLOCKS_ISCSI];
151};
152
153struct qed_iscsi_cb_ops {
154 struct qed_common_cb_ops common;
155};
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219struct qed_iscsi_ops {
220 const struct qed_common_ops *common;
221
222 const struct qed_ll2_ops *ll2;
223
224 int (*fill_dev_info)(struct qed_dev *cdev,
225 struct qed_dev_iscsi_info *info);
226
227 void (*register_ops)(struct qed_dev *cdev,
228 struct qed_iscsi_cb_ops *ops, void *cookie);
229
230 int (*start)(struct qed_dev *cdev,
231 struct qed_iscsi_tid *tasks,
232 void *event_context, iscsi_event_cb_t async_event_cb);
233
234 int (*stop)(struct qed_dev *cdev);
235
236 int (*acquire_conn)(struct qed_dev *cdev,
237 u32 *handle,
238 u32 *fw_cid, void __iomem **p_doorbell);
239
240 int (*release_conn)(struct qed_dev *cdev, u32 handle);
241
242 int (*offload_conn)(struct qed_dev *cdev,
243 u32 handle,
244 struct qed_iscsi_params_offload *conn_info);
245
246 int (*update_conn)(struct qed_dev *cdev,
247 u32 handle,
248 struct qed_iscsi_params_update *conn_info);
249
250 int (*destroy_conn)(struct qed_dev *cdev, u32 handle, u8 abrt_conn);
251
252 int (*clear_sq)(struct qed_dev *cdev, u32 handle);
253
254 int (*get_stats)(struct qed_dev *cdev,
255 struct qed_iscsi_stats *stats);
256
257 int (*change_mac)(struct qed_dev *cdev, u32 handle, const u8 *mac);
258};
259
260const struct qed_iscsi_ops *qed_get_iscsi_ops(void);
261void qed_put_iscsi_ops(void);
262#endif
263