Lines Matching refs:req

66 static void zfcp_fsf_class_not_supp(struct zfcp_fsf_req *req)  in zfcp_fsf_class_not_supp()  argument
68 dev_err(&req->adapter->ccw_device->dev, "FCP device not " in zfcp_fsf_class_not_supp()
70 zfcp_erp_adapter_shutdown(req->adapter, 0, "fscns_1"); in zfcp_fsf_class_not_supp()
71 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_class_not_supp()
78 void zfcp_fsf_req_free(struct zfcp_fsf_req *req) in zfcp_fsf_req_free() argument
80 if (likely(req->pool)) { in zfcp_fsf_req_free()
81 if (likely(req->qtcb)) in zfcp_fsf_req_free()
82 mempool_free(req->qtcb, req->adapter->pool.qtcb_pool); in zfcp_fsf_req_free()
83 mempool_free(req, req->pool); in zfcp_fsf_req_free()
87 if (likely(req->qtcb)) in zfcp_fsf_req_free()
88 kmem_cache_free(zfcp_fsf_qtcb_cache, req->qtcb); in zfcp_fsf_req_free()
89 kfree(req); in zfcp_fsf_req_free()
92 static void zfcp_fsf_status_read_port_closed(struct zfcp_fsf_req *req) in zfcp_fsf_status_read_port_closed() argument
95 struct fsf_status_read_buffer *sr_buf = req->data; in zfcp_fsf_status_read_port_closed()
96 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_status_read_port_closed()
109 static void zfcp_fsf_link_down_info_eval(struct zfcp_fsf_req *req, in zfcp_fsf_link_down_info_eval() argument
112 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_link_down_info_eval()
126 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
131 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
136 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
141 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
146 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
151 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
155 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
159 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
164 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
169 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
174 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
179 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
184 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_link_down_info_eval()
192 static void zfcp_fsf_status_read_link_down(struct zfcp_fsf_req *req) in zfcp_fsf_status_read_link_down() argument
194 struct fsf_status_read_buffer *sr_buf = req->data; in zfcp_fsf_status_read_link_down()
200 zfcp_fsf_link_down_info_eval(req, ldi); in zfcp_fsf_status_read_link_down()
203 zfcp_fsf_link_down_info_eval(req, ldi); in zfcp_fsf_status_read_link_down()
206 zfcp_fsf_link_down_info_eval(req, NULL); in zfcp_fsf_status_read_link_down()
210 static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req) in zfcp_fsf_status_read_handler() argument
212 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_status_read_handler()
213 struct fsf_status_read_buffer *sr_buf = req->data; in zfcp_fsf_status_read_handler()
215 if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) { in zfcp_fsf_status_read_handler()
216 zfcp_dbf_hba_fsf_uss("fssrh_1", req); in zfcp_fsf_status_read_handler()
218 zfcp_fsf_req_free(req); in zfcp_fsf_status_read_handler()
222 zfcp_dbf_hba_fsf_uss("fssrh_4", req); in zfcp_fsf_status_read_handler()
226 zfcp_fsf_status_read_port_closed(req); in zfcp_fsf_status_read_handler()
229 zfcp_fc_incoming_els(req); in zfcp_fsf_status_read_handler()
237 zfcp_dbf_hba_bit_err("fssrh_3", req); in zfcp_fsf_status_read_handler()
240 zfcp_fsf_status_read_link_down(req); in zfcp_fsf_status_read_handler()
266 zfcp_fsf_req_free(req); in zfcp_fsf_status_read_handler()
272 static void zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *req) in zfcp_fsf_fsfstatus_qual_eval() argument
274 switch (req->qtcb->header.fsf_status_qual.word[0]) { in zfcp_fsf_fsfstatus_qual_eval()
283 dev_err(&req->adapter->ccw_device->dev, in zfcp_fsf_fsfstatus_qual_eval()
286 zfcp_qdio_siosl(req->adapter); in zfcp_fsf_fsfstatus_qual_eval()
287 zfcp_erp_adapter_shutdown(req->adapter, 0, "fsfsqe1"); in zfcp_fsf_fsfstatus_qual_eval()
291 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_fsfstatus_qual_eval()
294 static void zfcp_fsf_fsfstatus_eval(struct zfcp_fsf_req *req) in zfcp_fsf_fsfstatus_eval() argument
296 if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR)) in zfcp_fsf_fsfstatus_eval()
299 switch (req->qtcb->header.fsf_status) { in zfcp_fsf_fsfstatus_eval()
301 dev_err(&req->adapter->ccw_device->dev, in zfcp_fsf_fsfstatus_eval()
303 req->qtcb->header.fsf_command); in zfcp_fsf_fsfstatus_eval()
304 zfcp_erp_adapter_shutdown(req->adapter, 0, "fsfse_1"); in zfcp_fsf_fsfstatus_eval()
305 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_fsfstatus_eval()
308 zfcp_fsf_fsfstatus_qual_eval(req); in zfcp_fsf_fsfstatus_eval()
313 static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req) in zfcp_fsf_protstatus_eval() argument
315 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_protstatus_eval()
316 struct fsf_qtcb *qtcb = req->qtcb; in zfcp_fsf_protstatus_eval()
319 zfcp_dbf_hba_fsf_response(req); in zfcp_fsf_protstatus_eval()
321 if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) { in zfcp_fsf_protstatus_eval()
322 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_protstatus_eval()
340 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_protstatus_eval()
358 zfcp_fsf_link_down_info_eval(req, &psq->link_down_info); in zfcp_fsf_protstatus_eval()
378 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_protstatus_eval()
390 static void zfcp_fsf_req_complete(struct zfcp_fsf_req *req) in zfcp_fsf_req_complete() argument
392 if (unlikely(req->fsf_command == FSF_QTCB_UNSOLICITED_STATUS)) { in zfcp_fsf_req_complete()
393 zfcp_fsf_status_read_handler(req); in zfcp_fsf_req_complete()
397 del_timer(&req->timer); in zfcp_fsf_req_complete()
398 zfcp_fsf_protstatus_eval(req); in zfcp_fsf_req_complete()
399 zfcp_fsf_fsfstatus_eval(req); in zfcp_fsf_req_complete()
400 req->handler(req); in zfcp_fsf_req_complete()
402 if (req->erp_action) in zfcp_fsf_req_complete()
403 zfcp_erp_notify(req->erp_action, 0); in zfcp_fsf_req_complete()
405 if (likely(req->status & ZFCP_STATUS_FSFREQ_CLEANUP)) in zfcp_fsf_req_complete()
406 zfcp_fsf_req_free(req); in zfcp_fsf_req_complete()
408 complete(&req->completion); in zfcp_fsf_req_complete()
422 struct zfcp_fsf_req *req, *tmp; in zfcp_fsf_req_dismiss_all() local
428 list_for_each_entry_safe(req, tmp, &remove_queue, list) { in zfcp_fsf_req_dismiss_all()
429 list_del(&req->list); in zfcp_fsf_req_dismiss_all()
430 req->status |= ZFCP_STATUS_FSFREQ_DISMISSED; in zfcp_fsf_req_dismiss_all()
431 zfcp_fsf_req_complete(req); in zfcp_fsf_req_dismiss_all()
463 static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req) in zfcp_fsf_exchange_config_evaluate() argument
465 struct fsf_qtcb_bottom_config *bottom = &req->qtcb->bottom.config; in zfcp_fsf_exchange_config_evaluate()
466 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_exchange_config_evaluate()
476 if (req->data) in zfcp_fsf_exchange_config_evaluate()
477 memcpy(req->data, bottom, sizeof(*bottom)); in zfcp_fsf_exchange_config_evaluate()
494 if (req->qtcb->header.fsf_status == FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE) in zfcp_fsf_exchange_config_evaluate()
527 static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req) in zfcp_fsf_exchange_config_data_handler() argument
529 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_exchange_config_data_handler()
530 struct fsf_qtcb *qtcb = req->qtcb; in zfcp_fsf_exchange_config_data_handler()
534 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_exchange_config_data_handler()
546 if (zfcp_fsf_exchange_config_evaluate(req)) in zfcp_fsf_exchange_config_data_handler()
572 zfcp_fsf_link_down_info_eval(req, in zfcp_fsf_exchange_config_data_handler()
574 if (zfcp_fsf_exchange_config_evaluate(req)) in zfcp_fsf_exchange_config_data_handler()
605 static void zfcp_fsf_exchange_port_evaluate(struct zfcp_fsf_req *req) in zfcp_fsf_exchange_port_evaluate() argument
607 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_exchange_port_evaluate()
608 struct fsf_qtcb_bottom_port *bottom = &req->qtcb->bottom.port; in zfcp_fsf_exchange_port_evaluate()
611 if (req->data) in zfcp_fsf_exchange_port_evaluate()
612 memcpy(req->data, bottom, sizeof(*bottom)); in zfcp_fsf_exchange_port_evaluate()
628 static void zfcp_fsf_exchange_port_data_handler(struct zfcp_fsf_req *req) in zfcp_fsf_exchange_port_data_handler() argument
630 struct fsf_qtcb *qtcb = req->qtcb; in zfcp_fsf_exchange_port_data_handler()
632 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_exchange_port_data_handler()
637 zfcp_fsf_exchange_port_evaluate(req); in zfcp_fsf_exchange_port_data_handler()
640 zfcp_fsf_exchange_port_evaluate(req); in zfcp_fsf_exchange_port_data_handler()
641 zfcp_fsf_link_down_info_eval(req, in zfcp_fsf_exchange_port_data_handler()
649 struct zfcp_fsf_req *req; in zfcp_fsf_alloc() local
652 req = mempool_alloc(pool, GFP_ATOMIC); in zfcp_fsf_alloc()
654 req = kmalloc(sizeof(*req), GFP_ATOMIC); in zfcp_fsf_alloc()
656 if (unlikely(!req)) in zfcp_fsf_alloc()
659 memset(req, 0, sizeof(*req)); in zfcp_fsf_alloc()
660 req->pool = pool; in zfcp_fsf_alloc()
661 return req; in zfcp_fsf_alloc()
685 struct zfcp_fsf_req *req = zfcp_fsf_alloc(pool); in zfcp_fsf_req_create() local
687 if (unlikely(!req)) in zfcp_fsf_req_create()
693 INIT_LIST_HEAD(&req->list); in zfcp_fsf_req_create()
694 init_timer(&req->timer); in zfcp_fsf_req_create()
695 init_completion(&req->completion); in zfcp_fsf_req_create()
697 req->adapter = adapter; in zfcp_fsf_req_create()
698 req->fsf_command = fsf_cmd; in zfcp_fsf_req_create()
699 req->req_id = adapter->req_no; in zfcp_fsf_req_create()
703 req->qtcb = zfcp_qtcb_alloc(adapter->pool.qtcb_pool); in zfcp_fsf_req_create()
705 req->qtcb = zfcp_qtcb_alloc(NULL); in zfcp_fsf_req_create()
707 if (unlikely(!req->qtcb)) { in zfcp_fsf_req_create()
708 zfcp_fsf_req_free(req); in zfcp_fsf_req_create()
712 req->seq_no = adapter->fsf_req_seq_no; in zfcp_fsf_req_create()
713 req->qtcb->prefix.req_seq_no = adapter->fsf_req_seq_no; in zfcp_fsf_req_create()
714 req->qtcb->prefix.req_id = req->req_id; in zfcp_fsf_req_create()
715 req->qtcb->prefix.ulp_info = 26; in zfcp_fsf_req_create()
716 req->qtcb->prefix.qtcb_type = fsf_qtcb_type[req->fsf_command]; in zfcp_fsf_req_create()
717 req->qtcb->prefix.qtcb_version = FSF_QTCB_CURRENT_VERSION; in zfcp_fsf_req_create()
718 req->qtcb->header.req_handle = req->req_id; in zfcp_fsf_req_create()
719 req->qtcb->header.fsf_command = req->fsf_command; in zfcp_fsf_req_create()
722 zfcp_qdio_req_init(adapter->qdio, &req->qdio_req, req->req_id, sbtype, in zfcp_fsf_req_create()
723 req->qtcb, sizeof(struct fsf_qtcb)); in zfcp_fsf_req_create()
725 return req; in zfcp_fsf_req_create()
728 static int zfcp_fsf_req_send(struct zfcp_fsf_req *req) in zfcp_fsf_req_send() argument
730 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_req_send()
732 int with_qtcb = (req->qtcb != NULL); in zfcp_fsf_req_send()
733 int req_id = req->req_id; in zfcp_fsf_req_send()
735 zfcp_reqlist_add(adapter->req_list, req); in zfcp_fsf_req_send()
737 req->qdio_req.qdio_outb_usage = atomic_read(&qdio->req_q_free); in zfcp_fsf_req_send()
738 req->issued = get_tod_clock(); in zfcp_fsf_req_send()
739 if (zfcp_qdio_send(qdio, &req->qdio_req)) { in zfcp_fsf_req_send()
740 del_timer(&req->timer); in zfcp_fsf_req_send()
764 struct zfcp_fsf_req *req; in zfcp_fsf_status_read() local
773 req = zfcp_fsf_req_create(qdio, FSF_QTCB_UNSOLICITED_STATUS, in zfcp_fsf_status_read()
776 if (IS_ERR(req)) { in zfcp_fsf_status_read()
777 retval = PTR_ERR(req); in zfcp_fsf_status_read()
788 req->data = sr_buf; in zfcp_fsf_status_read()
790 zfcp_qdio_fill_next(qdio, &req->qdio_req, sr_buf, sizeof(*sr_buf)); in zfcp_fsf_status_read()
791 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_status_read()
793 retval = zfcp_fsf_req_send(req); in zfcp_fsf_status_read()
800 req->data = NULL; in zfcp_fsf_status_read()
803 zfcp_dbf_hba_fsf_uss("fssr__1", req); in zfcp_fsf_status_read()
804 zfcp_fsf_req_free(req); in zfcp_fsf_status_read()
810 static void zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *req) in zfcp_fsf_abort_fcp_command_handler() argument
812 struct scsi_device *sdev = req->data; in zfcp_fsf_abort_fcp_command_handler()
814 union fsf_status_qual *fsq = &req->qtcb->header.fsf_status_qual; in zfcp_fsf_abort_fcp_command_handler()
816 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_abort_fcp_command_handler()
821 switch (req->qtcb->header.fsf_status) { in zfcp_fsf_abort_fcp_command_handler()
826 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_abort_fcp_command_handler()
832 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_abort_fcp_command_handler()
836 req->status |= ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED; in zfcp_fsf_abort_fcp_command_handler()
843 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_abort_fcp_command_handler()
849 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_abort_fcp_command_handler()
857 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_abort_fcp_command_handler()
862 req->status |= ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED; in zfcp_fsf_abort_fcp_command_handler()
875 struct zfcp_fsf_req *req = NULL; in zfcp_fsf_abort_fcp_cmnd() local
884 req = zfcp_fsf_req_create(qdio, FSF_QTCB_ABORT_FCP_CMND, in zfcp_fsf_abort_fcp_cmnd()
887 if (IS_ERR(req)) { in zfcp_fsf_abort_fcp_cmnd()
888 req = NULL; in zfcp_fsf_abort_fcp_cmnd()
896 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_abort_fcp_cmnd()
898 req->data = sdev; in zfcp_fsf_abort_fcp_cmnd()
899 req->handler = zfcp_fsf_abort_fcp_command_handler; in zfcp_fsf_abort_fcp_cmnd()
900 req->qtcb->header.lun_handle = zfcp_sdev->lun_handle; in zfcp_fsf_abort_fcp_cmnd()
901 req->qtcb->header.port_handle = zfcp_sdev->port->handle; in zfcp_fsf_abort_fcp_cmnd()
902 req->qtcb->bottom.support.req_handle = (u64) old_req_id; in zfcp_fsf_abort_fcp_cmnd()
904 zfcp_fsf_start_timer(req, ZFCP_SCSI_ER_TIMEOUT); in zfcp_fsf_abort_fcp_cmnd()
905 if (!zfcp_fsf_req_send(req)) in zfcp_fsf_abort_fcp_cmnd()
909 zfcp_fsf_req_free(req); in zfcp_fsf_abort_fcp_cmnd()
910 req = NULL; in zfcp_fsf_abort_fcp_cmnd()
913 return req; in zfcp_fsf_abort_fcp_cmnd()
916 static void zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *req) in zfcp_fsf_send_ct_handler() argument
918 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_send_ct_handler()
919 struct zfcp_fsf_ct_els *ct = req->data; in zfcp_fsf_send_ct_handler()
920 struct fsf_qtcb_header *header = &req->qtcb->header; in zfcp_fsf_send_ct_handler()
924 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_send_ct_handler()
929 zfcp_dbf_san_res("fsscth2", req); in zfcp_fsf_send_ct_handler()
933 zfcp_fsf_class_not_supp(req); in zfcp_fsf_send_ct_handler()
939 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_send_ct_handler()
944 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_send_ct_handler()
954 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_send_ct_handler()
973 static int zfcp_fsf_setup_ct_els_sbals(struct zfcp_fsf_req *req, in zfcp_fsf_setup_ct_els_sbals() argument
977 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_setup_ct_els_sbals()
979 struct fsf_qtcb *qtcb = req->qtcb; in zfcp_fsf_setup_ct_els_sbals()
983 if (zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, sg_req)) in zfcp_fsf_setup_ct_els_sbals()
985 if (zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, sg_resp)) in zfcp_fsf_setup_ct_els_sbals()
988 zfcp_qdio_set_data_div(qdio, &req->qdio_req, in zfcp_fsf_setup_ct_els_sbals()
990 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_setup_ct_els_sbals()
991 zfcp_qdio_set_scount(qdio, &req->qdio_req); in zfcp_fsf_setup_ct_els_sbals()
997 zfcp_fsf_setup_ct_els_unchained(qdio, &req->qdio_req, in zfcp_fsf_setup_ct_els_sbals()
1005 if (zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, sg_req)) in zfcp_fsf_setup_ct_els_sbals()
1010 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_setup_ct_els_sbals()
1011 zfcp_qdio_skip_to_last_sbale(qdio, &req->qdio_req); in zfcp_fsf_setup_ct_els_sbals()
1013 if (zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, sg_resp)) in zfcp_fsf_setup_ct_els_sbals()
1018 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_setup_ct_els_sbals()
1023 static int zfcp_fsf_setup_ct_els(struct zfcp_fsf_req *req, in zfcp_fsf_setup_ct_els() argument
1030 ret = zfcp_fsf_setup_ct_els_sbals(req, sg_req, sg_resp); in zfcp_fsf_setup_ct_els()
1037 req->qtcb->bottom.support.service_class = FSF_CLASS_3; in zfcp_fsf_setup_ct_els()
1038 req->qtcb->bottom.support.timeout = timeout; in zfcp_fsf_setup_ct_els()
1039 zfcp_fsf_start_timer(req, (timeout + 10) * HZ); in zfcp_fsf_setup_ct_els()
1054 struct zfcp_fsf_req *req; in zfcp_fsf_send_ct() local
1061 req = zfcp_fsf_req_create(qdio, FSF_QTCB_SEND_GENERIC, in zfcp_fsf_send_ct()
1064 if (IS_ERR(req)) { in zfcp_fsf_send_ct()
1065 ret = PTR_ERR(req); in zfcp_fsf_send_ct()
1069 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_send_ct()
1070 ret = zfcp_fsf_setup_ct_els(req, ct->req, ct->resp, timeout); in zfcp_fsf_send_ct()
1074 req->handler = zfcp_fsf_send_ct_handler; in zfcp_fsf_send_ct()
1075 req->qtcb->header.port_handle = wka_port->handle; in zfcp_fsf_send_ct()
1076 req->data = ct; in zfcp_fsf_send_ct()
1078 zfcp_dbf_san_req("fssct_1", req, wka_port->d_id); in zfcp_fsf_send_ct()
1080 ret = zfcp_fsf_req_send(req); in zfcp_fsf_send_ct()
1087 zfcp_fsf_req_free(req); in zfcp_fsf_send_ct()
1093 static void zfcp_fsf_send_els_handler(struct zfcp_fsf_req *req) in zfcp_fsf_send_els_handler() argument
1095 struct zfcp_fsf_ct_els *send_els = req->data; in zfcp_fsf_send_els_handler()
1096 struct fsf_qtcb_header *header = &req->qtcb->header; in zfcp_fsf_send_els_handler()
1100 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_send_els_handler()
1105 zfcp_dbf_san_res("fsselh1", req); in zfcp_fsf_send_els_handler()
1109 zfcp_fsf_class_not_supp(req); in zfcp_fsf_send_els_handler()
1116 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_send_els_handler()
1129 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_send_els_handler()
1144 struct zfcp_fsf_req *req; in zfcp_fsf_send_els() local
1152 req = zfcp_fsf_req_create(qdio, FSF_QTCB_SEND_ELS, in zfcp_fsf_send_els()
1155 if (IS_ERR(req)) { in zfcp_fsf_send_els()
1156 ret = PTR_ERR(req); in zfcp_fsf_send_els()
1160 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_send_els()
1163 zfcp_qdio_sbal_limit(qdio, &req->qdio_req, 2); in zfcp_fsf_send_els()
1165 ret = zfcp_fsf_setup_ct_els(req, els->req, els->resp, timeout); in zfcp_fsf_send_els()
1170 hton24(req->qtcb->bottom.support.d_id, d_id); in zfcp_fsf_send_els()
1171 req->handler = zfcp_fsf_send_els_handler; in zfcp_fsf_send_els()
1172 req->data = els; in zfcp_fsf_send_els()
1174 zfcp_dbf_san_req("fssels1", req, d_id); in zfcp_fsf_send_els()
1176 ret = zfcp_fsf_req_send(req); in zfcp_fsf_send_els()
1183 zfcp_fsf_req_free(req); in zfcp_fsf_send_els()
1191 struct zfcp_fsf_req *req; in zfcp_fsf_exchange_config_data() local
1199 req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_CONFIG_DATA, in zfcp_fsf_exchange_config_data()
1203 if (IS_ERR(req)) { in zfcp_fsf_exchange_config_data()
1204 retval = PTR_ERR(req); in zfcp_fsf_exchange_config_data()
1208 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_exchange_config_data()
1209 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_exchange_config_data()
1211 req->qtcb->bottom.config.feature_selection = in zfcp_fsf_exchange_config_data()
1214 req->erp_action = erp_action; in zfcp_fsf_exchange_config_data()
1215 req->handler = zfcp_fsf_exchange_config_data_handler; in zfcp_fsf_exchange_config_data()
1216 erp_action->fsf_req_id = req->req_id; in zfcp_fsf_exchange_config_data()
1218 zfcp_fsf_start_erp_timer(req); in zfcp_fsf_exchange_config_data()
1219 retval = zfcp_fsf_req_send(req); in zfcp_fsf_exchange_config_data()
1221 zfcp_fsf_req_free(req); in zfcp_fsf_exchange_config_data()
1232 struct zfcp_fsf_req *req = NULL; in zfcp_fsf_exchange_config_data_sync() local
1239 req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_CONFIG_DATA, in zfcp_fsf_exchange_config_data_sync()
1242 if (IS_ERR(req)) { in zfcp_fsf_exchange_config_data_sync()
1243 retval = PTR_ERR(req); in zfcp_fsf_exchange_config_data_sync()
1247 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_exchange_config_data_sync()
1248 req->handler = zfcp_fsf_exchange_config_data_handler; in zfcp_fsf_exchange_config_data_sync()
1250 req->qtcb->bottom.config.feature_selection = in zfcp_fsf_exchange_config_data_sync()
1255 req->data = data; in zfcp_fsf_exchange_config_data_sync()
1257 zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); in zfcp_fsf_exchange_config_data_sync()
1258 retval = zfcp_fsf_req_send(req); in zfcp_fsf_exchange_config_data_sync()
1261 wait_for_completion(&req->completion); in zfcp_fsf_exchange_config_data_sync()
1263 zfcp_fsf_req_free(req); in zfcp_fsf_exchange_config_data_sync()
1279 struct zfcp_fsf_req *req; in zfcp_fsf_exchange_port_data() local
1289 req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_PORT_DATA, in zfcp_fsf_exchange_port_data()
1293 if (IS_ERR(req)) { in zfcp_fsf_exchange_port_data()
1294 retval = PTR_ERR(req); in zfcp_fsf_exchange_port_data()
1298 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_exchange_port_data()
1299 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_exchange_port_data()
1301 req->handler = zfcp_fsf_exchange_port_data_handler; in zfcp_fsf_exchange_port_data()
1302 req->erp_action = erp_action; in zfcp_fsf_exchange_port_data()
1303 erp_action->fsf_req_id = req->req_id; in zfcp_fsf_exchange_port_data()
1305 zfcp_fsf_start_erp_timer(req); in zfcp_fsf_exchange_port_data()
1306 retval = zfcp_fsf_req_send(req); in zfcp_fsf_exchange_port_data()
1308 zfcp_fsf_req_free(req); in zfcp_fsf_exchange_port_data()
1325 struct zfcp_fsf_req *req = NULL; in zfcp_fsf_exchange_port_data_sync() local
1335 req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_PORT_DATA, in zfcp_fsf_exchange_port_data_sync()
1338 if (IS_ERR(req)) { in zfcp_fsf_exchange_port_data_sync()
1339 retval = PTR_ERR(req); in zfcp_fsf_exchange_port_data_sync()
1344 req->data = data; in zfcp_fsf_exchange_port_data_sync()
1346 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_exchange_port_data_sync()
1348 req->handler = zfcp_fsf_exchange_port_data_handler; in zfcp_fsf_exchange_port_data_sync()
1349 zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); in zfcp_fsf_exchange_port_data_sync()
1350 retval = zfcp_fsf_req_send(req); in zfcp_fsf_exchange_port_data_sync()
1354 wait_for_completion(&req->completion); in zfcp_fsf_exchange_port_data_sync()
1356 zfcp_fsf_req_free(req); in zfcp_fsf_exchange_port_data_sync()
1365 static void zfcp_fsf_open_port_handler(struct zfcp_fsf_req *req) in zfcp_fsf_open_port_handler() argument
1367 struct zfcp_port *port = req->data; in zfcp_fsf_open_port_handler()
1368 struct fsf_qtcb_header *header = &req->qtcb->header; in zfcp_fsf_open_port_handler()
1371 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_open_port_handler()
1378 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_open_port_handler()
1384 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_open_port_handler()
1391 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_open_port_handler()
1416 plogi = (struct fc_els_flogi *) req->qtcb->bottom.support.els; in zfcp_fsf_open_port_handler()
1417 if (req->qtcb->bottom.support.els1_length >= in zfcp_fsf_open_port_handler()
1422 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_open_port_handler()
1439 struct zfcp_fsf_req *req; in zfcp_fsf_open_port() local
1446 req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_PORT_WITH_DID, in zfcp_fsf_open_port()
1450 if (IS_ERR(req)) { in zfcp_fsf_open_port()
1451 retval = PTR_ERR(req); in zfcp_fsf_open_port()
1455 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_open_port()
1456 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_open_port()
1458 req->handler = zfcp_fsf_open_port_handler; in zfcp_fsf_open_port()
1459 hton24(req->qtcb->bottom.support.d_id, port->d_id); in zfcp_fsf_open_port()
1460 req->data = port; in zfcp_fsf_open_port()
1461 req->erp_action = erp_action; in zfcp_fsf_open_port()
1462 erp_action->fsf_req_id = req->req_id; in zfcp_fsf_open_port()
1465 zfcp_fsf_start_erp_timer(req); in zfcp_fsf_open_port()
1466 retval = zfcp_fsf_req_send(req); in zfcp_fsf_open_port()
1468 zfcp_fsf_req_free(req); in zfcp_fsf_open_port()
1477 static void zfcp_fsf_close_port_handler(struct zfcp_fsf_req *req) in zfcp_fsf_close_port_handler() argument
1479 struct zfcp_port *port = req->data; in zfcp_fsf_close_port_handler()
1481 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_close_port_handler()
1484 switch (req->qtcb->header.fsf_status) { in zfcp_fsf_close_port_handler()
1487 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_close_port_handler()
1505 struct zfcp_fsf_req *req; in zfcp_fsf_close_port() local
1512 req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PORT, in zfcp_fsf_close_port()
1516 if (IS_ERR(req)) { in zfcp_fsf_close_port()
1517 retval = PTR_ERR(req); in zfcp_fsf_close_port()
1521 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_close_port()
1522 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_close_port()
1524 req->handler = zfcp_fsf_close_port_handler; in zfcp_fsf_close_port()
1525 req->data = erp_action->port; in zfcp_fsf_close_port()
1526 req->erp_action = erp_action; in zfcp_fsf_close_port()
1527 req->qtcb->header.port_handle = erp_action->port->handle; in zfcp_fsf_close_port()
1528 erp_action->fsf_req_id = req->req_id; in zfcp_fsf_close_port()
1530 zfcp_fsf_start_erp_timer(req); in zfcp_fsf_close_port()
1531 retval = zfcp_fsf_req_send(req); in zfcp_fsf_close_port()
1533 zfcp_fsf_req_free(req); in zfcp_fsf_close_port()
1541 static void zfcp_fsf_open_wka_port_handler(struct zfcp_fsf_req *req) in zfcp_fsf_open_wka_port_handler() argument
1543 struct zfcp_fc_wka_port *wka_port = req->data; in zfcp_fsf_open_wka_port_handler()
1544 struct fsf_qtcb_header *header = &req->qtcb->header; in zfcp_fsf_open_wka_port_handler()
1546 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) { in zfcp_fsf_open_wka_port_handler()
1553 dev_warn(&req->adapter->ccw_device->dev, in zfcp_fsf_open_wka_port_handler()
1557 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_open_wka_port_handler()
1578 struct zfcp_fsf_req *req; in zfcp_fsf_open_wka_port() local
1585 req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_PORT_WITH_DID, in zfcp_fsf_open_wka_port()
1589 if (IS_ERR(req)) { in zfcp_fsf_open_wka_port()
1590 retval = PTR_ERR(req); in zfcp_fsf_open_wka_port()
1594 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_open_wka_port()
1595 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_open_wka_port()
1597 req->handler = zfcp_fsf_open_wka_port_handler; in zfcp_fsf_open_wka_port()
1598 hton24(req->qtcb->bottom.support.d_id, wka_port->d_id); in zfcp_fsf_open_wka_port()
1599 req->data = wka_port; in zfcp_fsf_open_wka_port()
1601 zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); in zfcp_fsf_open_wka_port()
1602 retval = zfcp_fsf_req_send(req); in zfcp_fsf_open_wka_port()
1604 zfcp_fsf_req_free(req); in zfcp_fsf_open_wka_port()
1610 static void zfcp_fsf_close_wka_port_handler(struct zfcp_fsf_req *req) in zfcp_fsf_close_wka_port_handler() argument
1612 struct zfcp_fc_wka_port *wka_port = req->data; in zfcp_fsf_close_wka_port_handler()
1614 if (req->qtcb->header.fsf_status == FSF_PORT_HANDLE_NOT_VALID) { in zfcp_fsf_close_wka_port_handler()
1615 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_close_wka_port_handler()
1631 struct zfcp_fsf_req *req; in zfcp_fsf_close_wka_port() local
1638 req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PORT, in zfcp_fsf_close_wka_port()
1642 if (IS_ERR(req)) { in zfcp_fsf_close_wka_port()
1643 retval = PTR_ERR(req); in zfcp_fsf_close_wka_port()
1647 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_close_wka_port()
1648 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_close_wka_port()
1650 req->handler = zfcp_fsf_close_wka_port_handler; in zfcp_fsf_close_wka_port()
1651 req->data = wka_port; in zfcp_fsf_close_wka_port()
1652 req->qtcb->header.port_handle = wka_port->handle; in zfcp_fsf_close_wka_port()
1654 zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); in zfcp_fsf_close_wka_port()
1655 retval = zfcp_fsf_req_send(req); in zfcp_fsf_close_wka_port()
1657 zfcp_fsf_req_free(req); in zfcp_fsf_close_wka_port()
1663 static void zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *req) in zfcp_fsf_close_physical_port_handler() argument
1665 struct zfcp_port *port = req->data; in zfcp_fsf_close_physical_port_handler()
1666 struct fsf_qtcb_header *header = &req->qtcb->header; in zfcp_fsf_close_physical_port_handler()
1669 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_close_physical_port_handler()
1675 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_close_physical_port_handler()
1688 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_close_physical_port_handler()
1695 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_close_physical_port_handler()
1720 struct zfcp_fsf_req *req; in zfcp_fsf_close_physical_port() local
1727 req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PHYSICAL_PORT, in zfcp_fsf_close_physical_port()
1731 if (IS_ERR(req)) { in zfcp_fsf_close_physical_port()
1732 retval = PTR_ERR(req); in zfcp_fsf_close_physical_port()
1736 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_close_physical_port()
1737 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_close_physical_port()
1739 req->data = erp_action->port; in zfcp_fsf_close_physical_port()
1740 req->qtcb->header.port_handle = erp_action->port->handle; in zfcp_fsf_close_physical_port()
1741 req->erp_action = erp_action; in zfcp_fsf_close_physical_port()
1742 req->handler = zfcp_fsf_close_physical_port_handler; in zfcp_fsf_close_physical_port()
1743 erp_action->fsf_req_id = req->req_id; in zfcp_fsf_close_physical_port()
1745 zfcp_fsf_start_erp_timer(req); in zfcp_fsf_close_physical_port()
1746 retval = zfcp_fsf_req_send(req); in zfcp_fsf_close_physical_port()
1748 zfcp_fsf_req_free(req); in zfcp_fsf_close_physical_port()
1756 static void zfcp_fsf_open_lun_handler(struct zfcp_fsf_req *req) in zfcp_fsf_open_lun_handler() argument
1758 struct zfcp_adapter *adapter = req->adapter; in zfcp_fsf_open_lun_handler()
1759 struct scsi_device *sdev = req->data; in zfcp_fsf_open_lun_handler()
1761 struct fsf_qtcb_header *header = &req->qtcb->header; in zfcp_fsf_open_lun_handler()
1764 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_open_lun_handler()
1785 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_open_lun_handler()
1799 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_open_lun_handler()
1810 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_open_lun_handler()
1818 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_open_lun_handler()
1839 struct zfcp_fsf_req *req; in zfcp_fsf_open_lun() local
1846 req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_LUN, in zfcp_fsf_open_lun()
1850 if (IS_ERR(req)) { in zfcp_fsf_open_lun()
1851 retval = PTR_ERR(req); in zfcp_fsf_open_lun()
1855 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_open_lun()
1856 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_open_lun()
1858 req->qtcb->header.port_handle = erp_action->port->handle; in zfcp_fsf_open_lun()
1859 req->qtcb->bottom.support.fcp_lun = zfcp_scsi_dev_lun(erp_action->sdev); in zfcp_fsf_open_lun()
1860 req->handler = zfcp_fsf_open_lun_handler; in zfcp_fsf_open_lun()
1861 req->data = erp_action->sdev; in zfcp_fsf_open_lun()
1862 req->erp_action = erp_action; in zfcp_fsf_open_lun()
1863 erp_action->fsf_req_id = req->req_id; in zfcp_fsf_open_lun()
1866 req->qtcb->bottom.support.option = FSF_OPEN_LUN_SUPPRESS_BOXING; in zfcp_fsf_open_lun()
1868 zfcp_fsf_start_erp_timer(req); in zfcp_fsf_open_lun()
1869 retval = zfcp_fsf_req_send(req); in zfcp_fsf_open_lun()
1871 zfcp_fsf_req_free(req); in zfcp_fsf_open_lun()
1879 static void zfcp_fsf_close_lun_handler(struct zfcp_fsf_req *req) in zfcp_fsf_close_lun_handler() argument
1881 struct scsi_device *sdev = req->data; in zfcp_fsf_close_lun_handler()
1884 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_close_lun_handler()
1889 switch (req->qtcb->header.fsf_status) { in zfcp_fsf_close_lun_handler()
1892 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_close_lun_handler()
1896 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_close_lun_handler()
1903 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_close_lun_handler()
1906 switch (req->qtcb->header.fsf_status_qual.word[0]) { in zfcp_fsf_close_lun_handler()
1911 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_close_lun_handler()
1930 struct zfcp_fsf_req *req; in zfcp_fsf_close_lun() local
1937 req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_LUN, in zfcp_fsf_close_lun()
1941 if (IS_ERR(req)) { in zfcp_fsf_close_lun()
1942 retval = PTR_ERR(req); in zfcp_fsf_close_lun()
1946 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_close_lun()
1947 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_close_lun()
1949 req->qtcb->header.port_handle = erp_action->port->handle; in zfcp_fsf_close_lun()
1950 req->qtcb->header.lun_handle = zfcp_sdev->lun_handle; in zfcp_fsf_close_lun()
1951 req->handler = zfcp_fsf_close_lun_handler; in zfcp_fsf_close_lun()
1952 req->data = erp_action->sdev; in zfcp_fsf_close_lun()
1953 req->erp_action = erp_action; in zfcp_fsf_close_lun()
1954 erp_action->fsf_req_id = req->req_id; in zfcp_fsf_close_lun()
1956 zfcp_fsf_start_erp_timer(req); in zfcp_fsf_close_lun()
1957 retval = zfcp_fsf_req_send(req); in zfcp_fsf_close_lun()
1959 zfcp_fsf_req_free(req); in zfcp_fsf_close_lun()
1974 static void zfcp_fsf_req_trace(struct zfcp_fsf_req *req, struct scsi_cmnd *scsi) in zfcp_fsf_req_trace() argument
1980 int ticks = req->adapter->timer_ticks; in zfcp_fsf_req_trace()
1982 lat_in = &req->qtcb->prefix.prot_status_qual.latency_info; in zfcp_fsf_req_trace()
1986 if (req->status & ZFCP_STATUS_FSFREQ_ERROR) in zfcp_fsf_req_trace()
1989 blktrc.outb_usage = req->qdio_req.qdio_outb_usage; in zfcp_fsf_req_trace()
1991 if (req->adapter->adapter_features & FSF_FEATURE_MEASUREMENT_DATA && in zfcp_fsf_req_trace()
1992 !(req->status & ZFCP_STATUS_FSFREQ_ERROR)) { in zfcp_fsf_req_trace()
1998 switch (req->qtcb->bottom.io.data_direction) { in zfcp_fsf_req_trace()
2027 static void zfcp_fsf_fcp_handler_common(struct zfcp_fsf_req *req) in zfcp_fsf_fcp_handler_common() argument
2029 struct scsi_cmnd *scmnd = req->data; in zfcp_fsf_fcp_handler_common()
2032 struct fsf_qtcb_header *header = &req->qtcb->header; in zfcp_fsf_fcp_handler_common()
2034 if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR)) in zfcp_fsf_fcp_handler_common()
2043 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_fcp_handler_common()
2048 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_fcp_handler_common()
2051 zfcp_fsf_class_not_supp(req); in zfcp_fsf_fcp_handler_common()
2054 dev_err(&req->adapter->ccw_device->dev, in zfcp_fsf_fcp_handler_common()
2057 req->qtcb->bottom.io.data_direction, in zfcp_fsf_fcp_handler_common()
2062 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_fcp_handler_common()
2065 dev_err(&req->adapter->ccw_device->dev, in zfcp_fsf_fcp_handler_common()
2068 req->qtcb->bottom.io.fcp_cmnd_length, in zfcp_fsf_fcp_handler_common()
2073 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_fcp_handler_common()
2080 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_fcp_handler_common()
2086 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_fcp_handler_common()
2092 req->status |= ZFCP_STATUS_FSFREQ_ERROR; in zfcp_fsf_fcp_handler_common()
2097 static void zfcp_fsf_fcp_cmnd_handler(struct zfcp_fsf_req *req) in zfcp_fsf_fcp_cmnd_handler() argument
2103 read_lock_irqsave(&req->adapter->abort_lock, flags); in zfcp_fsf_fcp_cmnd_handler()
2105 scpnt = req->data; in zfcp_fsf_fcp_cmnd_handler()
2107 read_unlock_irqrestore(&req->adapter->abort_lock, flags); in zfcp_fsf_fcp_cmnd_handler()
2111 zfcp_fsf_fcp_handler_common(req); in zfcp_fsf_fcp_cmnd_handler()
2113 if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR)) { in zfcp_fsf_fcp_cmnd_handler()
2118 switch (req->qtcb->header.fsf_status) { in zfcp_fsf_fcp_cmnd_handler()
2133 fcp_rsp = (struct fcp_resp_with_ext *) &req->qtcb->bottom.io.fcp_rsp; in zfcp_fsf_fcp_cmnd_handler()
2137 zfcp_fsf_req_trace(req, scpnt); in zfcp_fsf_fcp_cmnd_handler()
2138 zfcp_dbf_scsi_result(scpnt, req); in zfcp_fsf_fcp_cmnd_handler()
2148 read_unlock_irqrestore(&req->adapter->abort_lock, flags); in zfcp_fsf_fcp_cmnd_handler()
2195 struct zfcp_fsf_req *req; in zfcp_fsf_fcp_cmnd() local
2219 req = zfcp_fsf_req_create(qdio, FSF_QTCB_FCP_CMND, in zfcp_fsf_fcp_cmnd()
2222 if (IS_ERR(req)) { in zfcp_fsf_fcp_cmnd()
2223 retval = PTR_ERR(req); in zfcp_fsf_fcp_cmnd()
2227 scsi_cmnd->host_scribble = (unsigned char *) req->req_id; in zfcp_fsf_fcp_cmnd()
2229 io = &req->qtcb->bottom.io; in zfcp_fsf_fcp_cmnd()
2230 req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; in zfcp_fsf_fcp_cmnd()
2231 req->data = scsi_cmnd; in zfcp_fsf_fcp_cmnd()
2232 req->handler = zfcp_fsf_fcp_cmnd_handler; in zfcp_fsf_fcp_cmnd()
2233 req->qtcb->header.lun_handle = zfcp_sdev->lun_handle; in zfcp_fsf_fcp_cmnd()
2234 req->qtcb->header.port_handle = zfcp_sdev->port->handle; in zfcp_fsf_fcp_cmnd()
2246 fcp_cmnd = (struct fcp_cmnd *) &req->qtcb->bottom.io.fcp_cmnd; in zfcp_fsf_fcp_cmnd()
2250 zfcp_qdio_set_data_div(qdio, &req->qdio_req, in zfcp_fsf_fcp_cmnd()
2252 retval = zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, in zfcp_fsf_fcp_cmnd()
2260 retval = zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, in zfcp_fsf_fcp_cmnd()
2265 zfcp_qdio_set_sbale_last(adapter->qdio, &req->qdio_req); in zfcp_fsf_fcp_cmnd()
2267 zfcp_qdio_set_scount(qdio, &req->qdio_req); in zfcp_fsf_fcp_cmnd()
2269 retval = zfcp_fsf_req_send(req); in zfcp_fsf_fcp_cmnd()
2276 zfcp_fsf_req_free(req); in zfcp_fsf_fcp_cmnd()
2283 static void zfcp_fsf_fcp_task_mgmt_handler(struct zfcp_fsf_req *req) in zfcp_fsf_fcp_task_mgmt_handler() argument
2288 zfcp_fsf_fcp_handler_common(req); in zfcp_fsf_fcp_task_mgmt_handler()
2290 fcp_rsp = (struct fcp_resp_with_ext *) &req->qtcb->bottom.io.fcp_rsp; in zfcp_fsf_fcp_task_mgmt_handler()
2294 (req->status & ZFCP_STATUS_FSFREQ_ERROR)) in zfcp_fsf_fcp_task_mgmt_handler()
2295 req->status |= ZFCP_STATUS_FSFREQ_TMFUNCFAILED; in zfcp_fsf_fcp_task_mgmt_handler()
2307 struct zfcp_fsf_req *req = NULL; in zfcp_fsf_fcp_task_mgmt() local
2320 req = zfcp_fsf_req_create(qdio, FSF_QTCB_FCP_CMND, in zfcp_fsf_fcp_task_mgmt()
2324 if (IS_ERR(req)) { in zfcp_fsf_fcp_task_mgmt()
2325 req = NULL; in zfcp_fsf_fcp_task_mgmt()
2329 req->data = scmnd; in zfcp_fsf_fcp_task_mgmt()
2330 req->handler = zfcp_fsf_fcp_task_mgmt_handler; in zfcp_fsf_fcp_task_mgmt()
2331 req->qtcb->header.lun_handle = zfcp_sdev->lun_handle; in zfcp_fsf_fcp_task_mgmt()
2332 req->qtcb->header.port_handle = zfcp_sdev->port->handle; in zfcp_fsf_fcp_task_mgmt()
2333 req->qtcb->bottom.io.data_direction = FSF_DATADIR_CMND; in zfcp_fsf_fcp_task_mgmt()
2334 req->qtcb->bottom.io.service_class = FSF_CLASS_3; in zfcp_fsf_fcp_task_mgmt()
2335 req->qtcb->bottom.io.fcp_cmnd_length = FCP_CMND_LEN; in zfcp_fsf_fcp_task_mgmt()
2337 zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); in zfcp_fsf_fcp_task_mgmt()
2339 fcp_cmnd = (struct fcp_cmnd *) &req->qtcb->bottom.io.fcp_cmnd; in zfcp_fsf_fcp_task_mgmt()
2342 zfcp_fsf_start_timer(req, ZFCP_SCSI_ER_TIMEOUT); in zfcp_fsf_fcp_task_mgmt()
2343 if (!zfcp_fsf_req_send(req)) in zfcp_fsf_fcp_task_mgmt()
2346 zfcp_fsf_req_free(req); in zfcp_fsf_fcp_task_mgmt()
2347 req = NULL; in zfcp_fsf_fcp_task_mgmt()
2350 return req; in zfcp_fsf_fcp_task_mgmt()