diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /drivers/s390/scsi/zfcp_fsf.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'drivers/s390/scsi/zfcp_fsf.h')
-rw-r--r-- | drivers/s390/scsi/zfcp_fsf.h | 472 |
1 files changed, 472 insertions, 0 deletions
diff --git a/drivers/s390/scsi/zfcp_fsf.h b/drivers/s390/scsi/zfcp_fsf.h new file mode 100644 index 000000000000..5889956bbf08 --- /dev/null +++ b/drivers/s390/scsi/zfcp_fsf.h | |||
@@ -0,0 +1,472 @@ | |||
1 | /* | ||
2 | * | ||
3 | * linux/drivers/s390/scsi/zfcp_fsf.h | ||
4 | * | ||
5 | * FCP adapter driver for IBM eServer zSeries | ||
6 | * | ||
7 | * (C) Copyright IBM Corp. 2002, 2004 | ||
8 | * | ||
9 | * Author(s): Martin Peschke <mpeschke@de.ibm.com> | ||
10 | * Raimund Schroeder <raimund.schroeder@de.ibm.com> | ||
11 | * Aron Zeh | ||
12 | * Wolfgang Taphorn | ||
13 | * Stefan Bader <stefan.bader@de.ibm.com> | ||
14 | * Heiko Carstens <heiko.carstens@de.ibm.com> | ||
15 | * Andreas Herrmann <aherrman@de.ibm.com> | ||
16 | * Volker Sameske <sameske@de.ibm.com> | ||
17 | * | ||
18 | * This program is free software; you can redistribute it and/or modify | ||
19 | * it under the terms of the GNU General Public License as published by | ||
20 | * the Free Software Foundation; either version 2, or (at your option) | ||
21 | * any later version. | ||
22 | * | ||
23 | * This program is distributed in the hope that it will be useful, | ||
24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
26 | * GNU General Public License for more details. | ||
27 | * | ||
28 | * You should have received a copy of the GNU General Public License | ||
29 | * along with this program; if not, write to the Free Software | ||
30 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
31 | */ | ||
32 | |||
33 | #ifndef FSF_H | ||
34 | #define FSF_H | ||
35 | |||
36 | #define FSF_QTCB_VERSION1 0x00000001 | ||
37 | #define FSF_QTCB_CURRENT_VERSION FSF_QTCB_VERSION1 | ||
38 | |||
39 | /* FSF commands */ | ||
40 | #define FSF_QTCB_FCP_CMND 0x00000001 | ||
41 | #define FSF_QTCB_ABORT_FCP_CMND 0x00000002 | ||
42 | #define FSF_QTCB_OPEN_PORT_WITH_DID 0x00000005 | ||
43 | #define FSF_QTCB_OPEN_LUN 0x00000006 | ||
44 | #define FSF_QTCB_CLOSE_LUN 0x00000007 | ||
45 | #define FSF_QTCB_CLOSE_PORT 0x00000008 | ||
46 | #define FSF_QTCB_CLOSE_PHYSICAL_PORT 0x00000009 | ||
47 | #define FSF_QTCB_SEND_ELS 0x0000000B | ||
48 | #define FSF_QTCB_SEND_GENERIC 0x0000000C | ||
49 | #define FSF_QTCB_EXCHANGE_CONFIG_DATA 0x0000000D | ||
50 | #define FSF_QTCB_EXCHANGE_PORT_DATA 0x0000000E | ||
51 | #define FSF_QTCB_DOWNLOAD_CONTROL_FILE 0x00000012 | ||
52 | #define FSF_QTCB_UPLOAD_CONTROL_FILE 0x00000013 | ||
53 | |||
54 | /* FSF QTCB types */ | ||
55 | #define FSF_IO_COMMAND 0x00000001 | ||
56 | #define FSF_SUPPORT_COMMAND 0x00000002 | ||
57 | #define FSF_CONFIG_COMMAND 0x00000003 | ||
58 | #define FSF_PORT_COMMAND 0x00000004 | ||
59 | |||
60 | /* FSF control file upload/download operations' subtype and options */ | ||
61 | #define FSF_CFDC_OPERATION_SUBTYPE 0x00020001 | ||
62 | #define FSF_CFDC_OPTION_NORMAL_MODE 0x00000000 | ||
63 | #define FSF_CFDC_OPTION_FORCE 0x00000001 | ||
64 | #define FSF_CFDC_OPTION_FULL_ACCESS 0x00000002 | ||
65 | #define FSF_CFDC_OPTION_RESTRICTED_ACCESS 0x00000004 | ||
66 | |||
67 | /* FSF protocol stati */ | ||
68 | #define FSF_PROT_GOOD 0x00000001 | ||
69 | #define FSF_PROT_QTCB_VERSION_ERROR 0x00000010 | ||
70 | #define FSF_PROT_SEQ_NUMB_ERROR 0x00000020 | ||
71 | #define FSF_PROT_UNSUPP_QTCB_TYPE 0x00000040 | ||
72 | #define FSF_PROT_HOST_CONNECTION_INITIALIZING 0x00000080 | ||
73 | #define FSF_PROT_FSF_STATUS_PRESENTED 0x00000100 | ||
74 | #define FSF_PROT_DUPLICATE_REQUEST_ID 0x00000200 | ||
75 | #define FSF_PROT_LINK_DOWN 0x00000400 | ||
76 | #define FSF_PROT_REEST_QUEUE 0x00000800 | ||
77 | #define FSF_PROT_ERROR_STATE 0x01000000 | ||
78 | |||
79 | /* FSF stati */ | ||
80 | #define FSF_GOOD 0x00000000 | ||
81 | #define FSF_PORT_ALREADY_OPEN 0x00000001 | ||
82 | #define FSF_LUN_ALREADY_OPEN 0x00000002 | ||
83 | #define FSF_PORT_HANDLE_NOT_VALID 0x00000003 | ||
84 | #define FSF_LUN_HANDLE_NOT_VALID 0x00000004 | ||
85 | #define FSF_HANDLE_MISMATCH 0x00000005 | ||
86 | #define FSF_SERVICE_CLASS_NOT_SUPPORTED 0x00000006 | ||
87 | #define FSF_FCPLUN_NOT_VALID 0x00000009 | ||
88 | #define FSF_ACCESS_DENIED 0x00000010 | ||
89 | #define FSF_LUN_SHARING_VIOLATION 0x00000012 | ||
90 | #define FSF_FCP_COMMAND_DOES_NOT_EXIST 0x00000022 | ||
91 | #define FSF_DIRECTION_INDICATOR_NOT_VALID 0x00000030 | ||
92 | #define FSF_CMND_LENGTH_NOT_VALID 0x00000033 | ||
93 | #define FSF_MAXIMUM_NUMBER_OF_PORTS_EXCEEDED 0x00000040 | ||
94 | #define FSF_MAXIMUM_NUMBER_OF_LUNS_EXCEEDED 0x00000041 | ||
95 | #define FSF_ELS_COMMAND_REJECTED 0x00000050 | ||
96 | #define FSF_GENERIC_COMMAND_REJECTED 0x00000051 | ||
97 | #define FSF_OPERATION_PARTIALLY_SUCCESSFUL 0x00000052 | ||
98 | #define FSF_AUTHORIZATION_FAILURE 0x00000053 | ||
99 | #define FSF_CFDC_ERROR_DETECTED 0x00000054 | ||
100 | #define FSF_CONTROL_FILE_UPDATE_ERROR 0x00000055 | ||
101 | #define FSF_CONTROL_FILE_TOO_LARGE 0x00000056 | ||
102 | #define FSF_ACCESS_CONFLICT_DETECTED 0x00000057 | ||
103 | #define FSF_CONFLICTS_OVERRULED 0x00000058 | ||
104 | #define FSF_PORT_BOXED 0x00000059 | ||
105 | #define FSF_LUN_BOXED 0x0000005A | ||
106 | #define FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE 0x0000005B | ||
107 | #define FSF_PAYLOAD_SIZE_MISMATCH 0x00000060 | ||
108 | #define FSF_REQUEST_SIZE_TOO_LARGE 0x00000061 | ||
109 | #define FSF_RESPONSE_SIZE_TOO_LARGE 0x00000062 | ||
110 | #define FSF_SBAL_MISMATCH 0x00000063 | ||
111 | #define FSF_OPEN_PORT_WITHOUT_PRLI 0x00000064 | ||
112 | #define FSF_ADAPTER_STATUS_AVAILABLE 0x000000AD | ||
113 | #define FSF_FCP_RSP_AVAILABLE 0x000000AF | ||
114 | #define FSF_UNKNOWN_COMMAND 0x000000E2 | ||
115 | #define FSF_UNKNOWN_OP_SUBTYPE 0x000000E3 | ||
116 | #define FSF_INVALID_COMMAND_OPTION 0x000000E5 | ||
117 | /* #define FSF_ERROR 0x000000FF */ | ||
118 | |||
119 | #define FSF_STATUS_QUALIFIER_SIZE 16 | ||
120 | |||
121 | /* FSF status qualifier, recommendations */ | ||
122 | #define FSF_SQ_NO_RECOM 0x00 | ||
123 | #define FSF_SQ_FCP_RSP_AVAILABLE 0x01 | ||
124 | #define FSF_SQ_RETRY_IF_POSSIBLE 0x02 | ||
125 | #define FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED 0x03 | ||
126 | #define FSF_SQ_INVOKE_LINK_TEST_PROCEDURE 0x04 | ||
127 | #define FSF_SQ_ULP_PROGRAMMING_ERROR 0x05 | ||
128 | #define FSF_SQ_COMMAND_ABORTED 0x06 | ||
129 | #define FSF_SQ_NO_RETRY_POSSIBLE 0x07 | ||
130 | |||
131 | /* FSF status qualifier for CFDC commands */ | ||
132 | #define FSF_SQ_CFDC_COULD_NOT_HARDEN_ON_SE 0x00000001 | ||
133 | #define FSF_SQ_CFDC_COULD_NOT_HARDEN_ON_SE2 0x00000002 | ||
134 | /* CFDC subtable codes */ | ||
135 | #define FSF_SQ_CFDC_SUBTABLE_OS 0x0001 | ||
136 | #define FSF_SQ_CFDC_SUBTABLE_PORT_WWPN 0x0002 | ||
137 | #define FSF_SQ_CFDC_SUBTABLE_PORT_DID 0x0003 | ||
138 | #define FSF_SQ_CFDC_SUBTABLE_LUN 0x0004 | ||
139 | |||
140 | /* FSF status qualifier (most significant 4 bytes), local link down */ | ||
141 | #define FSF_PSQ_LINK_NOLIGHT 0x00000004 | ||
142 | #define FSF_PSQ_LINK_WRAPPLUG 0x00000008 | ||
143 | #define FSF_PSQ_LINK_NOFCP 0x00000010 | ||
144 | |||
145 | /* payload size in status read buffer */ | ||
146 | #define FSF_STATUS_READ_PAYLOAD_SIZE 4032 | ||
147 | |||
148 | /* number of status read buffers that should be sent by ULP */ | ||
149 | #define FSF_STATUS_READS_RECOM 16 | ||
150 | |||
151 | /* status types in status read buffer */ | ||
152 | #define FSF_STATUS_READ_PORT_CLOSED 0x00000001 | ||
153 | #define FSF_STATUS_READ_INCOMING_ELS 0x00000002 | ||
154 | #define FSF_STATUS_READ_SENSE_DATA_AVAIL 0x00000003 | ||
155 | #define FSF_STATUS_READ_BIT_ERROR_THRESHOLD 0x00000004 | ||
156 | #define FSF_STATUS_READ_LINK_DOWN 0x00000005 /* FIXME: really? */ | ||
157 | #define FSF_STATUS_READ_LINK_UP 0x00000006 | ||
158 | #define FSF_STATUS_READ_CFDC_UPDATED 0x0000000A | ||
159 | #define FSF_STATUS_READ_CFDC_HARDENED 0x0000000B | ||
160 | |||
161 | /* status subtypes in status read buffer */ | ||
162 | #define FSF_STATUS_READ_SUB_CLOSE_PHYS_PORT 0x00000001 | ||
163 | #define FSF_STATUS_READ_SUB_ERROR_PORT 0x00000002 | ||
164 | |||
165 | /* status subtypes for CFDC */ | ||
166 | #define FSF_STATUS_READ_SUB_CFDC_HARDENED_ON_SE 0x00000002 | ||
167 | #define FSF_STATUS_READ_SUB_CFDC_HARDENED_ON_SE2 0x0000000F | ||
168 | |||
169 | /* topologie that is detected by the adapter */ | ||
170 | #define FSF_TOPO_ERROR 0x00000000 | ||
171 | #define FSF_TOPO_P2P 0x00000001 | ||
172 | #define FSF_TOPO_FABRIC 0x00000002 | ||
173 | #define FSF_TOPO_AL 0x00000003 | ||
174 | #define FSF_TOPO_FABRIC_VIRT 0x00000004 | ||
175 | |||
176 | /* data direction for FCP commands */ | ||
177 | #define FSF_DATADIR_WRITE 0x00000001 | ||
178 | #define FSF_DATADIR_READ 0x00000002 | ||
179 | #define FSF_DATADIR_READ_WRITE 0x00000003 | ||
180 | #define FSF_DATADIR_CMND 0x00000004 | ||
181 | |||
182 | /* fc service class */ | ||
183 | #define FSF_CLASS_1 0x00000001 | ||
184 | #define FSF_CLASS_2 0x00000002 | ||
185 | #define FSF_CLASS_3 0x00000003 | ||
186 | |||
187 | /* SBAL chaining */ | ||
188 | #define FSF_MAX_SBALS_PER_REQ 36 | ||
189 | #define FSF_MAX_SBALS_PER_ELS_REQ 2 | ||
190 | |||
191 | /* logging space behind QTCB */ | ||
192 | #define FSF_QTCB_LOG_SIZE 1024 | ||
193 | |||
194 | /* channel features */ | ||
195 | #define FSF_FEATURE_QTCB_SUPPRESSION 0x00000001 | ||
196 | #define FSF_FEATURE_CFDC 0x00000002 | ||
197 | #define FSF_FEATURE_LUN_SHARING 0x00000004 | ||
198 | #define FSF_FEATURE_HBAAPI_MANAGEMENT 0x00000010 | ||
199 | #define FSF_FEATURE_ELS_CT_CHAINED_SBALS 0x00000020 | ||
200 | |||
201 | /* option */ | ||
202 | #define FSF_OPEN_LUN_SUPPRESS_BOXING 0x00000001 | ||
203 | #define FSF_OPEN_LUN_REPLICATE_SENSE 0x00000002 | ||
204 | |||
205 | /* adapter types */ | ||
206 | #define FSF_ADAPTER_TYPE_FICON 0x00000001 | ||
207 | #define FSF_ADAPTER_TYPE_FICON_EXPRESS 0x00000002 | ||
208 | |||
209 | /* port types */ | ||
210 | #define FSF_HBA_PORTTYPE_UNKNOWN 0x00000001 | ||
211 | #define FSF_HBA_PORTTYPE_NOTPRESENT 0x00000003 | ||
212 | #define FSF_HBA_PORTTYPE_NPORT 0x00000005 | ||
213 | #define FSF_HBA_PORTTYPE_PTP 0x00000021 | ||
214 | /* following are not defined and used by FSF Spec | ||
215 | but are additionally defined by FC-HBA */ | ||
216 | #define FSF_HBA_PORTTYPE_OTHER 0x00000002 | ||
217 | #define FSF_HBA_PORTTYPE_NOTPRESENT 0x00000003 | ||
218 | #define FSF_HBA_PORTTYPE_NLPORT 0x00000006 | ||
219 | #define FSF_HBA_PORTTYPE_FLPORT 0x00000007 | ||
220 | #define FSF_HBA_PORTTYPE_FPORT 0x00000008 | ||
221 | #define FSF_HBA_PORTTYPE_LPORT 0x00000020 | ||
222 | |||
223 | /* port states */ | ||
224 | #define FSF_HBA_PORTSTATE_UNKNOWN 0x00000001 | ||
225 | #define FSF_HBA_PORTSTATE_ONLINE 0x00000002 | ||
226 | #define FSF_HBA_PORTSTATE_OFFLINE 0x00000003 | ||
227 | #define FSF_HBA_PORTSTATE_LINKDOWN 0x00000006 | ||
228 | #define FSF_HBA_PORTSTATE_ERROR 0x00000007 | ||
229 | |||
230 | /* IO states of adapter */ | ||
231 | #define FSF_IOSTAT_NPORT_RJT 0x00000004 | ||
232 | #define FSF_IOSTAT_FABRIC_RJT 0x00000005 | ||
233 | #define FSF_IOSTAT_LS_RJT 0x00000009 | ||
234 | |||
235 | /* open LUN access flags*/ | ||
236 | #define FSF_UNIT_ACCESS_OPEN_LUN_ALLOWED 0x01000000 | ||
237 | #define FSF_UNIT_ACCESS_EXCLUSIVE 0x02000000 | ||
238 | #define FSF_UNIT_ACCESS_OUTBOUND_TRANSFER 0x10000000 | ||
239 | |||
240 | struct fsf_queue_designator; | ||
241 | struct fsf_status_read_buffer; | ||
242 | struct fsf_port_closed_payload; | ||
243 | struct fsf_bit_error_payload; | ||
244 | union fsf_prot_status_qual; | ||
245 | struct fsf_qual_version_error; | ||
246 | struct fsf_qual_sequence_error; | ||
247 | struct fsf_qtcb_prefix; | ||
248 | struct fsf_qtcb_header; | ||
249 | struct fsf_qtcb_bottom_config; | ||
250 | struct fsf_qtcb_bottom_support; | ||
251 | struct fsf_qtcb_bottom_io; | ||
252 | union fsf_qtcb_bottom; | ||
253 | |||
254 | struct fsf_queue_designator { | ||
255 | u8 cssid; | ||
256 | u8 chpid; | ||
257 | u8 hla; | ||
258 | u8 ua; | ||
259 | u32 res1; | ||
260 | } __attribute__ ((packed)); | ||
261 | |||
262 | struct fsf_port_closed_payload { | ||
263 | struct fsf_queue_designator queue_designator; | ||
264 | u32 port_handle; | ||
265 | } __attribute__ ((packed)); | ||
266 | |||
267 | struct fsf_bit_error_payload { | ||
268 | u32 res1; | ||
269 | u32 link_failure_error_count; | ||
270 | u32 loss_of_sync_error_count; | ||
271 | u32 loss_of_signal_error_count; | ||
272 | u32 primitive_sequence_error_count; | ||
273 | u32 invalid_transmission_word_error_count; | ||
274 | u32 crc_error_count; | ||
275 | u32 primitive_sequence_event_timeout_count; | ||
276 | u32 elastic_buffer_overrun_error_count; | ||
277 | u32 fcal_arbitration_timeout_count; | ||
278 | u32 advertised_receive_b2b_credit; | ||
279 | u32 current_receive_b2b_credit; | ||
280 | u32 advertised_transmit_b2b_credit; | ||
281 | u32 current_transmit_b2b_credit; | ||
282 | } __attribute__ ((packed)); | ||
283 | |||
284 | struct fsf_status_read_buffer { | ||
285 | u32 status_type; | ||
286 | u32 status_subtype; | ||
287 | u32 length; | ||
288 | u32 res1; | ||
289 | struct fsf_queue_designator queue_designator; | ||
290 | u32 d_id; | ||
291 | u32 class; | ||
292 | u64 fcp_lun; | ||
293 | u8 res3[24]; | ||
294 | u8 payload[FSF_STATUS_READ_PAYLOAD_SIZE]; | ||
295 | } __attribute__ ((packed)); | ||
296 | |||
297 | struct fsf_qual_version_error { | ||
298 | u32 fsf_version; | ||
299 | u32 res1[3]; | ||
300 | } __attribute__ ((packed)); | ||
301 | |||
302 | struct fsf_qual_sequence_error { | ||
303 | u32 exp_req_seq_no; | ||
304 | u32 res1[3]; | ||
305 | } __attribute__ ((packed)); | ||
306 | |||
307 | struct fsf_qual_locallink_error { | ||
308 | u32 code; | ||
309 | u32 res1[3]; | ||
310 | } __attribute__ ((packed)); | ||
311 | |||
312 | union fsf_prot_status_qual { | ||
313 | struct fsf_qual_version_error version_error; | ||
314 | struct fsf_qual_sequence_error sequence_error; | ||
315 | struct fsf_qual_locallink_error locallink_error; | ||
316 | } __attribute__ ((packed)); | ||
317 | |||
318 | struct fsf_qtcb_prefix { | ||
319 | u64 req_id; | ||
320 | u32 qtcb_version; | ||
321 | u32 ulp_info; | ||
322 | u32 qtcb_type; | ||
323 | u32 req_seq_no; | ||
324 | u32 prot_status; | ||
325 | union fsf_prot_status_qual prot_status_qual; | ||
326 | u8 res1[20]; | ||
327 | } __attribute__ ((packed)); | ||
328 | |||
329 | union fsf_status_qual { | ||
330 | u8 byte[FSF_STATUS_QUALIFIER_SIZE]; | ||
331 | u16 halfword[FSF_STATUS_QUALIFIER_SIZE / sizeof (u16)]; | ||
332 | u32 word[FSF_STATUS_QUALIFIER_SIZE / sizeof (u32)]; | ||
333 | struct fsf_queue_designator fsf_queue_designator; | ||
334 | } __attribute__ ((packed)); | ||
335 | |||
336 | struct fsf_qtcb_header { | ||
337 | u64 req_handle; | ||
338 | u32 fsf_command; | ||
339 | u32 res1; | ||
340 | u32 port_handle; | ||
341 | u32 lun_handle; | ||
342 | u32 res2; | ||
343 | u32 fsf_status; | ||
344 | union fsf_status_qual fsf_status_qual; | ||
345 | u8 res3[28]; | ||
346 | u16 log_start; | ||
347 | u16 log_length; | ||
348 | u8 res4[16]; | ||
349 | } __attribute__ ((packed)); | ||
350 | |||
351 | struct fsf_nport_serv_param { | ||
352 | u8 common_serv_param[16]; | ||
353 | u64 wwpn; | ||
354 | u64 wwnn; | ||
355 | u8 class1_serv_param[16]; | ||
356 | u8 class2_serv_param[16]; | ||
357 | u8 class3_serv_param[16]; | ||
358 | u8 class4_serv_param[16]; | ||
359 | u8 vendor_version_level[16]; | ||
360 | u8 res1[16]; | ||
361 | } __attribute__ ((packed)); | ||
362 | |||
363 | struct fsf_plogi { | ||
364 | u32 code; | ||
365 | struct fsf_nport_serv_param serv_param; | ||
366 | } __attribute__ ((packed)); | ||
367 | |||
368 | #define FSF_FCP_CMND_SIZE 288 | ||
369 | #define FSF_FCP_RSP_SIZE 128 | ||
370 | |||
371 | struct fsf_qtcb_bottom_io { | ||
372 | u32 data_direction; | ||
373 | u32 service_class; | ||
374 | u8 res1[8]; | ||
375 | u32 fcp_cmnd_length; | ||
376 | u8 res2[12]; | ||
377 | u8 fcp_cmnd[FSF_FCP_CMND_SIZE]; | ||
378 | u8 fcp_rsp[FSF_FCP_RSP_SIZE]; | ||
379 | u8 res3[64]; | ||
380 | } __attribute__ ((packed)); | ||
381 | |||
382 | struct fsf_qtcb_bottom_support { | ||
383 | u32 operation_subtype; | ||
384 | u8 res1[12]; | ||
385 | u32 d_id; | ||
386 | u32 option; | ||
387 | u64 fcp_lun; | ||
388 | u64 res2; | ||
389 | u64 req_handle; | ||
390 | u32 service_class; | ||
391 | u8 res3[3]; | ||
392 | u8 timeout; | ||
393 | u32 lun_access_info; | ||
394 | u8 res4[180]; | ||
395 | u32 els1_length; | ||
396 | u32 els2_length; | ||
397 | u32 req_buf_length; | ||
398 | u32 resp_buf_length; | ||
399 | u8 els[256]; | ||
400 | } __attribute__ ((packed)); | ||
401 | |||
402 | struct fsf_qtcb_bottom_config { | ||
403 | u32 lic_version; | ||
404 | u32 feature_selection; | ||
405 | u32 high_qtcb_version; | ||
406 | u32 low_qtcb_version; | ||
407 | u32 max_qtcb_size; | ||
408 | u32 max_data_transfer_size; | ||
409 | u32 supported_features; | ||
410 | u8 res1[4]; | ||
411 | u32 fc_topology; | ||
412 | u32 fc_link_speed; | ||
413 | u32 adapter_type; | ||
414 | u32 peer_d_id; | ||
415 | u8 res2[12]; | ||
416 | u32 s_id; | ||
417 | struct fsf_nport_serv_param nport_serv_param; | ||
418 | u8 res3[8]; | ||
419 | u32 adapter_ports; | ||
420 | u32 hardware_version; | ||
421 | u8 serial_number[32]; | ||
422 | u8 res4[272]; | ||
423 | } __attribute__ ((packed)); | ||
424 | |||
425 | struct fsf_qtcb_bottom_port { | ||
426 | u8 res1[8]; | ||
427 | u32 fc_port_id; | ||
428 | u32 port_type; | ||
429 | u32 port_state; | ||
430 | u32 class_of_service; /* should be 0x00000006 for class 2 and 3 */ | ||
431 | u8 supported_fc4_types[32]; /* should be 0x00000100 for scsi fcp */ | ||
432 | u8 active_fc4_types[32]; | ||
433 | u32 supported_speed; /* 0x0001 for 1 GBit/s or 0x0002 for 2 GBit/s */ | ||
434 | u32 maximum_frame_size; /* fixed value of 2112 */ | ||
435 | u64 seconds_since_last_reset; | ||
436 | u64 tx_frames; | ||
437 | u64 tx_words; | ||
438 | u64 rx_frames; | ||
439 | u64 rx_words; | ||
440 | u64 lip; /* 0 */ | ||
441 | u64 nos; /* currently 0 */ | ||
442 | u64 error_frames; /* currently 0 */ | ||
443 | u64 dumped_frames; /* currently 0 */ | ||
444 | u64 link_failure; | ||
445 | u64 loss_of_sync; | ||
446 | u64 loss_of_signal; | ||
447 | u64 psp_error_counts; | ||
448 | u64 invalid_tx_words; | ||
449 | u64 invalid_crcs; | ||
450 | u64 input_requests; | ||
451 | u64 output_requests; | ||
452 | u64 control_requests; | ||
453 | u64 input_mb; /* where 1 MByte == 1.000.000 Bytes */ | ||
454 | u64 output_mb; /* where 1 MByte == 1.000.000 Bytes */ | ||
455 | u8 res2[256]; | ||
456 | } __attribute__ ((packed)); | ||
457 | |||
458 | union fsf_qtcb_bottom { | ||
459 | struct fsf_qtcb_bottom_io io; | ||
460 | struct fsf_qtcb_bottom_support support; | ||
461 | struct fsf_qtcb_bottom_config config; | ||
462 | struct fsf_qtcb_bottom_port port; | ||
463 | }; | ||
464 | |||
465 | struct fsf_qtcb { | ||
466 | struct fsf_qtcb_prefix prefix; | ||
467 | struct fsf_qtcb_header header; | ||
468 | union fsf_qtcb_bottom bottom; | ||
469 | u8 log[FSF_QTCB_LOG_SIZE]; | ||
470 | } __attribute__ ((packed)); | ||
471 | |||
472 | #endif /* FSF_H */ | ||