]>
Commit | Line | Data |
---|---|---|
a36c61f9 KG |
1 | /* |
2 | * Copyright (c) 2005-2010 Brocade Communications Systems, Inc. | |
3 | * All rights reserved | |
4 | * www.brocade.com | |
5 | * | |
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify it | |
9 | * under the terms of the GNU General Public License (GPL) Version 2 as | |
10 | * published by the Free Software Foundation | |
11 | * | |
12 | * This program is distributed in the hope that it will be useful, but | |
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | * General Public License for more details. | |
16 | */ | |
17 | ||
18 | #ifndef __BFI_MS_H__ | |
19 | #define __BFI_MS_H__ | |
20 | ||
21 | #include "bfi.h" | |
22 | #include "bfa_fc.h" | |
23 | #include "bfa_defs_svc.h" | |
24 | ||
25 | #pragma pack(1) | |
26 | ||
27 | enum bfi_iocfc_h2i_msgs { | |
28 | BFI_IOCFC_H2I_CFG_REQ = 1, | |
29 | BFI_IOCFC_H2I_SET_INTR_REQ = 2, | |
30 | BFI_IOCFC_H2I_UPDATEQ_REQ = 3, | |
31 | }; | |
32 | ||
33 | enum bfi_iocfc_i2h_msgs { | |
34 | BFI_IOCFC_I2H_CFG_REPLY = BFA_I2HM(1), | |
35 | BFI_IOCFC_I2H_UPDATEQ_RSP = BFA_I2HM(3), | |
36 | }; | |
37 | ||
38 | struct bfi_iocfc_cfg_s { | |
39 | u8 num_cqs; /* Number of CQs to be used */ | |
40 | u8 sense_buf_len; /* SCSI sense length */ | |
41 | u16 rsvd_1; | |
42 | u32 endian_sig; /* endian signature of host */ | |
43 | ||
acdc79a6 | 44 | /* |
a36c61f9 KG |
45 | * Request and response circular queue base addresses, size and |
46 | * shadow index pointers. | |
47 | */ | |
48 | union bfi_addr_u req_cq_ba[BFI_IOC_MAX_CQS]; | |
49 | union bfi_addr_u req_shadow_ci[BFI_IOC_MAX_CQS]; | |
50444a34 | 50 | __be16 req_cq_elems[BFI_IOC_MAX_CQS]; |
a36c61f9 KG |
51 | union bfi_addr_u rsp_cq_ba[BFI_IOC_MAX_CQS]; |
52 | union bfi_addr_u rsp_shadow_pi[BFI_IOC_MAX_CQS]; | |
50444a34 | 53 | __be16 rsp_cq_elems[BFI_IOC_MAX_CQS]; |
a36c61f9 KG |
54 | |
55 | union bfi_addr_u stats_addr; /* DMA-able address for stats */ | |
56 | union bfi_addr_u cfgrsp_addr; /* config response dma address */ | |
57 | union bfi_addr_u ioim_snsbase; /* IO sense buffer base address */ | |
58 | struct bfa_iocfc_intr_attr_s intr_attr; /* IOC interrupt attributes */ | |
59 | }; | |
60 | ||
acdc79a6 | 61 | /* |
a36c61f9 KG |
62 | * Boot target wwn information for this port. This contains either the stored |
63 | * or discovered boot target port wwns for the port. | |
64 | */ | |
65 | struct bfi_iocfc_bootwwns { | |
66 | wwn_t wwn[BFA_BOOT_BOOTLUN_MAX]; | |
67 | u8 nwwns; | |
68 | u8 rsvd[7]; | |
69 | }; | |
70 | ||
71 | struct bfi_iocfc_cfgrsp_s { | |
72 | struct bfa_iocfc_fwcfg_s fwcfg; | |
73 | struct bfa_iocfc_intr_attr_s intr_attr; | |
74 | struct bfi_iocfc_bootwwns bootwwns; | |
75 | struct bfi_pbc_s pbc_cfg; | |
76 | }; | |
77 | ||
acdc79a6 | 78 | /* |
a36c61f9 KG |
79 | * BFI_IOCFC_H2I_CFG_REQ message |
80 | */ | |
81 | struct bfi_iocfc_cfg_req_s { | |
82 | struct bfi_mhdr_s mh; | |
83 | union bfi_addr_u ioc_cfg_dma_addr; | |
84 | }; | |
85 | ||
86 | ||
acdc79a6 | 87 | /* |
a36c61f9 KG |
88 | * BFI_IOCFC_I2H_CFG_REPLY message |
89 | */ | |
90 | struct bfi_iocfc_cfg_reply_s { | |
91 | struct bfi_mhdr_s mh; /* Common msg header */ | |
92 | u8 cfg_success; /* cfg reply status */ | |
93 | u8 lpu_bm; /* LPUs assigned for this IOC */ | |
94 | u8 rsvd[2]; | |
95 | }; | |
96 | ||
97 | ||
acdc79a6 | 98 | /* |
a36c61f9 KG |
99 | * BFI_IOCFC_H2I_SET_INTR_REQ message |
100 | */ | |
101 | struct bfi_iocfc_set_intr_req_s { | |
102 | struct bfi_mhdr_s mh; /* common msg header */ | |
103 | u8 coalesce; /* enable intr coalescing */ | |
104 | u8 rsvd[3]; | |
50444a34 M |
105 | __be16 delay; /* delay timer 0..1125us */ |
106 | __be16 latency; /* latency timer 0..225us */ | |
a36c61f9 KG |
107 | }; |
108 | ||
109 | ||
acdc79a6 | 110 | /* |
a36c61f9 KG |
111 | * BFI_IOCFC_H2I_UPDATEQ_REQ message |
112 | */ | |
113 | struct bfi_iocfc_updateq_req_s { | |
114 | struct bfi_mhdr_s mh; /* common msg header */ | |
115 | u32 reqq_ba; /* reqq base addr */ | |
116 | u32 rspq_ba; /* rspq base addr */ | |
117 | u32 reqq_sci; /* reqq shadow ci */ | |
118 | u32 rspq_spi; /* rspq shadow pi */ | |
119 | }; | |
120 | ||
121 | ||
acdc79a6 | 122 | /* |
a36c61f9 KG |
123 | * BFI_IOCFC_I2H_UPDATEQ_RSP message |
124 | */ | |
125 | struct bfi_iocfc_updateq_rsp_s { | |
126 | struct bfi_mhdr_s mh; /* common msg header */ | |
127 | u8 status; /* updateq status */ | |
128 | u8 rsvd[3]; | |
129 | }; | |
130 | ||
131 | ||
acdc79a6 | 132 | /* |
a36c61f9 KG |
133 | * H2I Messages |
134 | */ | |
135 | union bfi_iocfc_h2i_msg_u { | |
136 | struct bfi_mhdr_s mh; | |
137 | struct bfi_iocfc_cfg_req_s cfg_req; | |
138 | struct bfi_iocfc_updateq_req_s updateq_req; | |
139 | u32 mboxmsg[BFI_IOC_MSGSZ]; | |
140 | }; | |
141 | ||
142 | ||
acdc79a6 | 143 | /* |
a36c61f9 KG |
144 | * I2H Messages |
145 | */ | |
146 | union bfi_iocfc_i2h_msg_u { | |
147 | struct bfi_mhdr_s mh; | |
148 | struct bfi_iocfc_cfg_reply_s cfg_reply; | |
149 | struct bfi_iocfc_updateq_rsp_s updateq_rsp; | |
150 | u32 mboxmsg[BFI_IOC_MSGSZ]; | |
151 | }; | |
152 | ||
153 | ||
154 | enum bfi_fcport_h2i { | |
155 | BFI_FCPORT_H2I_ENABLE_REQ = (1), | |
156 | BFI_FCPORT_H2I_DISABLE_REQ = (2), | |
157 | BFI_FCPORT_H2I_SET_SVC_PARAMS_REQ = (3), | |
158 | BFI_FCPORT_H2I_STATS_GET_REQ = (4), | |
159 | BFI_FCPORT_H2I_STATS_CLEAR_REQ = (5), | |
160 | }; | |
161 | ||
162 | ||
163 | enum bfi_fcport_i2h { | |
164 | BFI_FCPORT_I2H_ENABLE_RSP = BFA_I2HM(1), | |
165 | BFI_FCPORT_I2H_DISABLE_RSP = BFA_I2HM(2), | |
166 | BFI_FCPORT_I2H_SET_SVC_PARAMS_RSP = BFA_I2HM(3), | |
167 | BFI_FCPORT_I2H_STATS_GET_RSP = BFA_I2HM(4), | |
168 | BFI_FCPORT_I2H_STATS_CLEAR_RSP = BFA_I2HM(5), | |
169 | BFI_FCPORT_I2H_EVENT = BFA_I2HM(6), | |
170 | BFI_FCPORT_I2H_TRUNK_SCN = BFA_I2HM(7), | |
171 | BFI_FCPORT_I2H_ENABLE_AEN = BFA_I2HM(8), | |
172 | BFI_FCPORT_I2H_DISABLE_AEN = BFA_I2HM(9), | |
173 | }; | |
174 | ||
175 | ||
acdc79a6 | 176 | /* |
a36c61f9 KG |
177 | * Generic REQ type |
178 | */ | |
179 | struct bfi_fcport_req_s { | |
180 | struct bfi_mhdr_s mh; /* msg header */ | |
181 | u32 msgtag; /* msgtag for reply */ | |
182 | }; | |
183 | ||
acdc79a6 | 184 | /* |
a36c61f9 KG |
185 | * Generic RSP type |
186 | */ | |
187 | struct bfi_fcport_rsp_s { | |
188 | struct bfi_mhdr_s mh; /* common msg header */ | |
189 | u8 status; /* port enable status */ | |
190 | u8 rsvd[3]; | |
f3a060ca KG |
191 | struct bfa_port_cfg_s port_cfg;/* port configuration */ |
192 | u32 msgtag; /* msgtag for reply */ | |
a36c61f9 KG |
193 | }; |
194 | ||
acdc79a6 | 195 | /* |
a36c61f9 KG |
196 | * BFI_FCPORT_H2I_ENABLE_REQ |
197 | */ | |
198 | struct bfi_fcport_enable_req_s { | |
199 | struct bfi_mhdr_s mh; /* msg header */ | |
200 | u32 rsvd1; | |
201 | wwn_t nwwn; /* node wwn of physical port */ | |
202 | wwn_t pwwn; /* port wwn of physical port */ | |
203 | struct bfa_port_cfg_s port_cfg; /* port configuration */ | |
204 | union bfi_addr_u stats_dma_addr; /* DMA address for stats */ | |
205 | u32 msgtag; /* msgtag for reply */ | |
f3a060ca KG |
206 | u8 use_flash_cfg; /* get prot cfg from flash */ |
207 | u8 rsvd2[3]; | |
a36c61f9 KG |
208 | }; |
209 | ||
acdc79a6 | 210 | /* |
a36c61f9 KG |
211 | * BFI_FCPORT_H2I_SET_SVC_PARAMS_REQ |
212 | */ | |
213 | struct bfi_fcport_set_svc_params_req_s { | |
214 | struct bfi_mhdr_s mh; /* msg header */ | |
50444a34 | 215 | __be16 tx_bbcredit; /* Tx credits */ |
a36c61f9 KG |
216 | u16 rsvd; |
217 | }; | |
218 | ||
acdc79a6 | 219 | /* |
a36c61f9 KG |
220 | * BFI_FCPORT_I2H_EVENT |
221 | */ | |
222 | struct bfi_fcport_event_s { | |
223 | struct bfi_mhdr_s mh; /* common msg header */ | |
224 | struct bfa_port_link_s link_state; | |
225 | }; | |
226 | ||
acdc79a6 | 227 | /* |
a36c61f9 KG |
228 | * BFI_FCPORT_I2H_TRUNK_SCN |
229 | */ | |
230 | struct bfi_fcport_trunk_link_s { | |
231 | wwn_t trunk_wwn; | |
232 | u8 fctl; /* bfa_trunk_link_fctl_t */ | |
233 | u8 state; /* bfa_trunk_link_state_t */ | |
234 | u8 speed; /* bfa_port_speed_t */ | |
235 | u8 rsvd; | |
50444a34 | 236 | __be32 deskew; |
a36c61f9 KG |
237 | }; |
238 | ||
239 | #define BFI_FCPORT_MAX_LINKS 2 | |
240 | struct bfi_fcport_trunk_scn_s { | |
241 | struct bfi_mhdr_s mh; | |
242 | u8 trunk_state; /* bfa_trunk_state_t */ | |
243 | u8 trunk_speed; /* bfa_port_speed_t */ | |
244 | u8 rsvd_a[2]; | |
245 | struct bfi_fcport_trunk_link_s tlink[BFI_FCPORT_MAX_LINKS]; | |
246 | }; | |
247 | ||
acdc79a6 | 248 | /* |
a36c61f9 KG |
249 | * fcport H2I message |
250 | */ | |
251 | union bfi_fcport_h2i_msg_u { | |
252 | struct bfi_mhdr_s *mhdr; | |
253 | struct bfi_fcport_enable_req_s *penable; | |
254 | struct bfi_fcport_req_s *pdisable; | |
255 | struct bfi_fcport_set_svc_params_req_s *psetsvcparams; | |
256 | struct bfi_fcport_req_s *pstatsget; | |
257 | struct bfi_fcport_req_s *pstatsclear; | |
258 | }; | |
259 | ||
acdc79a6 | 260 | /* |
a36c61f9 KG |
261 | * fcport I2H message |
262 | */ | |
263 | union bfi_fcport_i2h_msg_u { | |
264 | struct bfi_msg_s *msg; | |
265 | struct bfi_fcport_rsp_s *penable_rsp; | |
266 | struct bfi_fcport_rsp_s *pdisable_rsp; | |
267 | struct bfi_fcport_rsp_s *psetsvcparams_rsp; | |
268 | struct bfi_fcport_rsp_s *pstatsget_rsp; | |
269 | struct bfi_fcport_rsp_s *pstatsclear_rsp; | |
270 | struct bfi_fcport_event_s *event; | |
271 | struct bfi_fcport_trunk_scn_s *trunk_scn; | |
272 | }; | |
273 | ||
274 | enum bfi_fcxp_h2i { | |
275 | BFI_FCXP_H2I_SEND_REQ = 1, | |
276 | }; | |
277 | ||
278 | enum bfi_fcxp_i2h { | |
279 | BFI_FCXP_I2H_SEND_RSP = BFA_I2HM(1), | |
280 | }; | |
281 | ||
282 | #define BFA_FCXP_MAX_SGES 2 | |
283 | ||
acdc79a6 | 284 | /* |
a36c61f9 KG |
285 | * FCXP send request structure |
286 | */ | |
287 | struct bfi_fcxp_send_req_s { | |
288 | struct bfi_mhdr_s mh; /* Common msg header */ | |
50444a34 M |
289 | __be16 fcxp_tag; /* driver request tag */ |
290 | __be16 max_frmsz; /* max send frame size */ | |
291 | __be16 vf_id; /* vsan tag if applicable */ | |
a36c61f9 KG |
292 | u16 rport_fw_hndl; /* FW Handle for the remote port */ |
293 | u8 class; /* FC class used for req/rsp */ | |
294 | u8 rsp_timeout; /* timeout in secs, 0-no response */ | |
295 | u8 cts; /* continue sequence */ | |
296 | u8 lp_tag; /* lport tag */ | |
297 | struct fchs_s fchs; /* request FC header structure */ | |
50444a34 M |
298 | __be32 req_len; /* request payload length */ |
299 | __be32 rsp_maxlen; /* max response length expected */ | |
a36c61f9 KG |
300 | struct bfi_sge_s req_sge[BFA_FCXP_MAX_SGES]; /* request buf */ |
301 | struct bfi_sge_s rsp_sge[BFA_FCXP_MAX_SGES]; /* response buf */ | |
302 | }; | |
303 | ||
acdc79a6 | 304 | /* |
a36c61f9 KG |
305 | * FCXP send response structure |
306 | */ | |
307 | struct bfi_fcxp_send_rsp_s { | |
308 | struct bfi_mhdr_s mh; /* Common msg header */ | |
50444a34 | 309 | __be16 fcxp_tag; /* send request tag */ |
a36c61f9 KG |
310 | u8 req_status; /* request status */ |
311 | u8 rsvd; | |
50444a34 M |
312 | __be32 rsp_len; /* actual response length */ |
313 | __be32 residue_len; /* residual response length */ | |
a36c61f9 KG |
314 | struct fchs_s fchs; /* response FC header structure */ |
315 | }; | |
316 | ||
317 | enum bfi_uf_h2i { | |
318 | BFI_UF_H2I_BUF_POST = 1, | |
319 | }; | |
320 | ||
321 | enum bfi_uf_i2h { | |
322 | BFI_UF_I2H_FRM_RCVD = BFA_I2HM(1), | |
323 | }; | |
324 | ||
325 | #define BFA_UF_MAX_SGES 2 | |
326 | ||
327 | struct bfi_uf_buf_post_s { | |
328 | struct bfi_mhdr_s mh; /* Common msg header */ | |
329 | u16 buf_tag; /* buffer tag */ | |
50444a34 | 330 | __be16 buf_len; /* total buffer length */ |
a36c61f9 KG |
331 | struct bfi_sge_s sge[BFA_UF_MAX_SGES]; /* buffer DMA SGEs */ |
332 | }; | |
333 | ||
334 | struct bfi_uf_frm_rcvd_s { | |
335 | struct bfi_mhdr_s mh; /* Common msg header */ | |
336 | u16 buf_tag; /* buffer tag */ | |
337 | u16 rsvd; | |
338 | u16 frm_len; /* received frame length */ | |
339 | u16 xfr_len; /* tranferred length */ | |
340 | }; | |
341 | ||
342 | enum bfi_lps_h2i_msgs { | |
343 | BFI_LPS_H2I_LOGIN_REQ = 1, | |
344 | BFI_LPS_H2I_LOGOUT_REQ = 2, | |
b704495c | 345 | BFI_LPS_H2I_N2N_PID_REQ = 3, |
a36c61f9 KG |
346 | }; |
347 | ||
348 | enum bfi_lps_i2h_msgs { | |
349 | BFI_LPS_H2I_LOGIN_RSP = BFA_I2HM(1), | |
350 | BFI_LPS_H2I_LOGOUT_RSP = BFA_I2HM(2), | |
351 | BFI_LPS_H2I_CVL_EVENT = BFA_I2HM(3), | |
352 | }; | |
353 | ||
354 | struct bfi_lps_login_req_s { | |
355 | struct bfi_mhdr_s mh; /* common msg header */ | |
356 | u8 lp_tag; | |
357 | u8 alpa; | |
50444a34 | 358 | __be16 pdu_size; |
a36c61f9 KG |
359 | wwn_t pwwn; |
360 | wwn_t nwwn; | |
361 | u8 fdisc; | |
362 | u8 auth_en; | |
363 | u8 rsvd[2]; | |
364 | }; | |
365 | ||
366 | struct bfi_lps_login_rsp_s { | |
367 | struct bfi_mhdr_s mh; /* common msg header */ | |
368 | u8 lp_tag; | |
369 | u8 status; | |
370 | u8 lsrjt_rsn; | |
371 | u8 lsrjt_expl; | |
372 | wwn_t port_name; | |
373 | wwn_t node_name; | |
50444a34 | 374 | __be16 bb_credit; |
a36c61f9 KG |
375 | u8 f_port; |
376 | u8 npiv_en; | |
377 | u32 lp_pid:24; | |
378 | u32 auth_req:8; | |
379 | mac_t lp_mac; | |
380 | mac_t fcf_mac; | |
381 | u8 ext_status; | |
382 | u8 brcd_switch; /* attached peer is brcd switch */ | |
383 | }; | |
384 | ||
385 | struct bfi_lps_logout_req_s { | |
386 | struct bfi_mhdr_s mh; /* common msg header */ | |
387 | u8 lp_tag; | |
388 | u8 rsvd[3]; | |
389 | wwn_t port_name; | |
390 | }; | |
391 | ||
392 | struct bfi_lps_logout_rsp_s { | |
393 | struct bfi_mhdr_s mh; /* common msg header */ | |
394 | u8 lp_tag; | |
395 | u8 status; | |
396 | u8 rsvd[2]; | |
397 | }; | |
398 | ||
399 | struct bfi_lps_cvl_event_s { | |
400 | struct bfi_mhdr_s mh; /* common msg header */ | |
401 | u8 lp_tag; | |
402 | u8 rsvd[3]; | |
403 | }; | |
404 | ||
b704495c KG |
405 | struct bfi_lps_n2n_pid_req_s { |
406 | struct bfi_mhdr_s mh; /* common msg header */ | |
407 | u8 lp_tag; | |
408 | u32 lp_pid:24; | |
409 | }; | |
410 | ||
a36c61f9 KG |
411 | union bfi_lps_h2i_msg_u { |
412 | struct bfi_mhdr_s *msg; | |
413 | struct bfi_lps_login_req_s *login_req; | |
414 | struct bfi_lps_logout_req_s *logout_req; | |
b704495c | 415 | struct bfi_lps_n2n_pid_req_s *n2n_pid_req; |
a36c61f9 KG |
416 | }; |
417 | ||
418 | union bfi_lps_i2h_msg_u { | |
419 | struct bfi_msg_s *msg; | |
420 | struct bfi_lps_login_rsp_s *login_rsp; | |
421 | struct bfi_lps_logout_rsp_s *logout_rsp; | |
422 | struct bfi_lps_cvl_event_s *cvl_event; | |
423 | }; | |
424 | ||
425 | enum bfi_rport_h2i_msgs { | |
426 | BFI_RPORT_H2I_CREATE_REQ = 1, | |
427 | BFI_RPORT_H2I_DELETE_REQ = 2, | |
428 | BFI_RPORT_H2I_SET_SPEED_REQ = 3, | |
429 | }; | |
430 | ||
431 | enum bfi_rport_i2h_msgs { | |
432 | BFI_RPORT_I2H_CREATE_RSP = BFA_I2HM(1), | |
433 | BFI_RPORT_I2H_DELETE_RSP = BFA_I2HM(2), | |
434 | BFI_RPORT_I2H_QOS_SCN = BFA_I2HM(3), | |
435 | }; | |
436 | ||
437 | struct bfi_rport_create_req_s { | |
438 | struct bfi_mhdr_s mh; /* common msg header */ | |
439 | u16 bfa_handle; /* host rport handle */ | |
50444a34 | 440 | __be16 max_frmsz; /* max rcv pdu size */ |
a36c61f9 KG |
441 | u32 pid:24, /* remote port ID */ |
442 | lp_tag:8; /* local port tag */ | |
443 | u32 local_pid:24, /* local port ID */ | |
444 | cisc:8; | |
445 | u8 fc_class; /* supported FC classes */ | |
446 | u8 vf_en; /* virtual fabric enable */ | |
447 | u16 vf_id; /* virtual fabric ID */ | |
448 | }; | |
449 | ||
450 | struct bfi_rport_create_rsp_s { | |
451 | struct bfi_mhdr_s mh; /* common msg header */ | |
452 | u8 status; /* rport creation status */ | |
453 | u8 rsvd[3]; | |
454 | u16 bfa_handle; /* host rport handle */ | |
455 | u16 fw_handle; /* firmware rport handle */ | |
456 | struct bfa_rport_qos_attr_s qos_attr; /* QoS Attributes */ | |
457 | }; | |
458 | ||
459 | struct bfa_rport_speed_req_s { | |
460 | struct bfi_mhdr_s mh; /* common msg header */ | |
461 | u16 fw_handle; /* firmware rport handle */ | |
462 | u8 speed; /* rport's speed via RPSC */ | |
463 | u8 rsvd; | |
464 | }; | |
465 | ||
466 | struct bfi_rport_delete_req_s { | |
467 | struct bfi_mhdr_s mh; /* common msg header */ | |
468 | u16 fw_handle; /* firmware rport handle */ | |
469 | u16 rsvd; | |
470 | }; | |
471 | ||
472 | struct bfi_rport_delete_rsp_s { | |
473 | struct bfi_mhdr_s mh; /* common msg header */ | |
474 | u16 bfa_handle; /* host rport handle */ | |
475 | u8 status; /* rport deletion status */ | |
476 | u8 rsvd; | |
477 | }; | |
478 | ||
479 | struct bfi_rport_qos_scn_s { | |
480 | struct bfi_mhdr_s mh; /* common msg header */ | |
481 | u16 bfa_handle; /* host rport handle */ | |
482 | u16 rsvd; | |
483 | struct bfa_rport_qos_attr_s old_qos_attr; /* Old QoS Attributes */ | |
484 | struct bfa_rport_qos_attr_s new_qos_attr; /* New QoS Attributes */ | |
485 | }; | |
486 | ||
487 | union bfi_rport_h2i_msg_u { | |
488 | struct bfi_msg_s *msg; | |
489 | struct bfi_rport_create_req_s *create_req; | |
490 | struct bfi_rport_delete_req_s *delete_req; | |
491 | struct bfi_rport_speed_req_s *speed_req; | |
492 | }; | |
493 | ||
494 | union bfi_rport_i2h_msg_u { | |
495 | struct bfi_msg_s *msg; | |
496 | struct bfi_rport_create_rsp_s *create_rsp; | |
497 | struct bfi_rport_delete_rsp_s *delete_rsp; | |
498 | struct bfi_rport_qos_scn_s *qos_scn_evt; | |
499 | }; | |
500 | ||
501 | /* | |
502 | * Initiator mode I-T nexus interface defines. | |
503 | */ | |
504 | ||
505 | enum bfi_itnim_h2i { | |
506 | BFI_ITNIM_H2I_CREATE_REQ = 1, /* i-t nexus creation */ | |
507 | BFI_ITNIM_H2I_DELETE_REQ = 2, /* i-t nexus deletion */ | |
508 | }; | |
509 | ||
510 | enum bfi_itnim_i2h { | |
511 | BFI_ITNIM_I2H_CREATE_RSP = BFA_I2HM(1), | |
512 | BFI_ITNIM_I2H_DELETE_RSP = BFA_I2HM(2), | |
513 | BFI_ITNIM_I2H_SLER_EVENT = BFA_I2HM(3), | |
514 | }; | |
515 | ||
516 | struct bfi_itnim_create_req_s { | |
517 | struct bfi_mhdr_s mh; /* common msg header */ | |
518 | u16 fw_handle; /* f/w handle for itnim */ | |
519 | u8 class; /* FC class for IO */ | |
520 | u8 seq_rec; /* sequence recovery support */ | |
521 | u8 msg_no; /* seq id of the msg */ | |
522 | }; | |
523 | ||
524 | struct bfi_itnim_create_rsp_s { | |
525 | struct bfi_mhdr_s mh; /* common msg header */ | |
526 | u16 bfa_handle; /* bfa handle for itnim */ | |
527 | u8 status; /* fcp request status */ | |
528 | u8 seq_id; /* seq id of the msg */ | |
529 | }; | |
530 | ||
531 | struct bfi_itnim_delete_req_s { | |
532 | struct bfi_mhdr_s mh; /* common msg header */ | |
533 | u16 fw_handle; /* f/w itnim handle */ | |
534 | u8 seq_id; /* seq id of the msg */ | |
535 | u8 rsvd; | |
536 | }; | |
537 | ||
538 | struct bfi_itnim_delete_rsp_s { | |
539 | struct bfi_mhdr_s mh; /* common msg header */ | |
540 | u16 bfa_handle; /* bfa handle for itnim */ | |
541 | u8 status; /* fcp request status */ | |
542 | u8 seq_id; /* seq id of the msg */ | |
543 | }; | |
544 | ||
545 | struct bfi_itnim_sler_event_s { | |
546 | struct bfi_mhdr_s mh; /* common msg header */ | |
547 | u16 bfa_handle; /* bfa handle for itnim */ | |
548 | u16 rsvd; | |
549 | }; | |
550 | ||
551 | union bfi_itnim_h2i_msg_u { | |
552 | struct bfi_itnim_create_req_s *create_req; | |
553 | struct bfi_itnim_delete_req_s *delete_req; | |
554 | struct bfi_msg_s *msg; | |
555 | }; | |
556 | ||
557 | union bfi_itnim_i2h_msg_u { | |
558 | struct bfi_itnim_create_rsp_s *create_rsp; | |
559 | struct bfi_itnim_delete_rsp_s *delete_rsp; | |
560 | struct bfi_itnim_sler_event_s *sler_event; | |
561 | struct bfi_msg_s *msg; | |
562 | }; | |
563 | ||
564 | /* | |
565 | * Initiator mode IO interface defines. | |
566 | */ | |
567 | ||
568 | enum bfi_ioim_h2i { | |
569 | BFI_IOIM_H2I_IOABORT_REQ = 1, /* IO abort request */ | |
570 | BFI_IOIM_H2I_IOCLEANUP_REQ = 2, /* IO cleanup request */ | |
571 | }; | |
572 | ||
573 | enum bfi_ioim_i2h { | |
574 | BFI_IOIM_I2H_IO_RSP = BFA_I2HM(1), /* non-fp IO response */ | |
575 | BFI_IOIM_I2H_IOABORT_RSP = BFA_I2HM(2), /* ABORT rsp */ | |
576 | }; | |
577 | ||
acdc79a6 | 578 | /* |
a36c61f9 KG |
579 | * IO command DIF info |
580 | */ | |
581 | struct bfi_ioim_dif_s { | |
582 | u32 dif_info[4]; | |
583 | }; | |
584 | ||
acdc79a6 | 585 | /* |
a36c61f9 KG |
586 | * FCP IO messages overview |
587 | * | |
588 | * @note | |
589 | * - Max CDB length supported is 64 bytes. | |
590 | * - SCSI Linked commands and SCSI bi-directional Commands not | |
591 | * supported. | |
592 | * | |
593 | */ | |
594 | struct bfi_ioim_req_s { | |
595 | struct bfi_mhdr_s mh; /* Common msg header */ | |
50444a34 | 596 | __be16 io_tag; /* I/O tag */ |
a36c61f9 KG |
597 | u16 rport_hdl; /* itnim/rport firmware handle */ |
598 | struct fcp_cmnd_s cmnd; /* IO request info */ | |
599 | ||
acdc79a6 | 600 | /* |
a36c61f9 KG |
601 | * SG elements array within the IO request must be double word |
602 | * aligned. This aligment is required to optimize SGM setup for the IO. | |
603 | */ | |
604 | struct bfi_sge_s sges[BFI_SGE_INLINE_MAX]; | |
605 | u8 io_timeout; | |
606 | u8 dif_en; | |
607 | u8 rsvd_a[2]; | |
608 | struct bfi_ioim_dif_s dif; | |
609 | }; | |
610 | ||
acdc79a6 | 611 | /* |
a36c61f9 KG |
612 | * This table shows various IO status codes from firmware and their |
613 | * meaning. Host driver can use these status codes to further process | |
614 | * IO completions. | |
615 | * | |
616 | * BFI_IOIM_STS_OK : IO completed with error free SCSI & | |
617 | * transport status. | |
618 | * io-tag can be reused. | |
619 | * | |
620 | * BFA_IOIM_STS_SCSI_ERR : IO completed with scsi error. | |
621 | * - io-tag can be reused. | |
622 | * | |
623 | * BFI_IOIM_STS_HOST_ABORTED : IO was aborted successfully due to | |
624 | * host request. | |
625 | * - io-tag cannot be reused yet. | |
626 | * | |
627 | * BFI_IOIM_STS_ABORTED : IO was aborted successfully | |
628 | * internally by f/w. | |
629 | * - io-tag cannot be reused yet. | |
630 | * | |
631 | * BFI_IOIM_STS_TIMEDOUT : IO timedout and ABTS/RRQ is happening | |
632 | * in the firmware and | |
633 | * - io-tag cannot be reused yet. | |
634 | * | |
635 | * BFI_IOIM_STS_SQER_NEEDED : Firmware could not recover the IO | |
636 | * with sequence level error | |
637 | * logic and hence host needs to retry | |
638 | * this IO with a different IO tag | |
639 | * - io-tag cannot be used yet. | |
640 | * | |
641 | * BFI_IOIM_STS_NEXUS_ABORT : Second Level Error Recovery from host | |
642 | * is required because 2 consecutive ABTS | |
643 | * timedout and host needs logout and | |
644 | * re-login with the target | |
645 | * - io-tag cannot be used yet. | |
646 | * | |
647 | * BFI_IOIM_STS_UNDERRUN : IO completed with SCSI status good, | |
648 | * but the data tranferred is less than | |
649 | * the fcp data length in the command. | |
650 | * ex. SCSI INQUIRY where transferred | |
651 | * data length and residue count in FCP | |
652 | * response accounts for total fcp-dl | |
653 | * - io-tag can be reused. | |
654 | * | |
655 | * BFI_IOIM_STS_OVERRUN : IO completed with SCSI status good, | |
656 | * but the data transerred is more than | |
657 | * fcp data length in the command. ex. | |
658 | * TAPE IOs where blocks can of unequal | |
659 | * lengths. | |
660 | * - io-tag can be reused. | |
661 | * | |
662 | * BFI_IOIM_STS_RES_FREE : Firmware has completed using io-tag | |
663 | * during abort process | |
664 | * - io-tag can be reused. | |
665 | * | |
666 | * BFI_IOIM_STS_PROTO_ERR : Firmware detected a protocol error. | |
667 | * ex target sent more data than | |
668 | * requested, or there was data frame | |
669 | * loss and other reasons | |
670 | * - io-tag cannot be used yet. | |
671 | * | |
672 | * BFI_IOIM_STS_DIF_ERR : Firwmare detected DIF error. ex: DIF | |
673 | * CRC err or Ref Tag err or App tag err. | |
674 | * - io-tag can be reused. | |
675 | * | |
676 | * BFA_IOIM_STS_TSK_MGT_ABORT : IO was aborted because of Task | |
677 | * Management command from the host | |
678 | * - io-tag can be reused. | |
679 | * | |
680 | * BFI_IOIM_STS_UTAG : Firmware does not know about this | |
681 | * io_tag. | |
682 | * - io-tag can be reused. | |
683 | */ | |
684 | enum bfi_ioim_status { | |
685 | BFI_IOIM_STS_OK = 0, | |
686 | BFI_IOIM_STS_HOST_ABORTED = 1, | |
687 | BFI_IOIM_STS_ABORTED = 2, | |
688 | BFI_IOIM_STS_TIMEDOUT = 3, | |
689 | BFI_IOIM_STS_RES_FREE = 4, | |
690 | BFI_IOIM_STS_SQER_NEEDED = 5, | |
691 | BFI_IOIM_STS_PROTO_ERR = 6, | |
692 | BFI_IOIM_STS_UTAG = 7, | |
693 | BFI_IOIM_STS_PATHTOV = 8, | |
694 | }; | |
695 | ||
696 | #define BFI_IOIM_SNSLEN (256) | |
acdc79a6 | 697 | /* |
a36c61f9 KG |
698 | * I/O response message |
699 | */ | |
700 | struct bfi_ioim_rsp_s { | |
701 | struct bfi_mhdr_s mh; /* common msg header */ | |
50444a34 | 702 | __be16 io_tag; /* completed IO tag */ |
a36c61f9 KG |
703 | u16 bfa_rport_hndl; /* releated rport handle */ |
704 | u8 io_status; /* IO completion status */ | |
705 | u8 reuse_io_tag; /* IO tag can be reused */ | |
706 | u16 abort_tag; /* host abort request tag */ | |
707 | u8 scsi_status; /* scsi status from target */ | |
708 | u8 sns_len; /* scsi sense length */ | |
709 | u8 resid_flags; /* IO residue flags */ | |
710 | u8 rsvd_a; | |
50444a34 | 711 | __be32 residue; /* IO residual length in bytes */ |
a36c61f9 KG |
712 | u32 rsvd_b[3]; |
713 | }; | |
714 | ||
715 | struct bfi_ioim_abort_req_s { | |
716 | struct bfi_mhdr_s mh; /* Common msg header */ | |
50444a34 | 717 | __be16 io_tag; /* I/O tag */ |
a36c61f9 KG |
718 | u16 abort_tag; /* unique request tag */ |
719 | }; | |
720 | ||
721 | /* | |
722 | * Initiator mode task management command interface defines. | |
723 | */ | |
724 | ||
725 | enum bfi_tskim_h2i { | |
726 | BFI_TSKIM_H2I_TM_REQ = 1, /* task-mgmt command */ | |
727 | BFI_TSKIM_H2I_ABORT_REQ = 2, /* task-mgmt command */ | |
728 | }; | |
729 | ||
730 | enum bfi_tskim_i2h { | |
731 | BFI_TSKIM_I2H_TM_RSP = BFA_I2HM(1), | |
732 | }; | |
733 | ||
734 | struct bfi_tskim_req_s { | |
735 | struct bfi_mhdr_s mh; /* Common msg header */ | |
50444a34 | 736 | __be16 tsk_tag; /* task management tag */ |
a36c61f9 | 737 | u16 itn_fhdl; /* itn firmware handle */ |
f314878a | 738 | struct scsi_lun lun; /* LU number */ |
a36c61f9 KG |
739 | u8 tm_flags; /* see enum fcp_tm_cmnd */ |
740 | u8 t_secs; /* Timeout value in seconds */ | |
741 | u8 rsvd[2]; | |
742 | }; | |
743 | ||
744 | struct bfi_tskim_abortreq_s { | |
745 | struct bfi_mhdr_s mh; /* Common msg header */ | |
50444a34 | 746 | __be16 tsk_tag; /* task management tag */ |
a36c61f9 KG |
747 | u16 rsvd; |
748 | }; | |
749 | ||
750 | enum bfi_tskim_status { | |
751 | /* | |
752 | * Following are FCP-4 spec defined status codes, | |
753 | * **DO NOT CHANGE THEM ** | |
754 | */ | |
755 | BFI_TSKIM_STS_OK = 0, | |
756 | BFI_TSKIM_STS_NOT_SUPP = 4, | |
757 | BFI_TSKIM_STS_FAILED = 5, | |
758 | ||
acdc79a6 | 759 | /* |
a36c61f9 KG |
760 | * Defined by BFA |
761 | */ | |
762 | BFI_TSKIM_STS_TIMEOUT = 10, /* TM request timedout */ | |
763 | BFI_TSKIM_STS_ABORTED = 11, /* Aborted on host request */ | |
764 | }; | |
765 | ||
766 | struct bfi_tskim_rsp_s { | |
767 | struct bfi_mhdr_s mh; /* Common msg header */ | |
50444a34 | 768 | __be16 tsk_tag; /* task mgmt cmnd tag */ |
a36c61f9 KG |
769 | u8 tsk_status; /* @ref bfi_tskim_status */ |
770 | u8 rsvd; | |
771 | }; | |
772 | ||
773 | #pragma pack() | |
774 | ||
775 | #endif /* __BFI_MS_H__ */ |