| 
									
										
										
										
											2007-09-07 09:15:31 +02:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2008-06-10 18:20:58 +02:00
										 |  |  |  * zfcp device driver | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2008-06-10 18:20:58 +02:00
										 |  |  |  * Global definitions for the zfcp device driver. | 
					
						
							| 
									
										
										
										
											2007-09-07 09:15:31 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2010-02-17 11:18:56 +01:00
										 |  |  |  * Copyright IBM Corporation 2002, 2010 | 
					
						
							| 
									
										
										
										
											2007-09-07 09:15:31 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef ZFCP_DEF_H
 | 
					
						
							|  |  |  | #define ZFCP_DEF_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*************************** INCLUDES *****************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/init.h>
 | 
					
						
							|  |  |  | #include <linux/moduleparam.h>
 | 
					
						
							|  |  |  | #include <linux/major.h>
 | 
					
						
							|  |  |  | #include <linux/blkdev.h>
 | 
					
						
							|  |  |  | #include <linux/delay.h>
 | 
					
						
							|  |  |  | #include <linux/timer.h>
 | 
					
						
							| 
									
										
										
										
											2006-09-18 22:28:49 +02:00
										 |  |  | #include <linux/slab.h>
 | 
					
						
							|  |  |  | #include <linux/mempool.h>
 | 
					
						
							|  |  |  | #include <linux/syscalls.h>
 | 
					
						
							| 
									
										
										
										
											2007-07-30 23:01:32 +09:00
										 |  |  | #include <linux/scatterlist.h>
 | 
					
						
							| 
									
										
										
										
											2006-09-18 22:28:49 +02:00
										 |  |  | #include <linux/ioctl.h>
 | 
					
						
							| 
									
										
										
										
											2009-04-06 18:31:47 +02:00
										 |  |  | #include <scsi/fc/fc_fs.h>
 | 
					
						
							|  |  |  | #include <scsi/fc/fc_gs.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <scsi/scsi.h>
 | 
					
						
							|  |  |  | #include <scsi/scsi_tcq.h>
 | 
					
						
							|  |  |  | #include <scsi/scsi_cmnd.h>
 | 
					
						
							|  |  |  | #include <scsi/scsi_device.h>
 | 
					
						
							|  |  |  | #include <scsi/scsi_host.h>
 | 
					
						
							|  |  |  | #include <scsi/scsi_transport.h>
 | 
					
						
							|  |  |  | #include <scsi/scsi_transport_fc.h>
 | 
					
						
							| 
									
										
										
										
											2009-04-06 18:31:47 +02:00
										 |  |  | #include <scsi/scsi_bsg_fc.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <asm/ccwdev.h>
 | 
					
						
							|  |  |  | #include <asm/debug.h>
 | 
					
						
							|  |  |  | #include <asm/ebcdic.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-25 13:38:50 +01:00
										 |  |  | #include <asm/sysinfo.h>
 | 
					
						
							| 
									
										
										
										
											2006-09-18 22:28:49 +02:00
										 |  |  | #include "zfcp_fsf.h"
 | 
					
						
							| 
									
										
										
										
											2010-02-17 11:18:59 +01:00
										 |  |  | #include "zfcp_qdio.h"
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-17 11:18:50 +01:00
										 |  |  | struct zfcp_reqlist; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-22 18:18:19 +02:00
										 |  |  | /********************* SCSI SPECIFIC DEFINES *********************************/ | 
					
						
							| 
									
										
										
										
											2006-08-02 11:05:52 +02:00
										 |  |  | #define ZFCP_SCSI_ER_TIMEOUT                    (10*HZ)
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /********************* CIO/QDIO SPECIFIC DEFINES *****************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* DMQ bug workaround: don't use last SBALE */ | 
					
						
							|  |  |  | #define ZFCP_MAX_SBALES_PER_SBAL	(QDIO_MAX_ELEMENTS_PER_BUFFER - 1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* index of last SBALE (with respect to DMQ bug workaround) */ | 
					
						
							|  |  |  | #define ZFCP_LAST_SBALE_PER_SBAL	(ZFCP_MAX_SBALES_PER_SBAL - 1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* max. number of (data buffer) SBALEs in largest SBAL chain */ | 
					
						
							|  |  |  | #define ZFCP_MAX_SBALES_PER_REQ		\
 | 
					
						
							| 
									
										
										
										
											2008-07-02 10:56:39 +02:00
										 |  |  | 	(FSF_MAX_SBALS_PER_REQ * ZFCP_MAX_SBALES_PER_SBAL - 2) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |         /* request ID + QTCB in SBALE 0 + 1 of first SBAL in chain */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-12 11:43:44 +02:00
										 |  |  | #define ZFCP_MAX_SECTORS (ZFCP_MAX_SBALES_PER_REQ * 8)
 | 
					
						
							|  |  |  |         /* max. number of (data buffer) SBALEs in largest SBAL chain
 | 
					
						
							|  |  |  |            multiplied with number of sectors per 4k block */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /********************* FSF SPECIFIC DEFINES *********************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ATTENTION: value must not be used by hardware */ | 
					
						
							|  |  |  | #define FSF_QTCB_UNSOLICITED_STATUS		0x6305
 | 
					
						
							| 
									
										
										
										
											2005-06-13 13:15:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /* timeout value for "default timer" for fsf requests */ | 
					
						
							| 
									
										
										
										
											2006-09-18 22:29:56 +02:00
										 |  |  | #define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ)
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*************** ADAPTER/PORT/UNIT AND FSF_REQ STATUS FLAGS ******************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-07 09:15:31 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Note, the leftmost status byte is common among adapter, port | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * and unit | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define ZFCP_COMMON_FLAGS			0xfff00000
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* common status bits */ | 
					
						
							|  |  |  | #define ZFCP_STATUS_COMMON_RUNNING		0x40000000
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_COMMON_ERP_FAILED		0x20000000
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_COMMON_UNBLOCKED		0x10000000
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_COMMON_OPEN                 0x04000000
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_COMMON_ERP_INUSE		0x01000000
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_COMMON_ACCESS_DENIED	0x00800000
 | 
					
						
							| 
									
										
										
										
											2005-06-13 13:23:57 +02:00
										 |  |  | #define ZFCP_STATUS_COMMON_ACCESS_BOXED		0x00400000
 | 
					
						
							| 
									
										
										
										
											2008-06-10 18:21:00 +02:00
										 |  |  | #define ZFCP_STATUS_COMMON_NOESC		0x00200000
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* adapter status */ | 
					
						
							|  |  |  | #define ZFCP_STATUS_ADAPTER_QDIOUP		0x00000002
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_ADAPTER_XCONFIG_OK		0x00000008
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_ADAPTER_HOST_CON_INIT	0x00000010
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_ADAPTER_ERP_PENDING		0x00000100
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED	0x00000200
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* remote port status */ | 
					
						
							|  |  |  | #define ZFCP_STATUS_PORT_PHYS_OPEN		0x00000001
 | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:11 +02:00
										 |  |  | #define ZFCP_STATUS_PORT_LINK_TEST		0x00000002
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* logical unit status */ | 
					
						
							|  |  |  | #define ZFCP_STATUS_UNIT_SHARED			0x00000004
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_UNIT_READONLY		0x00000008
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* FSF request status (this does not have a common part) */ | 
					
						
							|  |  |  | #define ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT	0x00000002
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_FSFREQ_ERROR		0x00000008
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_FSFREQ_CLEANUP		0x00000010
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED	0x00000040
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED       0x00000080
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_FSFREQ_TMFUNCFAILED         0x00000200
 | 
					
						
							|  |  |  | #define ZFCP_STATUS_FSFREQ_DISMISSED            0x00001000
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /************************* STRUCTURE DEFINITIONS *****************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct zfcp_fsf_req; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* holds various memory pools of an adapter */ | 
					
						
							|  |  |  | struct zfcp_adapter_mempool { | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:15 +02:00
										 |  |  | 	mempool_t *erp_req; | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:20 +02:00
										 |  |  | 	mempool_t *gid_pn_req; | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:15 +02:00
										 |  |  | 	mempool_t *scsi_req; | 
					
						
							|  |  |  | 	mempool_t *scsi_abort; | 
					
						
							|  |  |  | 	mempool_t *status_read_req; | 
					
						
							|  |  |  | 	mempool_t *status_read_data; | 
					
						
							| 
									
										
										
										
											2009-11-24 16:54:10 +01:00
										 |  |  | 	mempool_t *gid_pn; | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:15 +02:00
										 |  |  | 	mempool_t *qtcb_pool; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct zfcp_erp_action { | 
					
						
							|  |  |  | 	struct list_head list; | 
					
						
							|  |  |  | 	int action;	              /* requested action code */ | 
					
						
							|  |  |  | 	struct zfcp_adapter *adapter; /* device which should be recovered */ | 
					
						
							|  |  |  | 	struct zfcp_port *port; | 
					
						
							|  |  |  | 	struct zfcp_unit *unit; | 
					
						
							| 
									
										
										
										
											2008-10-01 12:42:16 +02:00
										 |  |  | 	u32		status;	      /* recovery status */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	u32 step;	              /* active step of this erp action */ | 
					
						
							| 
									
										
										
										
											2010-02-17 11:18:49 +01:00
										 |  |  | 	unsigned long		fsf_req_id; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct timer_list timer; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-06 11:00:05 +02:00
										 |  |  | struct fsf_latency_record { | 
					
						
							|  |  |  | 	u32 min; | 
					
						
							|  |  |  | 	u32 max; | 
					
						
							|  |  |  | 	u64 sum; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct latency_cont { | 
					
						
							|  |  |  | 	struct fsf_latency_record channel; | 
					
						
							|  |  |  | 	struct fsf_latency_record fabric; | 
					
						
							|  |  |  | 	u64 counter; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct zfcp_latencies { | 
					
						
							|  |  |  | 	struct latency_cont read; | 
					
						
							|  |  |  | 	struct latency_cont write; | 
					
						
							|  |  |  | 	struct latency_cont cmd; | 
					
						
							|  |  |  | 	spinlock_t lock; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct zfcp_adapter { | 
					
						
							| 
									
										
										
										
											2009-11-24 16:53:59 +01:00
										 |  |  | 	struct kref		ref; | 
					
						
							| 
									
										
										
										
											2008-10-01 12:42:18 +02:00
										 |  |  | 	u64			peer_wwnn;	   /* P2P peer WWNN */ | 
					
						
							|  |  |  | 	u64			peer_wwpn;	   /* P2P peer WWPN */ | 
					
						
							| 
									
										
										
										
											2005-09-19 16:56:17 +02:00
										 |  |  | 	u32			peer_d_id;	   /* P2P peer D_ID */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct ccw_device       *ccw_device;	   /* S/390 ccw device */ | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:19 +02:00
										 |  |  | 	struct zfcp_qdio	*qdio; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	u32			hydra_version;	   /* Hydra version */ | 
					
						
							|  |  |  | 	u32			fsf_lic_version; | 
					
						
							| 
									
										
										
										
											2005-09-13 21:51:16 +02:00
										 |  |  | 	u32			adapter_features;  /* FCP channel features */ | 
					
						
							|  |  |  | 	u32			connection_features; /* host connection features */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |         u32			hardware_version;  /* of FCP channel */ | 
					
						
							| 
									
										
										
										
											2008-05-06 11:00:05 +02:00
										 |  |  | 	u16			timer_ticks;       /* time int for a tick */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct Scsi_Host	*scsi_host;	   /* Pointer to mid-layer */ | 
					
						
							| 
									
										
										
										
											2009-11-24 16:53:58 +01:00
										 |  |  | 	struct list_head	port_list;	   /* remote port list */ | 
					
						
							|  |  |  | 	rwlock_t		port_list_lock;    /* port list lock */ | 
					
						
							| 
									
										
										
										
											2006-08-02 11:05:16 +02:00
										 |  |  | 	unsigned long		req_no;		   /* unique FSF req number */ | 
					
						
							| 
									
										
										
										
											2010-02-17 11:18:50 +01:00
										 |  |  | 	struct zfcp_reqlist	*req_list; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	u32			fsf_req_seq_no;	   /* FSF cmnd seq number */ | 
					
						
							|  |  |  | 	rwlock_t		abort_lock;        /* Protects against SCSI
 | 
					
						
							|  |  |  | 						      stack abort/command | 
					
						
							|  |  |  | 						      completion races */ | 
					
						
							| 
									
										
										
										
											2008-05-19 12:17:37 +02:00
										 |  |  | 	atomic_t		stat_miss;	   /* # missing status reads*/ | 
					
						
							|  |  |  | 	struct work_struct	stat_work; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	atomic_t		status;	           /* status of this adapter */ | 
					
						
							|  |  |  | 	struct list_head	erp_ready_head;	   /* error recovery for this
 | 
					
						
							|  |  |  | 						      adapter/devices */ | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:25 +02:00
										 |  |  | 	wait_queue_head_t	erp_ready_wq; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct list_head	erp_running_head; | 
					
						
							|  |  |  | 	rwlock_t		erp_lock; | 
					
						
							|  |  |  | 	wait_queue_head_t	erp_done_wqh; | 
					
						
							|  |  |  | 	struct zfcp_erp_action	erp_action;	   /* pending error recovery */ | 
					
						
							|  |  |  |         atomic_t                erp_counter; | 
					
						
							|  |  |  | 	u32			erp_total_count;   /* total nr of enqueued erp
 | 
					
						
							|  |  |  | 						      actions */ | 
					
						
							|  |  |  | 	u32			erp_low_mem_count; /* nr of erp actions waiting
 | 
					
						
							|  |  |  | 						      for memory */ | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:25 +02:00
										 |  |  | 	struct task_struct	*erp_thread; | 
					
						
							| 
									
										
										
										
											2009-11-24 16:54:11 +01:00
										 |  |  | 	struct zfcp_fc_wka_ports *gs;		   /* generic services */ | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:07 +02:00
										 |  |  | 	struct zfcp_dbf		*dbf;		   /* debug traces */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct zfcp_adapter_mempool	pool;      /* Adapter memory pools */ | 
					
						
							| 
									
										
										
										
											2006-01-05 09:59:34 +01:00
										 |  |  | 	struct fc_host_statistics *fc_stats; | 
					
						
							|  |  |  | 	struct fsf_qtcb_bottom_port *stats_reset_data; | 
					
						
							|  |  |  | 	unsigned long		stats_reset; | 
					
						
							| 
									
										
										
										
											2008-06-10 18:21:00 +02:00
										 |  |  | 	struct work_struct	scan_work; | 
					
						
							| 
									
										
										
										
											2008-12-25 13:38:50 +01:00
										 |  |  | 	struct service_level	service_level; | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:17 +02:00
										 |  |  | 	struct workqueue_struct	*work_queue; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct zfcp_port { | 
					
						
							| 
									
										
										
										
											2010-02-17 11:18:56 +01:00
										 |  |  | 	struct device          dev; | 
					
						
							| 
									
										
										
										
											2005-08-27 11:07:54 -07:00
										 |  |  | 	struct fc_rport        *rport;         /* rport of fc transport class */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct list_head       list;	       /* list of remote ports */ | 
					
						
							|  |  |  | 	struct zfcp_adapter    *adapter;       /* adapter used to access port */ | 
					
						
							| 
									
										
										
										
											2009-11-24 16:53:58 +01:00
										 |  |  | 	struct list_head	unit_list;	/* head of logical unit list */ | 
					
						
							|  |  |  | 	rwlock_t		unit_list_lock; /* unit list lock */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	atomic_t	       status;	       /* status of this remote port */ | 
					
						
							| 
									
										
										
										
											2008-10-01 12:42:18 +02:00
										 |  |  | 	u64		       wwnn;	       /* WWNN if known */ | 
					
						
							|  |  |  | 	u64		       wwpn;	       /* WWPN */ | 
					
						
							| 
									
										
										
										
											2005-09-19 16:56:17 +02:00
										 |  |  | 	u32		       d_id;	       /* D_ID */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	u32		       handle;	       /* handle assigned by FSF */ | 
					
						
							|  |  |  | 	struct zfcp_erp_action erp_action;     /* pending error recovery */ | 
					
						
							|  |  |  |         atomic_t               erp_counter; | 
					
						
							| 
									
										
										
										
											2006-05-22 18:24:33 +02:00
										 |  |  | 	u32                    maxframe_size; | 
					
						
							|  |  |  | 	u32                    supported_classes; | 
					
						
							| 
									
										
										
										
											2008-10-01 12:42:17 +02:00
										 |  |  | 	struct work_struct     gid_pn_work; | 
					
						
							| 
									
										
										
										
											2009-03-02 13:09:01 +01:00
										 |  |  | 	struct work_struct     test_link_work; | 
					
						
							| 
									
										
										
										
											2009-03-02 13:09:08 +01:00
										 |  |  | 	struct work_struct     rport_work; | 
					
						
							|  |  |  | 	enum { RPORT_NONE, RPORT_ADD, RPORT_DEL }  rport_task; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct zfcp_unit { | 
					
						
							| 
									
										
										
										
											2010-02-17 11:18:56 +01:00
										 |  |  | 	struct device          dev; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct list_head       list;	       /* list of logical units */ | 
					
						
							|  |  |  | 	struct zfcp_port       *port;	       /* remote port of unit */ | 
					
						
							|  |  |  | 	atomic_t	       status;	       /* status of this logical unit */ | 
					
						
							| 
									
										
										
										
											2008-10-01 12:42:18 +02:00
										 |  |  | 	u64		       fcp_lun;	       /* own FCP_LUN */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	u32		       handle;	       /* handle assigned by FSF */ | 
					
						
							|  |  |  |         struct scsi_device     *device;        /* scsi device struct pointer */ | 
					
						
							|  |  |  | 	struct zfcp_erp_action erp_action;     /* pending error recovery */ | 
					
						
							|  |  |  |         atomic_t               erp_counter; | 
					
						
							| 
									
										
										
										
											2008-05-06 11:00:05 +02:00
										 |  |  | 	struct zfcp_latencies	latencies; | 
					
						
							| 
									
										
										
										
											2009-04-17 15:08:04 +02:00
										 |  |  | 	struct work_struct	scsi_work; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:18 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * struct zfcp_fsf_req - basic FSF request structure | 
					
						
							|  |  |  |  * @list: list of FSF requests | 
					
						
							|  |  |  |  * @req_id: unique request ID | 
					
						
							|  |  |  |  * @adapter: adapter this request belongs to | 
					
						
							| 
									
										
										
										
											2010-02-17 11:18:59 +01:00
										 |  |  |  * @qdio_req: qdio queue related values | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:18 +02:00
										 |  |  |  * @completion: used to signal the completion of the request | 
					
						
							|  |  |  |  * @status: status of the request | 
					
						
							|  |  |  |  * @fsf_command: FSF command issued | 
					
						
							|  |  |  |  * @qtcb: associated QTCB | 
					
						
							|  |  |  |  * @seq_no: sequence number of this request | 
					
						
							|  |  |  |  * @data: private data | 
					
						
							|  |  |  |  * @timer: timer data of this request | 
					
						
							|  |  |  |  * @erp_action: reference to erp action if request issued on behalf of ERP | 
					
						
							|  |  |  |  * @pool: reference to memory pool if used for this request | 
					
						
							|  |  |  |  * @issued: time when request was send (STCK) | 
					
						
							|  |  |  |  * @unit: reference to unit if this request is a SCSI request | 
					
						
							|  |  |  |  * @handler: handler which should be called to process response | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | struct zfcp_fsf_req { | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:18 +02:00
										 |  |  | 	struct list_head	list; | 
					
						
							|  |  |  | 	unsigned long		req_id; | 
					
						
							|  |  |  | 	struct zfcp_adapter	*adapter; | 
					
						
							| 
									
										
										
										
											2010-02-17 11:18:59 +01:00
										 |  |  | 	struct zfcp_qdio_req	qdio_req; | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:18 +02:00
										 |  |  | 	struct completion	completion; | 
					
						
							|  |  |  | 	u32			status; | 
					
						
							|  |  |  | 	u32			fsf_command; | 
					
						
							|  |  |  | 	struct fsf_qtcb		*qtcb; | 
					
						
							|  |  |  | 	u32			seq_no; | 
					
						
							|  |  |  | 	void			*data; | 
					
						
							|  |  |  | 	struct timer_list	timer; | 
					
						
							|  |  |  | 	struct zfcp_erp_action	*erp_action; | 
					
						
							|  |  |  | 	mempool_t		*pool; | 
					
						
							|  |  |  | 	unsigned long long	issued; | 
					
						
							|  |  |  | 	struct zfcp_unit	*unit; | 
					
						
							| 
									
										
										
										
											2008-07-02 10:56:39 +02:00
										 |  |  | 	void			(*handler)(struct zfcp_fsf_req *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* driver data */ | 
					
						
							|  |  |  | struct zfcp_data { | 
					
						
							|  |  |  | 	struct scsi_host_template scsi_host_template; | 
					
						
							| 
									
										
										
										
											2006-09-18 22:28:49 +02:00
										 |  |  | 	struct scsi_transport_template *scsi_transport_template; | 
					
						
							| 
									
										
										
										
											2009-08-18 15:43:15 +02:00
										 |  |  | 	struct kmem_cache	*gpn_ft_cache; | 
					
						
							|  |  |  | 	struct kmem_cache	*qtcb_cache; | 
					
						
							| 
									
										
										
										
											2008-10-01 12:42:18 +02:00
										 |  |  | 	struct kmem_cache	*sr_buffer_cache; | 
					
						
							|  |  |  | 	struct kmem_cache	*gid_pn_cache; | 
					
						
							| 
									
										
										
										
											2009-11-24 16:54:14 +01:00
										 |  |  | 	struct kmem_cache	*adisc_cache; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************** ZFCP SPECIFIC DEFINES ********************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define ZFCP_SET                0x00000100
 | 
					
						
							|  |  |  | #define ZFCP_CLEAR              0x00000200
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* ZFCP_DEF_H */
 |