xref: /linux/drivers/s390/scsi/zfcp_fsf.c (revision d195c39052d1da278a00a6744ce59c383b67b191)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * zfcp device driver
4  *
5  * Implementation of FSF commands.
6  *
7  * Copyright IBM Corp. 2002, 2020
8  */
9 
10 #define KMSG_COMPONENT "zfcp"
11 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
12 
13 #include <linux/blktrace_api.h>
14 #include <linux/jiffies.h>
15 #include <linux/types.h>
16 #include <linux/slab.h>
17 #include <scsi/fc/fc_els.h>
18 #include "zfcp_ext.h"
19 #include "zfcp_fc.h"
20 #include "zfcp_dbf.h"
21 #include "zfcp_qdio.h"
22 #include "zfcp_reqlist.h"
23 #include "zfcp_diag.h"
24 
25 /* timeout for FSF requests sent during scsi_eh: abort or FCP TMF */
26 #define ZFCP_FSF_SCSI_ER_TIMEOUT (10*HZ)
27 /* timeout for: exchange config/port data outside ERP, or open/close WKA port */
28 #define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ)
29 
30 struct kmem_cache *zfcp_fsf_qtcb_cache;
31 
32 static bool ber_stop = true;
33 module_param(ber_stop, bool, 0600);
34 MODULE_PARM_DESC(ber_stop,
35 		 "Shuts down FCP devices for FCP channels that report a bit-error count in excess of its threshold (default on)");
36 
37 static void zfcp_fsf_request_timeout_handler(struct timer_list *t)
38 {
39 	struct zfcp_fsf_req *fsf_req = from_timer(fsf_req, t, timer);
40 	struct zfcp_adapter *adapter = fsf_req->adapter;
41 
42 	zfcp_qdio_siosl(adapter);
43 	zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED,
44 				"fsrth_1");
45 }
46 
47 static void zfcp_fsf_start_timer(struct zfcp_fsf_req *fsf_req,
48 				 unsigned long timeout)
49 {
50 	fsf_req->timer.function = zfcp_fsf_request_timeout_handler;
51 	fsf_req->timer.expires = jiffies + timeout;
52 	add_timer(&fsf_req->timer);
53 }
54 
55 static void zfcp_fsf_start_erp_timer(struct zfcp_fsf_req *fsf_req)
56 {
57 	BUG_ON(!fsf_req->erp_action);
58 	fsf_req->timer.function = zfcp_erp_timeout_handler;
59 	fsf_req->timer.expires = jiffies + 30 * HZ;
60 	add_timer(&fsf_req->timer);
61 }
62 
63 /* association between FSF command and FSF QTCB type */
64 static u32 fsf_qtcb_type[] = {
65 	[FSF_QTCB_FCP_CMND] =             FSF_IO_COMMAND,
66 	[FSF_QTCB_ABORT_FCP_CMND] =       FSF_SUPPORT_COMMAND,
67 	[FSF_QTCB_OPEN_PORT_WITH_DID] =   FSF_SUPPORT_COMMAND,
68 	[FSF_QTCB_OPEN_LUN] =             FSF_SUPPORT_COMMAND,
69 	[FSF_QTCB_CLOSE_LUN] =            FSF_SUPPORT_COMMAND,
70 	[FSF_QTCB_CLOSE_PORT] =           FSF_SUPPORT_COMMAND,
71 	[FSF_QTCB_CLOSE_PHYSICAL_PORT] =  FSF_SUPPORT_COMMAND,
72 	[FSF_QTCB_SEND_ELS] =             FSF_SUPPORT_COMMAND,
73 	[FSF_QTCB_SEND_GENERIC] =         FSF_SUPPORT_COMMAND,
74 	[FSF_QTCB_EXCHANGE_CONFIG_DATA] = FSF_CONFIG_COMMAND,
75 	[FSF_QTCB_EXCHANGE_PORT_DATA] =   FSF_PORT_COMMAND,
76 	[FSF_QTCB_DOWNLOAD_CONTROL_FILE] = FSF_SUPPORT_COMMAND,
77 	[FSF_QTCB_UPLOAD_CONTROL_FILE] =  FSF_SUPPORT_COMMAND
78 };
79 
80 static void zfcp_fsf_class_not_supp(struct zfcp_fsf_req *req)
81 {
82 	dev_err(&req->adapter->ccw_device->dev, "FCP device not "
83 		"operational because of an unsupported FC class\n");
84 	zfcp_erp_adapter_shutdown(req->adapter, 0, "fscns_1");
85 	req->status |= ZFCP_STATUS_FSFREQ_ERROR;
86 }
87 
88 /**
89  * zfcp_fsf_req_free - free memory used by fsf request
90  * @req: pointer to struct zfcp_fsf_req
91  */
92 void zfcp_fsf_req_free(struct zfcp_fsf_req *req)
93 {
94 	if (likely(req->pool)) {
95 		if (likely(!zfcp_fsf_req_is_status_read_buffer(req)))
96 			mempool_free(req->qtcb, req->adapter->pool.qtcb_pool);
97 		mempool_free(req, req->pool);
98 		return;
99 	}
100 
101 	if (likely(!zfcp_fsf_req_is_status_read_buffer(req)))
102 		kmem_cache_free(zfcp_fsf_qtcb_cache, req->qtcb);
103 	kfree(req);
104 }
105 
106 static void zfcp_fsf_status_read_port_closed(struct zfcp_fsf_req *req)
107 {
108 	unsigned long flags;
109 	struct fsf_status_read_buffer *sr_buf = req->data;
110 	struct zfcp_adapter *adapter = req->adapter;
111 	struct zfcp_port *port;
112 	int d_id = ntoh24(sr_buf->d_id);
113 
114 	read_lock_irqsave(&adapter->port_list_lock, flags);
115 	list_for_each_entry(port, &adapter->port_list, list)
116 		if (port->d_id == d_id) {
117 			zfcp_erp_port_reopen(port, 0, "fssrpc1");
118 			break;
119 		}
120 	read_unlock_irqrestore(&adapter->port_list_lock, flags);
121 }
122 
123 static void zfcp_fsf_fc_host_link_down(struct zfcp_adapter *adapter)
124 {
125 	struct Scsi_Host *shost = adapter->scsi_host;
126 
127 	fc_host_port_id(shost) = 0;
128 	fc_host_fabric_name(shost) = 0;
129 	fc_host_speed(shost) = FC_PORTSPEED_UNKNOWN;
130 	fc_host_port_type(shost) = FC_PORTTYPE_UNKNOWN;
131 	adapter->hydra_version = 0;
132 	snprintf(fc_host_model(shost), FC_SYMBOLIC_NAME_SIZE, "0x%04x", 0);
133 	memset(fc_host_active_fc4s(shost), 0, FC_FC4_LIST_SIZE);
134 
135 	adapter->peer_wwpn = 0;
136 	adapter->peer_wwnn = 0;
137 	adapter->peer_d_id = 0;
138 }
139 
140 static void zfcp_fsf_link_down_info_eval(struct zfcp_fsf_req *req,
141 					 struct fsf_link_down_info *link_down)
142 {
143 	struct zfcp_adapter *adapter = req->adapter;
144 
145 	if (atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED)
146 		return;
147 
148 	atomic_or(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status);
149 
150 	zfcp_scsi_schedule_rports_block(adapter);
151 
152 	zfcp_fsf_fc_host_link_down(adapter);
153 
154 	if (!link_down)
155 		goto out;
156 
157 	switch (link_down->error_code) {
158 	case FSF_PSQ_LINK_NO_LIGHT:
159 		dev_warn(&req->adapter->ccw_device->dev,
160 			 "There is no light signal from the local "
161 			 "fibre channel cable\n");
162 		break;
163 	case FSF_PSQ_LINK_WRAP_PLUG:
164 		dev_warn(&req->adapter->ccw_device->dev,
165 			 "There is a wrap plug instead of a fibre "
166 			 "channel cable\n");
167 		break;
168 	case FSF_PSQ_LINK_NO_FCP:
169 		dev_warn(&req->adapter->ccw_device->dev,
170 			 "The adjacent fibre channel node does not "
171 			 "support FCP\n");
172 		break;
173 	case FSF_PSQ_LINK_FIRMWARE_UPDATE:
174 		dev_warn(&req->adapter->ccw_device->dev,
175 			 "The FCP device is suspended because of a "
176 			 "firmware update\n");
177 		break;
178 	case FSF_PSQ_LINK_INVALID_WWPN:
179 		dev_warn(&req->adapter->ccw_device->dev,
180 			 "The FCP device detected a WWPN that is "
181 			 "duplicate or not valid\n");
182 		break;
183 	case FSF_PSQ_LINK_NO_NPIV_SUPPORT:
184 		dev_warn(&req->adapter->ccw_device->dev,
185 			 "The fibre channel fabric does not support NPIV\n");
186 		break;
187 	case FSF_PSQ_LINK_NO_FCP_RESOURCES:
188 		dev_warn(&req->adapter->ccw_device->dev,
189 			 "The FCP adapter cannot support more NPIV ports\n");
190 		break;
191 	case FSF_PSQ_LINK_NO_FABRIC_RESOURCES:
192 		dev_warn(&req->adapter->ccw_device->dev,
193 			 "The adjacent switch cannot support "
194 			 "more NPIV ports\n");
195 		break;
196 	case FSF_PSQ_LINK_FABRIC_LOGIN_UNABLE:
197 		dev_warn(&req->adapter->ccw_device->dev,
198 			 "The FCP adapter could not log in to the "
199 			 "fibre channel fabric\n");
200 		break;
201 	case FSF_PSQ_LINK_WWPN_ASSIGNMENT_CORRUPTED:
202 		dev_warn(&req->adapter->ccw_device->dev,
203 			 "The WWPN assignment file on the FCP adapter "
204 			 "has been damaged\n");
205 		break;
206 	case FSF_PSQ_LINK_MODE_TABLE_CURRUPTED:
207 		dev_warn(&req->adapter->ccw_device->dev,
208 			 "The mode table on the FCP adapter "
209 			 "has been damaged\n");
210 		break;
211 	case FSF_PSQ_LINK_NO_WWPN_ASSIGNMENT:
212 		dev_warn(&req->adapter->ccw_device->dev,
213 			 "All NPIV ports on the FCP adapter have "
214 			 "been assigned\n");
215 		break;
216 	default:
217 		dev_warn(&req->adapter->ccw_device->dev,
218 			 "The link between the FCP adapter and "
219 			 "the FC fabric is down\n");
220 	}
221 out:
222 	zfcp_erp_set_adapter_status(adapter, ZFCP_STATUS_COMMON_ERP_FAILED);
223 }
224 
225 static void zfcp_fsf_status_read_link_down(struct zfcp_fsf_req *req)
226 {
227 	struct fsf_status_read_buffer *sr_buf = req->data;
228 	struct fsf_link_down_info *ldi =
229 		(struct fsf_link_down_info *) &sr_buf->payload;
230 
231 	switch (sr_buf->status_subtype) {
232 	case FSF_STATUS_READ_SUB_NO_PHYSICAL_LINK:
233 	case FSF_STATUS_READ_SUB_FDISC_FAILED:
234 		zfcp_fsf_link_down_info_eval(req, ldi);
235 		break;
236 	case FSF_STATUS_READ_SUB_FIRMWARE_UPDATE:
237 		zfcp_fsf_link_down_info_eval(req, NULL);
238 	}
239 }
240 
241 static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req)
242 {
243 	struct zfcp_adapter *adapter = req->adapter;
244 	struct fsf_status_read_buffer *sr_buf = req->data;
245 
246 	if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) {
247 		zfcp_dbf_hba_fsf_uss("fssrh_1", req);
248 		mempool_free(virt_to_page(sr_buf), adapter->pool.sr_data);
249 		zfcp_fsf_req_free(req);
250 		return;
251 	}
252 
253 	zfcp_dbf_hba_fsf_uss("fssrh_4", req);
254 
255 	switch (sr_buf->status_type) {
256 	case FSF_STATUS_READ_PORT_CLOSED:
257 		zfcp_fsf_status_read_port_closed(req);
258 		break;
259 	case FSF_STATUS_READ_INCOMING_ELS:
260 		zfcp_fc_incoming_els(req);
261 		break;
262 	case FSF_STATUS_READ_SENSE_DATA_AVAIL:
263 		break;
264 	case FSF_STATUS_READ_BIT_ERROR_THRESHOLD:
265 		zfcp_dbf_hba_bit_err("fssrh_3", req);
266 		if (ber_stop) {
267 			dev_warn(&adapter->ccw_device->dev,
268 				 "All paths over this FCP device are disused because of excessive bit errors\n");
269 			zfcp_erp_adapter_shutdown(adapter, 0, "fssrh_b");
270 		} else {
271 			dev_warn(&adapter->ccw_device->dev,
272 				 "The error threshold for checksum statistics has been exceeded\n");
273 		}
274 		break;
275 	case FSF_STATUS_READ_LINK_DOWN:
276 		zfcp_fsf_status_read_link_down(req);
277 		zfcp_fc_enqueue_event(adapter, FCH_EVT_LINKDOWN, 0);
278 		break;
279 	case FSF_STATUS_READ_LINK_UP:
280 		dev_info(&adapter->ccw_device->dev,
281 			 "The local link has been restored\n");
282 		/* All ports should be marked as ready to run again */
283 		zfcp_erp_set_adapter_status(adapter,
284 					    ZFCP_STATUS_COMMON_RUNNING);
285 		zfcp_erp_adapter_reopen(adapter,
286 					ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED |
287 					ZFCP_STATUS_COMMON_ERP_FAILED,
288 					"fssrh_2");
289 		zfcp_fc_enqueue_event(adapter, FCH_EVT_LINKUP, 0);
290 
291 		break;
292 	case FSF_STATUS_READ_NOTIFICATION_LOST:
293 		if (sr_buf->status_subtype & FSF_STATUS_READ_SUB_INCOMING_ELS)
294 			zfcp_fc_conditional_port_scan(adapter);
295 		break;
296 	case FSF_STATUS_READ_FEATURE_UPDATE_ALERT:
297 		adapter->adapter_features = sr_buf->payload.word[0];
298 		break;
299 	}
300 
301 	mempool_free(virt_to_page(sr_buf), adapter->pool.sr_data);
302 	zfcp_fsf_req_free(req);
303 
304 	atomic_inc(&adapter->stat_miss);
305 	queue_work(adapter->work_queue, &adapter->stat_work);
306 }
307 
308 static void zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *req)
309 {
310 	switch (req->qtcb->header.fsf_status_qual.word[0]) {
311 	case FSF_SQ_FCP_RSP_AVAILABLE:
312 	case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
313 	case FSF_SQ_NO_RETRY_POSSIBLE:
314 	case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
315 		return;
316 	case FSF_SQ_COMMAND_ABORTED:
317 		break;
318 	case FSF_SQ_NO_RECOM:
319 		dev_err(&req->adapter->ccw_device->dev,
320 			"The FCP adapter reported a problem "
321 			"that cannot be recovered\n");
322 		zfcp_qdio_siosl(req->adapter);
323 		zfcp_erp_adapter_shutdown(req->adapter, 0, "fsfsqe1");
324 		break;
325 	}
326 	/* all non-return stats set FSFREQ_ERROR*/
327 	req->status |= ZFCP_STATUS_FSFREQ_ERROR;
328 }
329 
330 static void zfcp_fsf_fsfstatus_eval(struct zfcp_fsf_req *req)
331 {
332 	if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR))
333 		return;
334 
335 	switch (req->qtcb->header.fsf_status) {
336 	case FSF_UNKNOWN_COMMAND:
337 		dev_err(&req->adapter->ccw_device->dev,
338 			"The FCP adapter does not recognize the command 0x%x\n",
339 			req->qtcb->header.fsf_command);
340 		zfcp_erp_adapter_shutdown(req->adapter, 0, "fsfse_1");
341 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
342 		break;
343 	case FSF_ADAPTER_STATUS_AVAILABLE:
344 		zfcp_fsf_fsfstatus_qual_eval(req);
345 		break;
346 	}
347 }
348 
349 static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req)
350 {
351 	struct zfcp_adapter *adapter = req->adapter;
352 	struct fsf_qtcb *qtcb = req->qtcb;
353 	union fsf_prot_status_qual *psq = &qtcb->prefix.prot_status_qual;
354 
355 	zfcp_dbf_hba_fsf_response(req);
356 
357 	if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) {
358 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
359 		return;
360 	}
361 
362 	switch (qtcb->prefix.prot_status) {
363 	case FSF_PROT_GOOD:
364 	case FSF_PROT_FSF_STATUS_PRESENTED:
365 		return;
366 	case FSF_PROT_QTCB_VERSION_ERROR:
367 		dev_err(&adapter->ccw_device->dev,
368 			"QTCB version 0x%x not supported by FCP adapter "
369 			"(0x%x to 0x%x)\n", FSF_QTCB_CURRENT_VERSION,
370 			psq->word[0], psq->word[1]);
371 		zfcp_erp_adapter_shutdown(adapter, 0, "fspse_1");
372 		break;
373 	case FSF_PROT_ERROR_STATE:
374 	case FSF_PROT_SEQ_NUMB_ERROR:
375 		zfcp_erp_adapter_reopen(adapter, 0, "fspse_2");
376 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
377 		break;
378 	case FSF_PROT_UNSUPP_QTCB_TYPE:
379 		dev_err(&adapter->ccw_device->dev,
380 			"The QTCB type is not supported by the FCP adapter\n");
381 		zfcp_erp_adapter_shutdown(adapter, 0, "fspse_3");
382 		break;
383 	case FSF_PROT_HOST_CONNECTION_INITIALIZING:
384 		atomic_or(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
385 				&adapter->status);
386 		break;
387 	case FSF_PROT_DUPLICATE_REQUEST_ID:
388 		dev_err(&adapter->ccw_device->dev,
389 			"0x%Lx is an ambiguous request identifier\n",
390 			(unsigned long long)qtcb->bottom.support.req_handle);
391 		zfcp_erp_adapter_shutdown(adapter, 0, "fspse_4");
392 		break;
393 	case FSF_PROT_LINK_DOWN:
394 		zfcp_fsf_link_down_info_eval(req, &psq->link_down_info);
395 		/* go through reopen to flush pending requests */
396 		zfcp_erp_adapter_reopen(adapter, 0, "fspse_6");
397 		break;
398 	case FSF_PROT_REEST_QUEUE:
399 		/* All ports should be marked as ready to run again */
400 		zfcp_erp_set_adapter_status(adapter,
401 					    ZFCP_STATUS_COMMON_RUNNING);
402 		zfcp_erp_adapter_reopen(adapter,
403 					ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED |
404 					ZFCP_STATUS_COMMON_ERP_FAILED,
405 					"fspse_8");
406 		break;
407 	default:
408 		dev_err(&adapter->ccw_device->dev,
409 			"0x%x is not a valid transfer protocol status\n",
410 			qtcb->prefix.prot_status);
411 		zfcp_qdio_siosl(adapter);
412 		zfcp_erp_adapter_shutdown(adapter, 0, "fspse_9");
413 	}
414 	req->status |= ZFCP_STATUS_FSFREQ_ERROR;
415 }
416 
417 /**
418  * zfcp_fsf_req_complete - process completion of a FSF request
419  * @req: The FSF request that has been completed.
420  *
421  * When a request has been completed either from the FCP adapter,
422  * or it has been dismissed due to a queue shutdown, this function
423  * is called to process the completion status and trigger further
424  * events related to the FSF request.
425  */
426 static void zfcp_fsf_req_complete(struct zfcp_fsf_req *req)
427 {
428 	if (unlikely(zfcp_fsf_req_is_status_read_buffer(req))) {
429 		zfcp_fsf_status_read_handler(req);
430 		return;
431 	}
432 
433 	del_timer(&req->timer);
434 	zfcp_fsf_protstatus_eval(req);
435 	zfcp_fsf_fsfstatus_eval(req);
436 	req->handler(req);
437 
438 	if (req->erp_action)
439 		zfcp_erp_notify(req->erp_action, 0);
440 
441 	if (likely(req->status & ZFCP_STATUS_FSFREQ_CLEANUP))
442 		zfcp_fsf_req_free(req);
443 	else
444 		complete(&req->completion);
445 }
446 
447 /**
448  * zfcp_fsf_req_dismiss_all - dismiss all fsf requests
449  * @adapter: pointer to struct zfcp_adapter
450  *
451  * Never ever call this without shutting down the adapter first.
452  * Otherwise the adapter would continue using and corrupting s390 storage.
453  * Included BUG_ON() call to ensure this is done.
454  * ERP is supposed to be the only user of this function.
455  */
456 void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *adapter)
457 {
458 	struct zfcp_fsf_req *req, *tmp;
459 	LIST_HEAD(remove_queue);
460 
461 	BUG_ON(atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_QDIOUP);
462 	zfcp_reqlist_move(adapter->req_list, &remove_queue);
463 
464 	list_for_each_entry_safe(req, tmp, &remove_queue, list) {
465 		list_del(&req->list);
466 		req->status |= ZFCP_STATUS_FSFREQ_DISMISSED;
467 		zfcp_fsf_req_complete(req);
468 	}
469 }
470 
471 #define ZFCP_FSF_PORTSPEED_1GBIT	(1 <<  0)
472 #define ZFCP_FSF_PORTSPEED_2GBIT	(1 <<  1)
473 #define ZFCP_FSF_PORTSPEED_4GBIT	(1 <<  2)
474 #define ZFCP_FSF_PORTSPEED_10GBIT	(1 <<  3)
475 #define ZFCP_FSF_PORTSPEED_8GBIT	(1 <<  4)
476 #define ZFCP_FSF_PORTSPEED_16GBIT	(1 <<  5)
477 #define ZFCP_FSF_PORTSPEED_32GBIT	(1 <<  6)
478 #define ZFCP_FSF_PORTSPEED_64GBIT	(1 <<  7)
479 #define ZFCP_FSF_PORTSPEED_128GBIT	(1 <<  8)
480 #define ZFCP_FSF_PORTSPEED_NOT_NEGOTIATED (1 << 15)
481 
482 static u32 zfcp_fsf_convert_portspeed(u32 fsf_speed)
483 {
484 	u32 fdmi_speed = 0;
485 	if (fsf_speed & ZFCP_FSF_PORTSPEED_1GBIT)
486 		fdmi_speed |= FC_PORTSPEED_1GBIT;
487 	if (fsf_speed & ZFCP_FSF_PORTSPEED_2GBIT)
488 		fdmi_speed |= FC_PORTSPEED_2GBIT;
489 	if (fsf_speed & ZFCP_FSF_PORTSPEED_4GBIT)
490 		fdmi_speed |= FC_PORTSPEED_4GBIT;
491 	if (fsf_speed & ZFCP_FSF_PORTSPEED_10GBIT)
492 		fdmi_speed |= FC_PORTSPEED_10GBIT;
493 	if (fsf_speed & ZFCP_FSF_PORTSPEED_8GBIT)
494 		fdmi_speed |= FC_PORTSPEED_8GBIT;
495 	if (fsf_speed & ZFCP_FSF_PORTSPEED_16GBIT)
496 		fdmi_speed |= FC_PORTSPEED_16GBIT;
497 	if (fsf_speed & ZFCP_FSF_PORTSPEED_32GBIT)
498 		fdmi_speed |= FC_PORTSPEED_32GBIT;
499 	if (fsf_speed & ZFCP_FSF_PORTSPEED_64GBIT)
500 		fdmi_speed |= FC_PORTSPEED_64GBIT;
501 	if (fsf_speed & ZFCP_FSF_PORTSPEED_128GBIT)
502 		fdmi_speed |= FC_PORTSPEED_128GBIT;
503 	if (fsf_speed & ZFCP_FSF_PORTSPEED_NOT_NEGOTIATED)
504 		fdmi_speed |= FC_PORTSPEED_NOT_NEGOTIATED;
505 	return fdmi_speed;
506 }
507 
508 static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
509 {
510 	struct fsf_qtcb_bottom_config *bottom = &req->qtcb->bottom.config;
511 	struct zfcp_adapter *adapter = req->adapter;
512 	struct Scsi_Host *shost = adapter->scsi_host;
513 	struct fc_els_flogi *nsp, *plogi;
514 
515 	/* adjust pointers for missing command code */
516 	nsp = (struct fc_els_flogi *) ((u8 *)&bottom->nport_serv_param
517 					- sizeof(u32));
518 	plogi = (struct fc_els_flogi *) ((u8 *)&bottom->plogi_payload
519 					- sizeof(u32));
520 
521 	if (req->data)
522 		memcpy(req->data, bottom, sizeof(*bottom));
523 
524 	snprintf(fc_host_manufacturer(shost), FC_SERIAL_NUMBER_SIZE, "%s",
525 		 "IBM");
526 	fc_host_port_name(shost) = be64_to_cpu(nsp->fl_wwpn);
527 	fc_host_node_name(shost) = be64_to_cpu(nsp->fl_wwnn);
528 	fc_host_supported_classes(shost) = FC_COS_CLASS2 | FC_COS_CLASS3;
529 
530 	adapter->timer_ticks = bottom->timer_interval & ZFCP_FSF_TIMER_INT_MASK;
531 	adapter->stat_read_buf_num = max(bottom->status_read_buf_num,
532 					 (u16)FSF_STATUS_READS_RECOM);
533 
534 	zfcp_scsi_set_prot(adapter);
535 
536 	/* no error return above here, otherwise must fix call chains */
537 	/* do not evaluate invalid fields */
538 	if (req->qtcb->header.fsf_status == FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE)
539 		return 0;
540 
541 	fc_host_port_id(shost) = ntoh24(bottom->s_id);
542 	fc_host_speed(shost) =
543 		zfcp_fsf_convert_portspeed(bottom->fc_link_speed);
544 
545 	adapter->hydra_version = bottom->adapter_type;
546 	snprintf(fc_host_model(shost), FC_SYMBOLIC_NAME_SIZE, "0x%04x",
547 		 bottom->adapter_type);
548 
549 	switch (bottom->fc_topology) {
550 	case FSF_TOPO_P2P:
551 		adapter->peer_d_id = ntoh24(bottom->peer_d_id);
552 		adapter->peer_wwpn = be64_to_cpu(plogi->fl_wwpn);
553 		adapter->peer_wwnn = be64_to_cpu(plogi->fl_wwnn);
554 		fc_host_port_type(shost) = FC_PORTTYPE_PTP;
555 		fc_host_fabric_name(shost) = 0;
556 		break;
557 	case FSF_TOPO_FABRIC:
558 		fc_host_fabric_name(shost) = be64_to_cpu(plogi->fl_wwnn);
559 		if (bottom->connection_features & FSF_FEATURE_NPIV_MODE)
560 			fc_host_port_type(shost) = FC_PORTTYPE_NPIV;
561 		else
562 			fc_host_port_type(shost) = FC_PORTTYPE_NPORT;
563 		break;
564 	case FSF_TOPO_AL:
565 		fc_host_port_type(shost) = FC_PORTTYPE_NLPORT;
566 		fc_host_fabric_name(shost) = 0;
567 		fallthrough;
568 	default:
569 		fc_host_fabric_name(shost) = 0;
570 		dev_err(&adapter->ccw_device->dev,
571 			"Unknown or unsupported arbitrated loop "
572 			"fibre channel topology detected\n");
573 		zfcp_erp_adapter_shutdown(adapter, 0, "fsece_1");
574 		return -EIO;
575 	}
576 
577 	return 0;
578 }
579 
580 static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req)
581 {
582 	struct zfcp_adapter *adapter = req->adapter;
583 	struct zfcp_diag_header *const diag_hdr =
584 		&adapter->diagnostics->config_data.header;
585 	struct fsf_qtcb *qtcb = req->qtcb;
586 	struct fsf_qtcb_bottom_config *bottom = &qtcb->bottom.config;
587 	struct Scsi_Host *shost = adapter->scsi_host;
588 
589 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
590 		return;
591 
592 	snprintf(fc_host_firmware_version(shost), FC_VERSION_STRING_SIZE,
593 		 "0x%08x", bottom->lic_version);
594 	adapter->fsf_lic_version = bottom->lic_version;
595 	adapter->adapter_features = bottom->adapter_features;
596 	adapter->connection_features = bottom->connection_features;
597 	adapter->peer_wwpn = 0;
598 	adapter->peer_wwnn = 0;
599 	adapter->peer_d_id = 0;
600 
601 	switch (qtcb->header.fsf_status) {
602 	case FSF_GOOD:
603 		/*
604 		 * usually we wait with an update till the cache is too old,
605 		 * but because we have the data available, update it anyway
606 		 */
607 		zfcp_diag_update_xdata(diag_hdr, bottom, false);
608 
609 		if (zfcp_fsf_exchange_config_evaluate(req))
610 			return;
611 
612 		if (bottom->max_qtcb_size < sizeof(struct fsf_qtcb)) {
613 			dev_err(&adapter->ccw_device->dev,
614 				"FCP adapter maximum QTCB size (%d bytes) "
615 				"is too small\n",
616 				bottom->max_qtcb_size);
617 			zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh1");
618 			return;
619 		}
620 		atomic_or(ZFCP_STATUS_ADAPTER_XCONFIG_OK,
621 				&adapter->status);
622 		break;
623 	case FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE:
624 		zfcp_diag_update_xdata(diag_hdr, bottom, true);
625 		req->status |= ZFCP_STATUS_FSFREQ_XDATAINCOMPLETE;
626 
627 		/* avoids adapter shutdown to be able to recognize
628 		 * events such as LINK UP */
629 		atomic_or(ZFCP_STATUS_ADAPTER_XCONFIG_OK,
630 				&adapter->status);
631 		zfcp_fsf_link_down_info_eval(req,
632 			&qtcb->header.fsf_status_qual.link_down_info);
633 		if (zfcp_fsf_exchange_config_evaluate(req))
634 			return;
635 		break;
636 	default:
637 		zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh3");
638 		return;
639 	}
640 
641 	if (adapter->adapter_features & FSF_FEATURE_HBAAPI_MANAGEMENT) {
642 		adapter->hardware_version = bottom->hardware_version;
643 		snprintf(fc_host_hardware_version(shost),
644 			 FC_VERSION_STRING_SIZE,
645 			 "0x%08x", bottom->hardware_version);
646 		memcpy(fc_host_serial_number(shost), bottom->serial_number,
647 		       min(FC_SERIAL_NUMBER_SIZE, 17));
648 		EBCASC(fc_host_serial_number(shost),
649 		       min(FC_SERIAL_NUMBER_SIZE, 17));
650 	}
651 
652 	if (FSF_QTCB_CURRENT_VERSION < bottom->low_qtcb_version) {
653 		dev_err(&adapter->ccw_device->dev,
654 			"The FCP adapter only supports newer "
655 			"control block versions\n");
656 		zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh4");
657 		return;
658 	}
659 	if (FSF_QTCB_CURRENT_VERSION > bottom->high_qtcb_version) {
660 		dev_err(&adapter->ccw_device->dev,
661 			"The FCP adapter only supports older "
662 			"control block versions\n");
663 		zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh5");
664 	}
665 }
666 
667 /*
668  * Mapping of FC Endpoint Security flag masks to mnemonics
669  *
670  * NOTE: Update macro ZFCP_FSF_MAX_FC_SECURITY_MNEMONIC_LENGTH when making any
671  *       changes.
672  */
673 static const struct {
674 	u32	mask;
675 	char	*name;
676 } zfcp_fsf_fc_security_mnemonics[] = {
677 	{ FSF_FC_SECURITY_AUTH,		"Authentication" },
678 	{ FSF_FC_SECURITY_ENC_FCSP2 |
679 	  FSF_FC_SECURITY_ENC_ERAS,	"Encryption" },
680 };
681 
682 /* maximum strlen(zfcp_fsf_fc_security_mnemonics[...].name) + 1 */
683 #define ZFCP_FSF_MAX_FC_SECURITY_MNEMONIC_LENGTH 15
684 
685 /**
686  * zfcp_fsf_scnprint_fc_security() - translate FC Endpoint Security flags into
687  *                                   mnemonics and place in a buffer
688  * @buf        : the buffer to place the translated FC Endpoint Security flag(s)
689  *               into
690  * @size       : the size of the buffer, including the trailing null space
691  * @fc_security: one or more FC Endpoint Security flags, or zero
692  * @fmt        : specifies whether a list or a single item is to be put into the
693  *               buffer
694  *
695  * The Fibre Channel (FC) Endpoint Security flags are translated into mnemonics.
696  * If the FC Endpoint Security flags are zero "none" is placed into the buffer.
697  *
698  * With ZFCP_FSF_PRINT_FMT_LIST the mnemonics are placed as a list separated by
699  * a comma followed by a space into the buffer. If one or more FC Endpoint
700  * Security flags cannot be translated into a mnemonic, as they are undefined
701  * in zfcp_fsf_fc_security_mnemonics, their bitwise ORed value in hexadecimal
702  * representation is placed into the buffer.
703  *
704  * With ZFCP_FSF_PRINT_FMT_SINGLEITEM only one single mnemonic is placed into
705  * the buffer. If the FC Endpoint Security flag cannot be translated, as it is
706  * undefined in zfcp_fsf_fc_security_mnemonics, its value in hexadecimal
707  * representation is placed into the buffer. If more than one FC Endpoint
708  * Security flag was specified, their value in hexadecimal representation is
709  * placed into the buffer. The macro ZFCP_FSF_MAX_FC_SECURITY_MNEMONIC_LENGTH
710  * can be used to define a buffer that is large enough to hold one mnemonic.
711  *
712  * Return: The number of characters written into buf not including the trailing
713  *         '\0'. If size is == 0 the function returns 0.
714  */
715 ssize_t zfcp_fsf_scnprint_fc_security(char *buf, size_t size, u32 fc_security,
716 				      enum zfcp_fsf_print_fmt fmt)
717 {
718 	const char *prefix = "";
719 	ssize_t len = 0;
720 	int i;
721 
722 	if (fc_security == 0)
723 		return scnprintf(buf, size, "none");
724 	if (fmt == ZFCP_FSF_PRINT_FMT_SINGLEITEM && hweight32(fc_security) != 1)
725 		return scnprintf(buf, size, "0x%08x", fc_security);
726 
727 	for (i = 0; i < ARRAY_SIZE(zfcp_fsf_fc_security_mnemonics); i++) {
728 		if (!(fc_security & zfcp_fsf_fc_security_mnemonics[i].mask))
729 			continue;
730 
731 		len += scnprintf(buf + len, size - len, "%s%s", prefix,
732 				 zfcp_fsf_fc_security_mnemonics[i].name);
733 		prefix = ", ";
734 		fc_security &= ~zfcp_fsf_fc_security_mnemonics[i].mask;
735 	}
736 
737 	if (fc_security != 0)
738 		len += scnprintf(buf + len, size - len, "%s0x%08x",
739 				 prefix, fc_security);
740 
741 	return len;
742 }
743 
744 static void zfcp_fsf_dbf_adapter_fc_security(struct zfcp_adapter *adapter,
745 					     struct zfcp_fsf_req *req)
746 {
747 	if (adapter->fc_security_algorithms ==
748 	    adapter->fc_security_algorithms_old) {
749 		/* no change, no trace */
750 		return;
751 	}
752 
753 	zfcp_dbf_hba_fsf_fces("fsfcesa", req, ZFCP_DBF_INVALID_WWPN,
754 			      adapter->fc_security_algorithms_old,
755 			      adapter->fc_security_algorithms);
756 
757 	adapter->fc_security_algorithms_old = adapter->fc_security_algorithms;
758 }
759 
760 static void zfcp_fsf_exchange_port_evaluate(struct zfcp_fsf_req *req)
761 {
762 	struct zfcp_adapter *adapter = req->adapter;
763 	struct fsf_qtcb_bottom_port *bottom = &req->qtcb->bottom.port;
764 	struct Scsi_Host *shost = adapter->scsi_host;
765 
766 	if (req->data)
767 		memcpy(req->data, bottom, sizeof(*bottom));
768 
769 	fc_host_permanent_port_name(shost) = bottom->wwpn;
770 	fc_host_maxframe_size(shost) = bottom->maximum_frame_size;
771 	fc_host_supported_speeds(shost) =
772 		zfcp_fsf_convert_portspeed(bottom->supported_speed);
773 	memcpy(fc_host_supported_fc4s(shost), bottom->supported_fc4_types,
774 	       FC_FC4_LIST_SIZE);
775 	memcpy(fc_host_active_fc4s(shost), bottom->active_fc4_types,
776 	       FC_FC4_LIST_SIZE);
777 	if (adapter->adapter_features & FSF_FEATURE_FC_SECURITY)
778 		adapter->fc_security_algorithms =
779 			bottom->fc_security_algorithms;
780 	else
781 		adapter->fc_security_algorithms = 0;
782 	zfcp_fsf_dbf_adapter_fc_security(adapter, req);
783 }
784 
785 static void zfcp_fsf_exchange_port_data_handler(struct zfcp_fsf_req *req)
786 {
787 	struct zfcp_diag_header *const diag_hdr =
788 		&req->adapter->diagnostics->port_data.header;
789 	struct fsf_qtcb *qtcb = req->qtcb;
790 	struct fsf_qtcb_bottom_port *bottom = &qtcb->bottom.port;
791 
792 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
793 		return;
794 
795 	switch (qtcb->header.fsf_status) {
796 	case FSF_GOOD:
797 		/*
798 		 * usually we wait with an update till the cache is too old,
799 		 * but because we have the data available, update it anyway
800 		 */
801 		zfcp_diag_update_xdata(diag_hdr, bottom, false);
802 
803 		zfcp_fsf_exchange_port_evaluate(req);
804 		break;
805 	case FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE:
806 		zfcp_diag_update_xdata(diag_hdr, bottom, true);
807 		req->status |= ZFCP_STATUS_FSFREQ_XDATAINCOMPLETE;
808 
809 		zfcp_fsf_link_down_info_eval(req,
810 			&qtcb->header.fsf_status_qual.link_down_info);
811 		zfcp_fsf_exchange_port_evaluate(req);
812 		break;
813 	}
814 }
815 
816 static struct zfcp_fsf_req *zfcp_fsf_alloc(mempool_t *pool)
817 {
818 	struct zfcp_fsf_req *req;
819 
820 	if (likely(pool))
821 		req = mempool_alloc(pool, GFP_ATOMIC);
822 	else
823 		req = kmalloc(sizeof(*req), GFP_ATOMIC);
824 
825 	if (unlikely(!req))
826 		return NULL;
827 
828 	memset(req, 0, sizeof(*req));
829 	req->pool = pool;
830 	return req;
831 }
832 
833 static struct fsf_qtcb *zfcp_fsf_qtcb_alloc(mempool_t *pool)
834 {
835 	struct fsf_qtcb *qtcb;
836 
837 	if (likely(pool))
838 		qtcb = mempool_alloc(pool, GFP_ATOMIC);
839 	else
840 		qtcb = kmem_cache_alloc(zfcp_fsf_qtcb_cache, GFP_ATOMIC);
841 
842 	if (unlikely(!qtcb))
843 		return NULL;
844 
845 	memset(qtcb, 0, sizeof(*qtcb));
846 	return qtcb;
847 }
848 
849 static struct zfcp_fsf_req *zfcp_fsf_req_create(struct zfcp_qdio *qdio,
850 						u32 fsf_cmd, u8 sbtype,
851 						mempool_t *pool)
852 {
853 	struct zfcp_adapter *adapter = qdio->adapter;
854 	struct zfcp_fsf_req *req = zfcp_fsf_alloc(pool);
855 
856 	if (unlikely(!req))
857 		return ERR_PTR(-ENOMEM);
858 
859 	if (adapter->req_no == 0)
860 		adapter->req_no++;
861 
862 	INIT_LIST_HEAD(&req->list);
863 	timer_setup(&req->timer, NULL, 0);
864 	init_completion(&req->completion);
865 
866 	req->adapter = adapter;
867 	req->req_id = adapter->req_no;
868 
869 	if (likely(fsf_cmd != FSF_QTCB_UNSOLICITED_STATUS)) {
870 		if (likely(pool))
871 			req->qtcb = zfcp_fsf_qtcb_alloc(
872 				adapter->pool.qtcb_pool);
873 		else
874 			req->qtcb = zfcp_fsf_qtcb_alloc(NULL);
875 
876 		if (unlikely(!req->qtcb)) {
877 			zfcp_fsf_req_free(req);
878 			return ERR_PTR(-ENOMEM);
879 		}
880 
881 		req->qtcb->prefix.req_seq_no = adapter->fsf_req_seq_no;
882 		req->qtcb->prefix.req_id = req->req_id;
883 		req->qtcb->prefix.ulp_info = 26;
884 		req->qtcb->prefix.qtcb_type = fsf_qtcb_type[fsf_cmd];
885 		req->qtcb->prefix.qtcb_version = FSF_QTCB_CURRENT_VERSION;
886 		req->qtcb->header.req_handle = req->req_id;
887 		req->qtcb->header.fsf_command = fsf_cmd;
888 	}
889 
890 	zfcp_qdio_req_init(adapter->qdio, &req->qdio_req, req->req_id, sbtype,
891 			   req->qtcb, sizeof(struct fsf_qtcb));
892 
893 	return req;
894 }
895 
896 static int zfcp_fsf_req_send(struct zfcp_fsf_req *req)
897 {
898 	const bool is_srb = zfcp_fsf_req_is_status_read_buffer(req);
899 	struct zfcp_adapter *adapter = req->adapter;
900 	struct zfcp_qdio *qdio = adapter->qdio;
901 	int req_id = req->req_id;
902 
903 	zfcp_reqlist_add(adapter->req_list, req);
904 
905 	req->qdio_req.qdio_outb_usage = atomic_read(&qdio->req_q_free);
906 	req->issued = get_tod_clock();
907 	if (zfcp_qdio_send(qdio, &req->qdio_req)) {
908 		del_timer(&req->timer);
909 		/* lookup request again, list might have changed */
910 		zfcp_reqlist_find_rm(adapter->req_list, req_id);
911 		zfcp_erp_adapter_reopen(adapter, 0, "fsrs__1");
912 		return -EIO;
913 	}
914 
915 	/*
916 	 * NOTE: DO NOT TOUCH ASYNC req PAST THIS POINT.
917 	 *	 ONLY TOUCH SYNC req AGAIN ON req->completion.
918 	 *
919 	 * The request might complete and be freed concurrently at any point
920 	 * now. This is not protected by the QDIO-lock (req_q_lock). So any
921 	 * uncontrolled access after this might result in an use-after-free bug.
922 	 * Only if the request doesn't have ZFCP_STATUS_FSFREQ_CLEANUP set, and
923 	 * when it is completed via req->completion, is it safe to use req
924 	 * again.
925 	 */
926 
927 	/* Don't increase for unsolicited status */
928 	if (!is_srb)
929 		adapter->fsf_req_seq_no++;
930 	adapter->req_no++;
931 
932 	return 0;
933 }
934 
935 /**
936  * zfcp_fsf_status_read - send status read request
937  * @qdio: pointer to struct zfcp_qdio
938  * Returns: 0 on success, ERROR otherwise
939  */
940 int zfcp_fsf_status_read(struct zfcp_qdio *qdio)
941 {
942 	struct zfcp_adapter *adapter = qdio->adapter;
943 	struct zfcp_fsf_req *req;
944 	struct fsf_status_read_buffer *sr_buf;
945 	struct page *page;
946 	int retval = -EIO;
947 
948 	spin_lock_irq(&qdio->req_q_lock);
949 	if (zfcp_qdio_sbal_get(qdio))
950 		goto out;
951 
952 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_UNSOLICITED_STATUS,
953 				  SBAL_SFLAGS0_TYPE_STATUS,
954 				  adapter->pool.status_read_req);
955 	if (IS_ERR(req)) {
956 		retval = PTR_ERR(req);
957 		goto out;
958 	}
959 
960 	page = mempool_alloc(adapter->pool.sr_data, GFP_ATOMIC);
961 	if (!page) {
962 		retval = -ENOMEM;
963 		goto failed_buf;
964 	}
965 	sr_buf = page_address(page);
966 	memset(sr_buf, 0, sizeof(*sr_buf));
967 	req->data = sr_buf;
968 
969 	zfcp_qdio_fill_next(qdio, &req->qdio_req, sr_buf, sizeof(*sr_buf));
970 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
971 
972 	retval = zfcp_fsf_req_send(req);
973 	if (retval)
974 		goto failed_req_send;
975 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
976 
977 	goto out;
978 
979 failed_req_send:
980 	req->data = NULL;
981 	mempool_free(virt_to_page(sr_buf), adapter->pool.sr_data);
982 failed_buf:
983 	zfcp_dbf_hba_fsf_uss("fssr__1", req);
984 	zfcp_fsf_req_free(req);
985 out:
986 	spin_unlock_irq(&qdio->req_q_lock);
987 	return retval;
988 }
989 
990 static void zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *req)
991 {
992 	struct scsi_device *sdev = req->data;
993 	struct zfcp_scsi_dev *zfcp_sdev;
994 	union fsf_status_qual *fsq = &req->qtcb->header.fsf_status_qual;
995 
996 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
997 		return;
998 
999 	zfcp_sdev = sdev_to_zfcp(sdev);
1000 
1001 	switch (req->qtcb->header.fsf_status) {
1002 	case FSF_PORT_HANDLE_NOT_VALID:
1003 		if (fsq->word[0] == fsq->word[1]) {
1004 			zfcp_erp_adapter_reopen(zfcp_sdev->port->adapter, 0,
1005 						"fsafch1");
1006 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1007 		}
1008 		break;
1009 	case FSF_LUN_HANDLE_NOT_VALID:
1010 		if (fsq->word[0] == fsq->word[1]) {
1011 			zfcp_erp_port_reopen(zfcp_sdev->port, 0, "fsafch2");
1012 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1013 		}
1014 		break;
1015 	case FSF_FCP_COMMAND_DOES_NOT_EXIST:
1016 		req->status |= ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED;
1017 		break;
1018 	case FSF_PORT_BOXED:
1019 		zfcp_erp_set_port_status(zfcp_sdev->port,
1020 					 ZFCP_STATUS_COMMON_ACCESS_BOXED);
1021 		zfcp_erp_port_reopen(zfcp_sdev->port,
1022 				     ZFCP_STATUS_COMMON_ERP_FAILED, "fsafch3");
1023 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1024 		break;
1025 	case FSF_LUN_BOXED:
1026 		zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ACCESS_BOXED);
1027 		zfcp_erp_lun_reopen(sdev, ZFCP_STATUS_COMMON_ERP_FAILED,
1028 				    "fsafch4");
1029 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1030                 break;
1031 	case FSF_ADAPTER_STATUS_AVAILABLE:
1032 		switch (fsq->word[0]) {
1033 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
1034 			zfcp_fc_test_link(zfcp_sdev->port);
1035 			fallthrough;
1036 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
1037 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1038 			break;
1039 		}
1040 		break;
1041 	case FSF_GOOD:
1042 		req->status |= ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED;
1043 		break;
1044 	}
1045 }
1046 
1047 /**
1048  * zfcp_fsf_abort_fcp_cmnd - abort running SCSI command
1049  * @scmnd: The SCSI command to abort
1050  * Returns: pointer to struct zfcp_fsf_req
1051  */
1052 
1053 struct zfcp_fsf_req *zfcp_fsf_abort_fcp_cmnd(struct scsi_cmnd *scmnd)
1054 {
1055 	struct zfcp_fsf_req *req = NULL;
1056 	struct scsi_device *sdev = scmnd->device;
1057 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1058 	struct zfcp_qdio *qdio = zfcp_sdev->port->adapter->qdio;
1059 	unsigned long old_req_id = (unsigned long) scmnd->host_scribble;
1060 
1061 	spin_lock_irq(&qdio->req_q_lock);
1062 	if (zfcp_qdio_sbal_get(qdio))
1063 		goto out;
1064 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_ABORT_FCP_CMND,
1065 				  SBAL_SFLAGS0_TYPE_READ,
1066 				  qdio->adapter->pool.scsi_abort);
1067 	if (IS_ERR(req)) {
1068 		req = NULL;
1069 		goto out;
1070 	}
1071 
1072 	if (unlikely(!(atomic_read(&zfcp_sdev->status) &
1073 		       ZFCP_STATUS_COMMON_UNBLOCKED)))
1074 		goto out_error_free;
1075 
1076 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1077 
1078 	req->data = sdev;
1079 	req->handler = zfcp_fsf_abort_fcp_command_handler;
1080 	req->qtcb->header.lun_handle = zfcp_sdev->lun_handle;
1081 	req->qtcb->header.port_handle = zfcp_sdev->port->handle;
1082 	req->qtcb->bottom.support.req_handle = (u64) old_req_id;
1083 
1084 	zfcp_fsf_start_timer(req, ZFCP_FSF_SCSI_ER_TIMEOUT);
1085 	if (!zfcp_fsf_req_send(req)) {
1086 		/* NOTE: DO NOT TOUCH req, UNTIL IT COMPLETES! */
1087 		goto out;
1088 	}
1089 
1090 out_error_free:
1091 	zfcp_fsf_req_free(req);
1092 	req = NULL;
1093 out:
1094 	spin_unlock_irq(&qdio->req_q_lock);
1095 	return req;
1096 }
1097 
1098 static void zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *req)
1099 {
1100 	struct zfcp_adapter *adapter = req->adapter;
1101 	struct zfcp_fsf_ct_els *ct = req->data;
1102 	struct fsf_qtcb_header *header = &req->qtcb->header;
1103 
1104 	ct->status = -EINVAL;
1105 
1106 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1107 		goto skip_fsfstatus;
1108 
1109 	switch (header->fsf_status) {
1110         case FSF_GOOD:
1111 		ct->status = 0;
1112 		zfcp_dbf_san_res("fsscth2", req);
1113 		break;
1114         case FSF_SERVICE_CLASS_NOT_SUPPORTED:
1115 		zfcp_fsf_class_not_supp(req);
1116 		break;
1117         case FSF_ADAPTER_STATUS_AVAILABLE:
1118                 switch (header->fsf_status_qual.word[0]){
1119                 case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
1120                 case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
1121 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1122 			break;
1123                 }
1124                 break;
1125         case FSF_PORT_BOXED:
1126 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1127 		break;
1128 	case FSF_PORT_HANDLE_NOT_VALID:
1129 		zfcp_erp_adapter_reopen(adapter, 0, "fsscth1");
1130 		fallthrough;
1131 	case FSF_GENERIC_COMMAND_REJECTED:
1132 	case FSF_PAYLOAD_SIZE_MISMATCH:
1133 	case FSF_REQUEST_SIZE_TOO_LARGE:
1134 	case FSF_RESPONSE_SIZE_TOO_LARGE:
1135 	case FSF_SBAL_MISMATCH:
1136 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1137 		break;
1138 	}
1139 
1140 skip_fsfstatus:
1141 	if (ct->handler)
1142 		ct->handler(ct->handler_data);
1143 }
1144 
1145 static void zfcp_fsf_setup_ct_els_unchained(struct zfcp_qdio *qdio,
1146 					    struct zfcp_qdio_req *q_req,
1147 					    struct scatterlist *sg_req,
1148 					    struct scatterlist *sg_resp)
1149 {
1150 	zfcp_qdio_fill_next(qdio, q_req, sg_virt(sg_req), sg_req->length);
1151 	zfcp_qdio_fill_next(qdio, q_req, sg_virt(sg_resp), sg_resp->length);
1152 	zfcp_qdio_set_sbale_last(qdio, q_req);
1153 }
1154 
1155 static int zfcp_fsf_setup_ct_els_sbals(struct zfcp_fsf_req *req,
1156 				       struct scatterlist *sg_req,
1157 				       struct scatterlist *sg_resp)
1158 {
1159 	struct zfcp_adapter *adapter = req->adapter;
1160 	struct zfcp_qdio *qdio = adapter->qdio;
1161 	struct fsf_qtcb *qtcb = req->qtcb;
1162 	u32 feat = adapter->adapter_features;
1163 
1164 	if (zfcp_adapter_multi_buffer_active(adapter)) {
1165 		if (zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, sg_req))
1166 			return -EIO;
1167 		qtcb->bottom.support.req_buf_length =
1168 			zfcp_qdio_real_bytes(sg_req);
1169 		if (zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, sg_resp))
1170 			return -EIO;
1171 		qtcb->bottom.support.resp_buf_length =
1172 			zfcp_qdio_real_bytes(sg_resp);
1173 
1174 		zfcp_qdio_set_data_div(qdio, &req->qdio_req, sg_nents(sg_req));
1175 		zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1176 		zfcp_qdio_set_scount(qdio, &req->qdio_req);
1177 		return 0;
1178 	}
1179 
1180 	/* use single, unchained SBAL if it can hold the request */
1181 	if (zfcp_qdio_sg_one_sbale(sg_req) && zfcp_qdio_sg_one_sbale(sg_resp)) {
1182 		zfcp_fsf_setup_ct_els_unchained(qdio, &req->qdio_req,
1183 						sg_req, sg_resp);
1184 		return 0;
1185 	}
1186 
1187 	if (!(feat & FSF_FEATURE_ELS_CT_CHAINED_SBALS))
1188 		return -EOPNOTSUPP;
1189 
1190 	if (zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, sg_req))
1191 		return -EIO;
1192 
1193 	qtcb->bottom.support.req_buf_length = zfcp_qdio_real_bytes(sg_req);
1194 
1195 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1196 	zfcp_qdio_skip_to_last_sbale(qdio, &req->qdio_req);
1197 
1198 	if (zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, sg_resp))
1199 		return -EIO;
1200 
1201 	qtcb->bottom.support.resp_buf_length = zfcp_qdio_real_bytes(sg_resp);
1202 
1203 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1204 
1205 	return 0;
1206 }
1207 
1208 static int zfcp_fsf_setup_ct_els(struct zfcp_fsf_req *req,
1209 				 struct scatterlist *sg_req,
1210 				 struct scatterlist *sg_resp,
1211 				 unsigned int timeout)
1212 {
1213 	int ret;
1214 
1215 	ret = zfcp_fsf_setup_ct_els_sbals(req, sg_req, sg_resp);
1216 	if (ret)
1217 		return ret;
1218 
1219 	/* common settings for ct/gs and els requests */
1220 	if (timeout > 255)
1221 		timeout = 255; /* max value accepted by hardware */
1222 	req->qtcb->bottom.support.service_class = FSF_CLASS_3;
1223 	req->qtcb->bottom.support.timeout = timeout;
1224 	zfcp_fsf_start_timer(req, (timeout + 10) * HZ);
1225 
1226 	return 0;
1227 }
1228 
1229 /**
1230  * zfcp_fsf_send_ct - initiate a Generic Service request (FC-GS)
1231  * @wka_port: pointer to zfcp WKA port to send CT/GS to
1232  * @ct: pointer to struct zfcp_send_ct with data for request
1233  * @pool: if non-null this mempool is used to allocate struct zfcp_fsf_req
1234  * @timeout: timeout that hardware should use, and a later software timeout
1235  */
1236 int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *wka_port,
1237 		     struct zfcp_fsf_ct_els *ct, mempool_t *pool,
1238 		     unsigned int timeout)
1239 {
1240 	struct zfcp_qdio *qdio = wka_port->adapter->qdio;
1241 	struct zfcp_fsf_req *req;
1242 	int ret = -EIO;
1243 
1244 	spin_lock_irq(&qdio->req_q_lock);
1245 	if (zfcp_qdio_sbal_get(qdio))
1246 		goto out;
1247 
1248 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_SEND_GENERIC,
1249 				  SBAL_SFLAGS0_TYPE_WRITE_READ, pool);
1250 
1251 	if (IS_ERR(req)) {
1252 		ret = PTR_ERR(req);
1253 		goto out;
1254 	}
1255 
1256 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1257 	ret = zfcp_fsf_setup_ct_els(req, ct->req, ct->resp, timeout);
1258 	if (ret)
1259 		goto failed_send;
1260 
1261 	req->handler = zfcp_fsf_send_ct_handler;
1262 	req->qtcb->header.port_handle = wka_port->handle;
1263 	ct->d_id = wka_port->d_id;
1264 	req->data = ct;
1265 
1266 	zfcp_dbf_san_req("fssct_1", req, wka_port->d_id);
1267 
1268 	ret = zfcp_fsf_req_send(req);
1269 	if (ret)
1270 		goto failed_send;
1271 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
1272 
1273 	goto out;
1274 
1275 failed_send:
1276 	zfcp_fsf_req_free(req);
1277 out:
1278 	spin_unlock_irq(&qdio->req_q_lock);
1279 	return ret;
1280 }
1281 
1282 static void zfcp_fsf_send_els_handler(struct zfcp_fsf_req *req)
1283 {
1284 	struct zfcp_fsf_ct_els *send_els = req->data;
1285 	struct fsf_qtcb_header *header = &req->qtcb->header;
1286 
1287 	send_els->status = -EINVAL;
1288 
1289 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1290 		goto skip_fsfstatus;
1291 
1292 	switch (header->fsf_status) {
1293 	case FSF_GOOD:
1294 		send_els->status = 0;
1295 		zfcp_dbf_san_res("fsselh1", req);
1296 		break;
1297 	case FSF_SERVICE_CLASS_NOT_SUPPORTED:
1298 		zfcp_fsf_class_not_supp(req);
1299 		break;
1300 	case FSF_ADAPTER_STATUS_AVAILABLE:
1301 		switch (header->fsf_status_qual.word[0]){
1302 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
1303 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
1304 		case FSF_SQ_RETRY_IF_POSSIBLE:
1305 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1306 			break;
1307 		}
1308 		break;
1309 	case FSF_ELS_COMMAND_REJECTED:
1310 	case FSF_PAYLOAD_SIZE_MISMATCH:
1311 	case FSF_REQUEST_SIZE_TOO_LARGE:
1312 	case FSF_RESPONSE_SIZE_TOO_LARGE:
1313 		break;
1314 	case FSF_SBAL_MISMATCH:
1315 		/* should never occur, avoided in zfcp_fsf_send_els */
1316 		fallthrough;
1317 	default:
1318 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1319 		break;
1320 	}
1321 skip_fsfstatus:
1322 	if (send_els->handler)
1323 		send_els->handler(send_els->handler_data);
1324 }
1325 
1326 /**
1327  * zfcp_fsf_send_els - initiate an ELS command (FC-FS)
1328  * @adapter: pointer to zfcp adapter
1329  * @d_id: N_Port_ID to send ELS to
1330  * @els: pointer to struct zfcp_send_els with data for the command
1331  * @timeout: timeout that hardware should use, and a later software timeout
1332  */
1333 int zfcp_fsf_send_els(struct zfcp_adapter *adapter, u32 d_id,
1334 		      struct zfcp_fsf_ct_els *els, unsigned int timeout)
1335 {
1336 	struct zfcp_fsf_req *req;
1337 	struct zfcp_qdio *qdio = adapter->qdio;
1338 	int ret = -EIO;
1339 
1340 	spin_lock_irq(&qdio->req_q_lock);
1341 	if (zfcp_qdio_sbal_get(qdio))
1342 		goto out;
1343 
1344 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_SEND_ELS,
1345 				  SBAL_SFLAGS0_TYPE_WRITE_READ, NULL);
1346 
1347 	if (IS_ERR(req)) {
1348 		ret = PTR_ERR(req);
1349 		goto out;
1350 	}
1351 
1352 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1353 
1354 	if (!zfcp_adapter_multi_buffer_active(adapter))
1355 		zfcp_qdio_sbal_limit(qdio, &req->qdio_req, 2);
1356 
1357 	ret = zfcp_fsf_setup_ct_els(req, els->req, els->resp, timeout);
1358 
1359 	if (ret)
1360 		goto failed_send;
1361 
1362 	hton24(req->qtcb->bottom.support.d_id, d_id);
1363 	req->handler = zfcp_fsf_send_els_handler;
1364 	els->d_id = d_id;
1365 	req->data = els;
1366 
1367 	zfcp_dbf_san_req("fssels1", req, d_id);
1368 
1369 	ret = zfcp_fsf_req_send(req);
1370 	if (ret)
1371 		goto failed_send;
1372 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
1373 
1374 	goto out;
1375 
1376 failed_send:
1377 	zfcp_fsf_req_free(req);
1378 out:
1379 	spin_unlock_irq(&qdio->req_q_lock);
1380 	return ret;
1381 }
1382 
1383 int zfcp_fsf_exchange_config_data(struct zfcp_erp_action *erp_action)
1384 {
1385 	struct zfcp_fsf_req *req;
1386 	struct zfcp_qdio *qdio = erp_action->adapter->qdio;
1387 	int retval = -EIO;
1388 
1389 	spin_lock_irq(&qdio->req_q_lock);
1390 	if (zfcp_qdio_sbal_get(qdio))
1391 		goto out;
1392 
1393 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_CONFIG_DATA,
1394 				  SBAL_SFLAGS0_TYPE_READ,
1395 				  qdio->adapter->pool.erp_req);
1396 
1397 	if (IS_ERR(req)) {
1398 		retval = PTR_ERR(req);
1399 		goto out;
1400 	}
1401 
1402 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1403 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1404 
1405 	req->qtcb->bottom.config.feature_selection =
1406 			FSF_FEATURE_NOTIFICATION_LOST |
1407 			FSF_FEATURE_UPDATE_ALERT |
1408 			FSF_FEATURE_REQUEST_SFP_DATA |
1409 			FSF_FEATURE_FC_SECURITY;
1410 	req->erp_action = erp_action;
1411 	req->handler = zfcp_fsf_exchange_config_data_handler;
1412 	erp_action->fsf_req_id = req->req_id;
1413 
1414 	zfcp_fsf_start_erp_timer(req);
1415 	retval = zfcp_fsf_req_send(req);
1416 	if (retval) {
1417 		zfcp_fsf_req_free(req);
1418 		erp_action->fsf_req_id = 0;
1419 	}
1420 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
1421 out:
1422 	spin_unlock_irq(&qdio->req_q_lock);
1423 	return retval;
1424 }
1425 
1426 
1427 /**
1428  * zfcp_fsf_exchange_config_data_sync() - Request information about FCP channel.
1429  * @qdio: pointer to the QDIO-Queue to use for sending the command.
1430  * @data: pointer to the QTCB-Bottom for storing the result of the command,
1431  *	  might be %NULL.
1432  *
1433  * Returns:
1434  * * 0		- Exchange Config Data was successful, @data is complete
1435  * * -EIO	- Exchange Config Data was not successful, @data is invalid
1436  * * -EAGAIN	- @data contains incomplete data
1437  * * -ENOMEM	- Some memory allocation failed along the way
1438  */
1439 int zfcp_fsf_exchange_config_data_sync(struct zfcp_qdio *qdio,
1440 				       struct fsf_qtcb_bottom_config *data)
1441 {
1442 	struct zfcp_fsf_req *req = NULL;
1443 	int retval = -EIO;
1444 
1445 	spin_lock_irq(&qdio->req_q_lock);
1446 	if (zfcp_qdio_sbal_get(qdio))
1447 		goto out_unlock;
1448 
1449 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_CONFIG_DATA,
1450 				  SBAL_SFLAGS0_TYPE_READ, NULL);
1451 
1452 	if (IS_ERR(req)) {
1453 		retval = PTR_ERR(req);
1454 		goto out_unlock;
1455 	}
1456 
1457 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1458 	req->handler = zfcp_fsf_exchange_config_data_handler;
1459 
1460 	req->qtcb->bottom.config.feature_selection =
1461 			FSF_FEATURE_NOTIFICATION_LOST |
1462 			FSF_FEATURE_UPDATE_ALERT |
1463 			FSF_FEATURE_REQUEST_SFP_DATA |
1464 			FSF_FEATURE_FC_SECURITY;
1465 
1466 	if (data)
1467 		req->data = data;
1468 
1469 	zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1470 	retval = zfcp_fsf_req_send(req);
1471 	spin_unlock_irq(&qdio->req_q_lock);
1472 
1473 	if (!retval) {
1474 		/* NOTE: ONLY TOUCH SYNC req AGAIN ON req->completion. */
1475 		wait_for_completion(&req->completion);
1476 
1477 		if (req->status &
1478 		    (ZFCP_STATUS_FSFREQ_ERROR | ZFCP_STATUS_FSFREQ_DISMISSED))
1479 			retval = -EIO;
1480 		else if (req->status & ZFCP_STATUS_FSFREQ_XDATAINCOMPLETE)
1481 			retval = -EAGAIN;
1482 	}
1483 
1484 	zfcp_fsf_req_free(req);
1485 	return retval;
1486 
1487 out_unlock:
1488 	spin_unlock_irq(&qdio->req_q_lock);
1489 	return retval;
1490 }
1491 
1492 /**
1493  * zfcp_fsf_exchange_port_data - request information about local port
1494  * @erp_action: ERP action for the adapter for which port data is requested
1495  * Returns: 0 on success, error otherwise
1496  */
1497 int zfcp_fsf_exchange_port_data(struct zfcp_erp_action *erp_action)
1498 {
1499 	struct zfcp_qdio *qdio = erp_action->adapter->qdio;
1500 	struct zfcp_fsf_req *req;
1501 	int retval = -EIO;
1502 
1503 	if (!(qdio->adapter->adapter_features & FSF_FEATURE_HBAAPI_MANAGEMENT))
1504 		return -EOPNOTSUPP;
1505 
1506 	spin_lock_irq(&qdio->req_q_lock);
1507 	if (zfcp_qdio_sbal_get(qdio))
1508 		goto out;
1509 
1510 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_PORT_DATA,
1511 				  SBAL_SFLAGS0_TYPE_READ,
1512 				  qdio->adapter->pool.erp_req);
1513 
1514 	if (IS_ERR(req)) {
1515 		retval = PTR_ERR(req);
1516 		goto out;
1517 	}
1518 
1519 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1520 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1521 
1522 	req->handler = zfcp_fsf_exchange_port_data_handler;
1523 	req->erp_action = erp_action;
1524 	erp_action->fsf_req_id = req->req_id;
1525 
1526 	zfcp_fsf_start_erp_timer(req);
1527 	retval = zfcp_fsf_req_send(req);
1528 	if (retval) {
1529 		zfcp_fsf_req_free(req);
1530 		erp_action->fsf_req_id = 0;
1531 	}
1532 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
1533 out:
1534 	spin_unlock_irq(&qdio->req_q_lock);
1535 	return retval;
1536 }
1537 
1538 /**
1539  * zfcp_fsf_exchange_port_data_sync() - Request information about local port.
1540  * @qdio: pointer to the QDIO-Queue to use for sending the command.
1541  * @data: pointer to the QTCB-Bottom for storing the result of the command,
1542  *	  might be %NULL.
1543  *
1544  * Returns:
1545  * * 0		- Exchange Port Data was successful, @data is complete
1546  * * -EIO	- Exchange Port Data was not successful, @data is invalid
1547  * * -EAGAIN	- @data contains incomplete data
1548  * * -ENOMEM	- Some memory allocation failed along the way
1549  * * -EOPNOTSUPP	- This operation is not supported
1550  */
1551 int zfcp_fsf_exchange_port_data_sync(struct zfcp_qdio *qdio,
1552 				     struct fsf_qtcb_bottom_port *data)
1553 {
1554 	struct zfcp_fsf_req *req = NULL;
1555 	int retval = -EIO;
1556 
1557 	if (!(qdio->adapter->adapter_features & FSF_FEATURE_HBAAPI_MANAGEMENT))
1558 		return -EOPNOTSUPP;
1559 
1560 	spin_lock_irq(&qdio->req_q_lock);
1561 	if (zfcp_qdio_sbal_get(qdio))
1562 		goto out_unlock;
1563 
1564 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_PORT_DATA,
1565 				  SBAL_SFLAGS0_TYPE_READ, NULL);
1566 
1567 	if (IS_ERR(req)) {
1568 		retval = PTR_ERR(req);
1569 		goto out_unlock;
1570 	}
1571 
1572 	if (data)
1573 		req->data = data;
1574 
1575 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1576 
1577 	req->handler = zfcp_fsf_exchange_port_data_handler;
1578 	zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1579 	retval = zfcp_fsf_req_send(req);
1580 	spin_unlock_irq(&qdio->req_q_lock);
1581 
1582 	if (!retval) {
1583 		/* NOTE: ONLY TOUCH SYNC req AGAIN ON req->completion. */
1584 		wait_for_completion(&req->completion);
1585 
1586 		if (req->status &
1587 		    (ZFCP_STATUS_FSFREQ_ERROR | ZFCP_STATUS_FSFREQ_DISMISSED))
1588 			retval = -EIO;
1589 		else if (req->status & ZFCP_STATUS_FSFREQ_XDATAINCOMPLETE)
1590 			retval = -EAGAIN;
1591 	}
1592 
1593 	zfcp_fsf_req_free(req);
1594 	return retval;
1595 
1596 out_unlock:
1597 	spin_unlock_irq(&qdio->req_q_lock);
1598 	return retval;
1599 }
1600 
1601 static void zfcp_fsf_log_port_fc_security(struct zfcp_port *port,
1602 					  struct zfcp_fsf_req *req)
1603 {
1604 	char mnemonic_old[ZFCP_FSF_MAX_FC_SECURITY_MNEMONIC_LENGTH];
1605 	char mnemonic_new[ZFCP_FSF_MAX_FC_SECURITY_MNEMONIC_LENGTH];
1606 
1607 	if (port->connection_info == port->connection_info_old) {
1608 		/* no change, no log nor trace */
1609 		return;
1610 	}
1611 
1612 	zfcp_dbf_hba_fsf_fces("fsfcesp", req, port->wwpn,
1613 			      port->connection_info_old,
1614 			      port->connection_info);
1615 
1616 	zfcp_fsf_scnprint_fc_security(mnemonic_old, sizeof(mnemonic_old),
1617 				      port->connection_info_old,
1618 				      ZFCP_FSF_PRINT_FMT_SINGLEITEM);
1619 	zfcp_fsf_scnprint_fc_security(mnemonic_new, sizeof(mnemonic_new),
1620 				      port->connection_info,
1621 				      ZFCP_FSF_PRINT_FMT_SINGLEITEM);
1622 
1623 	if (strncmp(mnemonic_old, mnemonic_new,
1624 		    ZFCP_FSF_MAX_FC_SECURITY_MNEMONIC_LENGTH) == 0) {
1625 		/* no change in string representation, no log */
1626 		goto out;
1627 	}
1628 
1629 	if (port->connection_info_old == 0) {
1630 		/* activation */
1631 		dev_info(&port->adapter->ccw_device->dev,
1632 			 "FC Endpoint Security of connection to remote port 0x%16llx enabled: %s\n",
1633 			 port->wwpn, mnemonic_new);
1634 	} else if (port->connection_info == 0) {
1635 		/* deactivation */
1636 		dev_warn(&port->adapter->ccw_device->dev,
1637 			 "FC Endpoint Security of connection to remote port 0x%16llx disabled: was %s\n",
1638 			 port->wwpn, mnemonic_old);
1639 	} else {
1640 		/* change */
1641 		dev_warn(&port->adapter->ccw_device->dev,
1642 			 "FC Endpoint Security of connection to remote port 0x%16llx changed: from %s to %s\n",
1643 			 port->wwpn, mnemonic_old, mnemonic_new);
1644 	}
1645 
1646 out:
1647 	port->connection_info_old = port->connection_info;
1648 }
1649 
1650 static void zfcp_fsf_log_security_error(const struct device *dev, u32 fsf_sqw0,
1651 					u64 wwpn)
1652 {
1653 	switch (fsf_sqw0) {
1654 
1655 	/*
1656 	 * Open Port command error codes
1657 	 */
1658 
1659 	case FSF_SQ_SECURITY_REQUIRED:
1660 		dev_warn_ratelimited(dev,
1661 				     "FC Endpoint Security error: FC security is required but not supported or configured on remote port 0x%016llx\n",
1662 				     wwpn);
1663 		break;
1664 	case FSF_SQ_SECURITY_TIMEOUT:
1665 		dev_warn_ratelimited(dev,
1666 				     "FC Endpoint Security error: a timeout prevented opening remote port 0x%016llx\n",
1667 				     wwpn);
1668 		break;
1669 	case FSF_SQ_SECURITY_KM_UNAVAILABLE:
1670 		dev_warn_ratelimited(dev,
1671 				     "FC Endpoint Security error: opening remote port 0x%016llx failed because local and external key manager cannot communicate\n",
1672 				     wwpn);
1673 		break;
1674 	case FSF_SQ_SECURITY_RKM_UNAVAILABLE:
1675 		dev_warn_ratelimited(dev,
1676 				     "FC Endpoint Security error: opening remote port 0x%016llx failed because it cannot communicate with the external key manager\n",
1677 				     wwpn);
1678 		break;
1679 	case FSF_SQ_SECURITY_AUTH_FAILURE:
1680 		dev_warn_ratelimited(dev,
1681 				     "FC Endpoint Security error: the device could not verify the identity of remote port 0x%016llx\n",
1682 				     wwpn);
1683 		break;
1684 
1685 	/*
1686 	 * Send FCP command error codes
1687 	 */
1688 
1689 	case FSF_SQ_SECURITY_ENC_FAILURE:
1690 		dev_warn_ratelimited(dev,
1691 				     "FC Endpoint Security error: FC connection to remote port 0x%016llx closed because encryption broke down\n",
1692 				     wwpn);
1693 		break;
1694 
1695 	/*
1696 	 * Unknown error codes
1697 	 */
1698 
1699 	default:
1700 		dev_warn_ratelimited(dev,
1701 				     "FC Endpoint Security error: the device issued an unknown error code 0x%08x related to the FC connection to remote port 0x%016llx\n",
1702 				     fsf_sqw0, wwpn);
1703 	}
1704 }
1705 
1706 static void zfcp_fsf_open_port_handler(struct zfcp_fsf_req *req)
1707 {
1708 	struct zfcp_adapter *adapter = req->adapter;
1709 	struct zfcp_port *port = req->data;
1710 	struct fsf_qtcb_header *header = &req->qtcb->header;
1711 	struct fsf_qtcb_bottom_support *bottom = &req->qtcb->bottom.support;
1712 	struct fc_els_flogi *plogi;
1713 
1714 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1715 		goto out;
1716 
1717 	switch (header->fsf_status) {
1718 	case FSF_PORT_ALREADY_OPEN:
1719 		break;
1720 	case FSF_MAXIMUM_NUMBER_OF_PORTS_EXCEEDED:
1721 		dev_warn(&adapter->ccw_device->dev,
1722 			 "Not enough FCP adapter resources to open "
1723 			 "remote port 0x%016Lx\n",
1724 			 (unsigned long long)port->wwpn);
1725 		zfcp_erp_set_port_status(port,
1726 					 ZFCP_STATUS_COMMON_ERP_FAILED);
1727 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1728 		break;
1729 	case FSF_SECURITY_ERROR:
1730 		zfcp_fsf_log_security_error(&req->adapter->ccw_device->dev,
1731 					    header->fsf_status_qual.word[0],
1732 					    port->wwpn);
1733 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1734 		break;
1735 	case FSF_ADAPTER_STATUS_AVAILABLE:
1736 		switch (header->fsf_status_qual.word[0]) {
1737 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
1738 			/* no zfcp_fc_test_link() with failed open port */
1739 			fallthrough;
1740 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
1741 		case FSF_SQ_NO_RETRY_POSSIBLE:
1742 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1743 			break;
1744 		}
1745 		break;
1746 	case FSF_GOOD:
1747 		port->handle = header->port_handle;
1748 		if (adapter->adapter_features & FSF_FEATURE_FC_SECURITY)
1749 			port->connection_info = bottom->connection_info;
1750 		else
1751 			port->connection_info = 0;
1752 		zfcp_fsf_log_port_fc_security(port, req);
1753 		atomic_or(ZFCP_STATUS_COMMON_OPEN |
1754 				ZFCP_STATUS_PORT_PHYS_OPEN, &port->status);
1755 		atomic_andnot(ZFCP_STATUS_COMMON_ACCESS_BOXED,
1756 		                  &port->status);
1757 		/* check whether D_ID has changed during open */
1758 		/*
1759 		 * FIXME: This check is not airtight, as the FCP channel does
1760 		 * not monitor closures of target port connections caused on
1761 		 * the remote side. Thus, they might miss out on invalidating
1762 		 * locally cached WWPNs (and other N_Port parameters) of gone
1763 		 * target ports. So, our heroic attempt to make things safe
1764 		 * could be undermined by 'open port' response data tagged with
1765 		 * obsolete WWPNs. Another reason to monitor potential
1766 		 * connection closures ourself at least (by interpreting
1767 		 * incoming ELS' and unsolicited status). It just crosses my
1768 		 * mind that one should be able to cross-check by means of
1769 		 * another GID_PN straight after a port has been opened.
1770 		 * Alternately, an ADISC/PDISC ELS should suffice, as well.
1771 		 */
1772 		plogi = (struct fc_els_flogi *) bottom->els;
1773 		if (bottom->els1_length >= FSF_PLOGI_MIN_LEN)
1774 			zfcp_fc_plogi_evaluate(port, plogi);
1775 		break;
1776 	case FSF_UNKNOWN_OP_SUBTYPE:
1777 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1778 		break;
1779 	}
1780 
1781 out:
1782 	put_device(&port->dev);
1783 }
1784 
1785 /**
1786  * zfcp_fsf_open_port - create and send open port request
1787  * @erp_action: pointer to struct zfcp_erp_action
1788  * Returns: 0 on success, error otherwise
1789  */
1790 int zfcp_fsf_open_port(struct zfcp_erp_action *erp_action)
1791 {
1792 	struct zfcp_qdio *qdio = erp_action->adapter->qdio;
1793 	struct zfcp_port *port = erp_action->port;
1794 	struct zfcp_fsf_req *req;
1795 	int retval = -EIO;
1796 
1797 	spin_lock_irq(&qdio->req_q_lock);
1798 	if (zfcp_qdio_sbal_get(qdio))
1799 		goto out;
1800 
1801 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_PORT_WITH_DID,
1802 				  SBAL_SFLAGS0_TYPE_READ,
1803 				  qdio->adapter->pool.erp_req);
1804 
1805 	if (IS_ERR(req)) {
1806 		retval = PTR_ERR(req);
1807 		goto out;
1808 	}
1809 
1810 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1811 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1812 
1813 	req->handler = zfcp_fsf_open_port_handler;
1814 	hton24(req->qtcb->bottom.support.d_id, port->d_id);
1815 	req->data = port;
1816 	req->erp_action = erp_action;
1817 	erp_action->fsf_req_id = req->req_id;
1818 	get_device(&port->dev);
1819 
1820 	zfcp_fsf_start_erp_timer(req);
1821 	retval = zfcp_fsf_req_send(req);
1822 	if (retval) {
1823 		zfcp_fsf_req_free(req);
1824 		erp_action->fsf_req_id = 0;
1825 		put_device(&port->dev);
1826 	}
1827 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
1828 out:
1829 	spin_unlock_irq(&qdio->req_q_lock);
1830 	return retval;
1831 }
1832 
1833 static void zfcp_fsf_close_port_handler(struct zfcp_fsf_req *req)
1834 {
1835 	struct zfcp_port *port = req->data;
1836 
1837 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
1838 		return;
1839 
1840 	switch (req->qtcb->header.fsf_status) {
1841 	case FSF_PORT_HANDLE_NOT_VALID:
1842 		zfcp_erp_adapter_reopen(port->adapter, 0, "fscph_1");
1843 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1844 		break;
1845 	case FSF_ADAPTER_STATUS_AVAILABLE:
1846 		break;
1847 	case FSF_GOOD:
1848 		zfcp_erp_clear_port_status(port, ZFCP_STATUS_COMMON_OPEN);
1849 		break;
1850 	}
1851 }
1852 
1853 /**
1854  * zfcp_fsf_close_port - create and send close port request
1855  * @erp_action: pointer to struct zfcp_erp_action
1856  * Returns: 0 on success, error otherwise
1857  */
1858 int zfcp_fsf_close_port(struct zfcp_erp_action *erp_action)
1859 {
1860 	struct zfcp_qdio *qdio = erp_action->adapter->qdio;
1861 	struct zfcp_fsf_req *req;
1862 	int retval = -EIO;
1863 
1864 	spin_lock_irq(&qdio->req_q_lock);
1865 	if (zfcp_qdio_sbal_get(qdio))
1866 		goto out;
1867 
1868 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PORT,
1869 				  SBAL_SFLAGS0_TYPE_READ,
1870 				  qdio->adapter->pool.erp_req);
1871 
1872 	if (IS_ERR(req)) {
1873 		retval = PTR_ERR(req);
1874 		goto out;
1875 	}
1876 
1877 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1878 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1879 
1880 	req->handler = zfcp_fsf_close_port_handler;
1881 	req->data = erp_action->port;
1882 	req->erp_action = erp_action;
1883 	req->qtcb->header.port_handle = erp_action->port->handle;
1884 	erp_action->fsf_req_id = req->req_id;
1885 
1886 	zfcp_fsf_start_erp_timer(req);
1887 	retval = zfcp_fsf_req_send(req);
1888 	if (retval) {
1889 		zfcp_fsf_req_free(req);
1890 		erp_action->fsf_req_id = 0;
1891 	}
1892 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
1893 out:
1894 	spin_unlock_irq(&qdio->req_q_lock);
1895 	return retval;
1896 }
1897 
1898 static void zfcp_fsf_open_wka_port_handler(struct zfcp_fsf_req *req)
1899 {
1900 	struct zfcp_fc_wka_port *wka_port = req->data;
1901 	struct fsf_qtcb_header *header = &req->qtcb->header;
1902 
1903 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR) {
1904 		wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE;
1905 		goto out;
1906 	}
1907 
1908 	switch (header->fsf_status) {
1909 	case FSF_MAXIMUM_NUMBER_OF_PORTS_EXCEEDED:
1910 		dev_warn(&req->adapter->ccw_device->dev,
1911 			 "Opening WKA port 0x%x failed\n", wka_port->d_id);
1912 		fallthrough;
1913 	case FSF_ADAPTER_STATUS_AVAILABLE:
1914 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1915 		wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE;
1916 		break;
1917 	case FSF_GOOD:
1918 		wka_port->handle = header->port_handle;
1919 		fallthrough;
1920 	case FSF_PORT_ALREADY_OPEN:
1921 		wka_port->status = ZFCP_FC_WKA_PORT_ONLINE;
1922 	}
1923 out:
1924 	wake_up(&wka_port->completion_wq);
1925 }
1926 
1927 /**
1928  * zfcp_fsf_open_wka_port - create and send open wka-port request
1929  * @wka_port: pointer to struct zfcp_fc_wka_port
1930  * Returns: 0 on success, error otherwise
1931  */
1932 int zfcp_fsf_open_wka_port(struct zfcp_fc_wka_port *wka_port)
1933 {
1934 	struct zfcp_qdio *qdio = wka_port->adapter->qdio;
1935 	struct zfcp_fsf_req *req;
1936 	unsigned long req_id = 0;
1937 	int retval = -EIO;
1938 
1939 	spin_lock_irq(&qdio->req_q_lock);
1940 	if (zfcp_qdio_sbal_get(qdio))
1941 		goto out;
1942 
1943 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_PORT_WITH_DID,
1944 				  SBAL_SFLAGS0_TYPE_READ,
1945 				  qdio->adapter->pool.erp_req);
1946 
1947 	if (IS_ERR(req)) {
1948 		retval = PTR_ERR(req);
1949 		goto out;
1950 	}
1951 
1952 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
1953 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
1954 
1955 	req->handler = zfcp_fsf_open_wka_port_handler;
1956 	hton24(req->qtcb->bottom.support.d_id, wka_port->d_id);
1957 	req->data = wka_port;
1958 
1959 	req_id = req->req_id;
1960 
1961 	zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1962 	retval = zfcp_fsf_req_send(req);
1963 	if (retval)
1964 		zfcp_fsf_req_free(req);
1965 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
1966 out:
1967 	spin_unlock_irq(&qdio->req_q_lock);
1968 	if (!retval)
1969 		zfcp_dbf_rec_run_wka("fsowp_1", wka_port, req_id);
1970 	return retval;
1971 }
1972 
1973 static void zfcp_fsf_close_wka_port_handler(struct zfcp_fsf_req *req)
1974 {
1975 	struct zfcp_fc_wka_port *wka_port = req->data;
1976 
1977 	if (req->qtcb->header.fsf_status == FSF_PORT_HANDLE_NOT_VALID) {
1978 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
1979 		zfcp_erp_adapter_reopen(wka_port->adapter, 0, "fscwph1");
1980 	}
1981 
1982 	wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE;
1983 	wake_up(&wka_port->completion_wq);
1984 }
1985 
1986 /**
1987  * zfcp_fsf_close_wka_port - create and send close wka port request
1988  * @wka_port: WKA port to open
1989  * Returns: 0 on success, error otherwise
1990  */
1991 int zfcp_fsf_close_wka_port(struct zfcp_fc_wka_port *wka_port)
1992 {
1993 	struct zfcp_qdio *qdio = wka_port->adapter->qdio;
1994 	struct zfcp_fsf_req *req;
1995 	unsigned long req_id = 0;
1996 	int retval = -EIO;
1997 
1998 	spin_lock_irq(&qdio->req_q_lock);
1999 	if (zfcp_qdio_sbal_get(qdio))
2000 		goto out;
2001 
2002 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PORT,
2003 				  SBAL_SFLAGS0_TYPE_READ,
2004 				  qdio->adapter->pool.erp_req);
2005 
2006 	if (IS_ERR(req)) {
2007 		retval = PTR_ERR(req);
2008 		goto out;
2009 	}
2010 
2011 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
2012 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
2013 
2014 	req->handler = zfcp_fsf_close_wka_port_handler;
2015 	req->data = wka_port;
2016 	req->qtcb->header.port_handle = wka_port->handle;
2017 
2018 	req_id = req->req_id;
2019 
2020 	zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
2021 	retval = zfcp_fsf_req_send(req);
2022 	if (retval)
2023 		zfcp_fsf_req_free(req);
2024 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
2025 out:
2026 	spin_unlock_irq(&qdio->req_q_lock);
2027 	if (!retval)
2028 		zfcp_dbf_rec_run_wka("fscwp_1", wka_port, req_id);
2029 	return retval;
2030 }
2031 
2032 static void zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *req)
2033 {
2034 	struct zfcp_port *port = req->data;
2035 	struct fsf_qtcb_header *header = &req->qtcb->header;
2036 	struct scsi_device *sdev;
2037 
2038 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
2039 		return;
2040 
2041 	switch (header->fsf_status) {
2042 	case FSF_PORT_HANDLE_NOT_VALID:
2043 		zfcp_erp_adapter_reopen(port->adapter, 0, "fscpph1");
2044 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2045 		break;
2046 	case FSF_PORT_BOXED:
2047 		/* can't use generic zfcp_erp_modify_port_status because
2048 		 * ZFCP_STATUS_COMMON_OPEN must not be reset for the port */
2049 		atomic_andnot(ZFCP_STATUS_PORT_PHYS_OPEN, &port->status);
2050 		shost_for_each_device(sdev, port->adapter->scsi_host)
2051 			if (sdev_to_zfcp(sdev)->port == port)
2052 				atomic_andnot(ZFCP_STATUS_COMMON_OPEN,
2053 						  &sdev_to_zfcp(sdev)->status);
2054 		zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_ACCESS_BOXED);
2055 		zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED,
2056 				     "fscpph2");
2057 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2058 		break;
2059 	case FSF_ADAPTER_STATUS_AVAILABLE:
2060 		switch (header->fsf_status_qual.word[0]) {
2061 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
2062 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
2063 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2064 			break;
2065 		}
2066 		break;
2067 	case FSF_GOOD:
2068 		/* can't use generic zfcp_erp_modify_port_status because
2069 		 * ZFCP_STATUS_COMMON_OPEN must not be reset for the port
2070 		 */
2071 		atomic_andnot(ZFCP_STATUS_PORT_PHYS_OPEN, &port->status);
2072 		shost_for_each_device(sdev, port->adapter->scsi_host)
2073 			if (sdev_to_zfcp(sdev)->port == port)
2074 				atomic_andnot(ZFCP_STATUS_COMMON_OPEN,
2075 						  &sdev_to_zfcp(sdev)->status);
2076 		break;
2077 	}
2078 }
2079 
2080 /**
2081  * zfcp_fsf_close_physical_port - close physical port
2082  * @erp_action: pointer to struct zfcp_erp_action
2083  * Returns: 0 on success
2084  */
2085 int zfcp_fsf_close_physical_port(struct zfcp_erp_action *erp_action)
2086 {
2087 	struct zfcp_qdio *qdio = erp_action->adapter->qdio;
2088 	struct zfcp_fsf_req *req;
2089 	int retval = -EIO;
2090 
2091 	spin_lock_irq(&qdio->req_q_lock);
2092 	if (zfcp_qdio_sbal_get(qdio))
2093 		goto out;
2094 
2095 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PHYSICAL_PORT,
2096 				  SBAL_SFLAGS0_TYPE_READ,
2097 				  qdio->adapter->pool.erp_req);
2098 
2099 	if (IS_ERR(req)) {
2100 		retval = PTR_ERR(req);
2101 		goto out;
2102 	}
2103 
2104 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
2105 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
2106 
2107 	req->data = erp_action->port;
2108 	req->qtcb->header.port_handle = erp_action->port->handle;
2109 	req->erp_action = erp_action;
2110 	req->handler = zfcp_fsf_close_physical_port_handler;
2111 	erp_action->fsf_req_id = req->req_id;
2112 
2113 	zfcp_fsf_start_erp_timer(req);
2114 	retval = zfcp_fsf_req_send(req);
2115 	if (retval) {
2116 		zfcp_fsf_req_free(req);
2117 		erp_action->fsf_req_id = 0;
2118 	}
2119 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
2120 out:
2121 	spin_unlock_irq(&qdio->req_q_lock);
2122 	return retval;
2123 }
2124 
2125 static void zfcp_fsf_open_lun_handler(struct zfcp_fsf_req *req)
2126 {
2127 	struct zfcp_adapter *adapter = req->adapter;
2128 	struct scsi_device *sdev = req->data;
2129 	struct zfcp_scsi_dev *zfcp_sdev;
2130 	struct fsf_qtcb_header *header = &req->qtcb->header;
2131 	union fsf_status_qual *qual = &header->fsf_status_qual;
2132 
2133 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
2134 		return;
2135 
2136 	zfcp_sdev = sdev_to_zfcp(sdev);
2137 
2138 	atomic_andnot(ZFCP_STATUS_COMMON_ACCESS_DENIED |
2139 			  ZFCP_STATUS_COMMON_ACCESS_BOXED,
2140 			  &zfcp_sdev->status);
2141 
2142 	switch (header->fsf_status) {
2143 
2144 	case FSF_PORT_HANDLE_NOT_VALID:
2145 		zfcp_erp_adapter_reopen(adapter, 0, "fsouh_1");
2146 		fallthrough;
2147 	case FSF_LUN_ALREADY_OPEN:
2148 		break;
2149 	case FSF_PORT_BOXED:
2150 		zfcp_erp_set_port_status(zfcp_sdev->port,
2151 					 ZFCP_STATUS_COMMON_ACCESS_BOXED);
2152 		zfcp_erp_port_reopen(zfcp_sdev->port,
2153 				     ZFCP_STATUS_COMMON_ERP_FAILED, "fsouh_2");
2154 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2155 		break;
2156 	case FSF_LUN_SHARING_VIOLATION:
2157 		if (qual->word[0])
2158 			dev_warn(&zfcp_sdev->port->adapter->ccw_device->dev,
2159 				 "LUN 0x%016Lx on port 0x%016Lx is already in "
2160 				 "use by CSS%d, MIF Image ID %x\n",
2161 				 zfcp_scsi_dev_lun(sdev),
2162 				 (unsigned long long)zfcp_sdev->port->wwpn,
2163 				 qual->fsf_queue_designator.cssid,
2164 				 qual->fsf_queue_designator.hla);
2165 		zfcp_erp_set_lun_status(sdev,
2166 					ZFCP_STATUS_COMMON_ERP_FAILED |
2167 					ZFCP_STATUS_COMMON_ACCESS_DENIED);
2168 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2169 		break;
2170 	case FSF_MAXIMUM_NUMBER_OF_LUNS_EXCEEDED:
2171 		dev_warn(&adapter->ccw_device->dev,
2172 			 "No handle is available for LUN "
2173 			 "0x%016Lx on port 0x%016Lx\n",
2174 			 (unsigned long long)zfcp_scsi_dev_lun(sdev),
2175 			 (unsigned long long)zfcp_sdev->port->wwpn);
2176 		zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ERP_FAILED);
2177 		fallthrough;
2178 	case FSF_INVALID_COMMAND_OPTION:
2179 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2180 		break;
2181 	case FSF_ADAPTER_STATUS_AVAILABLE:
2182 		switch (header->fsf_status_qual.word[0]) {
2183 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
2184 			zfcp_fc_test_link(zfcp_sdev->port);
2185 			fallthrough;
2186 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
2187 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2188 			break;
2189 		}
2190 		break;
2191 
2192 	case FSF_GOOD:
2193 		zfcp_sdev->lun_handle = header->lun_handle;
2194 		atomic_or(ZFCP_STATUS_COMMON_OPEN, &zfcp_sdev->status);
2195 		break;
2196 	}
2197 }
2198 
2199 /**
2200  * zfcp_fsf_open_lun - open LUN
2201  * @erp_action: pointer to struct zfcp_erp_action
2202  * Returns: 0 on success, error otherwise
2203  */
2204 int zfcp_fsf_open_lun(struct zfcp_erp_action *erp_action)
2205 {
2206 	struct zfcp_adapter *adapter = erp_action->adapter;
2207 	struct zfcp_qdio *qdio = adapter->qdio;
2208 	struct zfcp_fsf_req *req;
2209 	int retval = -EIO;
2210 
2211 	spin_lock_irq(&qdio->req_q_lock);
2212 	if (zfcp_qdio_sbal_get(qdio))
2213 		goto out;
2214 
2215 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_LUN,
2216 				  SBAL_SFLAGS0_TYPE_READ,
2217 				  adapter->pool.erp_req);
2218 
2219 	if (IS_ERR(req)) {
2220 		retval = PTR_ERR(req);
2221 		goto out;
2222 	}
2223 
2224 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
2225 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
2226 
2227 	req->qtcb->header.port_handle = erp_action->port->handle;
2228 	req->qtcb->bottom.support.fcp_lun = zfcp_scsi_dev_lun(erp_action->sdev);
2229 	req->handler = zfcp_fsf_open_lun_handler;
2230 	req->data = erp_action->sdev;
2231 	req->erp_action = erp_action;
2232 	erp_action->fsf_req_id = req->req_id;
2233 
2234 	if (!(adapter->connection_features & FSF_FEATURE_NPIV_MODE))
2235 		req->qtcb->bottom.support.option = FSF_OPEN_LUN_SUPPRESS_BOXING;
2236 
2237 	zfcp_fsf_start_erp_timer(req);
2238 	retval = zfcp_fsf_req_send(req);
2239 	if (retval) {
2240 		zfcp_fsf_req_free(req);
2241 		erp_action->fsf_req_id = 0;
2242 	}
2243 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
2244 out:
2245 	spin_unlock_irq(&qdio->req_q_lock);
2246 	return retval;
2247 }
2248 
2249 static void zfcp_fsf_close_lun_handler(struct zfcp_fsf_req *req)
2250 {
2251 	struct scsi_device *sdev = req->data;
2252 	struct zfcp_scsi_dev *zfcp_sdev;
2253 
2254 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
2255 		return;
2256 
2257 	zfcp_sdev = sdev_to_zfcp(sdev);
2258 
2259 	switch (req->qtcb->header.fsf_status) {
2260 	case FSF_PORT_HANDLE_NOT_VALID:
2261 		zfcp_erp_adapter_reopen(zfcp_sdev->port->adapter, 0, "fscuh_1");
2262 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2263 		break;
2264 	case FSF_LUN_HANDLE_NOT_VALID:
2265 		zfcp_erp_port_reopen(zfcp_sdev->port, 0, "fscuh_2");
2266 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2267 		break;
2268 	case FSF_PORT_BOXED:
2269 		zfcp_erp_set_port_status(zfcp_sdev->port,
2270 					 ZFCP_STATUS_COMMON_ACCESS_BOXED);
2271 		zfcp_erp_port_reopen(zfcp_sdev->port,
2272 				     ZFCP_STATUS_COMMON_ERP_FAILED, "fscuh_3");
2273 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2274 		break;
2275 	case FSF_ADAPTER_STATUS_AVAILABLE:
2276 		switch (req->qtcb->header.fsf_status_qual.word[0]) {
2277 		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:
2278 			zfcp_fc_test_link(zfcp_sdev->port);
2279 			fallthrough;
2280 		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:
2281 			req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2282 			break;
2283 		}
2284 		break;
2285 	case FSF_GOOD:
2286 		atomic_andnot(ZFCP_STATUS_COMMON_OPEN, &zfcp_sdev->status);
2287 		break;
2288 	}
2289 }
2290 
2291 /**
2292  * zfcp_fsf_close_LUN - close LUN
2293  * @erp_action: pointer to erp_action triggering the "close LUN"
2294  * Returns: 0 on success, error otherwise
2295  */
2296 int zfcp_fsf_close_lun(struct zfcp_erp_action *erp_action)
2297 {
2298 	struct zfcp_qdio *qdio = erp_action->adapter->qdio;
2299 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(erp_action->sdev);
2300 	struct zfcp_fsf_req *req;
2301 	int retval = -EIO;
2302 
2303 	spin_lock_irq(&qdio->req_q_lock);
2304 	if (zfcp_qdio_sbal_get(qdio))
2305 		goto out;
2306 
2307 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_LUN,
2308 				  SBAL_SFLAGS0_TYPE_READ,
2309 				  qdio->adapter->pool.erp_req);
2310 
2311 	if (IS_ERR(req)) {
2312 		retval = PTR_ERR(req);
2313 		goto out;
2314 	}
2315 
2316 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
2317 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
2318 
2319 	req->qtcb->header.port_handle = erp_action->port->handle;
2320 	req->qtcb->header.lun_handle = zfcp_sdev->lun_handle;
2321 	req->handler = zfcp_fsf_close_lun_handler;
2322 	req->data = erp_action->sdev;
2323 	req->erp_action = erp_action;
2324 	erp_action->fsf_req_id = req->req_id;
2325 
2326 	zfcp_fsf_start_erp_timer(req);
2327 	retval = zfcp_fsf_req_send(req);
2328 	if (retval) {
2329 		zfcp_fsf_req_free(req);
2330 		erp_action->fsf_req_id = 0;
2331 	}
2332 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
2333 out:
2334 	spin_unlock_irq(&qdio->req_q_lock);
2335 	return retval;
2336 }
2337 
2338 static void zfcp_fsf_update_lat(struct zfcp_latency_record *lat_rec, u32 lat)
2339 {
2340 	lat_rec->sum += lat;
2341 	lat_rec->min = min(lat_rec->min, lat);
2342 	lat_rec->max = max(lat_rec->max, lat);
2343 }
2344 
2345 static void zfcp_fsf_req_trace(struct zfcp_fsf_req *req, struct scsi_cmnd *scsi)
2346 {
2347 	struct fsf_qual_latency_info *lat_in;
2348 	struct zfcp_latency_cont *lat = NULL;
2349 	struct zfcp_scsi_dev *zfcp_sdev;
2350 	struct zfcp_blk_drv_data blktrc;
2351 	int ticks = req->adapter->timer_ticks;
2352 
2353 	lat_in = &req->qtcb->prefix.prot_status_qual.latency_info;
2354 
2355 	blktrc.flags = 0;
2356 	blktrc.magic = ZFCP_BLK_DRV_DATA_MAGIC;
2357 	if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
2358 		blktrc.flags |= ZFCP_BLK_REQ_ERROR;
2359 	blktrc.inb_usage = 0;
2360 	blktrc.outb_usage = req->qdio_req.qdio_outb_usage;
2361 
2362 	if (req->adapter->adapter_features & FSF_FEATURE_MEASUREMENT_DATA &&
2363 	    !(req->status & ZFCP_STATUS_FSFREQ_ERROR)) {
2364 		zfcp_sdev = sdev_to_zfcp(scsi->device);
2365 		blktrc.flags |= ZFCP_BLK_LAT_VALID;
2366 		blktrc.channel_lat = lat_in->channel_lat * ticks;
2367 		blktrc.fabric_lat = lat_in->fabric_lat * ticks;
2368 
2369 		switch (req->qtcb->bottom.io.data_direction) {
2370 		case FSF_DATADIR_DIF_READ_STRIP:
2371 		case FSF_DATADIR_DIF_READ_CONVERT:
2372 		case FSF_DATADIR_READ:
2373 			lat = &zfcp_sdev->latencies.read;
2374 			break;
2375 		case FSF_DATADIR_DIF_WRITE_INSERT:
2376 		case FSF_DATADIR_DIF_WRITE_CONVERT:
2377 		case FSF_DATADIR_WRITE:
2378 			lat = &zfcp_sdev->latencies.write;
2379 			break;
2380 		case FSF_DATADIR_CMND:
2381 			lat = &zfcp_sdev->latencies.cmd;
2382 			break;
2383 		}
2384 
2385 		if (lat) {
2386 			spin_lock(&zfcp_sdev->latencies.lock);
2387 			zfcp_fsf_update_lat(&lat->channel, lat_in->channel_lat);
2388 			zfcp_fsf_update_lat(&lat->fabric, lat_in->fabric_lat);
2389 			lat->counter++;
2390 			spin_unlock(&zfcp_sdev->latencies.lock);
2391 		}
2392 	}
2393 
2394 	blk_add_driver_data(scsi->request->q, scsi->request, &blktrc,
2395 			    sizeof(blktrc));
2396 }
2397 
2398 /**
2399  * zfcp_fsf_fcp_handler_common() - FCP response handler common to I/O and TMF.
2400  * @req: Pointer to FSF request.
2401  * @sdev: Pointer to SCSI device as request context.
2402  */
2403 static void zfcp_fsf_fcp_handler_common(struct zfcp_fsf_req *req,
2404 					struct scsi_device *sdev)
2405 {
2406 	struct zfcp_scsi_dev *zfcp_sdev;
2407 	struct fsf_qtcb_header *header = &req->qtcb->header;
2408 
2409 	if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR))
2410 		return;
2411 
2412 	zfcp_sdev = sdev_to_zfcp(sdev);
2413 
2414 	switch (header->fsf_status) {
2415 	case FSF_HANDLE_MISMATCH:
2416 	case FSF_PORT_HANDLE_NOT_VALID:
2417 		zfcp_erp_adapter_reopen(req->adapter, 0, "fssfch1");
2418 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2419 		break;
2420 	case FSF_FCPLUN_NOT_VALID:
2421 	case FSF_LUN_HANDLE_NOT_VALID:
2422 		zfcp_erp_port_reopen(zfcp_sdev->port, 0, "fssfch2");
2423 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2424 		break;
2425 	case FSF_SERVICE_CLASS_NOT_SUPPORTED:
2426 		zfcp_fsf_class_not_supp(req);
2427 		break;
2428 	case FSF_DIRECTION_INDICATOR_NOT_VALID:
2429 		dev_err(&req->adapter->ccw_device->dev,
2430 			"Incorrect direction %d, LUN 0x%016Lx on port "
2431 			"0x%016Lx closed\n",
2432 			req->qtcb->bottom.io.data_direction,
2433 			(unsigned long long)zfcp_scsi_dev_lun(sdev),
2434 			(unsigned long long)zfcp_sdev->port->wwpn);
2435 		zfcp_erp_adapter_shutdown(req->adapter, 0, "fssfch3");
2436 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2437 		break;
2438 	case FSF_CMND_LENGTH_NOT_VALID:
2439 		dev_err(&req->adapter->ccw_device->dev,
2440 			"Incorrect FCP_CMND length %d, FCP device closed\n",
2441 			req->qtcb->bottom.io.fcp_cmnd_length);
2442 		zfcp_erp_adapter_shutdown(req->adapter, 0, "fssfch4");
2443 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2444 		break;
2445 	case FSF_PORT_BOXED:
2446 		zfcp_erp_set_port_status(zfcp_sdev->port,
2447 					 ZFCP_STATUS_COMMON_ACCESS_BOXED);
2448 		zfcp_erp_port_reopen(zfcp_sdev->port,
2449 				     ZFCP_STATUS_COMMON_ERP_FAILED, "fssfch5");
2450 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2451 		break;
2452 	case FSF_LUN_BOXED:
2453 		zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ACCESS_BOXED);
2454 		zfcp_erp_lun_reopen(sdev, ZFCP_STATUS_COMMON_ERP_FAILED,
2455 				    "fssfch6");
2456 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2457 		break;
2458 	case FSF_ADAPTER_STATUS_AVAILABLE:
2459 		if (header->fsf_status_qual.word[0] ==
2460 		    FSF_SQ_INVOKE_LINK_TEST_PROCEDURE)
2461 			zfcp_fc_test_link(zfcp_sdev->port);
2462 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2463 		break;
2464 	case FSF_SECURITY_ERROR:
2465 		zfcp_fsf_log_security_error(&req->adapter->ccw_device->dev,
2466 					    header->fsf_status_qual.word[0],
2467 					    zfcp_sdev->port->wwpn);
2468 		zfcp_erp_port_forced_reopen(zfcp_sdev->port, 0, "fssfch7");
2469 		req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2470 		break;
2471 	}
2472 }
2473 
2474 static void zfcp_fsf_fcp_cmnd_handler(struct zfcp_fsf_req *req)
2475 {
2476 	struct scsi_cmnd *scpnt;
2477 	struct fcp_resp_with_ext *fcp_rsp;
2478 	unsigned long flags;
2479 
2480 	read_lock_irqsave(&req->adapter->abort_lock, flags);
2481 
2482 	scpnt = req->data;
2483 	if (unlikely(!scpnt)) {
2484 		read_unlock_irqrestore(&req->adapter->abort_lock, flags);
2485 		return;
2486 	}
2487 
2488 	zfcp_fsf_fcp_handler_common(req, scpnt->device);
2489 
2490 	if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR)) {
2491 		set_host_byte(scpnt, DID_TRANSPORT_DISRUPTED);
2492 		goto skip_fsfstatus;
2493 	}
2494 
2495 	switch (req->qtcb->header.fsf_status) {
2496 	case FSF_INCONSISTENT_PROT_DATA:
2497 	case FSF_INVALID_PROT_PARM:
2498 		set_host_byte(scpnt, DID_ERROR);
2499 		goto skip_fsfstatus;
2500 	case FSF_BLOCK_GUARD_CHECK_FAILURE:
2501 		zfcp_scsi_dif_sense_error(scpnt, 0x1);
2502 		goto skip_fsfstatus;
2503 	case FSF_APP_TAG_CHECK_FAILURE:
2504 		zfcp_scsi_dif_sense_error(scpnt, 0x2);
2505 		goto skip_fsfstatus;
2506 	case FSF_REF_TAG_CHECK_FAILURE:
2507 		zfcp_scsi_dif_sense_error(scpnt, 0x3);
2508 		goto skip_fsfstatus;
2509 	}
2510 	BUILD_BUG_ON(sizeof(struct fcp_resp_with_ext) > FSF_FCP_RSP_SIZE);
2511 	fcp_rsp = &req->qtcb->bottom.io.fcp_rsp.iu;
2512 	zfcp_fc_eval_fcp_rsp(fcp_rsp, scpnt);
2513 
2514 skip_fsfstatus:
2515 	zfcp_fsf_req_trace(req, scpnt);
2516 	zfcp_dbf_scsi_result(scpnt, req);
2517 
2518 	scpnt->host_scribble = NULL;
2519 	(scpnt->scsi_done) (scpnt);
2520 	/*
2521 	 * We must hold this lock until scsi_done has been called.
2522 	 * Otherwise we may call scsi_done after abort regarding this
2523 	 * command has completed.
2524 	 * Note: scsi_done must not block!
2525 	 */
2526 	read_unlock_irqrestore(&req->adapter->abort_lock, flags);
2527 }
2528 
2529 static int zfcp_fsf_set_data_dir(struct scsi_cmnd *scsi_cmnd, u32 *data_dir)
2530 {
2531 	switch (scsi_get_prot_op(scsi_cmnd)) {
2532 	case SCSI_PROT_NORMAL:
2533 		switch (scsi_cmnd->sc_data_direction) {
2534 		case DMA_NONE:
2535 			*data_dir = FSF_DATADIR_CMND;
2536 			break;
2537 		case DMA_FROM_DEVICE:
2538 			*data_dir = FSF_DATADIR_READ;
2539 			break;
2540 		case DMA_TO_DEVICE:
2541 			*data_dir = FSF_DATADIR_WRITE;
2542 			break;
2543 		case DMA_BIDIRECTIONAL:
2544 			return -EINVAL;
2545 		}
2546 		break;
2547 
2548 	case SCSI_PROT_READ_STRIP:
2549 		*data_dir = FSF_DATADIR_DIF_READ_STRIP;
2550 		break;
2551 	case SCSI_PROT_WRITE_INSERT:
2552 		*data_dir = FSF_DATADIR_DIF_WRITE_INSERT;
2553 		break;
2554 	case SCSI_PROT_READ_PASS:
2555 		*data_dir = FSF_DATADIR_DIF_READ_CONVERT;
2556 		break;
2557 	case SCSI_PROT_WRITE_PASS:
2558 		*data_dir = FSF_DATADIR_DIF_WRITE_CONVERT;
2559 		break;
2560 	default:
2561 		return -EINVAL;
2562 	}
2563 
2564 	return 0;
2565 }
2566 
2567 /**
2568  * zfcp_fsf_fcp_cmnd - initiate an FCP command (for a SCSI command)
2569  * @scsi_cmnd: scsi command to be sent
2570  */
2571 int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *scsi_cmnd)
2572 {
2573 	struct zfcp_fsf_req *req;
2574 	struct fcp_cmnd *fcp_cmnd;
2575 	u8 sbtype = SBAL_SFLAGS0_TYPE_READ;
2576 	int retval = -EIO;
2577 	struct scsi_device *sdev = scsi_cmnd->device;
2578 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
2579 	struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
2580 	struct zfcp_qdio *qdio = adapter->qdio;
2581 	struct fsf_qtcb_bottom_io *io;
2582 	unsigned long flags;
2583 
2584 	if (unlikely(!(atomic_read(&zfcp_sdev->status) &
2585 		       ZFCP_STATUS_COMMON_UNBLOCKED)))
2586 		return -EBUSY;
2587 
2588 	spin_lock_irqsave(&qdio->req_q_lock, flags);
2589 	if (atomic_read(&qdio->req_q_free) <= 0) {
2590 		atomic_inc(&qdio->req_q_full);
2591 		goto out;
2592 	}
2593 
2594 	if (scsi_cmnd->sc_data_direction == DMA_TO_DEVICE)
2595 		sbtype = SBAL_SFLAGS0_TYPE_WRITE;
2596 
2597 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_FCP_CMND,
2598 				  sbtype, adapter->pool.scsi_req);
2599 
2600 	if (IS_ERR(req)) {
2601 		retval = PTR_ERR(req);
2602 		goto out;
2603 	}
2604 
2605 	scsi_cmnd->host_scribble = (unsigned char *) req->req_id;
2606 
2607 	io = &req->qtcb->bottom.io;
2608 	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
2609 	req->data = scsi_cmnd;
2610 	req->handler = zfcp_fsf_fcp_cmnd_handler;
2611 	req->qtcb->header.lun_handle = zfcp_sdev->lun_handle;
2612 	req->qtcb->header.port_handle = zfcp_sdev->port->handle;
2613 	io->service_class = FSF_CLASS_3;
2614 	io->fcp_cmnd_length = FCP_CMND_LEN;
2615 
2616 	if (scsi_get_prot_op(scsi_cmnd) != SCSI_PROT_NORMAL) {
2617 		io->data_block_length = scsi_cmnd->device->sector_size;
2618 		io->ref_tag_value = scsi_get_lba(scsi_cmnd) & 0xFFFFFFFF;
2619 	}
2620 
2621 	if (zfcp_fsf_set_data_dir(scsi_cmnd, &io->data_direction))
2622 		goto failed_scsi_cmnd;
2623 
2624 	BUILD_BUG_ON(sizeof(struct fcp_cmnd) > FSF_FCP_CMND_SIZE);
2625 	fcp_cmnd = &req->qtcb->bottom.io.fcp_cmnd.iu;
2626 	zfcp_fc_scsi_to_fcp(fcp_cmnd, scsi_cmnd);
2627 
2628 	if ((scsi_get_prot_op(scsi_cmnd) != SCSI_PROT_NORMAL) &&
2629 	    scsi_prot_sg_count(scsi_cmnd)) {
2630 		zfcp_qdio_set_data_div(qdio, &req->qdio_req,
2631 				       scsi_prot_sg_count(scsi_cmnd));
2632 		retval = zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req,
2633 						 scsi_prot_sglist(scsi_cmnd));
2634 		if (retval)
2635 			goto failed_scsi_cmnd;
2636 		io->prot_data_length = zfcp_qdio_real_bytes(
2637 						scsi_prot_sglist(scsi_cmnd));
2638 	}
2639 
2640 	retval = zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req,
2641 					 scsi_sglist(scsi_cmnd));
2642 	if (unlikely(retval))
2643 		goto failed_scsi_cmnd;
2644 
2645 	zfcp_qdio_set_sbale_last(adapter->qdio, &req->qdio_req);
2646 	if (zfcp_adapter_multi_buffer_active(adapter))
2647 		zfcp_qdio_set_scount(qdio, &req->qdio_req);
2648 
2649 	retval = zfcp_fsf_req_send(req);
2650 	if (unlikely(retval))
2651 		goto failed_scsi_cmnd;
2652 	/* NOTE: DO NOT TOUCH req PAST THIS POINT! */
2653 
2654 	goto out;
2655 
2656 failed_scsi_cmnd:
2657 	zfcp_fsf_req_free(req);
2658 	scsi_cmnd->host_scribble = NULL;
2659 out:
2660 	spin_unlock_irqrestore(&qdio->req_q_lock, flags);
2661 	return retval;
2662 }
2663 
2664 static void zfcp_fsf_fcp_task_mgmt_handler(struct zfcp_fsf_req *req)
2665 {
2666 	struct scsi_device *sdev = req->data;
2667 	struct fcp_resp_with_ext *fcp_rsp;
2668 	struct fcp_resp_rsp_info *rsp_info;
2669 
2670 	zfcp_fsf_fcp_handler_common(req, sdev);
2671 
2672 	fcp_rsp = &req->qtcb->bottom.io.fcp_rsp.iu;
2673 	rsp_info = (struct fcp_resp_rsp_info *) &fcp_rsp[1];
2674 
2675 	if ((rsp_info->rsp_code != FCP_TMF_CMPL) ||
2676 	     (req->status & ZFCP_STATUS_FSFREQ_ERROR))
2677 		req->status |= ZFCP_STATUS_FSFREQ_TMFUNCFAILED;
2678 }
2679 
2680 /**
2681  * zfcp_fsf_fcp_task_mgmt() - Send SCSI task management command (TMF).
2682  * @sdev: Pointer to SCSI device to send the task management command to.
2683  * @tm_flags: Unsigned byte for task management flags.
2684  *
2685  * Return: On success pointer to struct zfcp_fsf_req, %NULL otherwise.
2686  */
2687 struct zfcp_fsf_req *zfcp_fsf_fcp_task_mgmt(struct scsi_device *sdev,
2688 					    u8 tm_flags)
2689 {
2690 	struct zfcp_fsf_req *req = NULL;
2691 	struct fcp_cmnd *fcp_cmnd;
2692 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
2693 	struct zfcp_qdio *qdio = zfcp_sdev->port->adapter->qdio;
2694 
2695 	if (unlikely(!(atomic_read(&zfcp_sdev->status) &
2696 		       ZFCP_STATUS_COMMON_UNBLOCKED)))
2697 		return NULL;
2698 
2699 	spin_lock_irq(&qdio->req_q_lock);
2700 	if (zfcp_qdio_sbal_get(qdio))
2701 		goto out;
2702 
2703 	req = zfcp_fsf_req_create(qdio, FSF_QTCB_FCP_CMND,
2704 				  SBAL_SFLAGS0_TYPE_WRITE,
2705 				  qdio->adapter->pool.scsi_req);
2706 
2707 	if (IS_ERR(req)) {
2708 		req = NULL;
2709 		goto out;
2710 	}
2711 
2712 	req->data = sdev;
2713 
2714 	req->handler = zfcp_fsf_fcp_task_mgmt_handler;
2715 	req->qtcb->header.lun_handle = zfcp_sdev->lun_handle;
2716 	req->qtcb->header.port_handle = zfcp_sdev->port->handle;
2717 	req->qtcb->bottom.io.data_direction = FSF_DATADIR_CMND;
2718 	req->qtcb->bottom.io.service_class = FSF_CLASS_3;
2719 	req->qtcb->bottom.io.fcp_cmnd_length = FCP_CMND_LEN;
2720 
2721 	zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
2722 
2723 	fcp_cmnd = &req->qtcb->bottom.io.fcp_cmnd.iu;
2724 	zfcp_fc_fcp_tm(fcp_cmnd, sdev, tm_flags);
2725 
2726 	zfcp_fsf_start_timer(req, ZFCP_FSF_SCSI_ER_TIMEOUT);
2727 	if (!zfcp_fsf_req_send(req)) {
2728 		/* NOTE: DO NOT TOUCH req, UNTIL IT COMPLETES! */
2729 		goto out;
2730 	}
2731 
2732 	zfcp_fsf_req_free(req);
2733 	req = NULL;
2734 out:
2735 	spin_unlock_irq(&qdio->req_q_lock);
2736 	return req;
2737 }
2738 
2739 /**
2740  * zfcp_fsf_reqid_check - validate req_id contained in SBAL returned by QDIO
2741  * @qdio: pointer to struct zfcp_qdio
2742  * @sbal_idx: response queue index of SBAL to be processed
2743  */
2744 void zfcp_fsf_reqid_check(struct zfcp_qdio *qdio, int sbal_idx)
2745 {
2746 	struct zfcp_adapter *adapter = qdio->adapter;
2747 	struct qdio_buffer *sbal = qdio->res_q[sbal_idx];
2748 	struct qdio_buffer_element *sbale;
2749 	struct zfcp_fsf_req *fsf_req;
2750 	unsigned long req_id;
2751 	int idx;
2752 
2753 	for (idx = 0; idx < QDIO_MAX_ELEMENTS_PER_BUFFER; idx++) {
2754 
2755 		sbale = &sbal->element[idx];
2756 		req_id = sbale->addr;
2757 		fsf_req = zfcp_reqlist_find_rm(adapter->req_list, req_id);
2758 
2759 		if (!fsf_req) {
2760 			/*
2761 			 * Unknown request means that we have potentially memory
2762 			 * corruption and must stop the machine immediately.
2763 			 */
2764 			zfcp_qdio_siosl(adapter);
2765 			panic("error: unknown req_id (%lx) on adapter %s.\n",
2766 			      req_id, dev_name(&adapter->ccw_device->dev));
2767 		}
2768 
2769 		zfcp_fsf_req_complete(fsf_req);
2770 
2771 		if (likely(sbale->eflags & SBAL_EFLAGS_LAST_ENTRY))
2772 			break;
2773 	}
2774 }
2775