Lines Matching refs:els

25 #define els_io_printf(els, fmt, ...) \  argument
26 efc_log_err((struct efc *)els->node->efc,\
28 els->node->display_name,\
29 els->display_name, ##__VA_ARGS__)
44 struct efc_els_io_req *els; in efc_els_io_alloc_size() local
57 els = mempool_alloc(efc->els_io_pool, GFP_ATOMIC); in efc_els_io_alloc_size()
58 if (!els) { in efc_els_io_alloc_size()
65 kref_init(&els->ref); in efc_els_io_alloc_size()
66 els->release = _efc_els_io_free; in efc_els_io_alloc_size()
69 els->node = node; in efc_els_io_alloc_size()
72 els->io.req.size = reqlen; in efc_els_io_alloc_size()
73 els->io.req.virt = dma_alloc_coherent(&efc->pci->dev, els->io.req.size, in efc_els_io_alloc_size()
74 &els->io.req.phys, GFP_DMA); in efc_els_io_alloc_size()
75 if (!els->io.req.virt) { in efc_els_io_alloc_size()
76 mempool_free(els, efc->els_io_pool); in efc_els_io_alloc_size()
81 els->io.rsp.size = rsplen; in efc_els_io_alloc_size()
82 els->io.rsp.virt = dma_alloc_coherent(&efc->pci->dev, els->io.rsp.size, in efc_els_io_alloc_size()
83 &els->io.rsp.phys, GFP_DMA); in efc_els_io_alloc_size()
84 if (!els->io.rsp.virt) { in efc_els_io_alloc_size()
85 dma_free_coherent(&efc->pci->dev, els->io.req.size, in efc_els_io_alloc_size()
86 els->io.req.virt, els->io.req.phys); in efc_els_io_alloc_size()
87 mempool_free(els, efc->els_io_pool); in efc_els_io_alloc_size()
88 els = NULL; in efc_els_io_alloc_size()
91 if (els) { in efc_els_io_alloc_size()
93 els->els_retries_remaining = EFC_FC_ELS_DEFAULT_RETRIES; in efc_els_io_alloc_size()
96 INIT_LIST_HEAD(&els->list_entry); in efc_els_io_alloc_size()
97 list_add_tail(&els->list_entry, &node->els_ios_list); in efc_els_io_alloc_size()
101 return els; in efc_els_io_alloc_size()
105 efc_els_io_free(struct efc_els_io_req *els) in efc_els_io_free() argument
107 kref_put(&els->ref, els->release); in efc_els_io_free()
113 struct efc_els_io_req *els = in _efc_els_io_free() local
120 node = els->node; in _efc_els_io_free()
125 list_del(&els->list_entry); in _efc_els_io_free()
137 dma_free_coherent(&efc->pci->dev, els->io.rsp.size, in _efc_els_io_free()
138 els->io.rsp.virt, els->io.rsp.phys); in _efc_els_io_free()
139 dma_free_coherent(&efc->pci->dev, els->io.req.size, in _efc_els_io_free()
140 els->io.req.virt, els->io.req.phys); in _efc_els_io_free()
142 mempool_free(els, efc->els_io_pool); in _efc_els_io_free()
149 efc_els_retry(struct efc_els_io_req *els);
154 struct efc_els_io_req *els = from_timer(els, t, delay_timer); in efc_els_delay_timer_cb() local
157 efc_els_retry(els); in efc_els_delay_timer_cb()
163 struct efc_els_io_req *els; in efc_els_req_cb() local
169 els = arg; in efc_els_req_cb()
170 node = els->node; in efc_els_req_cb()
174 els_io_printf(els, "status x%x ext x%x\n", status, ext_status); in efc_els_req_cb()
177 els->io.rsp.len = length; in efc_els_req_cb()
182 cbdata.els_rsp = els->io.rsp; in efc_els_req_cb()
191 if (length > els->io.rsp.size) { in efc_els_req_cb()
194 length, els->io.rsp.size); in efc_els_req_cb()
195 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_FAIL, &cbdata); in efc_els_req_cb()
202 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_OK, &cbdata); in efc_els_req_cb()
211 els->node->els_req_cnt--; in efc_els_req_cb()
212 els_io_printf(els, in efc_els_req_cb()
214 timer_setup(&els->delay_timer, in efc_els_req_cb()
216 mod_timer(&els->delay_timer, in efc_els_req_cb()
220 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_RJT, in efc_els_req_cb()
229 efc_els_retry(els); in efc_els_req_cb()
234 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_FAIL, in efc_els_req_cb()
242 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_FAIL, &cbdata); in efc_els_req_cb()
252 struct efc_els_io_req *els = in efc_disc_io_complete() local
255 WARN_ON_ONCE(!els->cb); in efc_disc_io_complete()
257 ((efc_hw_srrs_cb_t)els->cb) (els, len, status, ext_status); in efc_disc_io_complete()
260 static int efc_els_send_req(struct efc_node *node, struct efc_els_io_req *els, in efc_els_send_req() argument
268 els->node->els_req_cnt++; in efc_els_send_req()
271 els->io.io_type = io_type; in efc_els_send_req()
272 els->io.xmit_len = els->io.req.size; in efc_els_send_req()
273 els->io.rsp_len = els->io.rsp.size; in efc_els_send_req()
274 els->io.rpi = node->rnode.indicator; in efc_els_send_req()
275 els->io.vpi = node->nport->indicator; in efc_els_send_req()
276 els->io.s_id = node->nport->fc_id; in efc_els_send_req()
277 els->io.d_id = node->rnode.fc_id; in efc_els_send_req()
280 els->io.rpi_registered = true; in efc_els_send_req()
282 els->cb = efc_els_req_cb; in efc_els_send_req()
284 rc = efc->tt.send_els(efc, &els->io); in efc_els_send_req()
290 cbdata.els_rsp = els->io.rsp; in efc_els_send_req()
292 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_FAIL, &cbdata); in efc_els_send_req()
298 efc_els_retry(struct efc_els_io_req *els) in efc_els_retry() argument
304 efc = els->node->efc; in efc_els_retry()
307 cbdata.els_rsp = els->io.rsp; in efc_els_retry()
309 if (els->els_retries_remaining) { in efc_els_retry()
310 els->els_retries_remaining--; in efc_els_retry()
311 rc = efc->tt.send_els(efc, &els->io); in efc_els_retry()
318 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_FAIL, &cbdata); in efc_els_retry()
325 struct efc_els_io_req *els; in efc_els_acc_cb() local
330 els = arg; in efc_els_acc_cb()
331 node = els->node; in efc_els_acc_cb()
337 cbdata.els_rsp = els->io.rsp; in efc_els_acc_cb()
342 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_CMPL_OK, &cbdata); in efc_els_acc_cb()
347 node->display_name, els->display_name, in efc_els_acc_cb()
349 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_CMPL_FAIL, &cbdata); in efc_els_acc_cb()
357 efc_els_send_rsp(struct efc_els_io_req *els, u32 rsplen) in efc_els_send_rsp() argument
361 struct efc_node *node = els->node; in efc_els_send_rsp()
367 els->io.io_type = EFC_DISC_IO_ELS_RESP; in efc_els_send_rsp()
368 els->cb = efc_els_acc_cb; in efc_els_send_rsp()
371 els->io.xmit_len = rsplen; in efc_els_send_rsp()
372 els->io.rsp_len = els->io.rsp.size; in efc_els_send_rsp()
373 els->io.rpi = node->rnode.indicator; in efc_els_send_rsp()
374 els->io.vpi = node->nport->indicator; in efc_els_send_rsp()
376 els->io.s_id = node->nport->fc_id; in efc_els_send_rsp()
378 els->io.s_id = els->io.iparam.els.s_id; in efc_els_send_rsp()
379 els->io.d_id = node->rnode.fc_id; in efc_els_send_rsp()
382 els->io.rpi_registered = true; in efc_els_send_rsp()
384 rc = efc->tt.send_els(efc, &els->io); in efc_els_send_rsp()
390 cbdata.els_rsp = els->io.rsp; in efc_els_send_rsp()
391 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_CMPL_FAIL, &cbdata); in efc_els_send_rsp()
399 struct efc_els_io_req *els; in efc_send_plogi() local
405 els = efc_els_io_alloc(node, sizeof(*plogi)); in efc_send_plogi()
406 if (!els) { in efc_send_plogi()
410 els->display_name = "plogi"; in efc_send_plogi()
413 plogi = els->io.req.virt; in efc_send_plogi()
420 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ); in efc_send_plogi()
426 struct efc_els_io_req *els; in efc_send_flogi() local
434 els = efc_els_io_alloc(node, sizeof(*flogi)); in efc_send_flogi()
435 if (!els) { in efc_send_flogi()
440 els->display_name = "flogi"; in efc_send_flogi()
443 flogi = els->io.req.virt; in efc_send_flogi()
449 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ); in efc_send_flogi()
455 struct efc_els_io_req *els; in efc_send_fdisc() local
463 els = efc_els_io_alloc(node, sizeof(*fdisc)); in efc_send_fdisc()
464 if (!els) { in efc_send_fdisc()
469 els->display_name = "fdisc"; in efc_send_fdisc()
472 fdisc = els->io.req.virt; in efc_send_fdisc()
478 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ); in efc_send_fdisc()
485 struct efc_els_io_req *els; in efc_send_prli() local
493 els = efc_els_io_alloc(node, sizeof(*pp)); in efc_send_prli()
494 if (!els) { in efc_send_prli()
499 els->display_name = "prli"; in efc_send_prli()
502 pp = els->io.req.virt; in efc_send_prli()
518 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ); in efc_send_prli()
525 struct efc_els_io_req *els; in efc_send_logo() local
533 els = efc_els_io_alloc(node, sizeof(*logo)); in efc_send_logo()
534 if (!els) { in efc_send_logo()
539 els->display_name = "logo"; in efc_send_logo()
543 logo = els->io.req.virt; in efc_send_logo()
550 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ); in efc_send_logo()
557 struct efc_els_io_req *els; in efc_send_adisc() local
566 els = efc_els_io_alloc(node, sizeof(*adisc)); in efc_send_adisc()
567 if (!els) { in efc_send_adisc()
572 els->display_name = "adisc"; in efc_send_adisc()
576 adisc = els->io.req.virt; in efc_send_adisc()
585 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ); in efc_send_adisc()
591 struct efc_els_io_req *els; in efc_send_scr() local
597 els = efc_els_io_alloc(node, sizeof(*req)); in efc_send_scr()
598 if (!els) { in efc_send_scr()
603 els->display_name = "scr"; in efc_send_scr()
605 req = els->io.req.virt; in efc_send_scr()
611 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ); in efc_send_scr()
619 struct efc_els_io_req *els = NULL; in efc_send_ls_rjt() local
622 els = efc_els_io_alloc(node, sizeof(*rjt)); in efc_send_ls_rjt()
623 if (!els) { in efc_send_ls_rjt()
630 els->display_name = "ls_rjt"; in efc_send_ls_rjt()
632 memset(&els->io.iparam, 0, sizeof(els->io.iparam)); in efc_send_ls_rjt()
633 els->io.iparam.els.ox_id = ox_id; in efc_send_ls_rjt()
635 rjt = els->io.req.virt; in efc_send_ls_rjt()
642 return efc_els_send_rsp(els, sizeof(*rjt)); in efc_send_ls_rjt()
649 struct efc_els_io_req *els = NULL; in efc_send_plogi_acc() local
655 els = efc_els_io_alloc(node, sizeof(*plogi)); in efc_send_plogi_acc()
656 if (!els) { in efc_send_plogi_acc()
661 els->display_name = "plogi_acc"; in efc_send_plogi_acc()
663 memset(&els->io.iparam, 0, sizeof(els->io.iparam)); in efc_send_plogi_acc()
664 els->io.iparam.els.ox_id = ox_id; in efc_send_plogi_acc()
666 plogi = els->io.req.virt; in efc_send_plogi_acc()
677 return efc_els_send_rsp(els, sizeof(*plogi)); in efc_send_plogi_acc()
684 struct efc_els_io_req *els = NULL; in efc_send_flogi_p2p_acc() local
689 els = efc_els_io_alloc(node, sizeof(*flogi)); in efc_send_flogi_p2p_acc()
690 if (!els) { in efc_send_flogi_p2p_acc()
695 els->display_name = "flogi_p2p_acc"; in efc_send_flogi_p2p_acc()
697 memset(&els->io.iparam, 0, sizeof(els->io.iparam)); in efc_send_flogi_p2p_acc()
698 els->io.iparam.els.ox_id = ox_id; in efc_send_flogi_p2p_acc()
699 els->io.iparam.els.s_id = s_id; in efc_send_flogi_p2p_acc()
701 flogi = els->io.req.virt; in efc_send_flogi_p2p_acc()
710 return efc_els_send_rsp(els, sizeof(*flogi)); in efc_send_flogi_p2p_acc()
717 struct efc_els_io_req *els = NULL; in efc_send_prli_acc() local
725 els = efc_els_io_alloc(node, sizeof(*pp)); in efc_send_prli_acc()
726 if (!els) { in efc_send_prli_acc()
731 els->display_name = "prli_acc"; in efc_send_prli_acc()
733 memset(&els->io.iparam, 0, sizeof(els->io.iparam)); in efc_send_prli_acc()
734 els->io.iparam.els.ox_id = ox_id; in efc_send_prli_acc()
736 pp = els->io.req.virt; in efc_send_prli_acc()
752 return efc_els_send_rsp(els, sizeof(*pp)); in efc_send_prli_acc()
759 struct efc_els_io_req *els = NULL; in efc_send_prlo_acc() local
767 els = efc_els_io_alloc(node, sizeof(*pp)); in efc_send_prlo_acc()
768 if (!els) { in efc_send_prlo_acc()
773 els->display_name = "prlo_acc"; in efc_send_prlo_acc()
775 memset(&els->io.iparam, 0, sizeof(els->io.iparam)); in efc_send_prlo_acc()
776 els->io.iparam.els.ox_id = ox_id; in efc_send_prlo_acc()
778 pp = els->io.req.virt; in efc_send_prlo_acc()
788 return efc_els_send_rsp(els, sizeof(*pp)); in efc_send_prlo_acc()
795 struct efc_els_io_req *els = NULL; in efc_send_ls_acc() local
800 els = efc_els_io_alloc(node, sizeof(*acc)); in efc_send_ls_acc()
801 if (!els) { in efc_send_ls_acc()
806 els->display_name = "ls_acc"; in efc_send_ls_acc()
808 memset(&els->io.iparam, 0, sizeof(els->io.iparam)); in efc_send_ls_acc()
809 els->io.iparam.els.ox_id = ox_id; in efc_send_ls_acc()
811 acc = els->io.req.virt; in efc_send_ls_acc()
816 return efc_els_send_rsp(els, sizeof(*acc)); in efc_send_ls_acc()
822 struct efc_els_io_req *els = NULL; in efc_send_logo_acc() local
828 els = efc_els_io_alloc(node, sizeof(*logo)); in efc_send_logo_acc()
829 if (!els) { in efc_send_logo_acc()
834 els->display_name = "logo_acc"; in efc_send_logo_acc()
836 memset(&els->io.iparam, 0, sizeof(els->io.iparam)); in efc_send_logo_acc()
837 els->io.iparam.els.ox_id = ox_id; in efc_send_logo_acc()
839 logo = els->io.req.virt; in efc_send_logo_acc()
844 return efc_els_send_rsp(els, sizeof(*logo)); in efc_send_logo_acc()
851 struct efc_els_io_req *els = NULL; in efc_send_adisc_acc() local
857 els = efc_els_io_alloc(node, sizeof(*adisc)); in efc_send_adisc_acc()
858 if (!els) { in efc_send_adisc_acc()
863 els->display_name = "adisc_acc"; in efc_send_adisc_acc()
866 memset(&els->io.iparam, 0, sizeof(els->io.iparam)); in efc_send_adisc_acc()
867 els->io.iparam.els.ox_id = ox_id; in efc_send_adisc_acc()
870 adisc = els->io.req.virt; in efc_send_adisc_acc()
877 return efc_els_send_rsp(els, sizeof(*adisc)); in efc_send_adisc_acc()
899 struct efc_els_io_req *els; in efc_ns_send_rftid() local
907 els = efc_els_io_alloc(node, sizeof(*ct)); in efc_ns_send_rftid()
908 if (!els) { in efc_ns_send_rftid()
913 els->io.iparam.ct.r_ctl = FC_RCTL_ELS_REQ; in efc_ns_send_rftid()
914 els->io.iparam.ct.type = FC_TYPE_CT; in efc_ns_send_rftid()
915 els->io.iparam.ct.df_ctl = 0; in efc_ns_send_rftid()
916 els->io.iparam.ct.timeout = EFC_FC_ELS_SEND_DEFAULT_TIMEOUT; in efc_ns_send_rftid()
918 els->display_name = "rftid"; in efc_ns_send_rftid()
920 ct = els->io.req.virt; in efc_ns_send_rftid()
929 return efc_els_send_req(node, els, EFC_DISC_IO_CT_REQ); in efc_ns_send_rftid()
936 struct efc_els_io_req *els; in efc_ns_send_rffid() local
944 els = efc_els_io_alloc(node, sizeof(*ct)); in efc_ns_send_rffid()
945 if (!els) { in efc_ns_send_rffid()
950 els->io.iparam.ct.r_ctl = FC_RCTL_ELS_REQ; in efc_ns_send_rffid()
951 els->io.iparam.ct.type = FC_TYPE_CT; in efc_ns_send_rffid()
952 els->io.iparam.ct.df_ctl = 0; in efc_ns_send_rffid()
953 els->io.iparam.ct.timeout = EFC_FC_ELS_SEND_DEFAULT_TIMEOUT; in efc_ns_send_rffid()
955 els->display_name = "rffid"; in efc_ns_send_rffid()
956 ct = els->io.req.virt; in efc_ns_send_rffid()
969 return efc_els_send_req(node, els, EFC_DISC_IO_CT_REQ); in efc_ns_send_rffid()
975 struct efc_els_io_req *els = NULL; in efc_ns_send_gidpt() local
984 els = efc_els_io_alloc_size(node, sizeof(*ct), EFC_ELS_GID_PT_RSP_LEN); in efc_ns_send_gidpt()
985 if (!els) { in efc_ns_send_gidpt()
990 els->io.iparam.ct.r_ctl = FC_RCTL_ELS_REQ; in efc_ns_send_gidpt()
991 els->io.iparam.ct.type = FC_TYPE_CT; in efc_ns_send_gidpt()
992 els->io.iparam.ct.df_ctl = 0; in efc_ns_send_gidpt()
993 els->io.iparam.ct.timeout = EFC_FC_ELS_SEND_DEFAULT_TIMEOUT; in efc_ns_send_gidpt()
995 els->display_name = "gidpt"; in efc_ns_send_gidpt()
997 ct = els->io.req.virt; in efc_ns_send_gidpt()
1005 return efc_els_send_req(node, els, EFC_DISC_IO_CT_REQ); in efc_ns_send_gidpt()
1009 efc_els_io_cleanup(struct efc_els_io_req *els, int evt, void *arg) in efc_els_io_cleanup() argument
1014 els->els_req_free = true; in efc_els_io_cleanup()
1015 efc_node_post_els_resp(els->node, evt, arg); in efc_els_io_cleanup()
1017 efc_els_io_free(els); in efc_els_io_cleanup()
1023 struct efc_els_io_req *els = arg; in efc_ct_acc_cb() local
1025 efc_els_io_free(els); in efc_ct_acc_cb()
1035 struct efc_els_io_req *els = NULL; in efc_send_ct_rsp() local
1038 els = efc_els_io_alloc(node, 256); in efc_send_ct_rsp()
1039 if (!els) { in efc_send_ct_rsp()
1044 rsp = els->io.rsp.virt; in efc_send_ct_rsp()
1052 els->display_name = "ct_rsp"; in efc_send_ct_rsp()
1053 els->cb = efc_ct_acc_cb; in efc_send_ct_rsp()
1056 els->io.io_type = EFC_DISC_IO_CT_RESP; in efc_send_ct_rsp()
1057 els->io.xmit_len = sizeof(*rsp); in efc_send_ct_rsp()
1059 els->io.rpi = node->rnode.indicator; in efc_send_ct_rsp()
1060 els->io.d_id = node->rnode.fc_id; in efc_send_ct_rsp()
1062 memset(&els->io.iparam, 0, sizeof(els->io.iparam)); in efc_send_ct_rsp()
1064 els->io.iparam.ct.ox_id = ox_id; in efc_send_ct_rsp()
1065 els->io.iparam.ct.r_ctl = 3; in efc_send_ct_rsp()
1066 els->io.iparam.ct.type = FC_TYPE_CT; in efc_send_ct_rsp()
1067 els->io.iparam.ct.df_ctl = 0; in efc_send_ct_rsp()
1068 els->io.iparam.ct.timeout = 5; in efc_send_ct_rsp()
1070 if (efc->tt.send_els(efc, &els->io)) { in efc_send_ct_rsp()
1071 efc_els_io_free(els); in efc_send_ct_rsp()