diff options
Diffstat (limited to 'drivers/scsi/bfa/include/protocol/ct.h')
-rw-r--r-- | drivers/scsi/bfa/include/protocol/ct.h | 492 |
1 files changed, 492 insertions, 0 deletions
diff --git a/drivers/scsi/bfa/include/protocol/ct.h b/drivers/scsi/bfa/include/protocol/ct.h new file mode 100644 index 000000000000..c59d6630b070 --- /dev/null +++ b/drivers/scsi/bfa/include/protocol/ct.h | |||
@@ -0,0 +1,492 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 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 __CT_H__ | ||
19 | #define __CT_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | struct ct_hdr_s{ | ||
26 | u32 rev_id:8; /* Revision of the CT */ | ||
27 | u32 in_id:24; /* Initiator Id */ | ||
28 | u32 gs_type:8; /* Generic service Type */ | ||
29 | u32 gs_sub_type:8; /* Generic service sub type */ | ||
30 | u32 options:8; /* options */ | ||
31 | u32 rsvrd:8; /* reserved */ | ||
32 | u32 cmd_rsp_code:16;/* ct command/response code */ | ||
33 | u32 max_res_size:16;/* maximum/residual size */ | ||
34 | u32 frag_id:8; /* fragment ID */ | ||
35 | u32 reason_code:8; /* reason code */ | ||
36 | u32 exp_code:8; /* explanation code */ | ||
37 | u32 vendor_unq:8; /* vendor unique */ | ||
38 | }; | ||
39 | |||
40 | /* | ||
41 | * defines for the Revision | ||
42 | */ | ||
43 | enum { | ||
44 | CT_GS3_REVISION = 0x01, | ||
45 | }; | ||
46 | |||
47 | /* | ||
48 | * defines for gs_type | ||
49 | */ | ||
50 | enum { | ||
51 | CT_GSTYPE_KEYSERVICE = 0xF7, | ||
52 | CT_GSTYPE_ALIASSERVICE = 0xF8, | ||
53 | CT_GSTYPE_MGMTSERVICE = 0xFA, | ||
54 | CT_GSTYPE_TIMESERVICE = 0xFB, | ||
55 | CT_GSTYPE_DIRSERVICE = 0xFC, | ||
56 | }; | ||
57 | |||
58 | /* | ||
59 | * defines for gs_sub_type for gs type directory service | ||
60 | */ | ||
61 | enum { | ||
62 | CT_GSSUBTYPE_NAMESERVER = 0x02, | ||
63 | }; | ||
64 | |||
65 | /* | ||
66 | * defines for gs_sub_type for gs type management service | ||
67 | */ | ||
68 | enum { | ||
69 | CT_GSSUBTYPE_CFGSERVER = 0x01, | ||
70 | CT_GSSUBTYPE_UNZONED_NS = 0x02, | ||
71 | CT_GSSUBTYPE_ZONESERVER = 0x03, | ||
72 | CT_GSSUBTYPE_LOCKSERVER = 0x04, | ||
73 | CT_GSSUBTYPE_HBA_MGMTSERVER = 0x10, /* for FDMI */ | ||
74 | }; | ||
75 | |||
76 | /* | ||
77 | * defines for CT response code field | ||
78 | */ | ||
79 | enum { | ||
80 | CT_RSP_REJECT = 0x8001, | ||
81 | CT_RSP_ACCEPT = 0x8002, | ||
82 | }; | ||
83 | |||
84 | /* | ||
85 | * defintions for CT reason code | ||
86 | */ | ||
87 | enum { | ||
88 | CT_RSN_INV_CMD = 0x01, | ||
89 | CT_RSN_INV_VER = 0x02, | ||
90 | CT_RSN_LOGIC_ERR = 0x03, | ||
91 | CT_RSN_INV_SIZE = 0x04, | ||
92 | CT_RSN_LOGICAL_BUSY = 0x05, | ||
93 | CT_RSN_PROTO_ERR = 0x07, | ||
94 | CT_RSN_UNABLE_TO_PERF = 0x09, | ||
95 | CT_RSN_NOT_SUPP = 0x0B, | ||
96 | CT_RSN_SERVER_NOT_AVBL = 0x0D, | ||
97 | CT_RSN_SESSION_COULD_NOT_BE_ESTBD = 0x0E, | ||
98 | CT_RSN_VENDOR_SPECIFIC = 0xFF, | ||
99 | |||
100 | }; | ||
101 | |||
102 | /* | ||
103 | * definitions for explanations code for Name server | ||
104 | */ | ||
105 | enum { | ||
106 | CT_NS_EXP_NOADDITIONAL = 0x00, | ||
107 | CT_NS_EXP_ID_NOT_REG = 0x01, | ||
108 | CT_NS_EXP_PN_NOT_REG = 0x02, | ||
109 | CT_NS_EXP_NN_NOT_REG = 0x03, | ||
110 | CT_NS_EXP_CS_NOT_REG = 0x04, | ||
111 | CT_NS_EXP_IPN_NOT_REG = 0x05, | ||
112 | CT_NS_EXP_IPA_NOT_REG = 0x06, | ||
113 | CT_NS_EXP_FT_NOT_REG = 0x07, | ||
114 | CT_NS_EXP_SPN_NOT_REG = 0x08, | ||
115 | CT_NS_EXP_SNN_NOT_REG = 0x09, | ||
116 | CT_NS_EXP_PT_NOT_REG = 0x0A, | ||
117 | CT_NS_EXP_IPP_NOT_REG = 0x0B, | ||
118 | CT_NS_EXP_FPN_NOT_REG = 0x0C, | ||
119 | CT_NS_EXP_HA_NOT_REG = 0x0D, | ||
120 | CT_NS_EXP_FD_NOT_REG = 0x0E, | ||
121 | CT_NS_EXP_FF_NOT_REG = 0x0F, | ||
122 | CT_NS_EXP_ACCESSDENIED = 0x10, | ||
123 | CT_NS_EXP_UNACCEPTABLE_ID = 0x11, | ||
124 | CT_NS_EXP_DATABASEEMPTY = 0x12, | ||
125 | CT_NS_EXP_NOT_REG_IN_SCOPE = 0x13, | ||
126 | CT_NS_EXP_DOM_ID_NOT_PRESENT = 0x14, | ||
127 | CT_NS_EXP_PORT_NUM_NOT_PRESENT = 0x15, | ||
128 | CT_NS_EXP_NO_DEVICE_ATTACHED = 0x16 | ||
129 | }; | ||
130 | |||
131 | /* | ||
132 | * defintions for the explanation code for all servers | ||
133 | */ | ||
134 | enum { | ||
135 | CT_EXP_AUTH_EXCEPTION = 0xF1, | ||
136 | CT_EXP_DB_FULL = 0xF2, | ||
137 | CT_EXP_DB_EMPTY = 0xF3, | ||
138 | CT_EXP_PROCESSING_REQ = 0xF4, | ||
139 | CT_EXP_UNABLE_TO_VERIFY_CONN = 0xF5, | ||
140 | CT_EXP_DEVICES_NOT_IN_CMN_ZONE = 0xF6 | ||
141 | }; | ||
142 | |||
143 | /* | ||
144 | * Command codes for Name server | ||
145 | */ | ||
146 | enum { | ||
147 | GS_GID_PN = 0x0121, /* Get Id on port name */ | ||
148 | GS_GPN_ID = 0x0112, /* Get port name on ID */ | ||
149 | GS_GNN_ID = 0x0113, /* Get node name on ID */ | ||
150 | GS_GID_FT = 0x0171, /* Get Id on FC4 type */ | ||
151 | GS_GSPN_ID = 0x0118, /* Get symbolic PN on ID */ | ||
152 | GS_RFT_ID = 0x0217, /* Register fc4type on ID */ | ||
153 | GS_RSPN_ID = 0x0218, /* Register symbolic PN on ID */ | ||
154 | GS_RPN_ID = 0x0212, /* Register port name */ | ||
155 | GS_RNN_ID = 0x0213, /* Register node name */ | ||
156 | GS_RCS_ID = 0x0214, /* Register class of service */ | ||
157 | GS_RPT_ID = 0x021A, /* Register port type */ | ||
158 | GS_GA_NXT = 0x0100, /* Get all next */ | ||
159 | GS_RFF_ID = 0x021F, /* Register FC4 Feature */ | ||
160 | }; | ||
161 | |||
162 | struct fcgs_id_req_s{ | ||
163 | u32 rsvd:8; | ||
164 | u32 dap:24; /* port identifier */ | ||
165 | }; | ||
166 | #define fcgs_gpnid_req_t struct fcgs_id_req_s | ||
167 | #define fcgs_gnnid_req_t struct fcgs_id_req_s | ||
168 | #define fcgs_gspnid_req_t struct fcgs_id_req_s | ||
169 | |||
170 | struct fcgs_gidpn_req_s{ | ||
171 | wwn_t port_name; /* port wwn */ | ||
172 | }; | ||
173 | |||
174 | struct fcgs_gidpn_resp_s{ | ||
175 | u32 rsvd:8; | ||
176 | u32 dap:24; /* port identifier */ | ||
177 | }; | ||
178 | |||
179 | /** | ||
180 | * RFT_ID | ||
181 | */ | ||
182 | struct fcgs_rftid_req_s { | ||
183 | u32 rsvd:8; | ||
184 | u32 dap:24; /* port identifier */ | ||
185 | u32 fc4_type[8]; /* fc4 types */ | ||
186 | }; | ||
187 | |||
188 | /** | ||
189 | * RFF_ID : Register FC4 features. | ||
190 | */ | ||
191 | |||
192 | #define FC_GS_FCP_FC4_FEATURE_INITIATOR 0x02 | ||
193 | #define FC_GS_FCP_FC4_FEATURE_TARGET 0x01 | ||
194 | |||
195 | struct fcgs_rffid_req_s{ | ||
196 | u32 rsvd :8; | ||
197 | u32 dap :24; /* port identifier */ | ||
198 | u32 rsvd1 :16; | ||
199 | u32 fc4ftr_bits :8; /* fc4 feature bits */ | ||
200 | u32 fc4_type :8; /* corresponding FC4 Type */ | ||
201 | }; | ||
202 | |||
203 | /** | ||
204 | * GID_FT Request | ||
205 | */ | ||
206 | struct fcgs_gidft_req_s{ | ||
207 | u8 reserved; | ||
208 | u8 domain_id; /* domain, 0 - all fabric */ | ||
209 | u8 area_id; /* area, 0 - whole domain */ | ||
210 | u8 fc4_type; /* FC_TYPE_FCP for SCSI devices */ | ||
211 | }; /* GID_FT Request */ | ||
212 | |||
213 | /** | ||
214 | * GID_FT Response | ||
215 | */ | ||
216 | struct fcgs_gidft_resp_s { | ||
217 | u8 last:1; /* last port identifier flag */ | ||
218 | u8 reserved:7; | ||
219 | u32 pid:24; /* port identifier */ | ||
220 | }; /* GID_FT Response */ | ||
221 | |||
222 | /** | ||
223 | * RSPN_ID | ||
224 | */ | ||
225 | struct fcgs_rspnid_req_s{ | ||
226 | u32 rsvd:8; | ||
227 | u32 dap:24; /* port identifier */ | ||
228 | u8 spn_len; /* symbolic port name length */ | ||
229 | u8 spn[256]; /* symbolic port name */ | ||
230 | }; | ||
231 | |||
232 | /** | ||
233 | * RPN_ID | ||
234 | */ | ||
235 | struct fcgs_rpnid_req_s{ | ||
236 | u32 rsvd:8; | ||
237 | u32 port_id:24; | ||
238 | wwn_t port_name; | ||
239 | }; | ||
240 | |||
241 | /** | ||
242 | * RNN_ID | ||
243 | */ | ||
244 | struct fcgs_rnnid_req_s{ | ||
245 | u32 rsvd:8; | ||
246 | u32 port_id:24; | ||
247 | wwn_t node_name; | ||
248 | }; | ||
249 | |||
250 | /** | ||
251 | * RCS_ID | ||
252 | */ | ||
253 | struct fcgs_rcsid_req_s{ | ||
254 | u32 rsvd:8; | ||
255 | u32 port_id:24; | ||
256 | u32 cos; | ||
257 | }; | ||
258 | |||
259 | /** | ||
260 | * RPT_ID | ||
261 | */ | ||
262 | struct fcgs_rptid_req_s{ | ||
263 | u32 rsvd:8; | ||
264 | u32 port_id:24; | ||
265 | u32 port_type:8; | ||
266 | u32 rsvd1:24; | ||
267 | }; | ||
268 | |||
269 | /** | ||
270 | * GA_NXT Request | ||
271 | */ | ||
272 | struct fcgs_ganxt_req_s{ | ||
273 | u32 rsvd:8; | ||
274 | u32 port_id:24; | ||
275 | }; | ||
276 | |||
277 | /** | ||
278 | * GA_NXT Response | ||
279 | */ | ||
280 | struct fcgs_ganxt_rsp_s{ | ||
281 | u32 port_type:8; /* Port Type */ | ||
282 | u32 port_id:24; /* Port Identifier */ | ||
283 | wwn_t port_name; /* Port Name */ | ||
284 | u8 spn_len; /* Length of Symbolic Port Name */ | ||
285 | char spn[255]; /* Symbolic Port Name */ | ||
286 | wwn_t node_name; /* Node Name */ | ||
287 | u8 snn_len; /* Length of Symbolic Node Name */ | ||
288 | char snn[255]; /* Symbolic Node Name */ | ||
289 | u8 ipa[8]; /* Initial Process Associator */ | ||
290 | u8 ip[16]; /* IP Address */ | ||
291 | u32 cos; /* Class of Service */ | ||
292 | u32 fc4types[8]; /* FC-4 TYPEs */ | ||
293 | wwn_t fabric_port_name; | ||
294 | /* Fabric Port Name */ | ||
295 | u32 rsvd:8; /* Reserved */ | ||
296 | u32 hard_addr:24; /* Hard Address */ | ||
297 | }; | ||
298 | |||
299 | /* | ||
300 | * Fabric Config Server | ||
301 | */ | ||
302 | |||
303 | /* | ||
304 | * Command codes for Fabric Configuration Server | ||
305 | */ | ||
306 | enum { | ||
307 | GS_FC_GFN_CMD = 0x0114, /* GS FC Get Fabric Name */ | ||
308 | GS_FC_GMAL_CMD = 0x0116, /* GS FC GMAL */ | ||
309 | GS_FC_TRACE_CMD = 0x0400, /* GS FC Trace Route */ | ||
310 | GS_FC_PING_CMD = 0x0401, /* GS FC Ping */ | ||
311 | }; | ||
312 | |||
313 | /* | ||
314 | * Source or Destination Port Tags. | ||
315 | */ | ||
316 | enum { | ||
317 | GS_FTRACE_TAG_NPORT_ID = 1, | ||
318 | GS_FTRACE_TAG_NPORT_NAME = 2, | ||
319 | }; | ||
320 | |||
321 | /* | ||
322 | * Port Value : Could be a Port id or wwn | ||
323 | */ | ||
324 | union fcgs_port_val_u{ | ||
325 | u32 nport_id; | ||
326 | wwn_t nport_wwn; | ||
327 | }; | ||
328 | |||
329 | #define GS_FTRACE_MAX_HOP_COUNT 20 | ||
330 | #define GS_FTRACE_REVISION 1 | ||
331 | |||
332 | /* | ||
333 | * Ftrace Related Structures. | ||
334 | */ | ||
335 | |||
336 | /* | ||
337 | * STR (Switch Trace) Reject Reason Codes. From FC-SW. | ||
338 | */ | ||
339 | enum { | ||
340 | GS_FTRACE_STR_CMD_COMPLETED_SUCC = 0, | ||
341 | GS_FTRACE_STR_CMD_NOT_SUPP_IN_NEXT_SWITCH, | ||
342 | GS_FTRACE_STR_NO_RESP_FROM_NEXT_SWITCH, | ||
343 | GS_FTRACE_STR_MAX_HOP_CNT_REACHED, | ||
344 | GS_FTRACE_STR_SRC_PORT_NOT_FOUND, | ||
345 | GS_FTRACE_STR_DST_PORT_NOT_FOUND, | ||
346 | GS_FTRACE_STR_DEVICES_NOT_IN_COMMON_ZONE, | ||
347 | GS_FTRACE_STR_NO_ROUTE_BW_PORTS, | ||
348 | GS_FTRACE_STR_NO_ADDL_EXPLN, | ||
349 | GS_FTRACE_STR_FABRIC_BUSY, | ||
350 | GS_FTRACE_STR_FABRIC_BUILD_IN_PROGRESS, | ||
351 | GS_FTRACE_STR_VENDOR_SPECIFIC_ERR_START = 0xf0, | ||
352 | GS_FTRACE_STR_VENDOR_SPECIFIC_ERR_END = 0xff, | ||
353 | }; | ||
354 | |||
355 | /* | ||
356 | * Ftrace Request | ||
357 | */ | ||
358 | struct fcgs_ftrace_req_s{ | ||
359 | u32 revision; | ||
360 | u16 src_port_tag; /* Source Port tag */ | ||
361 | u16 src_port_len; /* Source Port len */ | ||
362 | union fcgs_port_val_u src_port_val; /* Source Port value */ | ||
363 | u16 dst_port_tag; /* Destination Port tag */ | ||
364 | u16 dst_port_len; /* Destination Port len */ | ||
365 | union fcgs_port_val_u dst_port_val; /* Destination Port value */ | ||
366 | u32 token; | ||
367 | u8 vendor_id[8]; /* T10 Vendor Identifier */ | ||
368 | u8 vendor_info[8]; /* Vendor specific Info */ | ||
369 | u32 max_hop_cnt; /* Max Hop Count */ | ||
370 | }; | ||
371 | |||
372 | /* | ||
373 | * Path info structure | ||
374 | */ | ||
375 | struct fcgs_ftrace_path_info_s{ | ||
376 | wwn_t switch_name; /* Switch WWN */ | ||
377 | u32 domain_id; | ||
378 | wwn_t ingress_port_name; /* Ingress ports wwn */ | ||
379 | u32 ingress_phys_port_num; /* Ingress ports physical port | ||
380 | * number | ||
381 | */ | ||
382 | wwn_t egress_port_name; /* Ingress ports wwn */ | ||
383 | u32 egress_phys_port_num; /* Ingress ports physical port | ||
384 | * number | ||
385 | */ | ||
386 | }; | ||
387 | |||
388 | /* | ||
389 | * Ftrace Acc Response | ||
390 | */ | ||
391 | struct fcgs_ftrace_resp_s{ | ||
392 | u32 revision; | ||
393 | u32 token; | ||
394 | u8 vendor_id[8]; /* T10 Vendor Identifier */ | ||
395 | u8 vendor_info[8]; /* Vendor specific Info */ | ||
396 | u32 str_rej_reason_code; /* STR Reject Reason Code */ | ||
397 | u32 num_path_info_entries; /* No. of path info entries */ | ||
398 | /* | ||
399 | * path info entry/entries. | ||
400 | */ | ||
401 | struct fcgs_ftrace_path_info_s path_info[1]; | ||
402 | |||
403 | }; | ||
404 | |||
405 | /* | ||
406 | * Fabric Config Server : FCPing | ||
407 | */ | ||
408 | |||
409 | /* | ||
410 | * FC Ping Request | ||
411 | */ | ||
412 | struct fcgs_fcping_req_s{ | ||
413 | u32 revision; | ||
414 | u16 port_tag; | ||
415 | u16 port_len; /* Port len */ | ||
416 | union fcgs_port_val_u port_val; /* Port value */ | ||
417 | u32 token; | ||
418 | }; | ||
419 | |||
420 | /* | ||
421 | * FC Ping Response | ||
422 | */ | ||
423 | struct fcgs_fcping_resp_s{ | ||
424 | u32 token; | ||
425 | }; | ||
426 | |||
427 | /* | ||
428 | * Command codes for zone server query. | ||
429 | */ | ||
430 | enum { | ||
431 | ZS_GZME = 0x0124, /* Get zone member extended */ | ||
432 | }; | ||
433 | |||
434 | /* | ||
435 | * ZS GZME request | ||
436 | */ | ||
437 | #define ZS_GZME_ZNAMELEN 32 | ||
438 | struct zs_gzme_req_s{ | ||
439 | u8 znamelen; | ||
440 | u8 rsvd[3]; | ||
441 | u8 zname[ZS_GZME_ZNAMELEN]; | ||
442 | }; | ||
443 | |||
444 | enum zs_mbr_type{ | ||
445 | ZS_MBR_TYPE_PWWN = 1, | ||
446 | ZS_MBR_TYPE_DOMPORT = 2, | ||
447 | ZS_MBR_TYPE_PORTID = 3, | ||
448 | ZS_MBR_TYPE_NWWN = 4, | ||
449 | }; | ||
450 | |||
451 | struct zs_mbr_wwn_s{ | ||
452 | u8 mbr_type; | ||
453 | u8 rsvd[3]; | ||
454 | wwn_t wwn; | ||
455 | }; | ||
456 | |||
457 | struct zs_query_resp_s{ | ||
458 | u32 nmbrs; /* number of zone members */ | ||
459 | struct zs_mbr_wwn_s mbr[1]; | ||
460 | }; | ||
461 | |||
462 | /* | ||
463 | * GMAL Command ( Get ( interconnect Element) Management Address List) | ||
464 | * To retrieve the IP Address of a Switch. | ||
465 | */ | ||
466 | |||
467 | #define CT_GMAL_RESP_PREFIX_TELNET "telnet://" | ||
468 | #define CT_GMAL_RESP_PREFIX_HTTP "http://" | ||
469 | |||
470 | /* GMAL/GFN request */ | ||
471 | struct fcgs_req_s { | ||
472 | wwn_t wwn; /* PWWN/NWWN */ | ||
473 | }; | ||
474 | |||
475 | #define fcgs_gmal_req_t struct fcgs_req_s | ||
476 | #define fcgs_gfn_req_t struct fcgs_req_s | ||
477 | |||
478 | /* Accept Response to GMAL */ | ||
479 | struct fcgs_gmal_resp_s { | ||
480 | u32 ms_len; /* Num of entries */ | ||
481 | u8 ms_ma[256]; | ||
482 | }; | ||
483 | |||
484 | struct fc_gmal_entry_s { | ||
485 | u8 len; | ||
486 | u8 prefix[7]; /* like "http://" */ | ||
487 | u8 ip_addr[248]; | ||
488 | }; | ||
489 | |||
490 | #pragma pack() | ||
491 | |||
492 | #endif | ||