diff options
Diffstat (limited to 'drivers/s390/scsi/zfcp_def.h')
-rw-r--r-- | drivers/s390/scsi/zfcp_def.h | 307 |
1 files changed, 195 insertions, 112 deletions
diff --git a/drivers/s390/scsi/zfcp_def.h b/drivers/s390/scsi/zfcp_def.h index 455e902533a9..d81b737d68cc 100644 --- a/drivers/s390/scsi/zfcp_def.h +++ b/drivers/s390/scsi/zfcp_def.h | |||
@@ -66,7 +66,7 @@ | |||
66 | /********************* GENERAL DEFINES *********************************/ | 66 | /********************* GENERAL DEFINES *********************************/ |
67 | 67 | ||
68 | /* zfcp version number, it consists of major, minor, and patch-level number */ | 68 | /* zfcp version number, it consists of major, minor, and patch-level number */ |
69 | #define ZFCP_VERSION "4.3.0" | 69 | #define ZFCP_VERSION "4.5.0" |
70 | 70 | ||
71 | /** | 71 | /** |
72 | * zfcp_sg_to_address - determine kernel address from struct scatterlist | 72 | * zfcp_sg_to_address - determine kernel address from struct scatterlist |
@@ -154,13 +154,17 @@ typedef u32 scsi_lun_t; | |||
154 | #define ZFCP_EXCHANGE_CONFIG_DATA_FIRST_SLEEP 100 | 154 | #define ZFCP_EXCHANGE_CONFIG_DATA_FIRST_SLEEP 100 |
155 | #define ZFCP_EXCHANGE_CONFIG_DATA_RETRIES 7 | 155 | #define ZFCP_EXCHANGE_CONFIG_DATA_RETRIES 7 |
156 | 156 | ||
157 | /* Retry 5 times every 2 second, then every minute */ | ||
158 | #define ZFCP_EXCHANGE_PORT_DATA_SHORT_RETRIES 5 | ||
159 | #define ZFCP_EXCHANGE_PORT_DATA_SHORT_SLEEP 200 | ||
160 | #define ZFCP_EXCHANGE_PORT_DATA_LONG_SLEEP 6000 | ||
161 | |||
157 | /* timeout value for "default timer" for fsf requests */ | 162 | /* timeout value for "default timer" for fsf requests */ |
158 | #define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ); | 163 | #define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ); |
159 | 164 | ||
160 | /*************** FIBRE CHANNEL PROTOCOL SPECIFIC DEFINES ********************/ | 165 | /*************** FIBRE CHANNEL PROTOCOL SPECIFIC DEFINES ********************/ |
161 | 166 | ||
162 | typedef unsigned long long wwn_t; | 167 | typedef unsigned long long wwn_t; |
163 | typedef unsigned int fc_id_t; | ||
164 | typedef unsigned long long fcp_lun_t; | 168 | typedef unsigned long long fcp_lun_t; |
165 | /* data length field may be at variable position in FCP-2 FCP_CMND IU */ | 169 | /* data length field may be at variable position in FCP-2 FCP_CMND IU */ |
166 | typedef unsigned int fcp_dl_t; | 170 | typedef unsigned int fcp_dl_t; |
@@ -281,6 +285,171 @@ struct fcp_logo { | |||
281 | } __attribute__((packed)); | 285 | } __attribute__((packed)); |
282 | 286 | ||
283 | /* | 287 | /* |
288 | * DBF stuff | ||
289 | */ | ||
290 | #define ZFCP_DBF_TAG_SIZE 4 | ||
291 | |||
292 | struct zfcp_dbf_dump { | ||
293 | u8 tag[ZFCP_DBF_TAG_SIZE]; | ||
294 | u32 total_size; /* size of total dump data */ | ||
295 | u32 offset; /* how much data has being already dumped */ | ||
296 | u32 size; /* how much data comes with this record */ | ||
297 | u8 data[]; /* dump data */ | ||
298 | } __attribute__ ((packed)); | ||
299 | |||
300 | /* FIXME: to be inflated when reworking the erp dbf */ | ||
301 | struct zfcp_erp_dbf_record { | ||
302 | u8 dummy[16]; | ||
303 | } __attribute__ ((packed)); | ||
304 | |||
305 | struct zfcp_hba_dbf_record_response { | ||
306 | u32 fsf_command; | ||
307 | u64 fsf_reqid; | ||
308 | u32 fsf_seqno; | ||
309 | u64 fsf_issued; | ||
310 | u32 fsf_prot_status; | ||
311 | u32 fsf_status; | ||
312 | u8 fsf_prot_status_qual[FSF_PROT_STATUS_QUAL_SIZE]; | ||
313 | u8 fsf_status_qual[FSF_STATUS_QUALIFIER_SIZE]; | ||
314 | u32 fsf_req_status; | ||
315 | u8 sbal_first; | ||
316 | u8 sbal_curr; | ||
317 | u8 sbal_last; | ||
318 | u8 pool; | ||
319 | u64 erp_action; | ||
320 | union { | ||
321 | struct { | ||
322 | u64 scsi_cmnd; | ||
323 | u64 scsi_serial; | ||
324 | } send_fcp; | ||
325 | struct { | ||
326 | u64 wwpn; | ||
327 | u32 d_id; | ||
328 | u32 port_handle; | ||
329 | } port; | ||
330 | struct { | ||
331 | u64 wwpn; | ||
332 | u64 fcp_lun; | ||
333 | u32 port_handle; | ||
334 | u32 lun_handle; | ||
335 | } unit; | ||
336 | struct { | ||
337 | u32 d_id; | ||
338 | u8 ls_code; | ||
339 | } send_els; | ||
340 | } data; | ||
341 | } __attribute__ ((packed)); | ||
342 | |||
343 | struct zfcp_hba_dbf_record_status { | ||
344 | u8 failed; | ||
345 | u32 status_type; | ||
346 | u32 status_subtype; | ||
347 | struct fsf_queue_designator | ||
348 | queue_designator; | ||
349 | u32 payload_size; | ||
350 | #define ZFCP_DBF_UNSOL_PAYLOAD 80 | ||
351 | #define ZFCP_DBF_UNSOL_PAYLOAD_SENSE_DATA_AVAIL 32 | ||
352 | #define ZFCP_DBF_UNSOL_PAYLOAD_BIT_ERROR_THRESHOLD 56 | ||
353 | #define ZFCP_DBF_UNSOL_PAYLOAD_FEATURE_UPDATE_ALERT 2 * sizeof(u32) | ||
354 | u8 payload[ZFCP_DBF_UNSOL_PAYLOAD]; | ||
355 | } __attribute__ ((packed)); | ||
356 | |||
357 | struct zfcp_hba_dbf_record_qdio { | ||
358 | u32 status; | ||
359 | u32 qdio_error; | ||
360 | u32 siga_error; | ||
361 | u8 sbal_index; | ||
362 | u8 sbal_count; | ||
363 | } __attribute__ ((packed)); | ||
364 | |||
365 | struct zfcp_hba_dbf_record { | ||
366 | u8 tag[ZFCP_DBF_TAG_SIZE]; | ||
367 | u8 tag2[ZFCP_DBF_TAG_SIZE]; | ||
368 | union { | ||
369 | struct zfcp_hba_dbf_record_response response; | ||
370 | struct zfcp_hba_dbf_record_status status; | ||
371 | struct zfcp_hba_dbf_record_qdio qdio; | ||
372 | } type; | ||
373 | } __attribute__ ((packed)); | ||
374 | |||
375 | struct zfcp_san_dbf_record_ct { | ||
376 | union { | ||
377 | struct { | ||
378 | u16 cmd_req_code; | ||
379 | u8 revision; | ||
380 | u8 gs_type; | ||
381 | u8 gs_subtype; | ||
382 | u8 options; | ||
383 | u16 max_res_size; | ||
384 | } request; | ||
385 | struct { | ||
386 | u16 cmd_rsp_code; | ||
387 | u8 revision; | ||
388 | u8 reason_code; | ||
389 | u8 reason_code_expl; | ||
390 | u8 vendor_unique; | ||
391 | } response; | ||
392 | } type; | ||
393 | u32 payload_size; | ||
394 | #define ZFCP_DBF_CT_PAYLOAD 24 | ||
395 | u8 payload[ZFCP_DBF_CT_PAYLOAD]; | ||
396 | } __attribute__ ((packed)); | ||
397 | |||
398 | struct zfcp_san_dbf_record_els { | ||
399 | u8 ls_code; | ||
400 | u32 payload_size; | ||
401 | #define ZFCP_DBF_ELS_PAYLOAD 32 | ||
402 | #define ZFCP_DBF_ELS_MAX_PAYLOAD 1024 | ||
403 | u8 payload[ZFCP_DBF_ELS_PAYLOAD]; | ||
404 | } __attribute__ ((packed)); | ||
405 | |||
406 | struct zfcp_san_dbf_record { | ||
407 | u8 tag[ZFCP_DBF_TAG_SIZE]; | ||
408 | u64 fsf_reqid; | ||
409 | u32 fsf_seqno; | ||
410 | u32 s_id; | ||
411 | u32 d_id; | ||
412 | union { | ||
413 | struct zfcp_san_dbf_record_ct ct; | ||
414 | struct zfcp_san_dbf_record_els els; | ||
415 | } type; | ||
416 | } __attribute__ ((packed)); | ||
417 | |||
418 | struct zfcp_scsi_dbf_record { | ||
419 | u8 tag[ZFCP_DBF_TAG_SIZE]; | ||
420 | u8 tag2[ZFCP_DBF_TAG_SIZE]; | ||
421 | u32 scsi_id; | ||
422 | u32 scsi_lun; | ||
423 | u32 scsi_result; | ||
424 | u64 scsi_cmnd; | ||
425 | u64 scsi_serial; | ||
426 | #define ZFCP_DBF_SCSI_OPCODE 16 | ||
427 | u8 scsi_opcode[ZFCP_DBF_SCSI_OPCODE]; | ||
428 | u8 scsi_retries; | ||
429 | u8 scsi_allowed; | ||
430 | u64 fsf_reqid; | ||
431 | u32 fsf_seqno; | ||
432 | u64 fsf_issued; | ||
433 | union { | ||
434 | struct { | ||
435 | u64 fsf_reqid; | ||
436 | u32 fsf_seqno; | ||
437 | u64 fsf_issued; | ||
438 | } new_fsf_req; | ||
439 | struct { | ||
440 | u8 rsp_validity; | ||
441 | u8 rsp_scsi_status; | ||
442 | u32 rsp_resid; | ||
443 | u8 rsp_code; | ||
444 | #define ZFCP_DBF_SCSI_FCP_SNS_INFO 16 | ||
445 | #define ZFCP_DBF_SCSI_MAX_FCP_SNS_INFO 256 | ||
446 | u32 sns_info_len; | ||
447 | u8 sns_info[ZFCP_DBF_SCSI_FCP_SNS_INFO]; | ||
448 | } fcp; | ||
449 | } type; | ||
450 | } __attribute__ ((packed)); | ||
451 | |||
452 | /* | ||
284 | * FC-FS stuff | 453 | * FC-FS stuff |
285 | */ | 454 | */ |
286 | #define R_A_TOV 10 /* seconds */ | 455 | #define R_A_TOV 10 /* seconds */ |
@@ -339,34 +508,6 @@ struct zfcp_rc_entry { | |||
339 | */ | 508 | */ |
340 | #define ZFCP_CT_TIMEOUT (3 * R_A_TOV) | 509 | #define ZFCP_CT_TIMEOUT (3 * R_A_TOV) |
341 | 510 | ||
342 | |||
343 | /***************** S390 DEBUG FEATURE SPECIFIC DEFINES ***********************/ | ||
344 | |||
345 | /* debug feature entries per adapter */ | ||
346 | #define ZFCP_ERP_DBF_INDEX 1 | ||
347 | #define ZFCP_ERP_DBF_AREAS 2 | ||
348 | #define ZFCP_ERP_DBF_LENGTH 16 | ||
349 | #define ZFCP_ERP_DBF_LEVEL 3 | ||
350 | #define ZFCP_ERP_DBF_NAME "zfcperp" | ||
351 | |||
352 | #define ZFCP_CMD_DBF_INDEX 2 | ||
353 | #define ZFCP_CMD_DBF_AREAS 1 | ||
354 | #define ZFCP_CMD_DBF_LENGTH 8 | ||
355 | #define ZFCP_CMD_DBF_LEVEL 3 | ||
356 | #define ZFCP_CMD_DBF_NAME "zfcpcmd" | ||
357 | |||
358 | #define ZFCP_ABORT_DBF_INDEX 2 | ||
359 | #define ZFCP_ABORT_DBF_AREAS 1 | ||
360 | #define ZFCP_ABORT_DBF_LENGTH 8 | ||
361 | #define ZFCP_ABORT_DBF_LEVEL 6 | ||
362 | #define ZFCP_ABORT_DBF_NAME "zfcpabt" | ||
363 | |||
364 | #define ZFCP_IN_ELS_DBF_INDEX 2 | ||
365 | #define ZFCP_IN_ELS_DBF_AREAS 1 | ||
366 | #define ZFCP_IN_ELS_DBF_LENGTH 8 | ||
367 | #define ZFCP_IN_ELS_DBF_LEVEL 6 | ||
368 | #define ZFCP_IN_ELS_DBF_NAME "zfcpels" | ||
369 | |||
370 | /******************** LOGGING MACROS AND DEFINES *****************************/ | 511 | /******************** LOGGING MACROS AND DEFINES *****************************/ |
371 | 512 | ||
372 | /* | 513 | /* |
@@ -501,6 +642,7 @@ do { \ | |||
501 | #define ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL 0x00000080 | 642 | #define ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL 0x00000080 |
502 | #define ZFCP_STATUS_ADAPTER_ERP_PENDING 0x00000100 | 643 | #define ZFCP_STATUS_ADAPTER_ERP_PENDING 0x00000100 |
503 | #define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200 | 644 | #define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200 |
645 | #define ZFCP_STATUS_ADAPTER_XPORT_OK 0x00000800 | ||
504 | 646 | ||
505 | #define ZFCP_STATUS_ADAPTER_SCSI_UP \ | 647 | #define ZFCP_STATUS_ADAPTER_SCSI_UP \ |
506 | (ZFCP_STATUS_COMMON_UNBLOCKED | \ | 648 | (ZFCP_STATUS_COMMON_UNBLOCKED | \ |
@@ -635,45 +777,6 @@ struct zfcp_adapter_mempool { | |||
635 | mempool_t *data_gid_pn; | 777 | mempool_t *data_gid_pn; |
636 | }; | 778 | }; |
637 | 779 | ||
638 | struct zfcp_exchange_config_data{ | ||
639 | }; | ||
640 | |||
641 | struct zfcp_open_port { | ||
642 | struct zfcp_port *port; | ||
643 | }; | ||
644 | |||
645 | struct zfcp_close_port { | ||
646 | struct zfcp_port *port; | ||
647 | }; | ||
648 | |||
649 | struct zfcp_open_unit { | ||
650 | struct zfcp_unit *unit; | ||
651 | }; | ||
652 | |||
653 | struct zfcp_close_unit { | ||
654 | struct zfcp_unit *unit; | ||
655 | }; | ||
656 | |||
657 | struct zfcp_close_physical_port { | ||
658 | struct zfcp_port *port; | ||
659 | }; | ||
660 | |||
661 | struct zfcp_send_fcp_command_task { | ||
662 | struct zfcp_fsf_req *fsf_req; | ||
663 | struct zfcp_unit *unit; | ||
664 | struct scsi_cmnd *scsi_cmnd; | ||
665 | unsigned long start_jiffies; | ||
666 | }; | ||
667 | |||
668 | struct zfcp_send_fcp_command_task_management { | ||
669 | struct zfcp_unit *unit; | ||
670 | }; | ||
671 | |||
672 | struct zfcp_abort_fcp_command { | ||
673 | struct zfcp_fsf_req *fsf_req; | ||
674 | struct zfcp_unit *unit; | ||
675 | }; | ||
676 | |||
677 | /* | 780 | /* |
678 | * header for CT_IU | 781 | * header for CT_IU |
679 | */ | 782 | */ |
@@ -702,7 +805,7 @@ struct ct_iu_gid_pn_req { | |||
702 | /* FS_ACC IU and data unit for GID_PN nameserver request */ | 805 | /* FS_ACC IU and data unit for GID_PN nameserver request */ |
703 | struct ct_iu_gid_pn_resp { | 806 | struct ct_iu_gid_pn_resp { |
704 | struct ct_hdr header; | 807 | struct ct_hdr header; |
705 | fc_id_t d_id; | 808 | u32 d_id; |
706 | } __attribute__ ((packed)); | 809 | } __attribute__ ((packed)); |
707 | 810 | ||
708 | typedef void (*zfcp_send_ct_handler_t)(unsigned long); | 811 | typedef void (*zfcp_send_ct_handler_t)(unsigned long); |
@@ -768,7 +871,7 @@ typedef void (*zfcp_send_els_handler_t)(unsigned long); | |||
768 | struct zfcp_send_els { | 871 | struct zfcp_send_els { |
769 | struct zfcp_adapter *adapter; | 872 | struct zfcp_adapter *adapter; |
770 | struct zfcp_port *port; | 873 | struct zfcp_port *port; |
771 | fc_id_t d_id; | 874 | u32 d_id; |
772 | struct scatterlist *req; | 875 | struct scatterlist *req; |
773 | struct scatterlist *resp; | 876 | struct scatterlist *resp; |
774 | unsigned int req_count; | 877 | unsigned int req_count; |
@@ -781,33 +884,6 @@ struct zfcp_send_els { | |||
781 | int status; | 884 | int status; |
782 | }; | 885 | }; |
783 | 886 | ||
784 | struct zfcp_status_read { | ||
785 | struct fsf_status_read_buffer *buffer; | ||
786 | }; | ||
787 | |||
788 | struct zfcp_fsf_done { | ||
789 | struct completion *complete; | ||
790 | int status; | ||
791 | }; | ||
792 | |||
793 | /* request specific data */ | ||
794 | union zfcp_req_data { | ||
795 | struct zfcp_exchange_config_data exchange_config_data; | ||
796 | struct zfcp_open_port open_port; | ||
797 | struct zfcp_close_port close_port; | ||
798 | struct zfcp_open_unit open_unit; | ||
799 | struct zfcp_close_unit close_unit; | ||
800 | struct zfcp_close_physical_port close_physical_port; | ||
801 | struct zfcp_send_fcp_command_task send_fcp_command_task; | ||
802 | struct zfcp_send_fcp_command_task_management | ||
803 | send_fcp_command_task_management; | ||
804 | struct zfcp_abort_fcp_command abort_fcp_command; | ||
805 | struct zfcp_send_ct *send_ct; | ||
806 | struct zfcp_send_els *send_els; | ||
807 | struct zfcp_status_read status_read; | ||
808 | struct fsf_qtcb_bottom_port *port_data; | ||
809 | }; | ||
810 | |||
811 | struct zfcp_qdio_queue { | 887 | struct zfcp_qdio_queue { |
812 | struct qdio_buffer *buffer[QDIO_MAX_BUFFERS_PER_Q]; /* SBALs */ | 888 | struct qdio_buffer *buffer[QDIO_MAX_BUFFERS_PER_Q]; /* SBALs */ |
813 | u8 free_index; /* index of next free bfr | 889 | u8 free_index; /* index of next free bfr |
@@ -838,21 +914,19 @@ struct zfcp_adapter { | |||
838 | atomic_t refcount; /* reference count */ | 914 | atomic_t refcount; /* reference count */ |
839 | wait_queue_head_t remove_wq; /* can be used to wait for | 915 | wait_queue_head_t remove_wq; /* can be used to wait for |
840 | refcount drop to zero */ | 916 | refcount drop to zero */ |
841 | wwn_t wwnn; /* WWNN */ | ||
842 | wwn_t wwpn; /* WWPN */ | ||
843 | fc_id_t s_id; /* N_Port ID */ | ||
844 | wwn_t peer_wwnn; /* P2P peer WWNN */ | 917 | wwn_t peer_wwnn; /* P2P peer WWNN */ |
845 | wwn_t peer_wwpn; /* P2P peer WWPN */ | 918 | wwn_t peer_wwpn; /* P2P peer WWPN */ |
846 | fc_id_t peer_d_id; /* P2P peer D_ID */ | 919 | u32 peer_d_id; /* P2P peer D_ID */ |
920 | wwn_t physical_wwpn; /* WWPN of physical port */ | ||
921 | u32 physical_s_id; /* local FC port ID */ | ||
847 | struct ccw_device *ccw_device; /* S/390 ccw device */ | 922 | struct ccw_device *ccw_device; /* S/390 ccw device */ |
848 | u8 fc_service_class; | 923 | u8 fc_service_class; |
849 | u32 fc_topology; /* FC topology */ | 924 | u32 fc_topology; /* FC topology */ |
850 | u32 fc_link_speed; /* FC interface speed */ | ||
851 | u32 hydra_version; /* Hydra version */ | 925 | u32 hydra_version; /* Hydra version */ |
852 | u32 fsf_lic_version; | 926 | u32 fsf_lic_version; |
853 | u32 supported_features;/* of FCP channel */ | 927 | u32 adapter_features; /* FCP channel features */ |
928 | u32 connection_features; /* host connection features */ | ||
854 | u32 hardware_version; /* of FCP channel */ | 929 | u32 hardware_version; /* of FCP channel */ |
855 | u8 serial_number[32]; /* of hardware */ | ||
856 | struct Scsi_Host *scsi_host; /* Pointer to mid-layer */ | 930 | struct Scsi_Host *scsi_host; /* Pointer to mid-layer */ |
857 | unsigned short scsi_host_no; /* Assigned host number */ | 931 | unsigned short scsi_host_no; /* Assigned host number */ |
858 | unsigned char name[9]; | 932 | unsigned char name[9]; |
@@ -889,11 +963,18 @@ struct zfcp_adapter { | |||
889 | u32 erp_low_mem_count; /* nr of erp actions waiting | 963 | u32 erp_low_mem_count; /* nr of erp actions waiting |
890 | for memory */ | 964 | for memory */ |
891 | struct zfcp_port *nameserver_port; /* adapter's nameserver */ | 965 | struct zfcp_port *nameserver_port; /* adapter's nameserver */ |
892 | debug_info_t *erp_dbf; /* S/390 debug features */ | 966 | debug_info_t *erp_dbf; |
893 | debug_info_t *abort_dbf; | 967 | debug_info_t *hba_dbf; |
894 | debug_info_t *in_els_dbf; | 968 | debug_info_t *san_dbf; /* debug feature areas */ |
895 | debug_info_t *cmd_dbf; | 969 | debug_info_t *scsi_dbf; |
896 | spinlock_t dbf_lock; | 970 | spinlock_t erp_dbf_lock; |
971 | spinlock_t hba_dbf_lock; | ||
972 | spinlock_t san_dbf_lock; | ||
973 | spinlock_t scsi_dbf_lock; | ||
974 | struct zfcp_erp_dbf_record erp_dbf_buf; | ||
975 | struct zfcp_hba_dbf_record hba_dbf_buf; | ||
976 | struct zfcp_san_dbf_record san_dbf_buf; | ||
977 | struct zfcp_scsi_dbf_record scsi_dbf_buf; | ||
897 | struct zfcp_adapter_mempool pool; /* Adapter memory pools */ | 978 | struct zfcp_adapter_mempool pool; /* Adapter memory pools */ |
898 | struct qdio_initialize qdio_init_data; /* for qdio_establish */ | 979 | struct qdio_initialize qdio_init_data; /* for qdio_establish */ |
899 | struct device generic_services; /* directory for WKA ports */ | 980 | struct device generic_services; /* directory for WKA ports */ |
@@ -919,7 +1000,7 @@ struct zfcp_port { | |||
919 | atomic_t status; /* status of this remote port */ | 1000 | atomic_t status; /* status of this remote port */ |
920 | wwn_t wwnn; /* WWNN if known */ | 1001 | wwn_t wwnn; /* WWNN if known */ |
921 | wwn_t wwpn; /* WWPN */ | 1002 | wwn_t wwpn; /* WWPN */ |
922 | fc_id_t d_id; /* D_ID */ | 1003 | u32 d_id; /* D_ID */ |
923 | u32 handle; /* handle assigned by FSF */ | 1004 | u32 handle; /* handle assigned by FSF */ |
924 | struct zfcp_erp_action erp_action; /* pending error recovery */ | 1005 | struct zfcp_erp_action erp_action; /* pending error recovery */ |
925 | atomic_t erp_counter; | 1006 | atomic_t erp_counter; |
@@ -963,11 +1044,13 @@ struct zfcp_fsf_req { | |||
963 | u32 fsf_command; /* FSF Command copy */ | 1044 | u32 fsf_command; /* FSF Command copy */ |
964 | struct fsf_qtcb *qtcb; /* address of associated QTCB */ | 1045 | struct fsf_qtcb *qtcb; /* address of associated QTCB */ |
965 | u32 seq_no; /* Sequence number of request */ | 1046 | u32 seq_no; /* Sequence number of request */ |
966 | union zfcp_req_data data; /* Info fields of request */ | 1047 | unsigned long data; /* private data of request */ |
967 | struct zfcp_erp_action *erp_action; /* used if this request is | 1048 | struct zfcp_erp_action *erp_action; /* used if this request is |
968 | issued on behalf of erp */ | 1049 | issued on behalf of erp */ |
969 | mempool_t *pool; /* used if request was alloacted | 1050 | mempool_t *pool; /* used if request was alloacted |
970 | from emergency pool */ | 1051 | from emergency pool */ |
1052 | unsigned long long issued; /* request sent time (STCK) */ | ||
1053 | struct zfcp_unit *unit; | ||
971 | }; | 1054 | }; |
972 | 1055 | ||
973 | typedef void zfcp_fsf_req_handler_t(struct zfcp_fsf_req*); | 1056 | typedef void zfcp_fsf_req_handler_t(struct zfcp_fsf_req*); |