xref: /openbmc/linux/drivers/s390/scsi/zfcp_fsf.c (revision 545e4006)
1 /*
2  * zfcp device driver
3  *
4  * Implementation of FSF commands.
5  *
6  * Copyright IBM Corporation 2002, 2008
7  */
8 
9 #include "zfcp_ext.h"
10 
11 static void zfcp_fsf_request_timeout_handler(unsigned long data)
12 {
13 	struct zfcp_adapter *adapter = (struct zfcp_adapter *) data;
14 	zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, 62,
15 				NULL);
16 }
17 
18 static void zfcp_fsf_start_timer(struct zfcp_fsf_req *fsf_req,
19 				 unsigned long timeout)
20 {
21 	fsf_req->timer.function = zfcp_fsf_request_timeout_handler;
22 	fsf_req->timer.data = (unsigned long) fsf_req->adapter;
23 	fsf_req->timer.expires = jiffies + timeout;
24 	add_timer(&fsf_req->timer);
25 }
26 
27 static void zfcp_fsf_start_erp_timer(struct zfcp_fsf_req *fsf_req)
28 {
29 	BUG_ON(!fsf_req->erp_action);
30 	fsf_req->timer.function = zfcp_erp_timeout_handler;
31 	fsf_req->timer.data = (unsigned long) fsf_req->erp_action;
32 	fsf_req->timer.expires = jiffies + 30 * HZ;
33 	add_timer(&fsf_req->timer);
34 }
35 
36 /* association between FSF command and FSF QTCB type */
37 static u32 fsf_qtcb_type[] = {
38 	[FSF_QTCB_FCP_CMND] =             FSF_IO_COMMAND,
39 	[FSF_QTCB_ABORT_FCP_CMND] =       FSF_SUPPORT_COMMAND,
40 	[FSF_QTCB_OPEN_PORT_WITH_DID] =   FSF_SUPPORT_COMMAND,
41 	[FSF_QTCB_OPEN_LUN] =             FSF_SUPPORT_COMMAND,
42 	[FSF_QTCB_CLOSE_LUN] =            FSF_SUPPORT_COMMAND,
43 	[FSF_QTCB_CLOSE_PORT] =           FSF_SUPPORT_COMMAND,
44 	[FSF_QTCB_CLOSE_PHYSICAL_PORT] =  FSF_SUPPORT_COMMAND,
45 	[FSF_QTCB_SEND_ELS] =             FSF_SUPPORT_COMMAND,
46 	[FSF_QTCB_SEND_GENERIC] =         FSF_SUPPORT_COMMAND,
47 	[FSF_QTCB_EXCHANGE_CONFIG_DATA] = FSF_CONFIG_COMMAND,
48 	[FSF_QTCB_EXCHANGE_PORT_DATA] =   FSF_PORT_COMMAND,
49 	[FSF_QTCB_DOWNLOAD_CONTROL_FILE] = FSF_SUPPORT_COMMAND,
50 	[FSF_QTCB_UPLOAD_CONTROL_FILE] =  FSF_SUPPORT_COMMAND
51 };
52 
53 static const char *zfcp_act_subtable_type[] = {
54 	"unknown", "OS", "WWPN", "DID", "LUN"
55 };
56 
57 static void zfcp_act_eval_err(struct zfcp_adapter *adapter, u32 table)
58 {
59 	u16 subtable = table >> 16;
60 	u16 rule = table & 0xffff;
61 
62 	if (subtable && subtable < ARRAY_SIZE(zfcp_act_subtable_type))
63 		dev_warn(&adapter->ccw_device->dev,
64 			 "Access denied in subtable %s, rule %d.\n",
65 			 zfcp_act_subtable_type[subtable], rule);
66 }
67 
68 static void zfcp_fsf_access_denied_port(struct zfcp_fsf_req *req,
69 					struct zfcp_port *port)
70 {
71 	struct fsf_qtcb_header *header = &req->qtcb->header;
72 	dev_warn(&req->adapter->ccw_device->dev,
73 		 "Access denied, cannot send command to port 0x%016Lx.\n",
74 		 port->wwpn);
75 	zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[0]);
76 	zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[1]);
77 	zfcp_erp_port_access_denied(port, 55, req);
78 	req->status |= ZFCP_STATUS_FSFREQ_ERROR;
79 }
80 
81 static void zfcp_fsf_access_denied_unit(struct zfcp_fsf_req *req,
82 					struct zfcp_unit *unit)
83 {
84 	struct fsf_qtcb_header *header = &req->qtcb->header;
85 	dev_warn(&req->adapter->ccw_device->dev,
86 		 "Access denied for unit 0x%016Lx on port 0x%016Lx.\n",
87 		 unit->fcp_lun, unit->port->wwpn);
88 	zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[0]);
89 	zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[1]);
90 	zfcp_erp_unit_access_denied(unit, 59, req);
91 	req->status |= ZFCP_STATUS_FSFREQ_ERROR;
92 }
93 
94 static void zfcp_fsf_class_not_supp(struct zfcp_fsf_req *req)
95 {
96 	dev_err(&req->adapter->ccw_device->dev,
97 		"Required FC class not supported by adapter, "
98 		"shutting down adapter.\n");
99 	zfcp_erp_adapter_shutdown(req->adapter, 0, 123, req);
100 	req->status |= ZFCP_STATUS_FSFREQ_ERROR;
101 }
102 
103 /**
104  * zfcp_fsf_req_free - free memory used by fsf request
105  * @fsf_req: pointer to struct zfcp_fsf_req
106  */
107 void zfcp_fsf_req_free(struct zfcp_fsf_req *req)
108 {
109 	if (likely(req->pool)) {
110 		mempool_free(req, req->pool);
111 		return;
112 	}
113 
114 	if (req->qtcb) {
115 		kmem_cache_free(zfcp_data.fsf_req_qtcb_cache, req);
116 		return;
117 	}
118 }
119 
120 /**
121  * zfcp_fsf_req_dismiss_all - dismiss all fsf requests
122  * @adapter: pointer to struct zfcp_adapter
123  *
124  * Never ever call this without shutting down the adapter first.
125  * Otherwise the adapter would continue using and corrupting s390 storage.
126  * Included BUG_ON() call to ensure this is done.
127  * ERP is supposed to be the only user of this function.
128  */
129 void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *adapter)
130 {
131 	struct zfcp_fsf_req *req, *tmp;
132 	unsigned long flags;
133 	LIST_HEAD(remove_queue);
134 	unsigned int i;
135 
136 	BUG_ON(atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_QDIOUP);
137 	spin_lock_irqsave(&adapter->req_list_lock, flags);
138 	for (i = 0; i < REQUEST_LIST_SIZE; i++)
139 		list_splice_init(&adapter->req_list[i], &remove_queue);
140 	spin_unlock_irqrestore(&adapter->req_list_lock, flags);
141 
142 	list_for_each_entry_safe(req, tmp, &remove_queue, list) {
143 		list_del(&req->list);
144 		req->status |= ZFCP_STATUS_FSFREQ_DISMISSED;
145 		zfcp_fsf_req_complete(req);
146 	}
147 }
148 
149 static void zfcp_fsf_status_read_port_closed(struct zfcp_fsf_req *req)
150 {
151 	struct fsf_status_read_buffer *sr_buf = req->data;
152 	struct zfcp_adapter *adapter = req->adapter;
153 	struct zfcp_port *port;
154 	int d_id = sr_buf->d_id & ZFCP_DID_MASK;
155 	unsigned long flags;
156 
157 	read_lock_irqsave(&zfcp_data.config_lock, flags);
158 	list_for_each_entry(port, &adapter->port_list_head, list)
159 		if (port->d_id == d_id) {
160 			read_unlock_irqrestore(&zfcp_data.config_lock, flags);
161 			switch (sr_buf->status_subtype) {
162 			case FSF_STATUS_READ_SUB_CLOSE_PHYS_PORT:
163 				zfcp_erp_port_reopen(port, 0, 101, req);
164 				break;
165 			case FSF_STATUS_READ_SUB_ERROR_PORT:
166 				zfcp_erp_port_shutdown(port, 0, 122, req);
167 				break;
168 			}
169 			return;
170 		}
171 	read_unlock_irqrestore(&zfcp_data.config_lock, flags);
172 }
173 
174 static void zfcp_fsf_bit_error_threshold(struct zfcp_fsf_req *req)
175 {
176 	struct zfcp_adapter *adapter = req->adapter;
177 	struct fsf_status_read_buffer *sr_buf = req->data;
178 	struct fsf_bit_error_payload *err = &sr_buf->payload.bit_error;
179 
180 	dev_warn(&adapter->ccw_device->dev,
181 		 "Warning: bit error threshold data "
182 		 "received for the adapter: "
183 		 "link failures = %i, loss of sync errors = %i, "
184 		 "loss of signal errors = %i, "
185 		 "primitive sequence errors = %i, "
186 		 "invalid transmission word errors = %i, "
187 		 "CRC errors = %i).\n",
188 		 err->link_failure_error_count,
189 		 err->loss_of_sync_error_count,
190 		 err->loss_of_signal_error_count,
191 		 err->primitive_sequence_error_count,
192 		 err->invalid_transmission_word_error_count,
193 		 err->crc_error_count);
194 	dev_warn(&adapter->ccw_device->dev,
195 		 "Additional bit error threshold data of the adapter: "
196 		 "primitive sequence event time-outs = %i, "
197 		 "elastic buffer overrun errors = %i, "
198 		 "advertised receive buffer-to-buffer credit = %i, "
199 		 "current receice buffer-to-buffer credit = %i, "
200 		 "advertised transmit buffer-to-buffer credit = %i, "
201 		 "current transmit buffer-to-buffer credit = %i).\n",
202 		 err->primitive_sequence_event_timeout_count,
203 		 err->elastic_buffer_overrun_error_count,
204 		 err->advertised_receive_b2b_credit,
205 		 err->current_receive_b2b_credit,
206 		 err->advertised_transmit_b2b_credit,
207 		 err->current_transmit_b2b_credit);
208 }
209 
210 static void zfcp_fsf_link_down_info_eval(struct zfcp_fsf_req *req, u8 id,
211 					 struct fsf_link_down_info *link_down)
212 {
213 	struct zfcp_adapter *adapter = req->adapter;
214 
215 	if (atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED)
216 		return;
217 
218 	atomic_set_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status);
219 
220 	if (!link_down)
221 		goto out;
222 
223 	switch (link_down->error_code) {
224 	case FSF_PSQ_LINK_NO_LIGHT:
225 		dev_warn(&req->adapter->ccw_device->dev,
226 			 "The local link is down: no light detected.\n");
227 		break;
228 	case FSF_PSQ_LINK_WRAP_PLUG:
229 		dev_warn(&req->adapter->ccw_device->dev,
230 			 "The local link is down: wrap plug detected.\n");
231 		break;
232 	case FSF_PSQ_LINK_NO_FCP:
233 		dev_warn(&req->adapter->ccw_device->dev,
234 			 "The local link is down: "
235 			 "adjacent node on link does not support FCP.\n");
236 		break;
237 	case FSF_PSQ_LINK_FIRMWARE_UPDATE:
238 		dev_warn(&req->adapter->ccw_device->dev,
239 			 "The local link is down: "
240 			 "firmware update in progress.\n");
241 		break;
242 	case FSF_PSQ_LINK_INVALID_WWPN:
243 		dev_warn(&req->adapter->ccw_device->dev,
244 			 "The local link is down: "
245 			 "duplicate or invalid WWPN detected.\n");
246 		break;
247 	case FSF_PSQ_LINK_NO_NPIV_SUPPORT:
248 		dev_warn(&req->adapter->ccw_device->dev,
249 			 "The local link is down: "
250 			 "no support for NPIV by Fabric.\n");
251 		break;
252 	case FSF_PSQ_LINK_NO_FCP_RESOURCES:
253 		dev_warn(&req->adapter->ccw_device->dev,
254 			 "The local link is down: "
255 			 "out of resource in FCP daughtercard.\n");
256 		break;
257 	case FSF_PSQ_LINK_NO_FABRIC_RESOURCES:
258 		dev_warn(&req->adapter->ccw_device->dev,
259 			 "The local link is down: "
260 			 "out of resource in Fabric.\n");
261 		break;
262 	case FSF_PSQ_LINK_FABRIC_LOGIN_UNABLE:
263 		dev_warn(&req->adapter->ccw_device->dev,
264 			 "The local link is down: "
265 			 "unable to login to Fabric.\n");
266 		break;
267 	case FSF_PSQ_LINK_WWPN_ASSIGNMENT_CORRUPTED:
268 		dev_warn(&req->adapter->ccw_device->dev,
269 			 "WWPN assignment file corrupted on adapter.\n");
270 		break;
271 	case FSF_PSQ_LINK_MODE_TABLE_CURRUPTED:
272 		dev_warn(&req->adapter->ccw_device->dev,
273 			 "Mode table corrupted on adapter.\n");
274 		break;
275 	case FSF_PSQ_LINK_NO_WWPN_ASSIGNMENT:
276 		dev_warn(&req->adapter->ccw_device->dev,
277 			 "No WWPN for assignment table on adapter.\n");
278 		break;
279 	default:
280 		dev_warn(&req->adapter->ccw_device->dev,
281 			 "The local link to adapter is down.\n");
282 	}
283 out:
284 	zfcp_erp_adapter_failed(adapter, id, req);
285 }
286 
287 static void zfcp_fsf_status_read_link_down(struct zfcp_fsf_req *req)
288 {
289 	struct zfcp_adapter *adapter = req->adapter;
290 	struct fsf_status_read_buffer *sr_buf = req->data;
291 	struct fsf_link_down_info *ldi =
292 		(struct fsf_link_down_info *) &sr_buf->payload;
293 
294 	switch (sr_buf->status_subtype) {
295 	case FSF_STATUS_READ_SUB_NO_PHYSICAL_LINK:
296 		dev_warn(&adapter->ccw_device->dev,
297 			 "Physical link is down.\n");
298 		zfcp_fsf_link_down_info_eval(req, 38, ldi);
299 		break;
300 	case FSF_STATUS_READ_SUB_FDISC_FAILED:
301 		dev_warn(&adapter->ccw_device->dev,
302 			 "Local link is down "
303 			 "due to failed FDISC login.\n");
304 		zfcp_fsf_link_down_info_eval(req, 39, ldi);
305 		break;
306 	case FSF_STATUS_READ_SUB_FIRMWARE_UPDATE:
307 		dev_warn(&adapter->ccw_device->dev,
308 			 "Local link is down "
309 			 "due to firmware update on adapter.\n");
310 		zfcp_fsf_link_down_info_eval(req, 40, NULL);
311 	};
312 }
313 
314 static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req)
315 {
316 	struct zfcp_adapter *adapter = req->adapter;
317 	struct fsf_status_read_buffer *sr_buf = req->data;
318 
319 	if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) {
320 		zfcp_hba_dbf_event_fsf_unsol("dism", adapter, sr_buf);
321 		mempool_free(sr_buf, adapter->pool.data_status_read);
322 		zfcp_fsf_req_free(req);
323 		return;
324 	}
325 
326 	zfcp_hba_dbf_event_fsf_unsol("read", adapter, sr_buf);
327 
328 	switch (sr_buf->status_type) {
329 	case FSF_STATUS_READ_PORT_CLOSED:
330 		zfcp_fsf_status_read_port_closed(req);
331 		break;
332 	case FSF_STATUS_READ_INCOMING_ELS:
333 		zfcp_fc_incoming_els(req);
334 		break;
335 	case FSF_STATUS_READ_SENSE_DATA_AVAIL:
336 		break;
337 	case FSF_STATUS_READ_BIT_ERROR_THRESHOLD:
338 		zfcp_fsf_bit_error_threshold(req);
339 		break;
340 	case FSF_STATUS_READ_LINK_DOWN:
341 		zfcp_fsf_status_read_link_down(req);
342 		break;
343 	case FSF_STATUS_READ_LINK_UP:
344 		dev_info(&adapter->ccw_device->dev,
345 			 "Local link was replugged.\n");
346 		/* All ports should be marked as ready to run again */
347 		zfcp_erp_modify_adapter_status(adapter, 30, NULL,
348 					       ZFCP_STATUS_COMMON_RUNNING,
349 					       ZFCP_SET);
350 		zfcp_erp_adapter_reopen(adapter,
351 					ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED |
352 					ZFCP_STATUS_COMMON_ERP_FAILED,
353 					102, req);
354 		break;
355 	case FSF_STATUS_READ_NOTIFICATION_LOST:
356 		if (sr_buf->status_subtype & FSF_STATUS_READ_SUB_ACT_UPDATED)
357 			zfcp_erp_adapter_access_changed(adapter, 135, req);
358 		if (sr_buf->status_subtype & FSF_STATUS_READ_SUB_INCOMING_ELS)
359 			schedule_work(&adapter->scan_work);
360 		break;
361 	case FSF_STATUS_READ_CFDC_UPDATED:
362 		zfcp_erp_adapter_access_changed(adapter, 136, req);
363 		break;
364 	case FSF_STATUS_READ_FEATURE_UPDATE_ALERT:
365 		adapter->adapter_features = sr_buf->payload.word[0];
366 		break;
367 	}
368 
369 	mempool_free(sr_buf, adapter->pool.data_status_read);
370 	zfcp_fsf_req_free(req);
371 
372 	atomic_inc(&adapter->stat_miss);
373 	schedule_work(&adapter->stat_work);
374 }
375 
376 static void zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *req)
377 {
378 	switch (req->qtcb->header.fsf_status_qual.word[0]) {
379 	case FSF_SQ_FCP_RSP_AVAILABLE:
380 	case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
381 	case FSF_SQ_NO_RETRY_POSSIBLE:
382 	case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
383 		return;
384 	case FSF_SQ_COMMAND_ABORTED:
385 		req->status |= ZFCP_STATUS_FSFREQ_ABORTED;
386 		break;
387 	case FSF_SQ_NO_RECOM:
388 		dev_err(&req->adapter->ccw_device->dev,
389 			"No recommendation could be given for a "
390 			"problem on the adapter.\n");
391 		zfcp_erp_adapter_shutdown(req->adapter, 0, 121, req);
392 		break;
393 	}
394 	/* all non-return stats set FSFREQ_ERROR*/
395 	req->status |= ZFCP_STATUS_FSFREQ_ERROR;
396 }
397 
398 static void zfcp_fsf_fsfstatus_eval(struct zfcp_fsf_req *req)
399 {
400 	if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR))
401 		return;
402 
403 	switch (req->qtcb->header.fsf_status) {
404 	case FSF_UNKNOWN_COMMAND:
405 		dev_err(&req->adapter->ccw_device->dev,
406 			"Command issued by the device driver (0x%x) is "
407 			"not known by the adapter.\n",
408 			req->qtcb->header.fsf_command);
409 		zfcp_erp_adapter_shutdown(req->adapter, 0, 120, req);
410 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
411 		break;
412 	case FSF_ADAPTER_STATUS_AVAILABLE:
413 		zfcp_fsf_fsfstatus_qual_eval(req);
414 		break;
415 	}
416 }
417 
418 static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req)
419 {
420 	struct zfcp_adapter *adapter = req->adapter;
421 	struct fsf_qtcb *qtcb = req->qtcb;
422 	union fsf_prot_status_qual *psq = &qtcb->prefix.prot_status_qual;
423 
424 	zfcp_hba_dbf_event_fsf_response(req);
425 
426 	if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) {
427 		req->status |= ZFCP_STATUS_FSFREQ_ERROR |
428 			ZFCP_STATUS_FSFREQ_RETRY; /* only for SCSI cmnds. */
429 		return;
430 	}
431 
432 	switch (qtcb->prefix.prot_status) {
433 	case FSF_PROT_GOOD:
434 	case FSF_PROT_FSF_STATUS_PRESENTED:
435 		return;
436 	case FSF_PROT_QTCB_VERSION_ERROR:
437 		dev_err(&adapter->ccw_device->dev,
438 			"The QTCB version requested by zfcp (0x%x) is not "
439 			"supported by the FCP adapter (lowest supported "
440 			"0x%x, highest supported 0x%x).\n",
441 			FSF_QTCB_CURRENT_VERSION, psq->word[0],
442 			psq->word[1]);
443 		zfcp_erp_adapter_shutdown(adapter, 0, 117, req);
444 		break;
445 	case FSF_PROT_ERROR_STATE:
446 	case FSF_PROT_SEQ_NUMB_ERROR:
447 		zfcp_erp_adapter_reopen(adapter, 0, 98, req);
448 		req->status |= ZFCP_STATUS_FSFREQ_RETRY;
449 		break;
450 	case FSF_PROT_UNSUPP_QTCB_TYPE:
451 		dev_err(&adapter->ccw_device->dev,
452 			"Packet header type used by the device driver is "
453 			"incompatible with that used on the adapter.\n");
454 		zfcp_erp_adapter_shutdown(adapter, 0, 118, req);
455 		break;
456 	case FSF_PROT_HOST_CONNECTION_INITIALIZING:
457 		atomic_set_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
458 				&adapter->status);
459 		break;
460 	case FSF_PROT_DUPLICATE_REQUEST_ID:
461 		dev_err(&adapter->ccw_device->dev,
462 			"The request identifier 0x%Lx is ambiguous.\n",
463 			(unsigned long long)qtcb->bottom.support.req_handle);
464 		zfcp_erp_adapter_shutdown(adapter, 0, 78, req);
465 		break;
466 	case FSF_PROT_LINK_DOWN:
467 		zfcp_fsf_link_down_info_eval(req, 37, &psq->link_down_info);
468 		/* FIXME: reopening adapter now? better wait for link up */
469 		zfcp_erp_adapter_reopen(adapter, 0, 79, req);
470 		break;
471 	case FSF_PROT_REEST_QUEUE:
472 		/* All ports should be marked as ready to run again */
473 		zfcp_erp_modify_adapter_status(adapter, 28, NULL,
474 					       ZFCP_STATUS_COMMON_RUNNING,
475 					       ZFCP_SET);
476 		zfcp_erp_adapter_reopen(adapter,
477 					ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED |
478 					ZFCP_STATUS_COMMON_ERP_FAILED, 99, req);
479 		break;
480 	default:
481 		dev_err(&adapter->ccw_device->dev,
482 			"Transfer protocol status information"
483 			"provided by the adapter (0x%x) "
484 			"is not compatible with the device driver.\n",
485 			qtcb->prefix.prot_status);
486 		zfcp_erp_adapter_shutdown(adapter, 0, 119, req);
487 	}
488 	req->status |= ZFCP_STATUS_FSFREQ_ERROR;
489 }
490 
491 /**
492  * zfcp_fsf_req_complete - process completion of a FSF request
493  * @fsf_req: The FSF request that has been completed.
494  *
495  * When a request has been completed either from the FCP adapter,
496  * or it has been dismissed due to a queue shutdown, this function
497  * is called to process the completion status and trigger further
498  * events related to the FSF request.
499  */
500 void zfcp_fsf_req_complete(struct zfcp_fsf_req *req)
501 {
502 	if (unlikely(req->fsf_command == FSF_QTCB_UNSOLICITED_STATUS)) {
503 		zfcp_fsf_status_read_handler(req);
504 		return;
505 	}
506 
507 	del_timer(&req->timer);
508 	zfcp_fsf_protstatus_eval(req);
509 	zfcp_fsf_fsfstatus_eval(req);
510 	req->handler(req);
511 
512 	if (req->erp_action)
513 		zfcp_erp_notify(req->erp_action, 0);
514 	req->status |= ZFCP_STATUS_FSFREQ_COMPLETED;
515 
516 	if (likely(req->status & ZFCP_STATUS_FSFREQ_CLEANUP))
517 		zfcp_fsf_req_free(req);
518 	else
519 	/* notify initiator waiting for the requests completion */
520 	/*
521 	 * FIXME: Race! We must not access fsf_req here as it might have been
522 	 * cleaned up already due to the set ZFCP_STATUS_FSFREQ_COMPLETED
523 	 * flag. It's an improbable case. But, we have the same paranoia for
524 	 * the cleanup flag already.
525 	 * Might better be handled using complete()?
526 	 * (setting the flag and doing wakeup ought to be atomic
527 	 *  with regard to checking the flag as long as waitqueue is
528 	 *  part of the to be released structure)
529 	 */
530 		wake_up(&req->completion_wq);
531 }
532 
533 static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
534 {
535 	struct fsf_qtcb_bottom_config *bottom;
536 	struct zfcp_adapter *adapter = req->adapter;
537 	struct Scsi_Host *shost = adapter->scsi_host;
538 
539 	bottom = &req->qtcb->bottom.config;
540 
541 	if (req->data)
542 		memcpy(req->data, bottom, sizeof(*bottom));
543 
544 	fc_host_node_name(shost) = bottom->nport_serv_param.wwnn;
545 	fc_host_port_name(shost) = bottom->nport_serv_param.wwpn;
546 	fc_host_port_id(shost) = bottom->s_id & ZFCP_DID_MASK;
547 	fc_host_speed(shost) = bottom->fc_link_speed;
548 	fc_host_supported_classes(shost) = FC_COS_CLASS2 | FC_COS_CLASS3;
549 
550 	adapter->hydra_version = bottom->adapter_type;
551 	adapter->timer_ticks = bottom->timer_interval;
552 
553 	if (fc_host_permanent_port_name(shost) == -1)
554 		fc_host_permanent_port_name(shost) = fc_host_port_name(shost);
555 
556 	switch (bottom->fc_topology) {
557 	case FSF_TOPO_P2P:
558 		adapter->peer_d_id = bottom->peer_d_id & ZFCP_DID_MASK;
559 		adapter->peer_wwpn = bottom->plogi_payload.wwpn;
560 		adapter->peer_wwnn = bottom->plogi_payload.wwnn;
561 		fc_host_port_type(shost) = FC_PORTTYPE_PTP;
562 		if (req->erp_action)
563 			dev_info(&adapter->ccw_device->dev,
564 				 "Point-to-Point fibrechannel "
565 				 "configuration detected.\n");
566 		break;
567 	case FSF_TOPO_FABRIC:
568 		fc_host_port_type(shost) = FC_PORTTYPE_NPORT;
569 		if (req->erp_action)
570 			dev_info(&adapter->ccw_device->dev,
571 				 "Switched fabric fibrechannel "
572 				 "network detected.\n");
573 		break;
574 	case FSF_TOPO_AL:
575 		fc_host_port_type(shost) = FC_PORTTYPE_NLPORT;
576 		dev_err(&adapter->ccw_device->dev,
577 			"Unsupported arbitrated loop fibrechannel "
578 			"topology detected, shutting down "
579 			"adapter.\n");
580 		zfcp_erp_adapter_shutdown(adapter, 0, 127, req);
581 		return -EIO;
582 	default:
583 		fc_host_port_type(shost) = FC_PORTTYPE_UNKNOWN;
584 		dev_err(&adapter->ccw_device->dev,
585 			"The fibrechannel topology reported by the"
586 			" adapter is not known by the zfcp driver,"
587 			" shutting down adapter.\n");
588 		zfcp_erp_adapter_shutdown(adapter, 0, 128, req);
589 		return -EIO;
590 	}
591 
592 	return 0;
593 }
594 
595 static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req)
596 {
597 	struct zfcp_adapter *adapter = req->adapter;
598 	struct fsf_qtcb *qtcb = req->qtcb;
599 	struct fsf_qtcb_bottom_config *bottom = &qtcb->bottom.config;
600 	struct Scsi_Host *shost = adapter->scsi_host;
601 
602 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
603 		return;
604 
605 	adapter->fsf_lic_version = bottom->lic_version;
606 	adapter->adapter_features = bottom->adapter_features;
607 	adapter->connection_features = bottom->connection_features;
608 	adapter->peer_wwpn = 0;
609 	adapter->peer_wwnn = 0;
610 	adapter->peer_d_id = 0;
611 
612 	switch (qtcb->header.fsf_status) {
613 	case FSF_GOOD:
614 		if (zfcp_fsf_exchange_config_evaluate(req))
615 			return;
616 
617 		if (bottom->max_qtcb_size < sizeof(struct fsf_qtcb)) {
618 			dev_err(&adapter->ccw_device->dev,
619 				"Maximum QTCB size (%d bytes) allowed by "
620 				"the adapter is lower than the minimum "
621 				"required by the driver (%ld bytes).\n",
622 				bottom->max_qtcb_size,
623 				sizeof(struct fsf_qtcb));
624 			zfcp_erp_adapter_shutdown(adapter, 0, 129, req);
625 			return;
626 		}
627 		atomic_set_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK,
628 				&adapter->status);
629 		break;
630 	case FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE:
631 		fc_host_node_name(shost) = 0;
632 		fc_host_port_name(shost) = 0;
633 		fc_host_port_id(shost) = 0;
634 		fc_host_speed(shost) = FC_PORTSPEED_UNKNOWN;
635 		fc_host_port_type(shost) = FC_PORTTYPE_UNKNOWN;
636 		adapter->hydra_version = 0;
637 
638 		atomic_set_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK,
639 				&adapter->status);
640 
641 		zfcp_fsf_link_down_info_eval(req, 42,
642 			&qtcb->header.fsf_status_qual.link_down_info);
643 		break;
644 	default:
645 		zfcp_erp_adapter_shutdown(adapter, 0, 130, req);
646 		return;
647 	}
648 
649 	if (adapter->adapter_features & FSF_FEATURE_HBAAPI_MANAGEMENT) {
650 		adapter->hardware_version = bottom->hardware_version;
651 		memcpy(fc_host_serial_number(shost), bottom->serial_number,
652 		       min(FC_SERIAL_NUMBER_SIZE, 17));
653 		EBCASC(fc_host_serial_number(shost),
654 		       min(FC_SERIAL_NUMBER_SIZE, 17));
655 	}
656 
657 	if (FSF_QTCB_CURRENT_VERSION < bottom->low_qtcb_version) {
658 		dev_err(&adapter->ccw_device->dev,
659 			"The adapter only supports newer control block "
660 			"versions, try updated device driver.\n");
661 		zfcp_erp_adapter_shutdown(adapter, 0, 125, req);
662 		return;
663 	}
664 	if (FSF_QTCB_CURRENT_VERSION > bottom->high_qtcb_version) {
665 		dev_err(&adapter->ccw_device->dev,
666 			"The adapter only supports older control block "
667 			"versions, consider a microcode upgrade.\n");
668 		zfcp_erp_adapter_shutdown(adapter, 0, 126, req);
669 	}
670 }
671 
672 static void zfcp_fsf_exchange_port_evaluate(struct zfcp_fsf_req *req)
673 {
674 	struct zfcp_adapter *adapter = req->adapter;
675 	struct fsf_qtcb_bottom_port *bottom = &req->qtcb->bottom.port;
676 	struct Scsi_Host *shost = adapter->scsi_host;
677 
678 	if (req->data)
679 		memcpy(req->data, bottom, sizeof(*bottom));
680 
681 	if (adapter->connection_features & FSF_FEATURE_NPIV_MODE)
682 		fc_host_permanent_port_name(shost) = bottom->wwpn;
683 	else
684 		fc_host_permanent_port_name(shost) = fc_host_port_name(shost);
685 	fc_host_maxframe_size(shost) = bottom->maximum_frame_size;
686 	fc_host_supported_speeds(shost) = bottom->supported_speed;
687 }
688 
689 static void zfcp_fsf_exchange_port_data_handler(struct zfcp_fsf_req *req)
690 {
691 	struct zfcp_adapter *adapter = req->adapter;
692 	struct fsf_qtcb *qtcb = req->qtcb;
693 
694 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
695 		return;
696 
697 	switch (qtcb->header.fsf_status) {
698 	case FSF_GOOD:
699 		zfcp_fsf_exchange_port_evaluate(req);
700 		atomic_set_mask(ZFCP_STATUS_ADAPTER_XPORT_OK, &adapter->status);
701 		break;
702 	case FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE:
703 		zfcp_fsf_exchange_port_evaluate(req);
704 		atomic_set_mask(ZFCP_STATUS_ADAPTER_XPORT_OK, &adapter->status);
705 		zfcp_fsf_link_down_info_eval(req, 43,
706 			&qtcb->header.fsf_status_qual.link_down_info);
707 		break;
708 	}
709 }
710 
711 static int zfcp_fsf_sbal_check(struct zfcp_qdio_queue *queue)
712 {
713 	spin_lock(&queue->lock);
714 	if (atomic_read(&queue->count))
715 		return 1;
716 	spin_unlock(&queue->lock);
717 	return 0;
718 }
719 
720 static int zfcp_fsf_req_sbal_get(struct zfcp_adapter *adapter)
721 {
722 	long ret;
723 	struct zfcp_qdio_queue *req_q = &adapter->req_q;
724 
725 	spin_unlock(&req_q->lock);
726 	ret = wait_event_interruptible_timeout(adapter->request_wq,
727 					zfcp_fsf_sbal_check(req_q), 5 * HZ);
728 	if (ret > 0)
729 		return 0;
730 
731 	spin_lock(&req_q->lock);
732 	return -EIO;
733 }
734 
735 static struct zfcp_fsf_req *zfcp_fsf_alloc_noqtcb(mempool_t *pool)
736 {
737 	struct zfcp_fsf_req *req;
738 	req = mempool_alloc(pool, GFP_ATOMIC);
739 	if (!req)
740 		return NULL;
741 	memset(req, 0, sizeof(*req));
742 	return req;
743 }
744 
745 static struct zfcp_fsf_req *zfcp_fsf_alloc_qtcb(mempool_t *pool)
746 {
747 	struct zfcp_fsf_req_qtcb *qtcb;
748 
749 	if (likely(pool))
750 		qtcb = mempool_alloc(pool, GFP_ATOMIC);
751 	else
752 		qtcb = kmem_cache_alloc(zfcp_data.fsf_req_qtcb_cache,
753 					GFP_ATOMIC);
754 	if (unlikely(!qtcb))
755 		return NULL;
756 
757 	memset(qtcb, 0, sizeof(*qtcb));
758 	qtcb->fsf_req.qtcb = &qtcb->qtcb;
759 	qtcb->fsf_req.pool = pool;
760 
761 	return &qtcb->fsf_req;
762 }
763 
764 static struct zfcp_fsf_req *zfcp_fsf_req_create(struct zfcp_adapter *adapter,
765 						u32 fsf_cmd, int req_flags,
766 						mempool_t *pool)
767 {
768 	volatile struct qdio_buffer_element *sbale;
769 
770 	struct zfcp_fsf_req *req;
771 	struct zfcp_qdio_queue *req_q = &adapter->req_q;
772 
773 	if (req_flags & ZFCP_REQ_NO_QTCB)
774 		req = zfcp_fsf_alloc_noqtcb(pool);
775 	else
776 		req = zfcp_fsf_alloc_qtcb(pool);
777 
778 	if (unlikely(!req))
779 		return ERR_PTR(-EIO);
780 
781 	if (adapter->req_no == 0)
782 		adapter->req_no++;
783 
784 	INIT_LIST_HEAD(&req->list);
785 	init_timer(&req->timer);
786 	init_waitqueue_head(&req->completion_wq);
787 
788 	req->adapter = adapter;
789 	req->fsf_command = fsf_cmd;
790 	req->req_id = adapter->req_no++;
791 	req->sbal_number = 1;
792 	req->sbal_first = req_q->first;
793 	req->sbal_last = req_q->first;
794 	req->sbale_curr = 1;
795 
796 	sbale = zfcp_qdio_sbale_req(req);
797 	sbale[0].addr = (void *) req->req_id;
798 	sbale[0].flags |= SBAL_FLAGS0_COMMAND;
799 
800 	if (likely(req->qtcb)) {
801 		req->qtcb->prefix.req_seq_no = req->adapter->fsf_req_seq_no;
802 		req->qtcb->prefix.req_id = req->req_id;
803 		req->qtcb->prefix.ulp_info = 26;
804 		req->qtcb->prefix.qtcb_type = fsf_qtcb_type[req->fsf_command];
805 		req->qtcb->prefix.qtcb_version = FSF_QTCB_CURRENT_VERSION;
806 		req->qtcb->header.req_handle = req->req_id;
807 		req->qtcb->header.fsf_command = req->fsf_command;
808 		req->seq_no = adapter->fsf_req_seq_no;
809 		req->qtcb->prefix.req_seq_no = adapter->fsf_req_seq_no;
810 		sbale[1].addr = (void *) req->qtcb;
811 		sbale[1].length = sizeof(struct fsf_qtcb);
812 	}
813 
814 	if (!(atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_QDIOUP)) {
815 		zfcp_fsf_req_free(req);
816 		return ERR_PTR(-EIO);
817 	}
818 
819 	if (likely(req_flags & ZFCP_REQ_AUTO_CLEANUP))
820 		req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
821 
822 	return req;
823 }
824 
825 static int zfcp_fsf_req_send(struct zfcp_fsf_req *req)
826 {
827 	struct zfcp_adapter *adapter = req->adapter;
828 	struct zfcp_qdio_queue *req_q = &adapter->req_q;
829 	int idx;
830 
831 	/* put allocated FSF request into hash table */
832 	spin_lock(&adapter->req_list_lock);
833 	idx = zfcp_reqlist_hash(req->req_id);
834 	list_add_tail(&req->list, &adapter->req_list[idx]);
835 	spin_unlock(&adapter->req_list_lock);
836 
837 	req->issued = get_clock();
838 	if (zfcp_qdio_send(req)) {
839 		/* Queues are down..... */
840 		del_timer(&req->timer);
841 		spin_lock(&adapter->req_list_lock);
842 		zfcp_reqlist_remove(adapter, req);
843 		spin_unlock(&adapter->req_list_lock);
844 		/* undo changes in request queue made for this request */
845 		atomic_add(req->sbal_number, &req_q->count);
846 		req_q->first -= req->sbal_number;
847 		req_q->first += QDIO_MAX_BUFFERS_PER_Q;
848 		req_q->first %= QDIO_MAX_BUFFERS_PER_Q; /* wrap */
849 		zfcp_erp_adapter_reopen(adapter, 0, 116, req);
850 		return -EIO;
851 	}
852 
853 	/* Don't increase for unsolicited status */
854 	if (req->qtcb)
855 		adapter->fsf_req_seq_no++;
856 
857 	return 0;
858 }
859 
860 /**
861  * zfcp_fsf_status_read - send status read request
862  * @adapter: pointer to struct zfcp_adapter
863  * @req_flags: request flags
864  * Returns: 0 on success, ERROR otherwise
865  */
866 int zfcp_fsf_status_read(struct zfcp_adapter *adapter)
867 {
868 	struct zfcp_fsf_req *req;
869 	struct fsf_status_read_buffer *sr_buf;
870 	volatile struct qdio_buffer_element *sbale;
871 	int retval = -EIO;
872 
873 	spin_lock(&adapter->req_q.lock);
874 	if (zfcp_fsf_req_sbal_get(adapter))
875 		goto out;
876 
877 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_UNSOLICITED_STATUS,
878 				  ZFCP_REQ_NO_QTCB,
879 				  adapter->pool.fsf_req_status_read);
880 	if (unlikely(IS_ERR(req))) {
881 		retval = PTR_ERR(req);
882 		goto out;
883 	}
884 
885 	sbale = zfcp_qdio_sbale_req(req);
886 	sbale[0].flags |= SBAL_FLAGS0_TYPE_STATUS;
887 	sbale[2].flags |= SBAL_FLAGS_LAST_ENTRY;
888 	req->sbale_curr = 2;
889 
890 	sr_buf = mempool_alloc(adapter->pool.data_status_read, GFP_ATOMIC);
891 	if (!sr_buf) {
892 		retval = -ENOMEM;
893 		goto failed_buf;
894 	}
895 	memset(sr_buf, 0, sizeof(*sr_buf));
896 	req->data = sr_buf;
897 	sbale = zfcp_qdio_sbale_curr(req);
898 	sbale->addr = (void *) sr_buf;
899 	sbale->length = sizeof(*sr_buf);
900 
901 	retval = zfcp_fsf_req_send(req);
902 	if (retval)
903 		goto failed_req_send;
904 
905 	goto out;
906 
907 failed_req_send:
908 	mempool_free(sr_buf, adapter->pool.data_status_read);
909 failed_buf:
910 	zfcp_fsf_req_free(req);
911 	zfcp_hba_dbf_event_fsf_unsol("fail", adapter, NULL);
912 out:
913 	spin_unlock(&adapter->req_q.lock);
914 	return retval;
915 }
916 
917 static void zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *req)
918 {
919 	struct zfcp_unit *unit = req->data;
920 	union fsf_status_qual *fsq = &req->qtcb->header.fsf_status_qual;
921 
922 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
923 		return;
924 
925 	switch (req->qtcb->header.fsf_status) {
926 	case FSF_PORT_HANDLE_NOT_VALID:
927 		if (fsq->word[0] == fsq->word[1]) {
928 			zfcp_erp_adapter_reopen(unit->port->adapter, 0, 104,
929 						req);
930 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
931 		}
932 		break;
933 	case FSF_LUN_HANDLE_NOT_VALID:
934 		if (fsq->word[0] == fsq->word[1]) {
935 			zfcp_erp_port_reopen(unit->port, 0, 105, req);
936 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
937 		}
938 		break;
939 	case FSF_FCP_COMMAND_DOES_NOT_EXIST:
940 		req->status |= ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED;
941 		break;
942 	case FSF_PORT_BOXED:
943 		zfcp_erp_port_boxed(unit->port, 47, req);
944 		req->status |= ZFCP_STATUS_FSFREQ_ERROR |
945 			       ZFCP_STATUS_FSFREQ_RETRY;
946 		break;
947 	case FSF_LUN_BOXED:
948 		zfcp_erp_unit_boxed(unit, 48, req);
949 		req->status |= ZFCP_STATUS_FSFREQ_ERROR |
950 			       ZFCP_STATUS_FSFREQ_RETRY;
951                 break;
952 	case FSF_ADAPTER_STATUS_AVAILABLE:
953 		switch (fsq->word[0]) {
954 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
955 			zfcp_test_link(unit->port);
956 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
957 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
958 			break;
959 		}
960 		break;
961 	case FSF_GOOD:
962 		req->status |= ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED;
963 		break;
964 	}
965 }
966 
967 /**
968  * zfcp_fsf_abort_fcp_command - abort running SCSI command
969  * @old_req_id: unsigned long
970  * @adapter: pointer to struct zfcp_adapter
971  * @unit: pointer to struct zfcp_unit
972  * @req_flags: integer specifying the request flags
973  * Returns: pointer to struct zfcp_fsf_req
974  *
975  * FIXME(design): should be watched by a timeout !!!
976  */
977 
978 struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command(unsigned long old_req_id,
979 						struct zfcp_adapter *adapter,
980 						struct zfcp_unit *unit,
981 						int req_flags)
982 {
983 	volatile struct qdio_buffer_element *sbale;
984 	struct zfcp_fsf_req *req = NULL;
985 
986 	spin_lock(&adapter->req_q.lock);
987 	if (!atomic_read(&adapter->req_q.count))
988 		goto out;
989 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_ABORT_FCP_CMND,
990 				  req_flags, adapter->pool.fsf_req_abort);
991 	if (unlikely(IS_ERR(req)))
992 		goto out;
993 
994 	if (unlikely(!(atomic_read(&unit->status) &
995 		       ZFCP_STATUS_COMMON_UNBLOCKED)))
996 		goto out_error_free;
997 
998 	sbale = zfcp_qdio_sbale_req(req);
999 	sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1000 	sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1001 
1002 	req->data = unit;
1003 	req->handler = zfcp_fsf_abort_fcp_command_handler;
1004 	req->qtcb->header.lun_handle = unit->handle;
1005 	req->qtcb->header.port_handle = unit->port->handle;
1006 	req->qtcb->bottom.support.req_handle = (u64) old_req_id;
1007 
1008 	zfcp_fsf_start_timer(req, ZFCP_SCSI_ER_TIMEOUT);
1009 	if (!zfcp_fsf_req_send(req))
1010 		goto out;
1011 
1012 out_error_free:
1013 	zfcp_fsf_req_free(req);
1014 	req = NULL;
1015 out:
1016 	spin_unlock(&adapter->req_q.lock);
1017 	return req;
1018 }
1019 
1020 static void zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *req)
1021 {
1022 	struct zfcp_adapter *adapter = req->adapter;
1023 	struct zfcp_send_ct *send_ct = req->data;
1024 	struct zfcp_port *port = send_ct->port;
1025 	struct fsf_qtcb_header *header = &req->qtcb->header;
1026 
1027 	send_ct->status = -EINVAL;
1028 
1029 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1030 		goto skip_fsfstatus;
1031 
1032 	switch (header->fsf_status) {
1033         case FSF_GOOD:
1034 		zfcp_san_dbf_event_ct_response(req);
1035 		send_ct->status = 0;
1036 		break;
1037         case FSF_SERVICE_CLASS_NOT_SUPPORTED:
1038 		zfcp_fsf_class_not_supp(req);
1039 		break;
1040         case FSF_ADAPTER_STATUS_AVAILABLE:
1041                 switch (header->fsf_status_qual.word[0]){
1042                 case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
1043 			zfcp_test_link(port);
1044                 case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
1045 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1046 			break;
1047                 }
1048                 break;
1049 	case FSF_ACCESS_DENIED:
1050 		zfcp_fsf_access_denied_port(req, port);
1051 		break;
1052         case FSF_PORT_BOXED:
1053 		zfcp_erp_port_boxed(port, 49, req);
1054 		req->status |= ZFCP_STATUS_FSFREQ_ERROR |
1055 			       ZFCP_STATUS_FSFREQ_RETRY;
1056 		break;
1057 	case FSF_PORT_HANDLE_NOT_VALID:
1058 		zfcp_erp_adapter_reopen(adapter, 0, 106, req);
1059 	case FSF_GENERIC_COMMAND_REJECTED:
1060 	case FSF_PAYLOAD_SIZE_MISMATCH:
1061 	case FSF_REQUEST_SIZE_TOO_LARGE:
1062 	case FSF_RESPONSE_SIZE_TOO_LARGE:
1063 	case FSF_SBAL_MISMATCH:
1064 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1065 		break;
1066 	}
1067 
1068 skip_fsfstatus:
1069 	if (send_ct->handler)
1070 		send_ct->handler(send_ct->handler_data);
1071 }
1072 
1073 static int zfcp_fsf_setup_sbals(struct zfcp_fsf_req *req,
1074 				struct scatterlist *sg_req,
1075 				struct scatterlist *sg_resp, int max_sbals)
1076 {
1077 	int bytes;
1078 
1079 	bytes = zfcp_qdio_sbals_from_sg(req, SBAL_FLAGS0_TYPE_WRITE_READ,
1080 					sg_req, max_sbals);
1081 	if (bytes <= 0)
1082 		return -ENOMEM;
1083 	req->qtcb->bottom.support.req_buf_length = bytes;
1084 	req->sbale_curr = ZFCP_LAST_SBALE_PER_SBAL;
1085 
1086 	bytes = zfcp_qdio_sbals_from_sg(req, SBAL_FLAGS0_TYPE_WRITE_READ,
1087 					sg_resp, max_sbals);
1088 	if (bytes <= 0)
1089 		return -ENOMEM;
1090 	req->qtcb->bottom.support.resp_buf_length = bytes;
1091 
1092 	return 0;
1093 }
1094 
1095 /**
1096  * zfcp_fsf_send_ct - initiate a Generic Service request (FC-GS)
1097  * @ct: pointer to struct zfcp_send_ct with data for request
1098  * @pool: if non-null this mempool is used to allocate struct zfcp_fsf_req
1099  * @erp_action: if non-null the Generic Service request sent within ERP
1100  */
1101 int zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool,
1102 		     struct zfcp_erp_action *erp_action)
1103 {
1104 	struct zfcp_port *port = ct->port;
1105 	struct zfcp_adapter *adapter = port->adapter;
1106 	struct zfcp_fsf_req *req;
1107 	int ret = -EIO;
1108 
1109 	spin_lock(&adapter->req_q.lock);
1110 	if (zfcp_fsf_req_sbal_get(adapter))
1111 		goto out;
1112 
1113 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_SEND_GENERIC,
1114 				  ZFCP_REQ_AUTO_CLEANUP, pool);
1115 	if (unlikely(IS_ERR(req))) {
1116 		ret = PTR_ERR(req);
1117 		goto out;
1118 	}
1119 
1120 	ret = zfcp_fsf_setup_sbals(req, ct->req, ct->resp,
1121 				   FSF_MAX_SBALS_PER_REQ);
1122 	if (ret)
1123 		goto failed_send;
1124 
1125 	req->handler = zfcp_fsf_send_ct_handler;
1126 	req->qtcb->header.port_handle = port->handle;
1127 	req->qtcb->bottom.support.service_class = FSF_CLASS_3;
1128 	req->qtcb->bottom.support.timeout = ct->timeout;
1129 	req->data = ct;
1130 
1131 	zfcp_san_dbf_event_ct_request(req);
1132 
1133 	if (erp_action) {
1134 		erp_action->fsf_req = req;
1135 		req->erp_action = erp_action;
1136 		zfcp_fsf_start_erp_timer(req);
1137 	} else
1138 		zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1139 
1140 	ret = zfcp_fsf_req_send(req);
1141 	if (ret)
1142 		goto failed_send;
1143 
1144 	goto out;
1145 
1146 failed_send:
1147 	zfcp_fsf_req_free(req);
1148 	if (erp_action)
1149 		erp_action->fsf_req = NULL;
1150 out:
1151 	spin_unlock(&adapter->req_q.lock);
1152 	return ret;
1153 }
1154 
1155 static void zfcp_fsf_send_els_handler(struct zfcp_fsf_req *req)
1156 {
1157 	struct zfcp_send_els *send_els = req->data;
1158 	struct zfcp_port *port = send_els->port;
1159 	struct fsf_qtcb_header *header = &req->qtcb->header;
1160 
1161 	send_els->status = -EINVAL;
1162 
1163 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1164 		goto skip_fsfstatus;
1165 
1166 	switch (header->fsf_status) {
1167 	case FSF_GOOD:
1168 		zfcp_san_dbf_event_els_response(req);
1169 		send_els->status = 0;
1170 		break;
1171 	case FSF_SERVICE_CLASS_NOT_SUPPORTED:
1172 		zfcp_fsf_class_not_supp(req);
1173 		break;
1174 	case FSF_ADAPTER_STATUS_AVAILABLE:
1175 		switch (header->fsf_status_qual.word[0]){
1176 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
1177 			if (port && (send_els->ls_code != ZFCP_LS_ADISC))
1178 				zfcp_test_link(port);
1179 			/*fall through */
1180 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
1181 		case FSF_SQ_RETRY_IF_POSSIBLE:
1182 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1183 			break;
1184 		}
1185 		break;
1186 	case FSF_ELS_COMMAND_REJECTED:
1187 	case FSF_PAYLOAD_SIZE_MISMATCH:
1188 	case FSF_REQUEST_SIZE_TOO_LARGE:
1189 	case FSF_RESPONSE_SIZE_TOO_LARGE:
1190 		break;
1191 	case FSF_ACCESS_DENIED:
1192 		zfcp_fsf_access_denied_port(req, port);
1193 		break;
1194 	case FSF_SBAL_MISMATCH:
1195 		/* should never occure, avoided in zfcp_fsf_send_els */
1196 		/* fall through */
1197 	default:
1198 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1199 		break;
1200 	}
1201 skip_fsfstatus:
1202 	if (send_els->handler)
1203 		send_els->handler(send_els->handler_data);
1204 }
1205 
1206 /**
1207  * zfcp_fsf_send_els - initiate an ELS command (FC-FS)
1208  * @els: pointer to struct zfcp_send_els with data for the command
1209  */
1210 int zfcp_fsf_send_els(struct zfcp_send_els *els)
1211 {
1212 	struct zfcp_fsf_req *req;
1213 	struct zfcp_adapter *adapter = els->adapter;
1214 	struct fsf_qtcb_bottom_support *bottom;
1215 	int ret = -EIO;
1216 
1217 	if (unlikely(!(atomic_read(&els->port->status) &
1218 		       ZFCP_STATUS_COMMON_UNBLOCKED)))
1219 		return -EBUSY;
1220 
1221 	spin_lock(&adapter->req_q.lock);
1222 	if (!atomic_read(&adapter->req_q.count))
1223 		goto out;
1224 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_SEND_ELS,
1225 				  ZFCP_REQ_AUTO_CLEANUP, NULL);
1226 	if (unlikely(IS_ERR(req))) {
1227 		ret = PTR_ERR(req);
1228 		goto out;
1229 	}
1230 
1231 	ret = zfcp_fsf_setup_sbals(req, els->req, els->resp,
1232 				   FSF_MAX_SBALS_PER_ELS_REQ);
1233 	if (ret)
1234 		goto failed_send;
1235 
1236 	bottom = &req->qtcb->bottom.support;
1237 	req->handler = zfcp_fsf_send_els_handler;
1238 	bottom->d_id = els->d_id;
1239 	bottom->service_class = FSF_CLASS_3;
1240 	bottom->timeout = 2 * R_A_TOV;
1241 	req->data = els;
1242 
1243 	zfcp_san_dbf_event_els_request(req);
1244 
1245 	zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1246 	ret = zfcp_fsf_req_send(req);
1247 	if (ret)
1248 		goto failed_send;
1249 
1250 	goto out;
1251 
1252 failed_send:
1253 	zfcp_fsf_req_free(req);
1254 out:
1255 	spin_unlock(&adapter->req_q.lock);
1256 	return ret;
1257 }
1258 
1259 int zfcp_fsf_exchange_config_data(struct zfcp_erp_action *erp_action)
1260 {
1261 	volatile struct qdio_buffer_element *sbale;
1262 	struct zfcp_fsf_req *req;
1263 	struct zfcp_adapter *adapter = erp_action->adapter;
1264 	int retval = -EIO;
1265 
1266 	spin_lock(&adapter->req_q.lock);
1267 	if (!atomic_read(&adapter->req_q.count))
1268 		goto out;
1269 	req = zfcp_fsf_req_create(adapter,
1270 				  FSF_QTCB_EXCHANGE_CONFIG_DATA,
1271 				  ZFCP_REQ_AUTO_CLEANUP,
1272 				  adapter->pool.fsf_req_erp);
1273 	if (unlikely(IS_ERR(req))) {
1274 		retval = PTR_ERR(req);
1275 		goto out;
1276 	}
1277 
1278 	sbale = zfcp_qdio_sbale_req(req);
1279 	sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1280 	sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1281 
1282 	req->qtcb->bottom.config.feature_selection =
1283 			FSF_FEATURE_CFDC |
1284 			FSF_FEATURE_LUN_SHARING |
1285 			FSF_FEATURE_NOTIFICATION_LOST |
1286 			FSF_FEATURE_UPDATE_ALERT;
1287 	req->erp_action = erp_action;
1288 	req->handler = zfcp_fsf_exchange_config_data_handler;
1289 	erp_action->fsf_req = req;
1290 
1291 	zfcp_fsf_start_erp_timer(req);
1292 	retval = zfcp_fsf_req_send(req);
1293 	if (retval) {
1294 		zfcp_fsf_req_free(req);
1295 		erp_action->fsf_req = NULL;
1296 	}
1297 out:
1298 	spin_unlock(&adapter->req_q.lock);
1299 	return retval;
1300 }
1301 
1302 int zfcp_fsf_exchange_config_data_sync(struct zfcp_adapter *adapter,
1303 				       struct fsf_qtcb_bottom_config *data)
1304 {
1305 	volatile struct qdio_buffer_element *sbale;
1306 	struct zfcp_fsf_req *req = NULL;
1307 	int retval = -EIO;
1308 
1309 	spin_lock(&adapter->req_q.lock);
1310 	if (zfcp_fsf_req_sbal_get(adapter))
1311 		goto out;
1312 
1313 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_CONFIG_DATA,
1314 				  0, NULL);
1315 	if (unlikely(IS_ERR(req))) {
1316 		retval = PTR_ERR(req);
1317 		goto out;
1318 	}
1319 
1320 	sbale = zfcp_qdio_sbale_req(req);
1321 	sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1322 	sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1323 	req->handler = zfcp_fsf_exchange_config_data_handler;
1324 
1325 	req->qtcb->bottom.config.feature_selection =
1326 			FSF_FEATURE_CFDC |
1327 			FSF_FEATURE_LUN_SHARING |
1328 			FSF_FEATURE_NOTIFICATION_LOST |
1329 			FSF_FEATURE_UPDATE_ALERT;
1330 
1331 	if (data)
1332 		req->data = data;
1333 
1334 	zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1335 	retval = zfcp_fsf_req_send(req);
1336 out:
1337 	spin_unlock(&adapter->req_q.lock);
1338 	if (!retval)
1339 		wait_event(req->completion_wq,
1340 			   req->status & ZFCP_STATUS_FSFREQ_COMPLETED);
1341 
1342 	zfcp_fsf_req_free(req);
1343 
1344 	return retval;
1345 }
1346 
1347 /**
1348  * zfcp_fsf_exchange_port_data - request information about local port
1349  * @erp_action: ERP action for the adapter for which port data is requested
1350  * Returns: 0 on success, error otherwise
1351  */
1352 int zfcp_fsf_exchange_port_data(struct zfcp_erp_action *erp_action)
1353 {
1354 	volatile struct qdio_buffer_element *sbale;
1355 	struct zfcp_fsf_req *req;
1356 	struct zfcp_adapter *adapter = erp_action->adapter;
1357 	int retval = -EIO;
1358 
1359 	if (!(adapter->adapter_features & FSF_FEATURE_HBAAPI_MANAGEMENT))
1360 		return -EOPNOTSUPP;
1361 
1362 	spin_lock(&adapter->req_q.lock);
1363 	if (!atomic_read(&adapter->req_q.count))
1364 		goto out;
1365 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA,
1366 				  ZFCP_REQ_AUTO_CLEANUP,
1367 				  adapter->pool.fsf_req_erp);
1368 	if (unlikely(IS_ERR(req))) {
1369 		retval = PTR_ERR(req);
1370 		goto out;
1371 	}
1372 
1373 	sbale = zfcp_qdio_sbale_req(req);
1374 	sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1375 	sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1376 
1377 	req->handler = zfcp_fsf_exchange_port_data_handler;
1378 	req->erp_action = erp_action;
1379 	erp_action->fsf_req = req;
1380 
1381 	zfcp_fsf_start_erp_timer(req);
1382 	retval = zfcp_fsf_req_send(req);
1383 	if (retval) {
1384 		zfcp_fsf_req_free(req);
1385 		erp_action->fsf_req = NULL;
1386 	}
1387 out:
1388 	spin_unlock(&adapter->req_q.lock);
1389 	return retval;
1390 }
1391 
1392 /**
1393  * zfcp_fsf_exchange_port_data_sync - request information about local port
1394  * @adapter: pointer to struct zfcp_adapter
1395  * @data: pointer to struct fsf_qtcb_bottom_port
1396  * Returns: 0 on success, error otherwise
1397  */
1398 int zfcp_fsf_exchange_port_data_sync(struct zfcp_adapter *adapter,
1399 				     struct fsf_qtcb_bottom_port *data)
1400 {
1401 	volatile struct qdio_buffer_element *sbale;
1402 	struct zfcp_fsf_req *req = NULL;
1403 	int retval = -EIO;
1404 
1405 	if (!(adapter->adapter_features & FSF_FEATURE_HBAAPI_MANAGEMENT))
1406 		return -EOPNOTSUPP;
1407 
1408 	spin_lock(&adapter->req_q.lock);
1409 	if (!atomic_read(&adapter->req_q.count))
1410 		goto out;
1411 
1412 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, 0,
1413 				  NULL);
1414 	if (unlikely(IS_ERR(req))) {
1415 		retval = PTR_ERR(req);
1416 		goto out;
1417 	}
1418 
1419 	if (data)
1420 		req->data = data;
1421 
1422 	sbale = zfcp_qdio_sbale_req(req);
1423 	sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1424 	sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1425 
1426 	req->handler = zfcp_fsf_exchange_port_data_handler;
1427 	zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1428 	retval = zfcp_fsf_req_send(req);
1429 out:
1430 	spin_unlock(&adapter->req_q.lock);
1431 	if (!retval)
1432 		wait_event(req->completion_wq,
1433 			   req->status & ZFCP_STATUS_FSFREQ_COMPLETED);
1434 	zfcp_fsf_req_free(req);
1435 
1436 	return retval;
1437 }
1438 
1439 static void zfcp_fsf_open_port_handler(struct zfcp_fsf_req *req)
1440 {
1441 	struct zfcp_port *port = req->data;
1442 	struct fsf_qtcb_header *header = &req->qtcb->header;
1443 	struct fsf_plogi *plogi;
1444 
1445 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1446 		goto skip_fsfstatus;
1447 
1448 	switch (header->fsf_status) {
1449 	case FSF_PORT_ALREADY_OPEN:
1450 		break;
1451 	case FSF_ACCESS_DENIED:
1452 		zfcp_fsf_access_denied_port(req, port);
1453 		break;
1454 	case FSF_MAXIMUM_NUMBER_OF_PORTS_EXCEEDED:
1455 		dev_warn(&req->adapter->ccw_device->dev,
1456 			 "The adapter is out of resources. The remote port "
1457 			 "0x%016Lx could not be opened, disabling it.\n",
1458 			 port->wwpn);
1459 		zfcp_erp_port_failed(port, 31, req);
1460 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1461 		break;
1462 	case FSF_ADAPTER_STATUS_AVAILABLE:
1463 		switch (header->fsf_status_qual.word[0]) {
1464 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
1465 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
1466 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1467 			break;
1468 		case FSF_SQ_NO_RETRY_POSSIBLE:
1469 			dev_warn(&req->adapter->ccw_device->dev,
1470 				 "The remote port 0x%016Lx could not be "
1471 				 "opened. Disabling it.\n", port->wwpn);
1472 			zfcp_erp_port_failed(port, 32, req);
1473 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1474 			break;
1475 		}
1476 		break;
1477 	case FSF_GOOD:
1478 		port->handle = header->port_handle;
1479 		atomic_set_mask(ZFCP_STATUS_COMMON_OPEN |
1480 				ZFCP_STATUS_PORT_PHYS_OPEN, &port->status);
1481 		atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED |
1482 		                  ZFCP_STATUS_COMMON_ACCESS_BOXED,
1483 		                  &port->status);
1484 		/* check whether D_ID has changed during open */
1485 		/*
1486 		 * FIXME: This check is not airtight, as the FCP channel does
1487 		 * not monitor closures of target port connections caused on
1488 		 * the remote side. Thus, they might miss out on invalidating
1489 		 * locally cached WWPNs (and other N_Port parameters) of gone
1490 		 * target ports. So, our heroic attempt to make things safe
1491 		 * could be undermined by 'open port' response data tagged with
1492 		 * obsolete WWPNs. Another reason to monitor potential
1493 		 * connection closures ourself at least (by interpreting
1494 		 * incoming ELS' and unsolicited status). It just crosses my
1495 		 * mind that one should be able to cross-check by means of
1496 		 * another GID_PN straight after a port has been opened.
1497 		 * Alternately, an ADISC/PDISC ELS should suffice, as well.
1498 		 */
1499 		if (atomic_read(&port->status) & ZFCP_STATUS_PORT_NO_WWPN)
1500 			break;
1501 
1502 		plogi = (struct fsf_plogi *) req->qtcb->bottom.support.els;
1503 		if (req->qtcb->bottom.support.els1_length >= sizeof(*plogi)) {
1504 			if (plogi->serv_param.wwpn != port->wwpn)
1505 				atomic_clear_mask(ZFCP_STATUS_PORT_DID_DID,
1506 						  &port->status);
1507 			else {
1508 				port->wwnn = plogi->serv_param.wwnn;
1509 				zfcp_fc_plogi_evaluate(port, plogi);
1510 			}
1511 		}
1512 		break;
1513 	case FSF_UNKNOWN_OP_SUBTYPE:
1514 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1515 		break;
1516 	}
1517 
1518 skip_fsfstatus:
1519 	atomic_clear_mask(ZFCP_STATUS_COMMON_OPENING, &port->status);
1520 }
1521 
1522 /**
1523  * zfcp_fsf_open_port - create and send open port request
1524  * @erp_action: pointer to struct zfcp_erp_action
1525  * Returns: 0 on success, error otherwise
1526  */
1527 int zfcp_fsf_open_port(struct zfcp_erp_action *erp_action)
1528 {
1529 	volatile struct qdio_buffer_element *sbale;
1530 	struct zfcp_adapter *adapter = erp_action->adapter;
1531 	struct zfcp_fsf_req *req;
1532 	int retval = -EIO;
1533 
1534 	spin_lock(&adapter->req_q.lock);
1535 	if (zfcp_fsf_req_sbal_get(adapter))
1536 		goto out;
1537 
1538 	req = zfcp_fsf_req_create(adapter,
1539 				  FSF_QTCB_OPEN_PORT_WITH_DID,
1540 				  ZFCP_REQ_AUTO_CLEANUP,
1541 				  adapter->pool.fsf_req_erp);
1542 	if (unlikely(IS_ERR(req))) {
1543 		retval = PTR_ERR(req);
1544 		goto out;
1545 	}
1546 
1547 	sbale = zfcp_qdio_sbale_req(req);
1548         sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1549         sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1550 
1551 	req->handler = zfcp_fsf_open_port_handler;
1552 	req->qtcb->bottom.support.d_id = erp_action->port->d_id;
1553 	req->data = erp_action->port;
1554 	req->erp_action = erp_action;
1555 	erp_action->fsf_req = req;
1556 	atomic_set_mask(ZFCP_STATUS_COMMON_OPENING, &erp_action->port->status);
1557 
1558 	zfcp_fsf_start_erp_timer(req);
1559 	retval = zfcp_fsf_req_send(req);
1560 	if (retval) {
1561 		zfcp_fsf_req_free(req);
1562 		erp_action->fsf_req = NULL;
1563 	}
1564 out:
1565 	spin_unlock(&adapter->req_q.lock);
1566 	return retval;
1567 }
1568 
1569 static void zfcp_fsf_close_port_handler(struct zfcp_fsf_req *req)
1570 {
1571 	struct zfcp_port *port = req->data;
1572 
1573 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1574 		goto skip_fsfstatus;
1575 
1576 	switch (req->qtcb->header.fsf_status) {
1577 	case FSF_PORT_HANDLE_NOT_VALID:
1578 		zfcp_erp_adapter_reopen(port->adapter, 0, 107, req);
1579 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1580 		break;
1581 	case FSF_ADAPTER_STATUS_AVAILABLE:
1582 		break;
1583 	case FSF_GOOD:
1584 		zfcp_erp_modify_port_status(port, 33, req,
1585 					    ZFCP_STATUS_COMMON_OPEN,
1586 					    ZFCP_CLEAR);
1587 		break;
1588 	}
1589 
1590 skip_fsfstatus:
1591 	atomic_clear_mask(ZFCP_STATUS_COMMON_CLOSING, &port->status);
1592 }
1593 
1594 /**
1595  * zfcp_fsf_close_port - create and send close port request
1596  * @erp_action: pointer to struct zfcp_erp_action
1597  * Returns: 0 on success, error otherwise
1598  */
1599 int zfcp_fsf_close_port(struct zfcp_erp_action *erp_action)
1600 {
1601 	volatile struct qdio_buffer_element *sbale;
1602 	struct zfcp_adapter *adapter = erp_action->adapter;
1603 	struct zfcp_fsf_req *req;
1604 	int retval = -EIO;
1605 
1606 	spin_lock(&adapter->req_q.lock);
1607 	if (zfcp_fsf_req_sbal_get(adapter))
1608 		goto out;
1609 
1610 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_CLOSE_PORT,
1611 				  ZFCP_REQ_AUTO_CLEANUP,
1612 				  adapter->pool.fsf_req_erp);
1613 	if (unlikely(IS_ERR(req))) {
1614 		retval = PTR_ERR(req);
1615 		goto out;
1616 	}
1617 
1618 	sbale = zfcp_qdio_sbale_req(req);
1619 	sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1620 	sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1621 
1622 	req->handler = zfcp_fsf_close_port_handler;
1623 	req->data = erp_action->port;
1624 	req->erp_action = erp_action;
1625 	req->qtcb->header.port_handle = erp_action->port->handle;
1626 	erp_action->fsf_req = req;
1627 	atomic_set_mask(ZFCP_STATUS_COMMON_CLOSING, &erp_action->port->status);
1628 
1629 	zfcp_fsf_start_erp_timer(req);
1630 	retval = zfcp_fsf_req_send(req);
1631 	if (retval) {
1632 		zfcp_fsf_req_free(req);
1633 		erp_action->fsf_req = NULL;
1634 	}
1635 out:
1636 	spin_unlock(&adapter->req_q.lock);
1637 	return retval;
1638 }
1639 
1640 static void zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *req)
1641 {
1642 	struct zfcp_port *port = req->data;
1643 	struct fsf_qtcb_header *header = &req->qtcb->header;
1644 	struct zfcp_unit *unit;
1645 
1646 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1647 		goto skip_fsfstatus;
1648 
1649 	switch (header->fsf_status) {
1650 	case FSF_PORT_HANDLE_NOT_VALID:
1651 		zfcp_erp_adapter_reopen(port->adapter, 0, 108, req);
1652 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1653 		break;
1654 	case FSF_ACCESS_DENIED:
1655 		zfcp_fsf_access_denied_port(req, port);
1656 		break;
1657 	case FSF_PORT_BOXED:
1658 		zfcp_erp_port_boxed(port, 50, req);
1659 		req->status |= ZFCP_STATUS_FSFREQ_ERROR |
1660 			       ZFCP_STATUS_FSFREQ_RETRY;
1661 		/* can't use generic zfcp_erp_modify_port_status because
1662 		 * ZFCP_STATUS_COMMON_OPEN must not be reset for the port */
1663 		atomic_clear_mask(ZFCP_STATUS_PORT_PHYS_OPEN, &port->status);
1664 		list_for_each_entry(unit, &port->unit_list_head, list)
1665 			atomic_clear_mask(ZFCP_STATUS_COMMON_OPEN,
1666 					  &unit->status);
1667 		break;
1668 	case FSF_ADAPTER_STATUS_AVAILABLE:
1669 		switch (header->fsf_status_qual.word[0]) {
1670 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
1671 			/* fall through */
1672 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
1673 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1674 			break;
1675 		}
1676 		break;
1677 	case FSF_GOOD:
1678 		/* can't use generic zfcp_erp_modify_port_status because
1679 		 * ZFCP_STATUS_COMMON_OPEN must not be reset for the port
1680 		 */
1681 		atomic_clear_mask(ZFCP_STATUS_PORT_PHYS_OPEN, &port->status);
1682 		list_for_each_entry(unit, &port->unit_list_head, list)
1683 			atomic_clear_mask(ZFCP_STATUS_COMMON_OPEN,
1684 					  &unit->status);
1685 		break;
1686 	}
1687 skip_fsfstatus:
1688 	atomic_clear_mask(ZFCP_STATUS_PORT_PHYS_CLOSING, &port->status);
1689 }
1690 
1691 /**
1692  * zfcp_fsf_close_physical_port - close physical port
1693  * @erp_action: pointer to struct zfcp_erp_action
1694  * Returns: 0 on success
1695  */
1696 int zfcp_fsf_close_physical_port(struct zfcp_erp_action *erp_action)
1697 {
1698 	volatile struct qdio_buffer_element *sbale;
1699 	struct zfcp_adapter *adapter = erp_action->adapter;
1700 	struct zfcp_fsf_req *req;
1701 	int retval = -EIO;
1702 
1703 	spin_lock(&adapter->req_q.lock);
1704 	if (zfcp_fsf_req_sbal_get(adapter))
1705 		goto out;
1706 
1707 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_CLOSE_PHYSICAL_PORT,
1708 				  ZFCP_REQ_AUTO_CLEANUP,
1709 				  adapter->pool.fsf_req_erp);
1710 	if (unlikely(IS_ERR(req))) {
1711 		retval = PTR_ERR(req);
1712 		goto out;
1713 	}
1714 
1715 	sbale = zfcp_qdio_sbale_req(req);
1716 	sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1717 	sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1718 
1719 	req->data = erp_action->port;
1720 	req->qtcb->header.port_handle = erp_action->port->handle;
1721 	req->erp_action = erp_action;
1722 	req->handler = zfcp_fsf_close_physical_port_handler;
1723 	erp_action->fsf_req = req;
1724 	atomic_set_mask(ZFCP_STATUS_PORT_PHYS_CLOSING,
1725 			&erp_action->port->status);
1726 
1727 	zfcp_fsf_start_erp_timer(req);
1728 	retval = zfcp_fsf_req_send(req);
1729 	if (retval) {
1730 		zfcp_fsf_req_free(req);
1731 		erp_action->fsf_req = NULL;
1732 	}
1733 out:
1734 	spin_unlock(&adapter->req_q.lock);
1735 	return retval;
1736 }
1737 
1738 static void zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *req)
1739 {
1740 	struct zfcp_adapter *adapter = req->adapter;
1741 	struct zfcp_unit *unit = req->data;
1742 	struct fsf_qtcb_header *header = &req->qtcb->header;
1743 	struct fsf_qtcb_bottom_support *bottom = &req->qtcb->bottom.support;
1744 	struct fsf_queue_designator *queue_designator =
1745 				&header->fsf_status_qual.fsf_queue_designator;
1746 	int exclusive, readwrite;
1747 
1748 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1749 		goto skip_fsfstatus;
1750 
1751 	atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED |
1752 			  ZFCP_STATUS_COMMON_ACCESS_BOXED |
1753 			  ZFCP_STATUS_UNIT_SHARED |
1754 			  ZFCP_STATUS_UNIT_READONLY,
1755 			  &unit->status);
1756 
1757 	switch (header->fsf_status) {
1758 
1759 	case FSF_PORT_HANDLE_NOT_VALID:
1760 		zfcp_erp_adapter_reopen(unit->port->adapter, 0, 109, req);
1761 		/* fall through */
1762 	case FSF_LUN_ALREADY_OPEN:
1763 		break;
1764 	case FSF_ACCESS_DENIED:
1765 		zfcp_fsf_access_denied_unit(req, unit);
1766 		atomic_clear_mask(ZFCP_STATUS_UNIT_SHARED, &unit->status);
1767 		atomic_clear_mask(ZFCP_STATUS_UNIT_READONLY, &unit->status);
1768 		break;
1769 	case FSF_PORT_BOXED:
1770 		zfcp_erp_port_boxed(unit->port, 51, req);
1771 		req->status |= ZFCP_STATUS_FSFREQ_ERROR |
1772 			       ZFCP_STATUS_FSFREQ_RETRY;
1773 		break;
1774 	case FSF_LUN_SHARING_VIOLATION:
1775 		if (header->fsf_status_qual.word[0])
1776 			dev_warn(&adapter->ccw_device->dev,
1777 				 "FCP-LUN 0x%Lx at the remote port "
1778 				 "with WWPN 0x%Lx "
1779 				 "connected to the adapter "
1780 				 "is already in use in LPAR%d, CSS%d.\n",
1781 				 unit->fcp_lun,
1782 				 unit->port->wwpn,
1783 				 queue_designator->hla,
1784 				 queue_designator->cssid);
1785 		else
1786 			zfcp_act_eval_err(adapter,
1787 					  header->fsf_status_qual.word[2]);
1788 		zfcp_erp_unit_access_denied(unit, 60, req);
1789 		atomic_clear_mask(ZFCP_STATUS_UNIT_SHARED, &unit->status);
1790 		atomic_clear_mask(ZFCP_STATUS_UNIT_READONLY, &unit->status);
1791 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1792 		break;
1793 	case FSF_MAXIMUM_NUMBER_OF_LUNS_EXCEEDED:
1794 		dev_warn(&adapter->ccw_device->dev,
1795 			 "The adapter ran out of resources. There is no "
1796 			 "handle available for unit 0x%016Lx on port 0x%016Lx.",
1797 			 unit->fcp_lun, unit->port->wwpn);
1798 		zfcp_erp_unit_failed(unit, 34, req);
1799 		/* fall through */
1800 	case FSF_INVALID_COMMAND_OPTION:
1801 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1802 		break;
1803 	case FSF_ADAPTER_STATUS_AVAILABLE:
1804 		switch (header->fsf_status_qual.word[0]) {
1805 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
1806 			zfcp_test_link(unit->port);
1807 			/* fall through */
1808 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
1809 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1810 			break;
1811 		}
1812 		break;
1813 
1814 	case FSF_GOOD:
1815 		unit->handle = header->lun_handle;
1816 		atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &unit->status);
1817 
1818 		if (!(adapter->connection_features & FSF_FEATURE_NPIV_MODE) &&
1819 		    (adapter->adapter_features & FSF_FEATURE_LUN_SHARING) &&
1820 		    (adapter->ccw_device->id.dev_model != ZFCP_DEVICE_MODEL_PRIV)) {
1821 			exclusive = (bottom->lun_access_info &
1822 					FSF_UNIT_ACCESS_EXCLUSIVE);
1823 			readwrite = (bottom->lun_access_info &
1824 					FSF_UNIT_ACCESS_OUTBOUND_TRANSFER);
1825 
1826 			if (!exclusive)
1827 		                atomic_set_mask(ZFCP_STATUS_UNIT_SHARED,
1828 						&unit->status);
1829 
1830 			if (!readwrite) {
1831                 		atomic_set_mask(ZFCP_STATUS_UNIT_READONLY,
1832 						&unit->status);
1833 				dev_info(&adapter->ccw_device->dev,
1834 					 "Read-only access for unit 0x%016Lx "
1835 					 "on port 0x%016Lx.\n",
1836 					 unit->fcp_lun, unit->port->wwpn);
1837         		}
1838 
1839         		if (exclusive && !readwrite) {
1840 				dev_err(&adapter->ccw_device->dev,
1841 					"Exclusive access of read-only unit "
1842 					"0x%016Lx on port 0x%016Lx not "
1843 					"supported, disabling unit.\n",
1844 					unit->fcp_lun, unit->port->wwpn);
1845 				zfcp_erp_unit_failed(unit, 35, req);
1846 				req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1847 				zfcp_erp_unit_shutdown(unit, 0, 80, req);
1848         		} else if (!exclusive && readwrite) {
1849 				dev_err(&adapter->ccw_device->dev,
1850 					"Shared access of read-write unit "
1851 					"0x%016Lx on port 0x%016Lx not "
1852 					"supported, disabling unit.\n",
1853 					unit->fcp_lun, unit->port->wwpn);
1854 				zfcp_erp_unit_failed(unit, 36, req);
1855 				req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1856 				zfcp_erp_unit_shutdown(unit, 0, 81, req);
1857         		}
1858 		}
1859 		break;
1860 	}
1861 
1862 skip_fsfstatus:
1863 	atomic_clear_mask(ZFCP_STATUS_COMMON_OPENING, &unit->status);
1864 }
1865 
1866 /**
1867  * zfcp_fsf_open_unit - open unit
1868  * @erp_action: pointer to struct zfcp_erp_action
1869  * Returns: 0 on success, error otherwise
1870  */
1871 int zfcp_fsf_open_unit(struct zfcp_erp_action *erp_action)
1872 {
1873 	volatile struct qdio_buffer_element *sbale;
1874 	struct zfcp_adapter *adapter = erp_action->adapter;
1875 	struct zfcp_fsf_req *req;
1876 	int retval = -EIO;
1877 
1878 	spin_lock(&adapter->req_q.lock);
1879 	if (zfcp_fsf_req_sbal_get(adapter))
1880 		goto out;
1881 
1882 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_OPEN_LUN,
1883 				  ZFCP_REQ_AUTO_CLEANUP,
1884 				  adapter->pool.fsf_req_erp);
1885 	if (unlikely(IS_ERR(req))) {
1886 		retval = PTR_ERR(req);
1887 		goto out;
1888 	}
1889 
1890 	sbale = zfcp_qdio_sbale_req(req);
1891         sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1892         sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1893 
1894 	req->qtcb->header.port_handle = erp_action->port->handle;
1895 	req->qtcb->bottom.support.fcp_lun = erp_action->unit->fcp_lun;
1896 	req->handler = zfcp_fsf_open_unit_handler;
1897 	req->data = erp_action->unit;
1898 	req->erp_action = erp_action;
1899 	erp_action->fsf_req = req;
1900 
1901 	if (!(adapter->connection_features & FSF_FEATURE_NPIV_MODE))
1902 		req->qtcb->bottom.support.option = FSF_OPEN_LUN_SUPPRESS_BOXING;
1903 
1904 	atomic_set_mask(ZFCP_STATUS_COMMON_OPENING, &erp_action->unit->status);
1905 
1906 	zfcp_fsf_start_erp_timer(req);
1907 	retval = zfcp_fsf_req_send(req);
1908 	if (retval) {
1909 		zfcp_fsf_req_free(req);
1910 		erp_action->fsf_req = NULL;
1911 	}
1912 out:
1913 	spin_unlock(&adapter->req_q.lock);
1914 	return retval;
1915 }
1916 
1917 static void zfcp_fsf_close_unit_handler(struct zfcp_fsf_req *req)
1918 {
1919 	struct zfcp_unit *unit = req->data;
1920 
1921 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1922 		goto skip_fsfstatus;
1923 
1924 	switch (req->qtcb->header.fsf_status) {
1925 	case FSF_PORT_HANDLE_NOT_VALID:
1926 		zfcp_erp_adapter_reopen(unit->port->adapter, 0, 110, req);
1927 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1928 		break;
1929 	case FSF_LUN_HANDLE_NOT_VALID:
1930 		zfcp_erp_port_reopen(unit->port, 0, 111, req);
1931 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1932 		break;
1933 	case FSF_PORT_BOXED:
1934 		zfcp_erp_port_boxed(unit->port, 52, req);
1935 		req->status |= ZFCP_STATUS_FSFREQ_ERROR |
1936 			       ZFCP_STATUS_FSFREQ_RETRY;
1937 		break;
1938 	case FSF_ADAPTER_STATUS_AVAILABLE:
1939 		switch (req->qtcb->header.fsf_status_qual.word[0]) {
1940 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
1941 			zfcp_test_link(unit->port);
1942 			/* fall through */
1943 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
1944 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1945 			break;
1946 		}
1947 		break;
1948 	case FSF_GOOD:
1949 		atomic_clear_mask(ZFCP_STATUS_COMMON_OPEN, &unit->status);
1950 		break;
1951 	}
1952 skip_fsfstatus:
1953 	atomic_clear_mask(ZFCP_STATUS_COMMON_CLOSING, &unit->status);
1954 }
1955 
1956 /**
1957  * zfcp_fsf_close_unit - close zfcp unit
1958  * @erp_action: pointer to struct zfcp_unit
1959  * Returns: 0 on success, error otherwise
1960  */
1961 int zfcp_fsf_close_unit(struct zfcp_erp_action *erp_action)
1962 {
1963 	volatile struct qdio_buffer_element *sbale;
1964 	struct zfcp_adapter *adapter = erp_action->adapter;
1965 	struct zfcp_fsf_req *req;
1966 	int retval = -EIO;
1967 
1968 	spin_lock(&adapter->req_q.lock);
1969 	if (zfcp_fsf_req_sbal_get(adapter))
1970 		goto out;
1971 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_CLOSE_LUN,
1972 				  ZFCP_REQ_AUTO_CLEANUP,
1973 				  adapter->pool.fsf_req_erp);
1974 	if (unlikely(IS_ERR(req))) {
1975 		retval = PTR_ERR(req);
1976 		goto out;
1977 	}
1978 
1979 	sbale = zfcp_qdio_sbale_req(req);
1980 	sbale[0].flags |= SBAL_FLAGS0_TYPE_READ;
1981 	sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
1982 
1983 	req->qtcb->header.port_handle = erp_action->port->handle;
1984 	req->qtcb->header.lun_handle = erp_action->unit->handle;
1985 	req->handler = zfcp_fsf_close_unit_handler;
1986 	req->data = erp_action->unit;
1987 	req->erp_action = erp_action;
1988 	erp_action->fsf_req = req;
1989 	atomic_set_mask(ZFCP_STATUS_COMMON_CLOSING, &erp_action->unit->status);
1990 
1991 	zfcp_fsf_start_erp_timer(req);
1992 	retval = zfcp_fsf_req_send(req);
1993 	if (retval) {
1994 		zfcp_fsf_req_free(req);
1995 		erp_action->fsf_req = NULL;
1996 	}
1997 out:
1998 	spin_unlock(&adapter->req_q.lock);
1999 	return retval;
2000 }
2001 
2002 static void zfcp_fsf_update_lat(struct fsf_latency_record *lat_rec, u32 lat)
2003 {
2004 	lat_rec->sum += lat;
2005 	lat_rec->min = min(lat_rec->min, lat);
2006 	lat_rec->max = max(lat_rec->max, lat);
2007 }
2008 
2009 static void zfcp_fsf_req_latency(struct zfcp_fsf_req *req)
2010 {
2011 	struct fsf_qual_latency_info *lat_inf;
2012 	struct latency_cont *lat;
2013 	struct zfcp_unit *unit = req->unit;
2014 	unsigned long flags;
2015 
2016 	lat_inf = &req->qtcb->prefix.prot_status_qual.latency_info;
2017 
2018 	switch (req->qtcb->bottom.io.data_direction) {
2019 	case FSF_DATADIR_READ:
2020 		lat = &unit->latencies.read;
2021 		break;
2022 	case FSF_DATADIR_WRITE:
2023 		lat = &unit->latencies.write;
2024 		break;
2025 	case FSF_DATADIR_CMND:
2026 		lat = &unit->latencies.cmd;
2027 		break;
2028 	default:
2029 		return;
2030 	}
2031 
2032 	spin_lock_irqsave(&unit->latencies.lock, flags);
2033 	zfcp_fsf_update_lat(&lat->channel, lat_inf->channel_lat);
2034 	zfcp_fsf_update_lat(&lat->fabric, lat_inf->fabric_lat);
2035 	lat->counter++;
2036 	spin_unlock_irqrestore(&unit->latencies.lock, flags);
2037 }
2038 
2039 static void zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *req)
2040 {
2041 	struct scsi_cmnd *scpnt = req->data;
2042 	struct fcp_rsp_iu *fcp_rsp_iu = (struct fcp_rsp_iu *)
2043 	    &(req->qtcb->bottom.io.fcp_rsp);
2044 	u32 sns_len;
2045 	char *fcp_rsp_info = (unsigned char *) &fcp_rsp_iu[1];
2046 	unsigned long flags;
2047 
2048 	if (unlikely(!scpnt))
2049 		return;
2050 
2051 	read_lock_irqsave(&req->adapter->abort_lock, flags);
2052 
2053 	if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ABORTED)) {
2054 		set_host_byte(scpnt, DID_SOFT_ERROR);
2055 		set_driver_byte(scpnt, SUGGEST_RETRY);
2056 		goto skip_fsfstatus;
2057 	}
2058 
2059 	if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR)) {
2060 		set_host_byte(scpnt, DID_ERROR);
2061 		goto skip_fsfstatus;
2062 	}
2063 
2064 	set_msg_byte(scpnt, COMMAND_COMPLETE);
2065 
2066 	scpnt->result |= fcp_rsp_iu->scsi_status;
2067 
2068 	if (req->adapter->adapter_features & FSF_FEATURE_MEASUREMENT_DATA)
2069 		zfcp_fsf_req_latency(req);
2070 
2071 	if (unlikely(fcp_rsp_iu->validity.bits.fcp_rsp_len_valid)) {
2072 		if (fcp_rsp_info[3] == RSP_CODE_GOOD)
2073 			set_host_byte(scpnt, DID_OK);
2074 		else {
2075 			set_host_byte(scpnt, DID_ERROR);
2076 			goto skip_fsfstatus;
2077 		}
2078 	}
2079 
2080 	if (unlikely(fcp_rsp_iu->validity.bits.fcp_sns_len_valid)) {
2081 		sns_len = FSF_FCP_RSP_SIZE - sizeof(struct fcp_rsp_iu) +
2082 			  fcp_rsp_iu->fcp_rsp_len;
2083 		sns_len = min(sns_len, (u32) SCSI_SENSE_BUFFERSIZE);
2084 		sns_len = min(sns_len, fcp_rsp_iu->fcp_sns_len);
2085 
2086 		memcpy(scpnt->sense_buffer,
2087 		       zfcp_get_fcp_sns_info_ptr(fcp_rsp_iu), sns_len);
2088 	}
2089 
2090 	if (unlikely(fcp_rsp_iu->validity.bits.fcp_resid_under)) {
2091 		scsi_set_resid(scpnt, fcp_rsp_iu->fcp_resid);
2092 		if (scsi_bufflen(scpnt) - scsi_get_resid(scpnt) <
2093 		    scpnt->underflow)
2094 			set_host_byte(scpnt, DID_ERROR);
2095 	}
2096 skip_fsfstatus:
2097 	if (scpnt->result != 0)
2098 		zfcp_scsi_dbf_event_result("erro", 3, req->adapter, scpnt, req);
2099 	else if (scpnt->retries > 0)
2100 		zfcp_scsi_dbf_event_result("retr", 4, req->adapter, scpnt, req);
2101 	else
2102 		zfcp_scsi_dbf_event_result("norm", 6, req->adapter, scpnt, req);
2103 
2104 	scpnt->host_scribble = NULL;
2105 	(scpnt->scsi_done) (scpnt);
2106 	/*
2107 	 * We must hold this lock until scsi_done has been called.
2108 	 * Otherwise we may call scsi_done after abort regarding this
2109 	 * command has completed.
2110 	 * Note: scsi_done must not block!
2111 	 */
2112 	read_unlock_irqrestore(&req->adapter->abort_lock, flags);
2113 }
2114 
2115 static void zfcp_fsf_send_fcp_ctm_handler(struct zfcp_fsf_req *req)
2116 {
2117 	struct fcp_rsp_iu *fcp_rsp_iu = (struct fcp_rsp_iu *)
2118 	    &(req->qtcb->bottom.io.fcp_rsp);
2119 	char *fcp_rsp_info = (unsigned char *) &fcp_rsp_iu[1];
2120 
2121 	if ((fcp_rsp_info[3] != RSP_CODE_GOOD) ||
2122 	     (req->status & ZFCP_STATUS_FSFREQ_ERROR))
2123 		req->status |= ZFCP_STATUS_FSFREQ_TMFUNCFAILED;
2124 }
2125 
2126 
2127 static void zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *req)
2128 {
2129 	struct zfcp_unit *unit;
2130 	struct fsf_qtcb_header *header = &req->qtcb->header;
2131 
2132 	if (unlikely(req->status & ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT))
2133 		unit = req->data;
2134 	else
2135 		unit = req->unit;
2136 
2137 	if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR))
2138 		goto skip_fsfstatus;
2139 
2140 	switch (header->fsf_status) {
2141 	case FSF_HANDLE_MISMATCH:
2142 	case FSF_PORT_HANDLE_NOT_VALID:
2143 		zfcp_erp_adapter_reopen(unit->port->adapter, 0, 112, req);
2144 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2145 		break;
2146 	case FSF_FCPLUN_NOT_VALID:
2147 	case FSF_LUN_HANDLE_NOT_VALID:
2148 		zfcp_erp_port_reopen(unit->port, 0, 113, req);
2149 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2150 		break;
2151 	case FSF_SERVICE_CLASS_NOT_SUPPORTED:
2152 		zfcp_fsf_class_not_supp(req);
2153 		break;
2154 	case FSF_ACCESS_DENIED:
2155 		zfcp_fsf_access_denied_unit(req, unit);
2156 		break;
2157 	case FSF_DIRECTION_INDICATOR_NOT_VALID:
2158 		dev_err(&req->adapter->ccw_device->dev,
2159 			"Invalid data direction (%d) given for unit "
2160 			"0x%016Lx on port 0x%016Lx, shutting down "
2161 			"adapter.\n",
2162 			req->qtcb->bottom.io.data_direction,
2163 			unit->fcp_lun, unit->port->wwpn);
2164 		zfcp_erp_adapter_shutdown(unit->port->adapter, 0, 133, req);
2165 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2166 		break;
2167 	case FSF_CMND_LENGTH_NOT_VALID:
2168 		dev_err(&req->adapter->ccw_device->dev,
2169 			"An invalid control-data-block length field (%d) "
2170 			"was found in a command for unit 0x%016Lx on port "
2171 			"0x%016Lx. Shutting down adapter.\n",
2172 			req->qtcb->bottom.io.fcp_cmnd_length,
2173 			unit->fcp_lun, unit->port->wwpn);
2174 		zfcp_erp_adapter_shutdown(unit->port->adapter, 0, 134, req);
2175 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2176 		break;
2177 	case FSF_PORT_BOXED:
2178 		zfcp_erp_port_boxed(unit->port, 53, req);
2179 		req->status |= ZFCP_STATUS_FSFREQ_ERROR |
2180 			       ZFCP_STATUS_FSFREQ_RETRY;
2181 		break;
2182 	case FSF_LUN_BOXED:
2183 		zfcp_erp_unit_boxed(unit, 54, req);
2184 		req->status |= ZFCP_STATUS_FSFREQ_ERROR |
2185 			       ZFCP_STATUS_FSFREQ_RETRY;
2186 		break;
2187 	case FSF_ADAPTER_STATUS_AVAILABLE:
2188 		if (header->fsf_status_qual.word[0] ==
2189 		    FSF_SQ_INVOKE_LINK_TEST_PROCEDURE)
2190 			zfcp_test_link(unit->port);
2191 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2192 		break;
2193 	}
2194 skip_fsfstatus:
2195 	if (req->status & ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT)
2196 		zfcp_fsf_send_fcp_ctm_handler(req);
2197 	else {
2198 		zfcp_fsf_send_fcp_command_task_handler(req);
2199 		req->unit = NULL;
2200 		zfcp_unit_put(unit);
2201 	}
2202 }
2203 
2204 /**
2205  * zfcp_fsf_send_fcp_command_task - initiate an FCP command (for a SCSI command)
2206  * @adapter: adapter where scsi command is issued
2207  * @unit: unit where command is sent to
2208  * @scsi_cmnd: scsi command to be sent
2209  * @timer: timer to be started when request is initiated
2210  * @req_flags: flags for fsf_request
2211  */
2212 int zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *adapter,
2213 				   struct zfcp_unit *unit,
2214 				   struct scsi_cmnd *scsi_cmnd,
2215 				   int use_timer, int req_flags)
2216 {
2217 	struct zfcp_fsf_req *req;
2218 	struct fcp_cmnd_iu *fcp_cmnd_iu;
2219 	unsigned int sbtype;
2220 	int real_bytes, retval = -EIO;
2221 
2222 	if (unlikely(!(atomic_read(&unit->status) &
2223 		       ZFCP_STATUS_COMMON_UNBLOCKED)))
2224 		return -EBUSY;
2225 
2226 	spin_lock(&adapter->req_q.lock);
2227 	if (!atomic_read(&adapter->req_q.count))
2228 		goto out;
2229 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags,
2230 				  adapter->pool.fsf_req_scsi);
2231 	if (unlikely(IS_ERR(req))) {
2232 		retval = PTR_ERR(req);
2233 		goto out;
2234 	}
2235 
2236 	zfcp_unit_get(unit);
2237 	req->unit = unit;
2238 	req->data = scsi_cmnd;
2239 	req->handler = zfcp_fsf_send_fcp_command_handler;
2240 	req->qtcb->header.lun_handle = unit->handle;
2241 	req->qtcb->header.port_handle = unit->port->handle;
2242 	req->qtcb->bottom.io.service_class = FSF_CLASS_3;
2243 
2244 	scsi_cmnd->host_scribble = (unsigned char *) req->req_id;
2245 
2246 	fcp_cmnd_iu = (struct fcp_cmnd_iu *) &(req->qtcb->bottom.io.fcp_cmnd);
2247 	fcp_cmnd_iu->fcp_lun = unit->fcp_lun;
2248 	/*
2249 	 * set depending on data direction:
2250 	 *      data direction bits in SBALE (SB Type)
2251 	 *      data direction bits in QTCB
2252 	 *      data direction bits in FCP_CMND IU
2253 	 */
2254 	switch (scsi_cmnd->sc_data_direction) {
2255 	case DMA_NONE:
2256 		req->qtcb->bottom.io.data_direction = FSF_DATADIR_CMND;
2257 		sbtype = SBAL_FLAGS0_TYPE_READ;
2258 		break;
2259 	case DMA_FROM_DEVICE:
2260 		req->qtcb->bottom.io.data_direction = FSF_DATADIR_READ;
2261 		sbtype = SBAL_FLAGS0_TYPE_READ;
2262 		fcp_cmnd_iu->rddata = 1;
2263 		break;
2264 	case DMA_TO_DEVICE:
2265 		req->qtcb->bottom.io.data_direction = FSF_DATADIR_WRITE;
2266 		sbtype = SBAL_FLAGS0_TYPE_WRITE;
2267 		fcp_cmnd_iu->wddata = 1;
2268 		break;
2269 	case DMA_BIDIRECTIONAL:
2270 	default:
2271 		retval = -EIO;
2272 		goto failed_scsi_cmnd;
2273 	}
2274 
2275 	if (likely((scsi_cmnd->device->simple_tags) ||
2276 		   ((atomic_read(&unit->status) & ZFCP_STATUS_UNIT_READONLY) &&
2277 		    (atomic_read(&unit->status) & ZFCP_STATUS_UNIT_SHARED))))
2278 		fcp_cmnd_iu->task_attribute = SIMPLE_Q;
2279 	else
2280 		fcp_cmnd_iu->task_attribute = UNTAGGED;
2281 
2282 	if (unlikely(scsi_cmnd->cmd_len > FCP_CDB_LENGTH))
2283 		fcp_cmnd_iu->add_fcp_cdb_length =
2284 			(scsi_cmnd->cmd_len - FCP_CDB_LENGTH) >> 2;
2285 
2286 	memcpy(fcp_cmnd_iu->fcp_cdb, scsi_cmnd->cmnd, scsi_cmnd->cmd_len);
2287 
2288 	req->qtcb->bottom.io.fcp_cmnd_length = sizeof(struct fcp_cmnd_iu) +
2289 		fcp_cmnd_iu->add_fcp_cdb_length + sizeof(fcp_dl_t);
2290 
2291 	real_bytes = zfcp_qdio_sbals_from_sg(req, sbtype,
2292 					     scsi_sglist(scsi_cmnd),
2293 					     FSF_MAX_SBALS_PER_REQ);
2294 	if (unlikely(real_bytes < 0)) {
2295 		if (req->sbal_number < FSF_MAX_SBALS_PER_REQ)
2296 			retval = -EIO;
2297 		else {
2298 			dev_err(&adapter->ccw_device->dev,
2299 				"SCSI request too large. "
2300 				"Shutting down unit 0x%016Lx on port "
2301 				"0x%016Lx.\n", unit->fcp_lun,
2302 				unit->port->wwpn);
2303 			zfcp_erp_unit_shutdown(unit, 0, 131, req);
2304 			retval = -EINVAL;
2305 		}
2306 		goto failed_scsi_cmnd;
2307 	}
2308 
2309 	zfcp_set_fcp_dl(fcp_cmnd_iu, real_bytes);
2310 
2311 	if (use_timer)
2312 		zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
2313 
2314 	retval = zfcp_fsf_req_send(req);
2315 	if (unlikely(retval))
2316 		goto failed_scsi_cmnd;
2317 
2318 	goto out;
2319 
2320 failed_scsi_cmnd:
2321 	zfcp_unit_put(unit);
2322 	zfcp_fsf_req_free(req);
2323 	scsi_cmnd->host_scribble = NULL;
2324 out:
2325 	spin_unlock(&adapter->req_q.lock);
2326 	return retval;
2327 }
2328 
2329 /**
2330  * zfcp_fsf_send_fcp_ctm - send SCSI task management command
2331  * @adapter: pointer to struct zfcp-adapter
2332  * @unit: pointer to struct zfcp_unit
2333  * @tm_flags: unsigned byte for task management flags
2334  * @req_flags: int request flags
2335  * Returns: on success pointer to struct fsf_req, NULL otherwise
2336  */
2337 struct zfcp_fsf_req *zfcp_fsf_send_fcp_ctm(struct zfcp_adapter *adapter,
2338 					   struct zfcp_unit *unit,
2339 					   u8 tm_flags, int req_flags)
2340 {
2341 	volatile struct qdio_buffer_element *sbale;
2342 	struct zfcp_fsf_req *req = NULL;
2343 	struct fcp_cmnd_iu *fcp_cmnd_iu;
2344 
2345 	if (unlikely(!(atomic_read(&unit->status) &
2346 		       ZFCP_STATUS_COMMON_UNBLOCKED)))
2347 		return NULL;
2348 
2349 	spin_lock(&adapter->req_q.lock);
2350 	if (!atomic_read(&adapter->req_q.count))
2351 		goto out;
2352 	req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags,
2353 				  adapter->pool.fsf_req_scsi);
2354 	if (unlikely(IS_ERR(req)))
2355 		goto out;
2356 
2357 	req->status |= ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT;
2358 	req->data = unit;
2359 	req->handler = zfcp_fsf_send_fcp_command_handler;
2360 	req->qtcb->header.lun_handle = unit->handle;
2361 	req->qtcb->header.port_handle = unit->port->handle;
2362 	req->qtcb->bottom.io.data_direction = FSF_DATADIR_CMND;
2363 	req->qtcb->bottom.io.service_class = FSF_CLASS_3;
2364 	req->qtcb->bottom.io.fcp_cmnd_length = 	sizeof(struct fcp_cmnd_iu) +
2365 						sizeof(fcp_dl_t);
2366 
2367 	sbale = zfcp_qdio_sbale_req(req);
2368 	sbale[0].flags |= SBAL_FLAGS0_TYPE_WRITE;
2369 	sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY;
2370 
2371 	fcp_cmnd_iu = (struct fcp_cmnd_iu *) &req->qtcb->bottom.io.fcp_cmnd;
2372 	fcp_cmnd_iu->fcp_lun = unit->fcp_lun;
2373 	fcp_cmnd_iu->task_management_flags = tm_flags;
2374 
2375 	zfcp_fsf_start_timer(req, ZFCP_SCSI_ER_TIMEOUT);
2376 	if (!zfcp_fsf_req_send(req))
2377 		goto out;
2378 
2379 	zfcp_fsf_req_free(req);
2380 	req = NULL;
2381 out:
2382 	spin_unlock(&adapter->req_q.lock);
2383 	return req;
2384 }
2385 
2386 static void zfcp_fsf_control_file_handler(struct zfcp_fsf_req *req)
2387 {
2388 	if (req->qtcb->header.fsf_status != FSF_GOOD)
2389 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2390 }
2391 
2392 /**
2393  * zfcp_fsf_control_file - control file upload/download
2394  * @adapter: pointer to struct zfcp_adapter
2395  * @fsf_cfdc: pointer to struct zfcp_fsf_cfdc
2396  * Returns: on success pointer to struct zfcp_fsf_req, NULL otherwise
2397  */
2398 struct zfcp_fsf_req *zfcp_fsf_control_file(struct zfcp_adapter *adapter,
2399 					   struct zfcp_fsf_cfdc *fsf_cfdc)
2400 {
2401 	volatile struct qdio_buffer_element *sbale;
2402 	struct zfcp_fsf_req *req = NULL;
2403 	struct fsf_qtcb_bottom_support *bottom;
2404 	int direction, retval = -EIO, bytes;
2405 
2406 	if (!(adapter->adapter_features & FSF_FEATURE_CFDC))
2407 		return ERR_PTR(-EOPNOTSUPP);
2408 
2409 	switch (fsf_cfdc->command) {
2410 	case FSF_QTCB_DOWNLOAD_CONTROL_FILE:
2411 		direction = SBAL_FLAGS0_TYPE_WRITE;
2412 		break;
2413 	case FSF_QTCB_UPLOAD_CONTROL_FILE:
2414 		direction = SBAL_FLAGS0_TYPE_READ;
2415 		break;
2416 	default:
2417 		return ERR_PTR(-EINVAL);
2418 	}
2419 
2420 	spin_lock(&adapter->req_q.lock);
2421 	if (zfcp_fsf_req_sbal_get(adapter))
2422 		goto out;
2423 
2424 	req = zfcp_fsf_req_create(adapter, fsf_cfdc->command, 0, NULL);
2425 	if (unlikely(IS_ERR(req))) {
2426 		retval = -EPERM;
2427 		goto out;
2428 	}
2429 
2430 	req->handler = zfcp_fsf_control_file_handler;
2431 
2432 	sbale = zfcp_qdio_sbale_req(req);
2433 	sbale[0].flags |= direction;
2434 
2435 	bottom = &req->qtcb->bottom.support;
2436 	bottom->operation_subtype = FSF_CFDC_OPERATION_SUBTYPE;
2437 	bottom->option = fsf_cfdc->option;
2438 
2439 	bytes = zfcp_qdio_sbals_from_sg(req, direction, fsf_cfdc->sg,
2440 					FSF_MAX_SBALS_PER_REQ);
2441 	if (bytes != ZFCP_CFDC_MAX_SIZE) {
2442 		retval = -ENOMEM;
2443 		zfcp_fsf_req_free(req);
2444 		goto out;
2445 	}
2446 
2447 	zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
2448 	retval = zfcp_fsf_req_send(req);
2449 out:
2450 	spin_unlock(&adapter->req_q.lock);
2451 
2452 	if (!retval) {
2453 		wait_event(req->completion_wq,
2454 			   req->status & ZFCP_STATUS_FSFREQ_COMPLETED);
2455 		return req;
2456 	}
2457 	return ERR_PTR(retval);
2458 }
2459