1/*
2 * This file is part of the zfcp device driver for
3 * FCP adapters for IBM System z9 and zSeries.
4 *
5 * (C) Copyright IBM Corp. 2002, 2006
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#ifndef ZFCP_DEF_H
23#define ZFCP_DEF_H
24
25/*************************** INCLUDES *****************************************/
26
27#include <linux/init.h>
28#include <linux/moduleparam.h>
29#include <linux/miscdevice.h>
30#include <linux/major.h>
31#include <linux/blkdev.h>
32#include <linux/delay.h>
33#include <linux/timer.h>
34#include <linux/slab.h>
35#include <linux/mempool.h>
36#include <linux/syscalls.h>
37#include <linux/ioctl.h>
38#include <scsi/scsi.h>
39#include <scsi/scsi_tcq.h>
40#include <scsi/scsi_cmnd.h>
41#include <scsi/scsi_device.h>
42#include <scsi/scsi_host.h>
43#include <scsi/scsi_transport.h>
44#include <scsi/scsi_transport_fc.h>
45#include <asm/ccwdev.h>
46#include <asm/qdio.h>
47#include <asm/debug.h>
48#include <asm/ebcdic.h>
49#include "zfcp_fsf.h"
50
51
52/********************* GENERAL DEFINES *********************************/
53
54/* zfcp version number, it consists of major, minor, and patch-level number */
55#define ZFCP_VERSION		"4.8.0"
56
57/**
58 * zfcp_sg_to_address - determine kernel address from struct scatterlist
59 * @list: struct scatterlist
60 * Return: kernel address
61 */
62static inline void *
63zfcp_sg_to_address(struct scatterlist *list)
64{
65	return (void *) (page_address(list->page) + list->offset);
66}
67
68/**
69 * zfcp_address_to_sg - set up struct scatterlist from kernel address
70 * @address: kernel address
71 * @list: struct scatterlist
72 */
73static inline void
74zfcp_address_to_sg(void *address, struct scatterlist *list)
75{
76	list->page = virt_to_page(address);
77	list->offset = ((unsigned long) address) & (PAGE_SIZE - 1);
78}
79
80#define REQUEST_LIST_SIZE 128
81
82/********************* SCSI SPECIFIC DEFINES *********************************/
83#define ZFCP_SCSI_ER_TIMEOUT                    (10*HZ)
84
85/********************* CIO/QDIO SPECIFIC DEFINES *****************************/
86
87/* Adapter Identification Parameters */
88#define ZFCP_CONTROL_UNIT_TYPE  0x1731
89#define ZFCP_CONTROL_UNIT_MODEL 0x03
90#define ZFCP_DEVICE_TYPE        0x1732
91#define ZFCP_DEVICE_MODEL       0x03
92#define ZFCP_DEVICE_MODEL_PRIV	0x04
93
94/* allow as many chained SBALs as are supported by hardware */
95#define ZFCP_MAX_SBALS_PER_REQ		FSF_MAX_SBALS_PER_REQ
96#define ZFCP_MAX_SBALS_PER_CT_REQ	FSF_MAX_SBALS_PER_REQ
97#define ZFCP_MAX_SBALS_PER_ELS_REQ	FSF_MAX_SBALS_PER_ELS_REQ
98
99#define ZFCP_MAX_SBALES_PER_SBAL	(QDIO_MAX_ELEMENTS_PER_BUFFER - 1)
100
101#define ZFCP_LAST_SBALE_PER_SBAL	(ZFCP_MAX_SBALES_PER_SBAL - 1)
102
103/* max. number of (data buffer) SBALEs in largest SBAL chain */
104#define ZFCP_MAX_SBALES_PER_REQ		\
105	(ZFCP_MAX_SBALS_PER_REQ * ZFCP_MAX_SBALES_PER_SBAL - 2)
106        /* request ID + QTCB in SBALE 0 + 1 of first SBAL in chain */
107
108#define ZFCP_MAX_SECTORS (ZFCP_MAX_SBALES_PER_REQ * 8)
109        /* max. number of (data buffer) SBALEs in largest SBAL chain
110           multiplied with number of sectors per 4k block */
111
112#define ZFCP_QDIO_PCI_INTERVAL		(QDIO_MAX_BUFFERS_PER_Q \
113                                         - (ZFCP_MAX_SBALS_PER_REQ + 4))
114
115#define ZFCP_SBAL_TIMEOUT               (5*HZ)
116
117#define ZFCP_TYPE2_RECOVERY_TIME        (8*HZ)
118
119/* queue polling (values in microseconds) */
120#define ZFCP_MAX_INPUT_THRESHOLD 	5000
121#define ZFCP_MAX_OUTPUT_THRESHOLD 	1000
122#define ZFCP_MIN_INPUT_THRESHOLD 	1	/* ignored by QDIO layer */
123#define ZFCP_MIN_OUTPUT_THRESHOLD 	1	/* ignored by QDIO layer */
124
125#define QDIO_SCSI_QFMT			1	/* 1 for FSF */
126
127/********************* FSF SPECIFIC DEFINES *********************************/
128
129#define ZFCP_ULP_INFO_VERSION                   26
130#define ZFCP_QTCB_VERSION	FSF_QTCB_CURRENT_VERSION
131/* ATTENTION: value must not be used by hardware */
132#define FSF_QTCB_UNSOLICITED_STATUS		0x6305
133#define ZFCP_STATUS_READ_FAILED_THRESHOLD	3
134#define ZFCP_STATUS_READS_RECOM		        FSF_STATUS_READS_RECOM
135
136/* Do 1st retry in 1 second, then double the timeout for each following retry */
137#define ZFCP_EXCHANGE_CONFIG_DATA_FIRST_SLEEP	100
138#define ZFCP_EXCHANGE_CONFIG_DATA_RETRIES	7
139
140/* timeout value for "default timer" for fsf requests */
141#define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ)
142
143/*************** FIBRE CHANNEL PROTOCOL SPECIFIC DEFINES ********************/
144
145typedef unsigned long long wwn_t;
146typedef unsigned long long fcp_lun_t;
147/* data length field may be at variable position in FCP-2 FCP_CMND IU */
148typedef unsigned int       fcp_dl_t;
149
150#define ZFCP_FC_SERVICE_CLASS_DEFAULT	FSF_CLASS_3
151
152/* timeout for name-server lookup (in seconds) */
153#define ZFCP_NS_GID_PN_TIMEOUT		10
154
155/* largest SCSI command we can process */
156/* FCP-2 (FCP_CMND IU) allows up to (255-3+16) */
157#define ZFCP_MAX_SCSI_CMND_LENGTH	255
158/* maximum number of commands in LUN queue (tagged queueing) */
159#define ZFCP_CMND_PER_LUN               32
160
161/* task attribute values in FCP-2 FCP_CMND IU */
162#define SIMPLE_Q	0
163#define HEAD_OF_Q	1
164#define ORDERED_Q	2
165#define ACA_Q		4
166#define UNTAGGED	5
167
168/* task management flags in FCP-2 FCP_CMND IU */
169#define FCP_CLEAR_ACA		0x40
170#define FCP_TARGET_RESET	0x20
171#define FCP_LOGICAL_UNIT_RESET	0x10
172#define FCP_CLEAR_TASK_SET	0x04
173#define FCP_ABORT_TASK_SET	0x02
174
175#define FCP_CDB_LENGTH		16
176
177#define ZFCP_DID_MASK           0x00FFFFFF
178
179/* FCP(-2) FCP_CMND IU */
180struct fcp_cmnd_iu {
181	fcp_lun_t fcp_lun;	   /* FCP logical unit number */
182	u8  crn;	           /* command reference number */
183	u8  reserved0:5;	   /* reserved */
184	u8  task_attribute:3;	   /* task attribute */
185	u8  task_management_flags; /* task management flags */
186	u8  add_fcp_cdb_length:6;  /* additional FCP_CDB length */
187	u8  rddata:1;              /* read data */
188	u8  wddata:1;              /* write data */
189	u8  fcp_cdb[FCP_CDB_LENGTH];
190} __attribute__((packed));
191
192/* FCP(-2) FCP_RSP IU */
193struct fcp_rsp_iu {
194	u8  reserved0[10];
195	union {
196		struct {
197			u8 reserved1:3;
198			u8 fcp_conf_req:1;
199			u8 fcp_resid_under:1;
200			u8 fcp_resid_over:1;
201			u8 fcp_sns_len_valid:1;
202			u8 fcp_rsp_len_valid:1;
203		} bits;
204		u8 value;
205	} validity;
206	u8  scsi_status;
207	u32 fcp_resid;
208	u32 fcp_sns_len;
209	u32 fcp_rsp_len;
210} __attribute__((packed));
211
212
213#define RSP_CODE_GOOD		 0
214#define RSP_CODE_LENGTH_MISMATCH 1
215#define RSP_CODE_FIELD_INVALID	 2
216#define RSP_CODE_RO_MISMATCH	 3
217#define RSP_CODE_TASKMAN_UNSUPP	 4
218#define RSP_CODE_TASKMAN_FAILED	 5
219
220/* see fc-fs */
221#define LS_RSCN  0x61040000
222#define LS_LOGO  0x05000000
223#define LS_PLOGI 0x03000000
224
225struct fcp_rscn_head {
226        u8  command;
227        u8  page_length; /* always 0x04 */
228        u16 payload_len;
229} __attribute__((packed));
230
231struct fcp_rscn_element {
232        u8  reserved:2;
233        u8  event_qual:4;
234        u8  addr_format:2;
235        u32 nport_did:24;
236} __attribute__((packed));
237
238#define ZFCP_PORT_ADDRESS   0x0
239#define ZFCP_AREA_ADDRESS   0x1
240#define ZFCP_DOMAIN_ADDRESS 0x2
241#define ZFCP_FABRIC_ADDRESS 0x3
242
243#define ZFCP_PORTS_RANGE_PORT   0xFFFFFF
244#define ZFCP_PORTS_RANGE_AREA   0xFFFF00
245#define ZFCP_PORTS_RANGE_DOMAIN 0xFF0000
246#define ZFCP_PORTS_RANGE_FABRIC 0x000000
247
248#define ZFCP_NO_PORTS_PER_AREA    0x100
249#define ZFCP_NO_PORTS_PER_DOMAIN  0x10000
250#define ZFCP_NO_PORTS_PER_FABRIC  0x1000000
251
252/* see fc-ph */
253struct fcp_logo {
254        u32 command;
255        u32 nport_did;
256        wwn_t nport_wwpn;
257} __attribute__((packed));
258
259/*
260 * DBF stuff
261 */
262#define ZFCP_DBF_TAG_SIZE      4
263
264struct zfcp_dbf_dump {
265	u8 tag[ZFCP_DBF_TAG_SIZE];
266	u32 total_size;		/* size of total dump data */
267	u32 offset;		/* how much data has being already dumped */
268	u32 size;		/* how much data comes with this record */
269	u8 data[];		/* dump data */
270} __attribute__ ((packed));
271
272struct zfcp_erp_dbf_record {
273	u8 dummy[16];
274} __attribute__ ((packed));
275
276struct zfcp_hba_dbf_record_response {
277	u32 fsf_command;
278	u64 fsf_reqid;
279	u32 fsf_seqno;
280	u64 fsf_issued;
281	u32 fsf_prot_status;
282	u32 fsf_status;
283	u8 fsf_prot_status_qual[FSF_PROT_STATUS_QUAL_SIZE];
284	u8 fsf_status_qual[FSF_STATUS_QUALIFIER_SIZE];
285	u32 fsf_req_status;
286	u8 sbal_first;
287	u8 sbal_curr;
288	u8 sbal_last;
289	u8 pool;
290	u64 erp_action;
291	union {
292		struct {
293			u64 scsi_cmnd;
294			u64 scsi_serial;
295		} send_fcp;
296		struct {
297			u64 wwpn;
298			u32 d_id;
299			u32 port_handle;
300		} port;
301		struct {
302			u64 wwpn;
303			u64 fcp_lun;
304			u32 port_handle;
305			u32 lun_handle;
306		} unit;
307		struct {
308			u32 d_id;
309			u8 ls_code;
310		} send_els;
311	} data;
312} __attribute__ ((packed));
313
314struct zfcp_hba_dbf_record_status {
315	u8 failed;
316	u32 status_type;
317	u32 status_subtype;
318	struct fsf_queue_designator
319	 queue_designator;
320	u32 payload_size;
321#define ZFCP_DBF_UNSOL_PAYLOAD				80
322#define ZFCP_DBF_UNSOL_PAYLOAD_SENSE_DATA_AVAIL		32
323#define ZFCP_DBF_UNSOL_PAYLOAD_BIT_ERROR_THRESHOLD	56
324#define ZFCP_DBF_UNSOL_PAYLOAD_FEATURE_UPDATE_ALERT	2 * sizeof(u32)
325	u8 payload[ZFCP_DBF_UNSOL_PAYLOAD];
326} __attribute__ ((packed));
327
328struct zfcp_hba_dbf_record_qdio {
329	u32 status;
330	u32 qdio_error;
331	u32 siga_error;
332	u8 sbal_index;
333	u8 sbal_count;
334} __attribute__ ((packed));
335
336struct zfcp_hba_dbf_record {
337	u8 tag[ZFCP_DBF_TAG_SIZE];
338	u8 tag2[ZFCP_DBF_TAG_SIZE];
339	union {
340		struct zfcp_hba_dbf_record_response response;
341		struct zfcp_hba_dbf_record_status status;
342		struct zfcp_hba_dbf_record_qdio qdio;
343	} type;
344} __attribute__ ((packed));
345
346struct zfcp_san_dbf_record_ct {
347	union {
348		struct {
349			u16 cmd_req_code;
350			u8 revision;
351			u8 gs_type;
352			u8 gs_subtype;
353			u8 options;
354			u16 max_res_size;
355		} request;
356		struct {
357			u16 cmd_rsp_code;
358			u8 revision;
359			u8 reason_code;
360			u8 reason_code_expl;
361			u8 vendor_unique;
362		} response;
363	} type;
364	u32 payload_size;
365#define ZFCP_DBF_CT_PAYLOAD	24
366	u8 payload[ZFCP_DBF_CT_PAYLOAD];
367} __attribute__ ((packed));
368
369struct zfcp_san_dbf_record_els {
370	u8 ls_code;
371	u32 payload_size;
372#define ZFCP_DBF_ELS_PAYLOAD	32
373#define ZFCP_DBF_ELS_MAX_PAYLOAD 1024
374	u8 payload[ZFCP_DBF_ELS_PAYLOAD];
375} __attribute__ ((packed));
376
377struct zfcp_san_dbf_record {
378	u8 tag[ZFCP_DBF_TAG_SIZE];
379	u64 fsf_reqid;
380	u32 fsf_seqno;
381	u32 s_id;
382	u32 d_id;
383	union {
384		struct zfcp_san_dbf_record_ct ct;
385		struct zfcp_san_dbf_record_els els;
386	} type;
387} __attribute__ ((packed));
388
389struct zfcp_scsi_dbf_record {
390	u8 tag[ZFCP_DBF_TAG_SIZE];
391	u8 tag2[ZFCP_DBF_TAG_SIZE];
392	u32 scsi_id;
393	u32 scsi_lun;
394	u32 scsi_result;
395	u64 scsi_cmnd;
396	u64 scsi_serial;
397#define ZFCP_DBF_SCSI_OPCODE	16
398	u8 scsi_opcode[ZFCP_DBF_SCSI_OPCODE];
399	u8 scsi_retries;
400	u8 scsi_allowed;
401	u64 fsf_reqid;
402	u32 fsf_seqno;
403	u64 fsf_issued;
404	union {
405		u64 old_fsf_reqid;
406		struct {
407			u8 rsp_validity;
408			u8 rsp_scsi_status;
409			u32 rsp_resid;
410			u8 rsp_code;
411#define ZFCP_DBF_SCSI_FCP_SNS_INFO	16
412#define ZFCP_DBF_SCSI_MAX_FCP_SNS_INFO	256
413			u32 sns_info_len;
414			u8 sns_info[ZFCP_DBF_SCSI_FCP_SNS_INFO];
415		} fcp;
416	} type;
417} __attribute__ ((packed));
418
419/*
420 * FC-FS stuff
421 */
422#define R_A_TOV				10 /* seconds */
423#define ZFCP_ELS_TIMEOUT		(2 * R_A_TOV)
424
425#define ZFCP_LS_RLS			0x0f
426#define ZFCP_LS_ADISC			0x52
427#define ZFCP_LS_RPS			0x56
428#define ZFCP_LS_RSCN			0x61
429#define ZFCP_LS_RNID			0x78
430
431struct zfcp_ls_rjt_par {
432	u8 action;
433 	u8 reason_code;
434 	u8 reason_expl;
435 	u8 vendor_unique;
436} __attribute__ ((packed));
437
438struct zfcp_ls_adisc {
439	u8		code;
440	u8		field[3];
441	u32		hard_nport_id;
442	u64		wwpn;
443	u64		wwnn;
444	u32		nport_id;
445} __attribute__ ((packed));
446
447struct zfcp_ls_adisc_acc {
448	u8		code;
449	u8		field[3];
450	u32		hard_nport_id;
451	u64		wwpn;
452	u64		wwnn;
453	u32		nport_id;
454} __attribute__ ((packed));
455
456struct zfcp_rc_entry {
457	u8 code;
458	const char *description;
459};
460
461/*
462 * FC-GS-2 stuff
463 */
464#define ZFCP_CT_REVISION		0x01
465#define ZFCP_CT_DIRECTORY_SERVICE	0xFC
466#define ZFCP_CT_NAME_SERVER		0x02
467#define ZFCP_CT_SYNCHRONOUS		0x00
468#define ZFCP_CT_GID_PN			0x0121
469#define ZFCP_CT_MAX_SIZE		0x1020
470#define ZFCP_CT_ACCEPT			0x8002
471#define ZFCP_CT_REJECT			0x8001
472
473/*
474 * FC-GS-4 stuff
475 */
476#define ZFCP_CT_TIMEOUT			(3 * R_A_TOV)
477
478/******************** LOGGING MACROS AND DEFINES *****************************/
479
480/*
481 * Logging may be applied on certain kinds of driver operations
482 * independently. Additionally, different log-levels are supported for
483 * each of these areas.
484 */
485
486#define ZFCP_NAME               "zfcp"
487
488/* independent log areas */
489#define ZFCP_LOG_AREA_OTHER	0
490#define ZFCP_LOG_AREA_SCSI	1
491#define ZFCP_LOG_AREA_FSF	2
492#define ZFCP_LOG_AREA_CONFIG	3
493#define ZFCP_LOG_AREA_CIO	4
494#define ZFCP_LOG_AREA_QDIO	5
495#define ZFCP_LOG_AREA_ERP	6
496#define ZFCP_LOG_AREA_FC	7
497
498/* log level values*/
499#define ZFCP_LOG_LEVEL_NORMAL	0
500#define ZFCP_LOG_LEVEL_INFO	1
501#define ZFCP_LOG_LEVEL_DEBUG	2
502#define ZFCP_LOG_LEVEL_TRACE	3
503
504/*
505 * this allows removal of logging code by the preprocessor
506 * (the most detailed log level still to be compiled in is specified,
507 * higher log levels are removed)
508 */
509#define ZFCP_LOG_LEVEL_LIMIT	ZFCP_LOG_LEVEL_TRACE
510
511/* get "loglevel" nibble assignment */
512#define ZFCP_GET_LOG_VALUE(zfcp_lognibble) \
513	       ((atomic_read(&zfcp_data.loglevel) >> (zfcp_lognibble<<2)) & 0xF)
514
515/* set "loglevel" nibble */
516#define ZFCP_SET_LOG_NIBBLE(value, zfcp_lognibble) \
517	       (value << (zfcp_lognibble << 2))
518
519/* all log-level defaults are combined to generate initial log-level */
520#define ZFCP_LOG_LEVEL_DEFAULTS \
521	(ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_OTHER) | \
522	 ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_SCSI) | \
523	 ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_FSF) | \
524	 ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_CONFIG) | \
525	 ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_CIO) | \
526	 ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_QDIO) | \
527	 ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_ERP) | \
528	 ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_FC))
529
530/* check whether we have the right level for logging */
531#define ZFCP_LOG_CHECK(level) \
532	((ZFCP_GET_LOG_VALUE(ZFCP_LOG_AREA)) >= level)
533
534/* logging routine for zfcp */
535#define _ZFCP_LOG(fmt, args...) \
536	printk(KERN_ERR ZFCP_NAME": %s(%d): " fmt, __FUNCTION__, \
537	       __LINE__ , ##args)
538
539#define ZFCP_LOG(level, fmt, args...) \
540do { \
541	if (ZFCP_LOG_CHECK(level)) \
542		_ZFCP_LOG(fmt, ##args); \
543} while (0)
544
545#if ZFCP_LOG_LEVEL_LIMIT < ZFCP_LOG_LEVEL_NORMAL
546# define ZFCP_LOG_NORMAL(fmt, args...)	do { } while (0)
547#else
548# define ZFCP_LOG_NORMAL(fmt, args...) \
549do { \
550	if (ZFCP_LOG_CHECK(ZFCP_LOG_LEVEL_NORMAL)) \
551		printk(KERN_ERR ZFCP_NAME": " fmt, ##args); \
552} while (0)
553#endif
554
555#if ZFCP_LOG_LEVEL_LIMIT < ZFCP_LOG_LEVEL_INFO
556# define ZFCP_LOG_INFO(fmt, args...)	do { } while (0)
557#else
558# define ZFCP_LOG_INFO(fmt, args...) \
559do { \
560	if (ZFCP_LOG_CHECK(ZFCP_LOG_LEVEL_INFO)) \
561		printk(KERN_ERR ZFCP_NAME": " fmt, ##args); \
562} while (0)
563#endif
564
565#if ZFCP_LOG_LEVEL_LIMIT < ZFCP_LOG_LEVEL_DEBUG
566# define ZFCP_LOG_DEBUG(fmt, args...)	do { } while (0)
567#else
568# define ZFCP_LOG_DEBUG(fmt, args...) \
569	ZFCP_LOG(ZFCP_LOG_LEVEL_DEBUG, fmt , ##args)
570#endif
571
572#if ZFCP_LOG_LEVEL_LIMIT < ZFCP_LOG_LEVEL_TRACE
573# define ZFCP_LOG_TRACE(fmt, args...)	do { } while (0)
574#else
575# define ZFCP_LOG_TRACE(fmt, args...) \
576	ZFCP_LOG(ZFCP_LOG_LEVEL_TRACE, fmt , ##args)
577#endif
578
579/*************** ADAPTER/PORT/UNIT AND FSF_REQ STATUS FLAGS ******************/
580
581/*
582 * Note, the leftmost status byte is common among adapter, port
583 * and unit
584 */
585#define ZFCP_COMMON_FLAGS			0xfff00000
586
587/* common status bits */
588#define ZFCP_STATUS_COMMON_REMOVE		0x80000000
589#define ZFCP_STATUS_COMMON_RUNNING		0x40000000
590#define ZFCP_STATUS_COMMON_ERP_FAILED		0x20000000
591#define ZFCP_STATUS_COMMON_UNBLOCKED		0x10000000
592#define ZFCP_STATUS_COMMON_OPENING              0x08000000
593#define ZFCP_STATUS_COMMON_OPEN                 0x04000000
594#define ZFCP_STATUS_COMMON_CLOSING              0x02000000
595#define ZFCP_STATUS_COMMON_ERP_INUSE		0x01000000
596#define ZFCP_STATUS_COMMON_ACCESS_DENIED	0x00800000
597#define ZFCP_STATUS_COMMON_ACCESS_BOXED		0x00400000
598
599/* adapter status */
600#define ZFCP_STATUS_ADAPTER_QDIOUP		0x00000002
601#define ZFCP_STATUS_ADAPTER_REGISTERED		0x00000004
602#define ZFCP_STATUS_ADAPTER_XCONFIG_OK		0x00000008
603#define ZFCP_STATUS_ADAPTER_HOST_CON_INIT	0x00000010
604#define ZFCP_STATUS_ADAPTER_ERP_THREAD_UP	0x00000020
605#define ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL	0x00000080
606#define ZFCP_STATUS_ADAPTER_ERP_PENDING		0x00000100
607#define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED	0x00000200
608#define ZFCP_STATUS_ADAPTER_XPORT_OK		0x00000800
609
610/* FC-PH/FC-GS well-known address identifiers for generic services */
611#define ZFCP_DID_MANAGEMENT_SERVICE		0xFFFFFA
612#define ZFCP_DID_TIME_SERVICE			0xFFFFFB
613#define ZFCP_DID_DIRECTORY_SERVICE		0xFFFFFC
614#define ZFCP_DID_ALIAS_SERVICE			0xFFFFF8
615#define ZFCP_DID_KEY_DISTRIBUTION_SERVICE	0xFFFFF7
616
617/* remote port status */
618#define ZFCP_STATUS_PORT_PHYS_OPEN		0x00000001
619#define ZFCP_STATUS_PORT_DID_DID		0x00000002
620#define ZFCP_STATUS_PORT_PHYS_CLOSING		0x00000004
621#define ZFCP_STATUS_PORT_NO_WWPN		0x00000008
622#define ZFCP_STATUS_PORT_NO_SCSI_ID		0x00000010
623#define ZFCP_STATUS_PORT_INVALID_WWPN		0x00000020
624
625/* for ports with well known addresses */
626#define ZFCP_STATUS_PORT_WKA \
627		(ZFCP_STATUS_PORT_NO_WWPN | \
628		 ZFCP_STATUS_PORT_NO_SCSI_ID)
629
630/* logical unit status */
631#define ZFCP_STATUS_UNIT_NOTSUPPUNITRESET	0x00000001
632#define ZFCP_STATUS_UNIT_TEMPORARY		0x00000002
633#define ZFCP_STATUS_UNIT_SHARED			0x00000004
634#define ZFCP_STATUS_UNIT_READONLY		0x00000008
635#define ZFCP_STATUS_UNIT_REGISTERED		0x00000010
636#define ZFCP_STATUS_UNIT_SCSI_WORK_PENDING	0x00000020
637
638/* FSF request status (this does not have a common part) */
639#define ZFCP_STATUS_FSFREQ_NOT_INIT		0x00000000
640#define ZFCP_STATUS_FSFREQ_POOL  		0x00000001
641#define ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT	0x00000002
642#define ZFCP_STATUS_FSFREQ_COMPLETED		0x00000004
643#define ZFCP_STATUS_FSFREQ_ERROR		0x00000008
644#define ZFCP_STATUS_FSFREQ_CLEANUP		0x00000010
645#define ZFCP_STATUS_FSFREQ_ABORTING		0x00000020
646#define ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED	0x00000040
647#define ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED       0x00000080
648#define ZFCP_STATUS_FSFREQ_ABORTED              0x00000100
649#define ZFCP_STATUS_FSFREQ_TMFUNCFAILED         0x00000200
650#define ZFCP_STATUS_FSFREQ_TMFUNCNOTSUPP        0x00000400
651#define ZFCP_STATUS_FSFREQ_RETRY                0x00000800
652#define ZFCP_STATUS_FSFREQ_DISMISSED            0x00001000
653
654/*********************** ERROR RECOVERY PROCEDURE DEFINES ********************/
655
656#define ZFCP_MAX_ERPS                   3
657
658#define ZFCP_ERP_FSFREQ_TIMEOUT		(30 * HZ)
659#define ZFCP_ERP_MEMWAIT_TIMEOUT	HZ
660
661#define ZFCP_STATUS_ERP_TIMEDOUT	0x10000000
662#define ZFCP_STATUS_ERP_CLOSE_ONLY	0x01000000
663#define ZFCP_STATUS_ERP_DISMISSING	0x00100000
664#define ZFCP_STATUS_ERP_DISMISSED	0x00200000
665#define ZFCP_STATUS_ERP_LOWMEM		0x00400000
666
667#define ZFCP_ERP_STEP_UNINITIALIZED	0x00000000
668#define ZFCP_ERP_STEP_FSF_XCONFIG	0x00000001
669#define ZFCP_ERP_STEP_PHYS_PORT_CLOSING	0x00000010
670#define ZFCP_ERP_STEP_PORT_CLOSING	0x00000100
671#define ZFCP_ERP_STEP_NAMESERVER_OPEN	0x00000200
672#define ZFCP_ERP_STEP_NAMESERVER_LOOKUP	0x00000400
673#define ZFCP_ERP_STEP_PORT_OPENING	0x00000800
674#define ZFCP_ERP_STEP_UNIT_CLOSING	0x00001000
675#define ZFCP_ERP_STEP_UNIT_OPENING	0x00002000
676
677/* Ordered by escalation level (necessary for proper erp-code operation) */
678#define ZFCP_ERP_ACTION_REOPEN_ADAPTER		0x4
679#define ZFCP_ERP_ACTION_REOPEN_PORT_FORCED	0x3
680#define ZFCP_ERP_ACTION_REOPEN_PORT		0x2
681#define ZFCP_ERP_ACTION_REOPEN_UNIT		0x1
682
683#define ZFCP_ERP_ACTION_RUNNING			0x1
684#define ZFCP_ERP_ACTION_READY			0x2
685
686#define ZFCP_ERP_SUCCEEDED	0x0
687#define ZFCP_ERP_FAILED		0x1
688#define ZFCP_ERP_CONTINUES	0x2
689#define ZFCP_ERP_EXIT		0x3
690#define ZFCP_ERP_DISMISSED	0x4
691#define ZFCP_ERP_NOMEM		0x5
692
693
694/******************** CFDC SPECIFIC STUFF *****************************/
695
696/* Firewall data channel sense data record */
697struct zfcp_cfdc_sense_data {
698	u32 signature;           /* Request signature */
699	u32 devno;               /* FCP adapter device number */
700	u32 command;             /* Command code */
701	u32 fsf_status;          /* FSF request status and status qualifier */
702	u8  fsf_status_qual[FSF_STATUS_QUALIFIER_SIZE];
703	u8  payloads[256];       /* Access conflicts list */
704	u8  control_file[0];     /* Access control table */
705};
706
707#define ZFCP_CFDC_SIGNATURE			0xCFDCACDF
708
709#define ZFCP_CFDC_CMND_DOWNLOAD_NORMAL		0x00010001
710#define ZFCP_CFDC_CMND_DOWNLOAD_FORCE		0x00010101
711#define ZFCP_CFDC_CMND_FULL_ACCESS		0x00000201
712#define ZFCP_CFDC_CMND_RESTRICTED_ACCESS	0x00000401
713#define ZFCP_CFDC_CMND_UPLOAD			0x00010002
714
715#define ZFCP_CFDC_DOWNLOAD			0x00000001
716#define ZFCP_CFDC_UPLOAD			0x00000002
717#define ZFCP_CFDC_WITH_CONTROL_FILE		0x00010000
718
719#define ZFCP_CFDC_DEV_NAME			"zfcp_cfdc"
720#define ZFCP_CFDC_DEV_MAJOR			MISC_MAJOR
721#define ZFCP_CFDC_DEV_MINOR			MISC_DYNAMIC_MINOR
722
723#define ZFCP_CFDC_MAX_CONTROL_FILE_SIZE		127 * 1024
724
725/************************* STRUCTURE DEFINITIONS *****************************/
726
727struct zfcp_fsf_req;
728
729/* holds various memory pools of an adapter */
730struct zfcp_adapter_mempool {
731	mempool_t *fsf_req_erp;
732	mempool_t *fsf_req_scsi;
733	mempool_t *fsf_req_abort;
734	mempool_t *fsf_req_status_read;
735	mempool_t *data_status_read;
736	mempool_t *data_gid_pn;
737};
738
739/*
740 * header for CT_IU
741 */
742struct ct_hdr {
743	u8 revision;		// 0x01
744	u8 in_id[3];		// 0x00
745	u8 gs_type;		// 0xFC	Directory Service
746	u8 gs_subtype;		// 0x02	Name Server
747	u8 options;		// 0x00 single bidirectional exchange
748	u8 reserved0;
749	u16 cmd_rsp_code;	// 0x0121 GID_PN, or 0x0100 GA_NXT
750	u16 max_res_size;	// <= (4096 - 16) / 4
751	u8 reserved1;
752	u8 reason_code;
753	u8 reason_code_expl;
754	u8 vendor_unique;
755} __attribute__ ((packed));
756
757/* nameserver request CT_IU -- for requests where
758 * a port name is required */
759struct ct_iu_gid_pn_req {
760	struct ct_hdr header;
761	wwn_t wwpn;
762} __attribute__ ((packed));
763
764/* FS_ACC IU and data unit for GID_PN nameserver request */
765struct ct_iu_gid_pn_resp {
766	struct ct_hdr header;
767	u32 d_id;
768} __attribute__ ((packed));
769
770typedef void (*zfcp_send_ct_handler_t)(unsigned long);
771
772/**
773 * struct zfcp_send_ct - used to pass parameters to function zfcp_fsf_send_ct
774 * @port: port where the request is sent to
775 * @req: scatter-gather list for request
776 * @resp: scatter-gather list for response
777 * @req_count: number of elements in request scatter-gather list
778 * @resp_count: number of elements in response scatter-gather list
779 * @handler: handler function (called for response to the request)
780 * @handler_data: data passed to handler function
781 * @pool: pointer to memory pool for ct request structure
782 * @timeout: FSF timeout for this request
783 * @completion: completion for synchronization purposes
784 * @status: used to pass error status to calling function
785 */
786struct zfcp_send_ct {
787	struct zfcp_port *port;
788	struct scatterlist *req;
789	struct scatterlist *resp;
790	unsigned int req_count;
791	unsigned int resp_count;
792	zfcp_send_ct_handler_t handler;
793	unsigned long handler_data;
794	mempool_t *pool;
795	int timeout;
796	struct completion *completion;
797	int status;
798};
799
800/* used for name server requests in error recovery */
801struct zfcp_gid_pn_data {
802	struct zfcp_send_ct ct;
803	struct scatterlist req;
804	struct scatterlist resp;
805	struct ct_iu_gid_pn_req ct_iu_req;
806	struct ct_iu_gid_pn_resp ct_iu_resp;
807        struct zfcp_port *port;
808};
809
810typedef void (*zfcp_send_els_handler_t)(unsigned long);
811
812/**
813 * struct zfcp_send_els - used to pass parameters to function zfcp_fsf_send_els
814 * @adapter: adapter where request is sent from
815 * @port: port where ELS is destinated (port reference count has to be increased)
816 * @d_id: destiniation id of port where request is sent to
817 * @req: scatter-gather list for request
818 * @resp: scatter-gather list for response
819 * @req_count: number of elements in request scatter-gather list
820 * @resp_count: number of elements in response scatter-gather list
821 * @handler: handler function (called for response to the request)
822 * @handler_data: data passed to handler function
823 * @completion: completion for synchronization purposes
824 * @ls_code: hex code of ELS command
825 * @status: used to pass error status to calling function
826 */
827struct zfcp_send_els {
828	struct zfcp_adapter *adapter;
829	struct zfcp_port *port;
830	u32 d_id;
831	struct scatterlist *req;
832	struct scatterlist *resp;
833	unsigned int req_count;
834	unsigned int resp_count;
835	zfcp_send_els_handler_t handler;
836	unsigned long handler_data;
837	struct completion *completion;
838	int ls_code;
839	int status;
840};
841
842struct zfcp_qdio_queue {
843	struct qdio_buffer *buffer[QDIO_MAX_BUFFERS_PER_Q]; /* SBALs */
844	u8		   free_index;	      /* index of next free bfr
845						 in queue (free_count>0) */
846	atomic_t           free_count;	      /* number of free buffers
847						 in queue */
848	rwlock_t	   queue_lock;	      /* lock for operations on queue */
849        int                distance_from_int; /* SBALs used since PCI indication
850						 was last set */
851};
852
853struct zfcp_erp_action {
854	struct list_head list;
855	int action;	              /* requested action code */
856	struct zfcp_adapter *adapter; /* device which should be recovered */
857	struct zfcp_port *port;
858	struct zfcp_unit *unit;
859	volatile u32 status;	      /* recovery status */
860	u32 step;	              /* active step of this erp action */
861	struct zfcp_fsf_req *fsf_req; /* fsf request currently pending
862					 for this action */
863	struct timer_list timer;
864};
865
866
867struct zfcp_adapter {
868	struct list_head	list;              /* list of adapters */
869	atomic_t                refcount;          /* reference count */
870	wait_queue_head_t	remove_wq;         /* can be used to wait for
871						      refcount drop to zero */
872	wwn_t			peer_wwnn;	   /* P2P peer WWNN */
873	wwn_t			peer_wwpn;	   /* P2P peer WWPN */
874	u32			peer_d_id;	   /* P2P peer D_ID */
875	struct ccw_device       *ccw_device;	   /* S/390 ccw device */
876	u32			hydra_version;	   /* Hydra version */
877	u32			fsf_lic_version;
878	u32			adapter_features;  /* FCP channel features */
879	u32			connection_features; /* host connection features */
880        u32			hardware_version;  /* of FCP channel */
881	struct Scsi_Host	*scsi_host;	   /* Pointer to mid-layer */
882	struct list_head	port_list_head;	   /* remote port list */
883	struct list_head        port_remove_lh;    /* head of ports to be
884						      removed */
885	u32			ports;	           /* number of remote ports */
886	atomic_t		reqs_active;	   /* # active FSF reqs */
887	unsigned long		req_no;		   /* unique FSF req number */
888	struct list_head	*req_list;	   /* list of pending reqs */
889	spinlock_t		req_list_lock;	   /* request list lock */
890	struct zfcp_qdio_queue	request_queue;	   /* request queue */
891	u32			fsf_req_seq_no;	   /* FSF cmnd seq number */
892	wait_queue_head_t	request_wq;	   /* can be used to wait for
893						      more avaliable SBALs */
894	struct zfcp_qdio_queue	response_queue;	   /* response queue */
895	rwlock_t		abort_lock;        /* Protects against SCSI
896						      stack abort/command
897						      completion races */
898	u16			status_read_failed; /* # failed status reads */
899	atomic_t		status;	           /* status of this adapter */
900	struct list_head	erp_ready_head;	   /* error recovery for this
901						      adapter/devices */
902	struct list_head	erp_running_head;
903	rwlock_t		erp_lock;
904	struct semaphore	erp_ready_sem;
905	wait_queue_head_t	erp_thread_wqh;
906	wait_queue_head_t	erp_done_wqh;
907	struct zfcp_erp_action	erp_action;	   /* pending error recovery */
908        atomic_t                erp_counter;
909	u32			erp_total_count;   /* total nr of enqueued erp
910						      actions */
911	u32			erp_low_mem_count; /* nr of erp actions waiting
912						      for memory */
913	struct zfcp_port	*nameserver_port;  /* adapter's nameserver */
914	debug_info_t		*erp_dbf;
915	debug_info_t		*hba_dbf;
916	debug_info_t		*san_dbf;          /* debug feature areas */
917	debug_info_t		*scsi_dbf;
918	spinlock_t		erp_dbf_lock;
919	spinlock_t		hba_dbf_lock;
920	spinlock_t		san_dbf_lock;
921	spinlock_t		scsi_dbf_lock;
922	struct zfcp_erp_dbf_record	erp_dbf_buf;
923	struct zfcp_hba_dbf_record	hba_dbf_buf;
924	struct zfcp_san_dbf_record	san_dbf_buf;
925	struct zfcp_scsi_dbf_record	scsi_dbf_buf;
926	struct zfcp_adapter_mempool	pool;      /* Adapter memory pools */
927	struct qdio_initialize  qdio_init_data;    /* for qdio_establish */
928	struct device           generic_services;  /* directory for WKA ports */
929	struct fc_host_statistics *fc_stats;
930	struct fsf_qtcb_bottom_port *stats_reset_data;
931	unsigned long		stats_reset;
932};
933
934/*
935 * the struct device sysfs_device must be at the beginning of this structure.
936 * pointer to struct device is used to free port structure in release function
937 * of the device. don't change!
938 */
939struct zfcp_port {
940	struct device          sysfs_device;   /* sysfs device */
941	struct fc_rport        *rport;         /* rport of fc transport class */
942	struct list_head       list;	       /* list of remote ports */
943	atomic_t               refcount;       /* reference count */
944	wait_queue_head_t      remove_wq;      /* can be used to wait for
945						  refcount drop to zero */
946	struct zfcp_adapter    *adapter;       /* adapter used to access port */
947	struct list_head       unit_list_head; /* head of logical unit list */
948	struct list_head       unit_remove_lh; /* head of luns to be removed
949						  list */
950	u32		       units;	       /* # of logical units in list */
951	atomic_t	       status;	       /* status of this remote port */
952	wwn_t		       wwnn;	       /* WWNN if known */
953	wwn_t		       wwpn;	       /* WWPN */
954	u32		       d_id;	       /* D_ID */
955	u32		       handle;	       /* handle assigned by FSF */
956	struct zfcp_erp_action erp_action;     /* pending error recovery */
957        atomic_t               erp_counter;
958	u32                    maxframe_size;
959	u32                    supported_classes;
960};
961
962/* the struct device sysfs_device must be at the beginning of this structure.
963 * pointer to struct device is used to free unit structure in release function
964 * of the device. don't change!
965 */
966struct zfcp_unit {
967	struct device          sysfs_device;   /* sysfs device */
968	struct list_head       list;	       /* list of logical units */
969	atomic_t               refcount;       /* reference count */
970	wait_queue_head_t      remove_wq;      /* can be used to wait for
971						  refcount drop to zero */
972	struct zfcp_port       *port;	       /* remote port of unit */
973	atomic_t	       status;	       /* status of this logical unit */
974	unsigned int	       scsi_lun;       /* own SCSI LUN */
975	fcp_lun_t	       fcp_lun;	       /* own FCP_LUN */
976	u32		       handle;	       /* handle assigned by FSF */
977        struct scsi_device     *device;        /* scsi device struct pointer */
978	struct zfcp_erp_action erp_action;     /* pending error recovery */
979        atomic_t               erp_counter;
980	wait_queue_head_t      scsi_scan_wq;   /* can be used to wait until
981						  all scsi_scan_target
982						  requests have been
983						  completed. */
984};
985
986/* FSF request */
987struct zfcp_fsf_req {
988	struct list_head       list;	       /* list of FSF requests */
989	unsigned long	       req_id;	       /* unique request ID */
990	struct zfcp_adapter    *adapter;       /* adapter request belongs to */
991	u8		       sbal_number;    /* nr of SBALs free for use */
992	u8		       sbal_first;     /* first SBAL for this request */
993	u8		       sbal_last;      /* last possible SBAL for
994						  this reuest */
995	u8		       sbal_curr;      /* current SBAL during creation
996						  of request */
997	u8		       sbale_curr;     /* current SBALE during creation
998						  of request */
999	wait_queue_head_t      completion_wq;  /* can be used by a routine
1000						  to wait for completion */
1001	volatile u32	       status;	       /* status of this request */
1002	u32		       fsf_command;    /* FSF Command copy */
1003	struct fsf_qtcb	       *qtcb;	       /* address of associated QTCB */
1004	u32		       seq_no;         /* Sequence number of request */
1005        unsigned long          data;           /* private data of request */
1006	struct timer_list      timer;	       /* used for erp or scsi er */
1007	struct zfcp_erp_action *erp_action;    /* used if this request is
1008						  issued on behalf of erp */
1009	mempool_t	       *pool;	       /* used if request was alloacted
1010						  from emergency pool */
1011	unsigned long long     issued;         /* request sent time (STCK) */
1012	struct zfcp_unit       *unit;
1013};
1014
1015typedef void zfcp_fsf_req_handler_t(struct zfcp_fsf_req*);
1016
1017/* driver data */
1018struct zfcp_data {
1019	struct scsi_host_template scsi_host_template;
1020	struct scsi_transport_template *scsi_transport_template;
1021        atomic_t                status;             /* Module status flags */
1022	struct list_head	adapter_list_head;  /* head of adapter list */
1023	struct list_head	adapter_remove_lh;  /* head of adapters to be
1024						       removed */
1025	u32			adapters;	    /* # of adapters in list */
1026	rwlock_t                config_lock;        /* serialises changes
1027						       to adapter/port/unit
1028						       lists */
1029	struct semaphore        config_sema;        /* serialises configuration
1030						       changes */
1031	atomic_t		loglevel;            /* current loglevel */
1032	char                    init_busid[BUS_ID_SIZE];
1033	wwn_t                   init_wwpn;
1034	fcp_lun_t               init_fcp_lun;
1035	char 			*driver_version;
1036	struct kmem_cache		*fsf_req_qtcb_cache;
1037	struct kmem_cache		*sr_buffer_cache;
1038	struct kmem_cache		*gid_pn_cache;
1039};
1040
1041/**
1042 * struct zfcp_sg_list - struct describing a scatter-gather list
1043 * @sg: pointer to array of (struct scatterlist)
1044 * @count: number of elements in scatter-gather list
1045 */
1046struct zfcp_sg_list {
1047	struct scatterlist *sg;
1048	unsigned int count;
1049};
1050
1051/* number of elements for various memory pools */
1052#define ZFCP_POOL_FSF_REQ_ERP_NR	1
1053#define ZFCP_POOL_FSF_REQ_SCSI_NR	1
1054#define ZFCP_POOL_FSF_REQ_ABORT_NR	1
1055#define ZFCP_POOL_STATUS_READ_NR	ZFCP_STATUS_READS_RECOM
1056#define ZFCP_POOL_DATA_GID_PN_NR	1
1057
1058/* struct used by memory pools for fsf_requests */
1059struct zfcp_fsf_req_qtcb {
1060	struct zfcp_fsf_req fsf_req;
1061	struct fsf_qtcb qtcb;
1062};
1063
1064/********************** ZFCP SPECIFIC DEFINES ********************************/
1065
1066#define ZFCP_REQ_AUTO_CLEANUP	0x00000002
1067#define ZFCP_WAIT_FOR_SBAL	0x00000004
1068#define ZFCP_REQ_NO_QTCB	0x00000008
1069
1070#define ZFCP_SET                0x00000100
1071#define ZFCP_CLEAR              0x00000200
1072
1073#ifndef atomic_test_mask
1074#define atomic_test_mask(mask, target) \
1075           ((atomic_read(target) & mask) == mask)
1076#endif
1077
1078extern void _zfcp_hex_dump(char *, int);
1079#define ZFCP_HEX_DUMP(level, addr, count) \
1080		if (ZFCP_LOG_CHECK(level)) { \
1081			_zfcp_hex_dump(addr, count); \
1082		}
1083
1084#define zfcp_get_busid_by_adapter(adapter) (adapter->ccw_device->dev.bus_id)
1085#define zfcp_get_busid_by_port(port) (zfcp_get_busid_by_adapter(port->adapter))
1086#define zfcp_get_busid_by_unit(unit) (zfcp_get_busid_by_port(unit->port))
1087
1088/*
1089 * Helper functions for request ID management.
1090 */
1091static inline int zfcp_reqlist_hash(unsigned long req_id)
1092{
1093	return req_id % REQUEST_LIST_SIZE;
1094}
1095
1096static inline void zfcp_reqlist_add(struct zfcp_adapter *adapter,
1097				    struct zfcp_fsf_req *fsf_req)
1098{
1099	unsigned int idx;
1100
1101	idx = zfcp_reqlist_hash(fsf_req->req_id);
1102	list_add_tail(&fsf_req->list, &adapter->req_list[idx]);
1103}
1104
1105static inline void zfcp_reqlist_remove(struct zfcp_adapter *adapter,
1106				       struct zfcp_fsf_req *fsf_req)
1107{
1108	list_del(&fsf_req->list);
1109}
1110
1111static inline struct zfcp_fsf_req *
1112zfcp_reqlist_find(struct zfcp_adapter *adapter, unsigned long req_id)
1113{
1114	struct zfcp_fsf_req *request;
1115	unsigned int idx;
1116
1117	idx = zfcp_reqlist_hash(req_id);
1118	list_for_each_entry(request, &adapter->req_list[idx], list)
1119		if (request->req_id == req_id)
1120			return request;
1121	return NULL;
1122}
1123
1124/*
1125 *  functions needed for reference/usage counting
1126 */
1127
1128static inline void
1129zfcp_unit_get(struct zfcp_unit *unit)
1130{
1131	atomic_inc(&unit->refcount);
1132}
1133
1134static inline void
1135zfcp_unit_put(struct zfcp_unit *unit)
1136{
1137	if (atomic_dec_return(&unit->refcount) == 0)
1138		wake_up(&unit->remove_wq);
1139}
1140
1141static inline void
1142zfcp_unit_wait(struct zfcp_unit *unit)
1143{
1144	wait_event(unit->remove_wq, atomic_read(&unit->refcount) == 0);
1145}
1146
1147static inline void
1148zfcp_port_get(struct zfcp_port *port)
1149{
1150	atomic_inc(&port->refcount);
1151}
1152
1153static inline void
1154zfcp_port_put(struct zfcp_port *port)
1155{
1156	if (atomic_dec_return(&port->refcount) == 0)
1157		wake_up(&port->remove_wq);
1158}
1159
1160static inline void
1161zfcp_port_wait(struct zfcp_port *port)
1162{
1163	wait_event(port->remove_wq, atomic_read(&port->refcount) == 0);
1164}
1165
1166static inline void
1167zfcp_adapter_get(struct zfcp_adapter *adapter)
1168{
1169	atomic_inc(&adapter->refcount);
1170}
1171
1172static inline void
1173zfcp_adapter_put(struct zfcp_adapter *adapter)
1174{
1175	if (atomic_dec_return(&adapter->refcount) == 0)
1176		wake_up(&adapter->remove_wq);
1177}
1178
1179static inline void
1180zfcp_adapter_wait(struct zfcp_adapter *adapter)
1181{
1182	wait_event(adapter->remove_wq, atomic_read(&adapter->refcount) == 0);
1183}
1184
1185#endif /* ZFCP_DEF_H */
1186