| Swen Schillig | 41fa2ad | 2007-09-07 09:15:31 +0200 | [diff] [blame] | 1 | /* | 
| Christof Schmitt | 553448f | 2008-06-10 18:20:58 +0200 | [diff] [blame] | 2 |  * zfcp device driver | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 3 |  * | 
| Christof Schmitt | 553448f | 2008-06-10 18:20:58 +0200 | [diff] [blame] | 4 |  * Global definitions for the zfcp device driver. | 
| Swen Schillig | 41fa2ad | 2007-09-07 09:15:31 +0200 | [diff] [blame] | 5 |  * | 
| Christof Schmitt | 615f59e | 2010-02-17 11:18:56 +0100 | [diff] [blame] | 6 |  * Copyright IBM Corporation 2002, 2010 | 
| Swen Schillig | 41fa2ad | 2007-09-07 09:15:31 +0200 | [diff] [blame] | 7 |  */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 8 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 9 | #ifndef ZFCP_DEF_H | 
 | 10 | #define ZFCP_DEF_H | 
 | 11 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 12 | /*************************** INCLUDES *****************************************/ | 
 | 13 |  | 
 | 14 | #include <linux/init.h> | 
 | 15 | #include <linux/moduleparam.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 16 | #include <linux/major.h> | 
 | 17 | #include <linux/blkdev.h> | 
 | 18 | #include <linux/delay.h> | 
 | 19 | #include <linux/timer.h> | 
| Heiko Carstens | dd52e0e | 2006-09-18 22:28:49 +0200 | [diff] [blame] | 20 | #include <linux/slab.h> | 
 | 21 | #include <linux/mempool.h> | 
 | 22 | #include <linux/syscalls.h> | 
| FUJITA Tomonori | f134637 | 2007-07-30 23:01:32 +0900 | [diff] [blame] | 23 | #include <linux/scatterlist.h> | 
| Heiko Carstens | dd52e0e | 2006-09-18 22:28:49 +0200 | [diff] [blame] | 24 | #include <linux/ioctl.h> | 
| Sven Schuetz | 9d544f2 | 2009-04-06 18:31:47 +0200 | [diff] [blame] | 25 | #include <scsi/fc/fc_fs.h> | 
 | 26 | #include <scsi/fc/fc_gs.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 27 | #include <scsi/scsi.h> | 
 | 28 | #include <scsi/scsi_tcq.h> | 
 | 29 | #include <scsi/scsi_cmnd.h> | 
 | 30 | #include <scsi/scsi_device.h> | 
 | 31 | #include <scsi/scsi_host.h> | 
 | 32 | #include <scsi/scsi_transport.h> | 
 | 33 | #include <scsi/scsi_transport_fc.h> | 
| Sven Schuetz | 9d544f2 | 2009-04-06 18:31:47 +0200 | [diff] [blame] | 34 | #include <scsi/scsi_bsg_fc.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 35 | #include <asm/ccwdev.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 36 | #include <asm/debug.h> | 
 | 37 | #include <asm/ebcdic.h> | 
| Christof Schmitt | bd43a42 | 2008-12-25 13:38:50 +0100 | [diff] [blame] | 38 | #include <asm/sysinfo.h> | 
| Heiko Carstens | dd52e0e | 2006-09-18 22:28:49 +0200 | [diff] [blame] | 39 | #include "zfcp_fsf.h" | 
| Sven Schuetz | 2d1e547 | 2010-07-16 15:37:39 +0200 | [diff] [blame] | 40 | #include "zfcp_fc.h" | 
| Christof Schmitt | 34c2b71 | 2010-02-17 11:18:59 +0100 | [diff] [blame] | 41 | #include "zfcp_qdio.h" | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 42 |  | 
| Christof Schmitt | b6bd2fb | 2010-02-17 11:18:50 +0100 | [diff] [blame] | 43 | struct zfcp_reqlist; | 
| Andreas Herrmann | 06506d0 | 2006-05-22 18:18:19 +0200 | [diff] [blame] | 44 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 45 | /********************* SCSI SPECIFIC DEFINES *********************************/ | 
| Andreas Herrmann | f6c0e7a | 2006-08-02 11:05:52 +0200 | [diff] [blame] | 46 | #define ZFCP_SCSI_ER_TIMEOUT                    (10*HZ) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 47 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 48 | /********************* FSF SPECIFIC DEFINES *********************************/ | 
 | 49 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 50 | /* ATTENTION: value must not be used by hardware */ | 
 | 51 | #define FSF_QTCB_UNSOLICITED_STATUS		0x6305 | 
| Andreas Herrmann | 22753fa | 2005-06-13 13:15:15 +0200 | [diff] [blame] | 52 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 53 | /* timeout value for "default timer" for fsf requests */ | 
| Andreas Herrmann | 2abbe86 | 2006-09-18 22:29:56 +0200 | [diff] [blame] | 54 | #define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 55 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 56 | /*************** ADAPTER/PORT/UNIT AND FSF_REQ STATUS FLAGS ******************/ | 
 | 57 |  | 
| Swen Schillig | 41fa2ad | 2007-09-07 09:15:31 +0200 | [diff] [blame] | 58 | /* | 
 | 59 |  * Note, the leftmost status byte is common among adapter, port | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 60 |  * and unit | 
 | 61 |  */ | 
 | 62 | #define ZFCP_COMMON_FLAGS			0xfff00000 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 63 |  | 
 | 64 | /* common status bits */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 65 | #define ZFCP_STATUS_COMMON_RUNNING		0x40000000 | 
 | 66 | #define ZFCP_STATUS_COMMON_ERP_FAILED		0x20000000 | 
 | 67 | #define ZFCP_STATUS_COMMON_UNBLOCKED		0x10000000 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 68 | #define ZFCP_STATUS_COMMON_OPEN                 0x04000000 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 69 | #define ZFCP_STATUS_COMMON_ERP_INUSE		0x01000000 | 
 | 70 | #define ZFCP_STATUS_COMMON_ACCESS_DENIED	0x00800000 | 
| Andreas Herrmann | d736a27 | 2005-06-13 13:23:57 +0200 | [diff] [blame] | 71 | #define ZFCP_STATUS_COMMON_ACCESS_BOXED		0x00400000 | 
| Swen Schillig | cc8c282 | 2008-06-10 18:21:00 +0200 | [diff] [blame] | 72 | #define ZFCP_STATUS_COMMON_NOESC		0x00200000 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 73 |  | 
 | 74 | /* adapter status */ | 
 | 75 | #define ZFCP_STATUS_ADAPTER_QDIOUP		0x00000002 | 
| Christof Schmitt | 339f4f4 | 2010-07-16 15:37:43 +0200 | [diff] [blame] | 76 | #define ZFCP_STATUS_ADAPTER_SIOSL_ISSUED	0x00000004 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 77 | #define ZFCP_STATUS_ADAPTER_XCONFIG_OK		0x00000008 | 
 | 78 | #define ZFCP_STATUS_ADAPTER_HOST_CON_INIT	0x00000010 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 79 | #define ZFCP_STATUS_ADAPTER_ERP_PENDING		0x00000100 | 
 | 80 | #define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED	0x00000200 | 
| Christof Schmitt | dcc18f4 | 2010-07-16 15:37:41 +0200 | [diff] [blame] | 81 | #define ZFCP_STATUS_ADAPTER_DATA_DIV_ENABLED	0x00000400 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 82 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 83 | /* remote port status */ | 
 | 84 | #define ZFCP_STATUS_PORT_PHYS_OPEN		0x00000001 | 
| Christof Schmitt | 14e242e | 2009-08-18 15:43:11 +0200 | [diff] [blame] | 85 | #define ZFCP_STATUS_PORT_LINK_TEST		0x00000002 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 86 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 87 | /* logical unit status */ | 
| Christof Schmitt | b62a8d9 | 2010-09-08 14:39:55 +0200 | [diff] [blame] | 88 | #define ZFCP_STATUS_LUN_SHARED			0x00000004 | 
 | 89 | #define ZFCP_STATUS_LUN_READONLY		0x00000008 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 90 |  | 
 | 91 | /* FSF request status (this does not have a common part) */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 92 | #define ZFCP_STATUS_FSFREQ_ERROR		0x00000008 | 
 | 93 | #define ZFCP_STATUS_FSFREQ_CLEANUP		0x00000010 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 94 | #define ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED	0x00000040 | 
 | 95 | #define ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED       0x00000080 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 96 | #define ZFCP_STATUS_FSFREQ_TMFUNCFAILED         0x00000200 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 97 | #define ZFCP_STATUS_FSFREQ_DISMISSED            0x00001000 | 
 | 98 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 99 | /************************* STRUCTURE DEFINITIONS *****************************/ | 
 | 100 |  | 
 | 101 | struct zfcp_fsf_req; | 
 | 102 |  | 
 | 103 | /* holds various memory pools of an adapter */ | 
 | 104 | struct zfcp_adapter_mempool { | 
| Swen Schillig | a4623c4 | 2009-08-18 15:43:15 +0200 | [diff] [blame] | 105 | 	mempool_t *erp_req; | 
| Christof Schmitt | 799b76d | 2009-08-18 15:43:20 +0200 | [diff] [blame] | 106 | 	mempool_t *gid_pn_req; | 
| Swen Schillig | a4623c4 | 2009-08-18 15:43:15 +0200 | [diff] [blame] | 107 | 	mempool_t *scsi_req; | 
 | 108 | 	mempool_t *scsi_abort; | 
 | 109 | 	mempool_t *status_read_req; | 
| Christof Schmitt | c7b279a | 2011-02-22 19:54:40 +0100 | [diff] [blame] | 110 | 	mempool_t *sr_data; | 
| Christof Schmitt | dbf5dfe | 2009-11-24 16:54:10 +0100 | [diff] [blame] | 111 | 	mempool_t *gid_pn; | 
| Swen Schillig | a4623c4 | 2009-08-18 15:43:15 +0200 | [diff] [blame] | 112 | 	mempool_t *qtcb_pool; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 113 | }; | 
 | 114 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 115 | struct zfcp_erp_action { | 
 | 116 | 	struct list_head list; | 
 | 117 | 	int action;	              /* requested action code */ | 
 | 118 | 	struct zfcp_adapter *adapter; /* device which should be recovered */ | 
 | 119 | 	struct zfcp_port *port; | 
| Christof Schmitt | b62a8d9 | 2010-09-08 14:39:55 +0200 | [diff] [blame] | 120 | 	struct scsi_device *sdev; | 
| Swen Schillig | 44cc76f | 2008-10-01 12:42:16 +0200 | [diff] [blame] | 121 | 	u32		status;	      /* recovery status */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 122 | 	u32 step;	              /* active step of this erp action */ | 
| Christof Schmitt | e60a6d6 | 2010-02-17 11:18:49 +0100 | [diff] [blame] | 123 | 	unsigned long		fsf_req_id; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 124 | 	struct timer_list timer; | 
 | 125 | }; | 
 | 126 |  | 
| Christof Schmitt | c961585 | 2008-05-06 11:00:05 +0200 | [diff] [blame] | 127 | struct fsf_latency_record { | 
 | 128 | 	u32 min; | 
 | 129 | 	u32 max; | 
 | 130 | 	u64 sum; | 
 | 131 | }; | 
 | 132 |  | 
 | 133 | struct latency_cont { | 
 | 134 | 	struct fsf_latency_record channel; | 
 | 135 | 	struct fsf_latency_record fabric; | 
 | 136 | 	u64 counter; | 
 | 137 | }; | 
 | 138 |  | 
 | 139 | struct zfcp_latencies { | 
 | 140 | 	struct latency_cont read; | 
 | 141 | 	struct latency_cont write; | 
 | 142 | 	struct latency_cont cmd; | 
 | 143 | 	spinlock_t lock; | 
 | 144 | }; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 145 |  | 
 | 146 | struct zfcp_adapter { | 
| Swen Schillig | f3450c7 | 2009-11-24 16:53:59 +0100 | [diff] [blame] | 147 | 	struct kref		ref; | 
| Swen Schillig | 7ba58c9 | 2008-10-01 12:42:18 +0200 | [diff] [blame] | 148 | 	u64			peer_wwnn;	   /* P2P peer WWNN */ | 
 | 149 | 	u64			peer_wwpn;	   /* P2P peer WWPN */ | 
| Andreas Herrmann | 13e1e1f | 2005-09-19 16:56:17 +0200 | [diff] [blame] | 150 | 	u32			peer_d_id;	   /* P2P peer D_ID */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 151 | 	struct ccw_device       *ccw_device;	   /* S/390 ccw device */ | 
| Swen Schillig | 564e1c8 | 2009-08-18 15:43:19 +0200 | [diff] [blame] | 152 | 	struct zfcp_qdio	*qdio; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 153 | 	u32			hydra_version;	   /* Hydra version */ | 
 | 154 | 	u32			fsf_lic_version; | 
| Maxim Shchetynin | aef4a98 | 2005-09-13 21:51:16 +0200 | [diff] [blame] | 155 | 	u32			adapter_features;  /* FCP channel features */ | 
 | 156 | 	u32			connection_features; /* host connection features */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 157 |         u32			hardware_version;  /* of FCP channel */ | 
| Christof Schmitt | c961585 | 2008-05-06 11:00:05 +0200 | [diff] [blame] | 158 | 	u16			timer_ticks;       /* time int for a tick */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 159 | 	struct Scsi_Host	*scsi_host;	   /* Pointer to mid-layer */ | 
| Swen Schillig | ecf0c77 | 2009-11-24 16:53:58 +0100 | [diff] [blame] | 160 | 	struct list_head	port_list;	   /* remote port list */ | 
 | 161 | 	rwlock_t		port_list_lock;    /* port list lock */ | 
| Volker Sameske | fea9d6c | 2006-08-02 11:05:16 +0200 | [diff] [blame] | 162 | 	unsigned long		req_no;		   /* unique FSF req number */ | 
| Christof Schmitt | b6bd2fb | 2010-02-17 11:18:50 +0100 | [diff] [blame] | 163 | 	struct zfcp_reqlist	*req_list; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 164 | 	u32			fsf_req_seq_no;	   /* FSF cmnd seq number */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 165 | 	rwlock_t		abort_lock;        /* Protects against SCSI | 
 | 166 | 						      stack abort/command | 
 | 167 | 						      completion races */ | 
| Swen Schillig | d26ab06 | 2008-05-19 12:17:37 +0200 | [diff] [blame] | 168 | 	atomic_t		stat_miss;	   /* # missing status reads*/ | 
| Christof Schmitt | 64deb6e | 2010-04-30 18:09:36 +0200 | [diff] [blame] | 169 | 	unsigned int		stat_read_buf_num; | 
| Swen Schillig | d26ab06 | 2008-05-19 12:17:37 +0200 | [diff] [blame] | 170 | 	struct work_struct	stat_work; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 171 | 	atomic_t		status;	           /* status of this adapter */ | 
 | 172 | 	struct list_head	erp_ready_head;	   /* error recovery for this | 
 | 173 | 						      adapter/devices */ | 
| Christof Schmitt | 347c6a9 | 2009-08-18 15:43:25 +0200 | [diff] [blame] | 174 | 	wait_queue_head_t	erp_ready_wq; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 175 | 	struct list_head	erp_running_head; | 
 | 176 | 	rwlock_t		erp_lock; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 177 | 	wait_queue_head_t	erp_done_wqh; | 
 | 178 | 	struct zfcp_erp_action	erp_action;	   /* pending error recovery */ | 
 | 179 |         atomic_t                erp_counter; | 
 | 180 | 	u32			erp_total_count;   /* total nr of enqueued erp | 
 | 181 | 						      actions */ | 
 | 182 | 	u32			erp_low_mem_count; /* nr of erp actions waiting | 
 | 183 | 						      for memory */ | 
| Christof Schmitt | 347c6a9 | 2009-08-18 15:43:25 +0200 | [diff] [blame] | 184 | 	struct task_struct	*erp_thread; | 
| Christof Schmitt | bd0072e | 2009-11-24 16:54:11 +0100 | [diff] [blame] | 185 | 	struct zfcp_fc_wka_ports *gs;		   /* generic services */ | 
| Christof Schmitt | d46f384 | 2009-08-18 15:43:07 +0200 | [diff] [blame] | 186 | 	struct zfcp_dbf		*dbf;		   /* debug traces */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 187 | 	struct zfcp_adapter_mempool	pool;      /* Adapter memory pools */ | 
| Andreas Herrmann | f6cd94b | 2006-01-05 09:59:34 +0100 | [diff] [blame] | 188 | 	struct fc_host_statistics *fc_stats; | 
 | 189 | 	struct fsf_qtcb_bottom_port *stats_reset_data; | 
 | 190 | 	unsigned long		stats_reset; | 
| Swen Schillig | cc8c282 | 2008-06-10 18:21:00 +0200 | [diff] [blame] | 191 | 	struct work_struct	scan_work; | 
| Christof Schmitt | 038d944 | 2011-02-22 19:54:48 +0100 | [diff] [blame] | 192 | 	struct work_struct	ns_up_work; | 
| Christof Schmitt | bd43a42 | 2008-12-25 13:38:50 +0100 | [diff] [blame] | 193 | 	struct service_level	service_level; | 
| Swen Schillig | 4544683 | 2009-08-18 15:43:17 +0200 | [diff] [blame] | 194 | 	struct workqueue_struct	*work_queue; | 
| Christof Schmitt | 6832298 | 2010-04-30 18:09:33 +0200 | [diff] [blame] | 195 | 	struct device_dma_parameters dma_parms; | 
| Sven Schuetz | 2d1e547 | 2010-07-16 15:37:39 +0200 | [diff] [blame] | 196 | 	struct zfcp_fc_events events; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 197 | }; | 
 | 198 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 199 | struct zfcp_port { | 
| Christof Schmitt | 615f59e | 2010-02-17 11:18:56 +0100 | [diff] [blame] | 200 | 	struct device          dev; | 
| Andreas Herrmann | 3859f6a | 2005-08-27 11:07:54 -0700 | [diff] [blame] | 201 | 	struct fc_rport        *rport;         /* rport of fc transport class */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 202 | 	struct list_head       list;	       /* list of remote ports */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 203 | 	struct zfcp_adapter    *adapter;       /* adapter used to access port */ | 
| Swen Schillig | ecf0c77 | 2009-11-24 16:53:58 +0100 | [diff] [blame] | 204 | 	struct list_head	unit_list;	/* head of logical unit list */ | 
 | 205 | 	rwlock_t		unit_list_lock; /* unit list lock */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 206 | 	atomic_t	       status;	       /* status of this remote port */ | 
| Swen Schillig | 7ba58c9 | 2008-10-01 12:42:18 +0200 | [diff] [blame] | 207 | 	u64		       wwnn;	       /* WWNN if known */ | 
 | 208 | 	u64		       wwpn;	       /* WWPN */ | 
| Andreas Herrmann | 13e1e1f | 2005-09-19 16:56:17 +0200 | [diff] [blame] | 209 | 	u32		       d_id;	       /* D_ID */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 210 | 	u32		       handle;	       /* handle assigned by FSF */ | 
 | 211 | 	struct zfcp_erp_action erp_action;     /* pending error recovery */ | 
 | 212 |         atomic_t               erp_counter; | 
| Ralph Wuerthner | 75bfc28 | 2006-05-22 18:24:33 +0200 | [diff] [blame] | 213 | 	u32                    maxframe_size; | 
 | 214 | 	u32                    supported_classes; | 
| Swen Schillig | 5ab944f | 2008-10-01 12:42:17 +0200 | [diff] [blame] | 215 | 	struct work_struct     gid_pn_work; | 
| Christof Schmitt | 8fdf30d | 2009-03-02 13:09:01 +0100 | [diff] [blame] | 216 | 	struct work_struct     test_link_work; | 
| Christof Schmitt | a2fa0ae | 2009-03-02 13:09:08 +0100 | [diff] [blame] | 217 | 	struct work_struct     rport_work; | 
 | 218 | 	enum { RPORT_NONE, RPORT_ADD, RPORT_DEL }  rport_task; | 
| Christof Schmitt | 1bf3ff0 | 2010-07-16 15:37:35 +0200 | [diff] [blame] | 219 | 	unsigned int		starget_id; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 220 | }; | 
 | 221 |  | 
| Christof Schmitt | b62a8d9 | 2010-09-08 14:39:55 +0200 | [diff] [blame] | 222 | /** | 
 | 223 |  * struct zfcp_unit - LUN configured via zfcp sysfs | 
 | 224 |  * @dev: struct device for sysfs representation and reference counting | 
 | 225 |  * @list: entry in LUN/unit list per zfcp_port | 
 | 226 |  * @port: reference to zfcp_port where this LUN is configured | 
 | 227 |  * @fcp_lun: 64 bit LUN value | 
 | 228 |  * @scsi_work: for running scsi_scan_target | 
 | 229 |  * | 
 | 230 |  * This is the representation of a LUN that has been configured for | 
 | 231 |  * usage. The main data here is the 64 bit LUN value, data for | 
 | 232 |  * running I/O and recovery is in struct zfcp_scsi_dev. | 
 | 233 |  */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 234 | struct zfcp_unit { | 
| Christof Schmitt | b62a8d9 | 2010-09-08 14:39:55 +0200 | [diff] [blame] | 235 | 	struct device		dev; | 
 | 236 | 	struct list_head	list; | 
 | 237 | 	struct zfcp_port	*port; | 
 | 238 | 	u64			fcp_lun; | 
| Swen Schillig | 92d5193 | 2009-04-17 15:08:04 +0200 | [diff] [blame] | 239 | 	struct work_struct	scsi_work; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 240 | }; | 
 | 241 |  | 
| Swen Schillig | 42428f7 | 2009-08-18 15:43:18 +0200 | [diff] [blame] | 242 | /** | 
| Christof Schmitt | 57c2377 | 2010-09-08 14:39:51 +0200 | [diff] [blame] | 243 |  * struct zfcp_scsi_dev - zfcp data per SCSI device | 
 | 244 |  * @status: zfcp internal status flags | 
 | 245 |  * @lun_handle: handle from "open lun" for issuing FSF requests | 
 | 246 |  * @erp_action: zfcp erp data for opening and recovering this LUN | 
 | 247 |  * @erp_counter: zfcp erp counter for this LUN | 
 | 248 |  * @latencies: FSF channel and fabric latencies | 
 | 249 |  * @port: zfcp_port where this LUN belongs to | 
 | 250 |  */ | 
 | 251 | struct zfcp_scsi_dev { | 
 | 252 | 	atomic_t		status; | 
 | 253 | 	u32			lun_handle; | 
 | 254 | 	struct zfcp_erp_action	erp_action; | 
 | 255 | 	atomic_t		erp_counter; | 
 | 256 | 	struct zfcp_latencies	latencies; | 
 | 257 | 	struct zfcp_port	*port; | 
 | 258 | }; | 
 | 259 |  | 
 | 260 | /** | 
 | 261 |  * sdev_to_zfcp - Access zfcp LUN data for SCSI device | 
 | 262 |  * @sdev: scsi_device where to get the zfcp_scsi_dev pointer | 
 | 263 |  */ | 
 | 264 | static inline struct zfcp_scsi_dev *sdev_to_zfcp(struct scsi_device *sdev) | 
 | 265 | { | 
 | 266 | 	return scsi_transport_device_data(sdev); | 
 | 267 | } | 
 | 268 |  | 
 | 269 | /** | 
 | 270 |  * zfcp_scsi_dev_lun - Return SCSI device LUN as 64 bit FCP LUN | 
 | 271 |  * @sdev: SCSI device where to get the LUN from | 
 | 272 |  */ | 
 | 273 | static inline u64 zfcp_scsi_dev_lun(struct scsi_device *sdev) | 
 | 274 | { | 
 | 275 | 	u64 fcp_lun; | 
 | 276 |  | 
 | 277 | 	int_to_scsilun(sdev->lun, (struct scsi_lun *)&fcp_lun); | 
 | 278 | 	return fcp_lun; | 
 | 279 | } | 
 | 280 |  | 
 | 281 | /** | 
| Swen Schillig | 42428f7 | 2009-08-18 15:43:18 +0200 | [diff] [blame] | 282 |  * struct zfcp_fsf_req - basic FSF request structure | 
 | 283 |  * @list: list of FSF requests | 
 | 284 |  * @req_id: unique request ID | 
 | 285 |  * @adapter: adapter this request belongs to | 
| Christof Schmitt | 34c2b71 | 2010-02-17 11:18:59 +0100 | [diff] [blame] | 286 |  * @qdio_req: qdio queue related values | 
| Swen Schillig | 42428f7 | 2009-08-18 15:43:18 +0200 | [diff] [blame] | 287 |  * @completion: used to signal the completion of the request | 
 | 288 |  * @status: status of the request | 
 | 289 |  * @fsf_command: FSF command issued | 
 | 290 |  * @qtcb: associated QTCB | 
 | 291 |  * @seq_no: sequence number of this request | 
 | 292 |  * @data: private data | 
 | 293 |  * @timer: timer data of this request | 
 | 294 |  * @erp_action: reference to erp action if request issued on behalf of ERP | 
 | 295 |  * @pool: reference to memory pool if used for this request | 
 | 296 |  * @issued: time when request was send (STCK) | 
| Swen Schillig | 42428f7 | 2009-08-18 15:43:18 +0200 | [diff] [blame] | 297 |  * @handler: handler which should be called to process response | 
 | 298 |  */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 299 | struct zfcp_fsf_req { | 
| Swen Schillig | 42428f7 | 2009-08-18 15:43:18 +0200 | [diff] [blame] | 300 | 	struct list_head	list; | 
 | 301 | 	unsigned long		req_id; | 
 | 302 | 	struct zfcp_adapter	*adapter; | 
| Christof Schmitt | 34c2b71 | 2010-02-17 11:18:59 +0100 | [diff] [blame] | 303 | 	struct zfcp_qdio_req	qdio_req; | 
| Swen Schillig | 42428f7 | 2009-08-18 15:43:18 +0200 | [diff] [blame] | 304 | 	struct completion	completion; | 
 | 305 | 	u32			status; | 
 | 306 | 	u32			fsf_command; | 
 | 307 | 	struct fsf_qtcb		*qtcb; | 
 | 308 | 	u32			seq_no; | 
 | 309 | 	void			*data; | 
 | 310 | 	struct timer_list	timer; | 
 | 311 | 	struct zfcp_erp_action	*erp_action; | 
 | 312 | 	mempool_t		*pool; | 
 | 313 | 	unsigned long long	issued; | 
| Swen Schillig | c41f8cb | 2008-07-02 10:56:39 +0200 | [diff] [blame] | 314 | 	void			(*handler)(struct zfcp_fsf_req *); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 315 | }; | 
 | 316 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 317 | #endif /* ZFCP_DEF_H */ |