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