1 /* 2 * zfcp device driver 3 * 4 * Global definitions for the zfcp device driver. 5 * 6 * Copyright IBM Corporation 2002, 2009 7 */ 8 9 #ifndef ZFCP_DEF_H 10 #define ZFCP_DEF_H 11 12 /*************************** INCLUDES *****************************************/ 13 14 #include <linux/init.h> 15 #include <linux/moduleparam.h> 16 #include <linux/major.h> 17 #include <linux/blkdev.h> 18 #include <linux/delay.h> 19 #include <linux/timer.h> 20 #include <linux/slab.h> 21 #include <linux/mempool.h> 22 #include <linux/syscalls.h> 23 #include <linux/scatterlist.h> 24 #include <linux/ioctl.h> 25 #include <scsi/fc/fc_fs.h> 26 #include <scsi/fc/fc_gs.h> 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> 34 #include <scsi/scsi_bsg_fc.h> 35 #include <asm/ccwdev.h> 36 #include <asm/qdio.h> 37 #include <asm/debug.h> 38 #include <asm/ebcdic.h> 39 #include <asm/sysinfo.h> 40 #include "zfcp_fsf.h" 41 42 /********************* GENERAL DEFINES *********************************/ 43 44 #define REQUEST_LIST_SIZE 128 45 46 /********************* SCSI SPECIFIC DEFINES *********************************/ 47 #define ZFCP_SCSI_ER_TIMEOUT (10*HZ) 48 49 /********************* CIO/QDIO SPECIFIC DEFINES *****************************/ 50 51 /* DMQ bug workaround: don't use last SBALE */ 52 #define ZFCP_MAX_SBALES_PER_SBAL (QDIO_MAX_ELEMENTS_PER_BUFFER - 1) 53 54 /* index of last SBALE (with respect to DMQ bug workaround) */ 55 #define ZFCP_LAST_SBALE_PER_SBAL (ZFCP_MAX_SBALES_PER_SBAL - 1) 56 57 /* max. number of (data buffer) SBALEs in largest SBAL chain */ 58 #define ZFCP_MAX_SBALES_PER_REQ \ 59 (FSF_MAX_SBALS_PER_REQ * ZFCP_MAX_SBALES_PER_SBAL - 2) 60 /* request ID + QTCB in SBALE 0 + 1 of first SBAL in chain */ 61 62 #define ZFCP_MAX_SECTORS (ZFCP_MAX_SBALES_PER_REQ * 8) 63 /* max. number of (data buffer) SBALEs in largest SBAL chain 64 multiplied with number of sectors per 4k block */ 65 66 /********************* FSF SPECIFIC DEFINES *********************************/ 67 68 /* ATTENTION: value must not be used by hardware */ 69 #define FSF_QTCB_UNSOLICITED_STATUS 0x6305 70 71 /* timeout value for "default timer" for fsf requests */ 72 #define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ) 73 74 /*************** ADAPTER/PORT/UNIT AND FSF_REQ STATUS FLAGS ******************/ 75 76 /* 77 * Note, the leftmost status byte is common among adapter, port 78 * and unit 79 */ 80 #define ZFCP_COMMON_FLAGS 0xfff00000 81 82 /* common status bits */ 83 #define ZFCP_STATUS_COMMON_RUNNING 0x40000000 84 #define ZFCP_STATUS_COMMON_ERP_FAILED 0x20000000 85 #define ZFCP_STATUS_COMMON_UNBLOCKED 0x10000000 86 #define ZFCP_STATUS_COMMON_OPEN 0x04000000 87 #define ZFCP_STATUS_COMMON_ERP_INUSE 0x01000000 88 #define ZFCP_STATUS_COMMON_ACCESS_DENIED 0x00800000 89 #define ZFCP_STATUS_COMMON_ACCESS_BOXED 0x00400000 90 #define ZFCP_STATUS_COMMON_NOESC 0x00200000 91 92 /* adapter status */ 93 #define ZFCP_STATUS_ADAPTER_QDIOUP 0x00000002 94 #define ZFCP_STATUS_ADAPTER_XCONFIG_OK 0x00000008 95 #define ZFCP_STATUS_ADAPTER_HOST_CON_INIT 0x00000010 96 #define ZFCP_STATUS_ADAPTER_ERP_PENDING 0x00000100 97 #define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200 98 99 /* remote port status */ 100 #define ZFCP_STATUS_PORT_PHYS_OPEN 0x00000001 101 #define ZFCP_STATUS_PORT_LINK_TEST 0x00000002 102 103 /* logical unit status */ 104 #define ZFCP_STATUS_UNIT_SHARED 0x00000004 105 #define ZFCP_STATUS_UNIT_READONLY 0x00000008 106 107 /* FSF request status (this does not have a common part) */ 108 #define ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT 0x00000002 109 #define ZFCP_STATUS_FSFREQ_ERROR 0x00000008 110 #define ZFCP_STATUS_FSFREQ_CLEANUP 0x00000010 111 #define ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED 0x00000040 112 #define ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED 0x00000080 113 #define ZFCP_STATUS_FSFREQ_TMFUNCFAILED 0x00000200 114 #define ZFCP_STATUS_FSFREQ_DISMISSED 0x00001000 115 116 /************************* STRUCTURE DEFINITIONS *****************************/ 117 118 struct zfcp_fsf_req; 119 120 /* holds various memory pools of an adapter */ 121 struct zfcp_adapter_mempool { 122 mempool_t *erp_req; 123 mempool_t *gid_pn_req; 124 mempool_t *scsi_req; 125 mempool_t *scsi_abort; 126 mempool_t *status_read_req; 127 mempool_t *status_read_data; 128 mempool_t *gid_pn; 129 mempool_t *qtcb_pool; 130 }; 131 132 struct zfcp_qdio_queue { 133 struct qdio_buffer *sbal[QDIO_MAX_BUFFERS_PER_Q]; 134 u8 first; /* index of next free bfr in queue */ 135 atomic_t count; /* number of free buffers in queue */ 136 }; 137 138 struct zfcp_erp_action { 139 struct list_head list; 140 int action; /* requested action code */ 141 struct zfcp_adapter *adapter; /* device which should be recovered */ 142 struct zfcp_port *port; 143 struct zfcp_unit *unit; 144 u32 status; /* recovery status */ 145 u32 step; /* active step of this erp action */ 146 struct zfcp_fsf_req *fsf_req; /* fsf request currently pending 147 for this action */ 148 struct timer_list timer; 149 }; 150 151 struct fsf_latency_record { 152 u32 min; 153 u32 max; 154 u64 sum; 155 }; 156 157 struct latency_cont { 158 struct fsf_latency_record channel; 159 struct fsf_latency_record fabric; 160 u64 counter; 161 }; 162 163 struct zfcp_latencies { 164 struct latency_cont read; 165 struct latency_cont write; 166 struct latency_cont cmd; 167 spinlock_t lock; 168 }; 169 170 /** struct zfcp_qdio - basic QDIO data structure 171 * @resp_q: response queue 172 * @req_q: request queue 173 * @stat_lock: lock to protect req_q_util and req_q_time 174 * @req_q_lock; lock to serialize access to request queue 175 * @req_q_time: time of last fill level change 176 * @req_q_util: used for accounting 177 * @req_q_full: queue full incidents 178 * @req_q_wq: used to wait for SBAL availability 179 * @adapter: adapter used in conjunction with this QDIO structure 180 */ 181 struct zfcp_qdio { 182 struct zfcp_qdio_queue resp_q; 183 struct zfcp_qdio_queue req_q; 184 spinlock_t stat_lock; 185 spinlock_t req_q_lock; 186 unsigned long long req_q_time; 187 u64 req_q_util; 188 atomic_t req_q_full; 189 wait_queue_head_t req_q_wq; 190 struct zfcp_adapter *adapter; 191 }; 192 193 struct zfcp_adapter { 194 struct kref ref; 195 u64 peer_wwnn; /* P2P peer WWNN */ 196 u64 peer_wwpn; /* P2P peer WWPN */ 197 u32 peer_d_id; /* P2P peer D_ID */ 198 struct ccw_device *ccw_device; /* S/390 ccw device */ 199 struct zfcp_qdio *qdio; 200 u32 hydra_version; /* Hydra version */ 201 u32 fsf_lic_version; 202 u32 adapter_features; /* FCP channel features */ 203 u32 connection_features; /* host connection features */ 204 u32 hardware_version; /* of FCP channel */ 205 u16 timer_ticks; /* time int for a tick */ 206 struct Scsi_Host *scsi_host; /* Pointer to mid-layer */ 207 struct list_head port_list; /* remote port list */ 208 rwlock_t port_list_lock; /* port list lock */ 209 unsigned long req_no; /* unique FSF req number */ 210 struct list_head *req_list; /* list of pending reqs */ 211 spinlock_t req_list_lock; /* request list lock */ 212 u32 fsf_req_seq_no; /* FSF cmnd seq number */ 213 rwlock_t abort_lock; /* Protects against SCSI 214 stack abort/command 215 completion races */ 216 atomic_t stat_miss; /* # missing status reads*/ 217 struct work_struct stat_work; 218 atomic_t status; /* status of this adapter */ 219 struct list_head erp_ready_head; /* error recovery for this 220 adapter/devices */ 221 wait_queue_head_t erp_ready_wq; 222 struct list_head erp_running_head; 223 rwlock_t erp_lock; 224 wait_queue_head_t erp_done_wqh; 225 struct zfcp_erp_action erp_action; /* pending error recovery */ 226 atomic_t erp_counter; 227 u32 erp_total_count; /* total nr of enqueued erp 228 actions */ 229 u32 erp_low_mem_count; /* nr of erp actions waiting 230 for memory */ 231 struct task_struct *erp_thread; 232 struct zfcp_fc_wka_ports *gs; /* generic services */ 233 struct zfcp_dbf *dbf; /* debug traces */ 234 struct zfcp_adapter_mempool pool; /* Adapter memory pools */ 235 struct fc_host_statistics *fc_stats; 236 struct fsf_qtcb_bottom_port *stats_reset_data; 237 unsigned long stats_reset; 238 struct work_struct scan_work; 239 struct service_level service_level; 240 struct workqueue_struct *work_queue; 241 }; 242 243 struct zfcp_port { 244 struct device sysfs_device; /* sysfs device */ 245 struct fc_rport *rport; /* rport of fc transport class */ 246 struct list_head list; /* list of remote ports */ 247 struct zfcp_adapter *adapter; /* adapter used to access port */ 248 struct list_head unit_list; /* head of logical unit list */ 249 rwlock_t unit_list_lock; /* unit list lock */ 250 atomic_t status; /* status of this remote port */ 251 u64 wwnn; /* WWNN if known */ 252 u64 wwpn; /* WWPN */ 253 u32 d_id; /* D_ID */ 254 u32 handle; /* handle assigned by FSF */ 255 struct zfcp_erp_action erp_action; /* pending error recovery */ 256 atomic_t erp_counter; 257 u32 maxframe_size; 258 u32 supported_classes; 259 struct work_struct gid_pn_work; 260 struct work_struct test_link_work; 261 struct work_struct rport_work; 262 enum { RPORT_NONE, RPORT_ADD, RPORT_DEL } rport_task; 263 }; 264 265 struct zfcp_unit { 266 struct device sysfs_device; /* sysfs device */ 267 struct list_head list; /* list of logical units */ 268 struct zfcp_port *port; /* remote port of unit */ 269 atomic_t status; /* status of this logical unit */ 270 u64 fcp_lun; /* own FCP_LUN */ 271 u32 handle; /* handle assigned by FSF */ 272 struct scsi_device *device; /* scsi device struct pointer */ 273 struct zfcp_erp_action erp_action; /* pending error recovery */ 274 atomic_t erp_counter; 275 struct zfcp_latencies latencies; 276 struct work_struct scsi_work; 277 }; 278 279 /** 280 * struct zfcp_queue_req - queue related values for a request 281 * @sbal_number: number of free SBALs 282 * @sbal_first: first SBAL for this request 283 * @sbal_last: last SBAL for this request 284 * @sbal_limit: last possible SBAL for this request 285 * @sbale_curr: current SBALE at creation of this request 286 * @sbal_response: SBAL used in interrupt 287 * @qdio_outb_usage: usage of outbound queue 288 * @qdio_inb_usage: usage of inbound queue 289 */ 290 struct zfcp_queue_req { 291 u8 sbal_number; 292 u8 sbal_first; 293 u8 sbal_last; 294 u8 sbal_limit; 295 u8 sbale_curr; 296 u8 sbal_response; 297 u16 qdio_outb_usage; 298 u16 qdio_inb_usage; 299 }; 300 301 /** 302 * struct zfcp_fsf_req - basic FSF request structure 303 * @list: list of FSF requests 304 * @req_id: unique request ID 305 * @adapter: adapter this request belongs to 306 * @queue_req: queue related values 307 * @completion: used to signal the completion of the request 308 * @status: status of the request 309 * @fsf_command: FSF command issued 310 * @qtcb: associated QTCB 311 * @seq_no: sequence number of this request 312 * @data: private data 313 * @timer: timer data of this request 314 * @erp_action: reference to erp action if request issued on behalf of ERP 315 * @pool: reference to memory pool if used for this request 316 * @issued: time when request was send (STCK) 317 * @unit: reference to unit if this request is a SCSI request 318 * @handler: handler which should be called to process response 319 */ 320 struct zfcp_fsf_req { 321 struct list_head list; 322 unsigned long req_id; 323 struct zfcp_adapter *adapter; 324 struct zfcp_queue_req queue_req; 325 struct completion completion; 326 u32 status; 327 u32 fsf_command; 328 struct fsf_qtcb *qtcb; 329 u32 seq_no; 330 void *data; 331 struct timer_list timer; 332 struct zfcp_erp_action *erp_action; 333 mempool_t *pool; 334 unsigned long long issued; 335 struct zfcp_unit *unit; 336 void (*handler)(struct zfcp_fsf_req *); 337 }; 338 339 /* driver data */ 340 struct zfcp_data { 341 struct scsi_host_template scsi_host_template; 342 struct scsi_transport_template *scsi_transport_template; 343 struct kmem_cache *gpn_ft_cache; 344 struct kmem_cache *qtcb_cache; 345 struct kmem_cache *sr_buffer_cache; 346 struct kmem_cache *gid_pn_cache; 347 struct kmem_cache *adisc_cache; 348 }; 349 350 /********************** ZFCP SPECIFIC DEFINES ********************************/ 351 352 #define ZFCP_SET 0x00000100 353 #define ZFCP_CLEAR 0x00000200 354 355 /* 356 * Helper functions for request ID management. 357 */ 358 static inline int zfcp_reqlist_hash(unsigned long req_id) 359 { 360 return req_id % REQUEST_LIST_SIZE; 361 } 362 363 static inline void zfcp_reqlist_remove(struct zfcp_adapter *adapter, 364 struct zfcp_fsf_req *fsf_req) 365 { 366 list_del(&fsf_req->list); 367 } 368 369 static inline struct zfcp_fsf_req * 370 zfcp_reqlist_find(struct zfcp_adapter *adapter, unsigned long req_id) 371 { 372 struct zfcp_fsf_req *request; 373 unsigned int idx; 374 375 idx = zfcp_reqlist_hash(req_id); 376 list_for_each_entry(request, &adapter->req_list[idx], list) 377 if (request->req_id == req_id) 378 return request; 379 return NULL; 380 } 381 382 static inline struct zfcp_fsf_req * 383 zfcp_reqlist_find_safe(struct zfcp_adapter *adapter, struct zfcp_fsf_req *req) 384 { 385 struct zfcp_fsf_req *request; 386 unsigned int idx; 387 388 for (idx = 0; idx < REQUEST_LIST_SIZE; idx++) { 389 list_for_each_entry(request, &adapter->req_list[idx], list) 390 if (request == req) 391 return request; 392 } 393 return NULL; 394 } 395 396 #endif /* ZFCP_DEF_H */ 397