Lines Matching defs:els

25 #define els_io_printf(els, fmt, ...) \
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;
50 efc_log_err(efc, "els io alloc disabled\n");
54 els = mempool_alloc(efc->els_io_pool, GFP_ATOMIC);
55 if (!els) {
61 kref_init(&els->ref);
62 els->release = _efc_els_io_free;
65 els->node = node;
68 els->io.req.size = reqlen;
69 els->io.req.virt = dma_alloc_coherent(&efc->pci->dev, els->io.req.size,
70 &els->io.req.phys, GFP_KERNEL);
71 if (!els->io.req.virt) {
72 mempool_free(els, efc->els_io_pool);
76 els->io.rsp.size = rsplen;
77 els->io.rsp.virt = dma_alloc_coherent(&efc->pci->dev, els->io.rsp.size,
78 &els->io.rsp.phys, GFP_KERNEL);
79 if (!els->io.rsp.virt) {
80 dma_free_coherent(&efc->pci->dev, els->io.req.size,
81 els->io.req.virt, els->io.req.phys);
82 mempool_free(els, efc->els_io_pool);
83 els = NULL;
86 if (els) {
88 els->els_retries_remaining = EFC_FC_ELS_DEFAULT_RETRIES;
90 /* add els structure to ELS IO list */
91 INIT_LIST_HEAD(&els->list_entry);
93 list_add_tail(&els->list_entry, &node->els_ios_list);
97 return els;
101 efc_els_io_free(struct efc_els_io_req *els)
103 kref_put(&els->ref, els->release);
109 struct efc_els_io_req *els =
116 node = els->node;
121 list_del(&els->list_entry);
133 dma_free_coherent(&efc->pci->dev, els->io.rsp.size,
134 els->io.rsp.virt, els->io.rsp.phys);
135 dma_free_coherent(&efc->pci->dev, els->io.req.size,
136 els->io.req.virt, els->io.req.phys);
138 mempool_free(els, efc->els_io_pool);
145 efc_els_retry(struct efc_els_io_req *els);
150 struct efc_els_io_req *els = from_timer(els, t, delay_timer);
153 efc_els_retry(els);
159 struct efc_els_io_req *els;
165 els = arg;
166 node = els->node;
170 els_io_printf(els, "status x%x ext x%x\n", status, ext_status);
172 /* set the response len element of els->rsp */
173 els->io.rsp.len = length;
178 cbdata.els_rsp = els->io.rsp;
180 /* set the response len element of els->rsp */
187 if (length > els->io.rsp.size) {
190 length, els->io.rsp.size);
191 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_FAIL, &cbdata);
198 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_OK, &cbdata);
207 els->node->els_req_cnt--;
208 els_io_printf(els,
210 timer_setup(&els->delay_timer,
212 mod_timer(&els->delay_timer,
216 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_RJT,
225 efc_els_retry(els);
230 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_FAIL,
236 efc_log_warn(efc, "els req failed status x%x, ext_status x%x\n",
238 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_FAIL, &cbdata);
248 struct efc_els_io_req *els =
251 WARN_ON_ONCE(!els->cb);
253 ((efc_hw_srrs_cb_t)els->cb) (els, len, status, ext_status);
256 static int efc_els_send_req(struct efc_node *node, struct efc_els_io_req *els,
264 els->node->els_req_cnt++;
267 els->io.io_type = io_type;
268 els->io.xmit_len = els->io.req.size;
269 els->io.rsp_len = els->io.rsp.size;
270 els->io.rpi = node->rnode.indicator;
271 els->io.vpi = node->nport->indicator;
272 els->io.s_id = node->nport->fc_id;
273 els->io.d_id = node->rnode.fc_id;
276 els->io.rpi_registered = true;
278 els->cb = efc_els_req_cb;
280 rc = efc->tt.send_els(efc, &els->io);
286 cbdata.els_rsp = els->io.rsp;
288 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_FAIL, &cbdata);
294 efc_els_retry(struct efc_els_io_req *els)
300 efc = els->node->efc;
303 cbdata.els_rsp = els->io.rsp;
305 if (els->els_retries_remaining) {
306 els->els_retries_remaining--;
307 rc = efc->tt.send_els(efc, &els->io);
314 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_REQ_FAIL, &cbdata);
321 struct efc_els_io_req *els;
326 els = arg;
327 node = els->node;
333 cbdata.els_rsp = els->io.rsp;
338 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_CMPL_OK, &cbdata);
343 node->display_name, els->display_name,
345 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_CMPL_FAIL, &cbdata);
353 efc_els_send_rsp(struct efc_els_io_req *els, u32 rsplen)
357 struct efc_node *node = els->node;
363 els->io.io_type = EFC_DISC_IO_ELS_RESP;
364 els->cb = efc_els_acc_cb;
367 els->io.xmit_len = rsplen;
368 els->io.rsp_len = els->io.rsp.size;
369 els->io.rpi = node->rnode.indicator;
370 els->io.vpi = node->nport->indicator;
372 els->io.s_id = node->nport->fc_id;
374 els->io.s_id = els->io.iparam.els.s_id;
375 els->io.d_id = node->rnode.fc_id;
378 els->io.rpi_registered = true;
380 rc = efc->tt.send_els(efc, &els->io);
386 cbdata.els_rsp = els->io.rsp;
387 efc_els_io_cleanup(els, EFC_EVT_SRRS_ELS_CMPL_FAIL, &cbdata);
395 struct efc_els_io_req *els;
401 els = efc_els_io_alloc(node, sizeof(*plogi));
402 if (!els) {
406 els->display_name = "plogi";
409 plogi = els->io.req.virt;
416 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ);
422 struct efc_els_io_req *els;
430 els = efc_els_io_alloc(node, sizeof(*flogi));
431 if (!els) {
436 els->display_name = "flogi";
439 flogi = els->io.req.virt;
445 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ);
451 struct efc_els_io_req *els;
459 els = efc_els_io_alloc(node, sizeof(*fdisc));
460 if (!els) {
465 els->display_name = "fdisc";
468 fdisc = els->io.req.virt;
474 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ);
481 struct efc_els_io_req *els;
489 els = efc_els_io_alloc(node, sizeof(*pp));
490 if (!els) {
495 els->display_name = "prli";
498 pp = els->io.req.virt;
514 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ);
521 struct efc_els_io_req *els;
529 els = efc_els_io_alloc(node, sizeof(*logo));
530 if (!els) {
535 els->display_name = "logo";
539 logo = els->io.req.virt;
546 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ);
553 struct efc_els_io_req *els;
562 els = efc_els_io_alloc(node, sizeof(*adisc));
563 if (!els) {
568 els->display_name = "adisc";
572 adisc = els->io.req.virt;
581 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ);
587 struct efc_els_io_req *els;
593 els = efc_els_io_alloc(node, sizeof(*req));
594 if (!els) {
599 els->display_name = "scr";
601 req = els->io.req.virt;
607 return efc_els_send_req(node, els, EFC_DISC_IO_ELS_REQ);
615 struct efc_els_io_req *els = NULL;
618 els = efc_els_io_alloc(node, sizeof(*rjt));
619 if (!els) {
620 efc_log_err(efc, "els IO alloc failed\n");
626 els->display_name = "ls_rjt";
628 memset(&els->io.iparam, 0, sizeof(els->io.iparam));
629 els->io.iparam.els.ox_id = ox_id;
631 rjt = els->io.req.virt;
638 return efc_els_send_rsp(els, sizeof(*rjt));
645 struct efc_els_io_req *els = NULL;
651 els = efc_els_io_alloc(node, sizeof(*plogi));
652 if (!els) {
653 efc_log_err(efc, "els IO alloc failed\n");
657 els->display_name = "plogi_acc";
659 memset(&els->io.iparam, 0, sizeof(els->io.iparam));
660 els->io.iparam.els.ox_id = ox_id;
662 plogi = els->io.req.virt;
673 return efc_els_send_rsp(els, sizeof(*plogi));
680 struct efc_els_io_req *els = NULL;
685 els = efc_els_io_alloc(node, sizeof(*flogi));
686 if (!els) {
687 efc_log_err(efc, "els IO alloc failed\n");
691 els->display_name = "flogi_p2p_acc";
693 memset(&els->io.iparam, 0, sizeof(els->io.iparam));
694 els->io.iparam.els.ox_id = ox_id;
695 els->io.iparam.els.s_id = s_id;
697 flogi = els->io.req.virt;
706 return efc_els_send_rsp(els, sizeof(*flogi));
713 struct efc_els_io_req *els = NULL;
721 els = efc_els_io_alloc(node, sizeof(*pp));
722 if (!els) {
723 efc_log_err(efc, "els IO alloc failed\n");
727 els->display_name = "prli_acc";
729 memset(&els->io.iparam, 0, sizeof(els->io.iparam));
730 els->io.iparam.els.ox_id = ox_id;
732 pp = els->io.req.virt;
748 return efc_els_send_rsp(els, sizeof(*pp));
755 struct efc_els_io_req *els = NULL;
763 els = efc_els_io_alloc(node, sizeof(*pp));
764 if (!els) {
765 efc_log_err(efc, "els IO alloc failed\n");
769 els->display_name = "prlo_acc";
771 memset(&els->io.iparam, 0, sizeof(els->io.iparam));
772 els->io.iparam.els.ox_id = ox_id;
774 pp = els->io.req.virt;
784 return efc_els_send_rsp(els, sizeof(*pp));
791 struct efc_els_io_req *els = NULL;
796 els = efc_els_io_alloc(node, sizeof(*acc));
797 if (!els) {
798 efc_log_err(efc, "els IO alloc failed\n");
802 els->display_name = "ls_acc";
804 memset(&els->io.iparam, 0, sizeof(els->io.iparam));
805 els->io.iparam.els.ox_id = ox_id;
807 acc = els->io.req.virt;
812 return efc_els_send_rsp(els, sizeof(*acc));
818 struct efc_els_io_req *els = NULL;
824 els = efc_els_io_alloc(node, sizeof(*logo));
825 if (!els) {
826 efc_log_err(efc, "els IO alloc failed\n");
830 els->display_name = "logo_acc";
832 memset(&els->io.iparam, 0, sizeof(els->io.iparam));
833 els->io.iparam.els.ox_id = ox_id;
835 logo = els->io.req.virt;
840 return efc_els_send_rsp(els, sizeof(*logo));
847 struct efc_els_io_req *els = NULL;
853 els = efc_els_io_alloc(node, sizeof(*adisc));
854 if (!els) {
855 efc_log_err(efc, "els IO alloc failed\n");
859 els->display_name = "adisc_acc";
862 memset(&els->io.iparam, 0, sizeof(els->io.iparam));
863 els->io.iparam.els.ox_id = ox_id;
866 adisc = els->io.req.virt;
873 return efc_els_send_rsp(els, sizeof(*adisc));
895 struct efc_els_io_req *els;
903 els = efc_els_io_alloc(node, sizeof(*ct));
904 if (!els) {
909 els->io.iparam.ct.r_ctl = FC_RCTL_ELS_REQ;
910 els->io.iparam.ct.type = FC_TYPE_CT;
911 els->io.iparam.ct.df_ctl = 0;
912 els->io.iparam.ct.timeout = EFC_FC_ELS_SEND_DEFAULT_TIMEOUT;
914 els->display_name = "rftid";
916 ct = els->io.req.virt;
925 return efc_els_send_req(node, els, EFC_DISC_IO_CT_REQ);
932 struct efc_els_io_req *els;
940 els = efc_els_io_alloc(node, sizeof(*ct));
941 if (!els) {
946 els->io.iparam.ct.r_ctl = FC_RCTL_ELS_REQ;
947 els->io.iparam.ct.type = FC_TYPE_CT;
948 els->io.iparam.ct.df_ctl = 0;
949 els->io.iparam.ct.timeout = EFC_FC_ELS_SEND_DEFAULT_TIMEOUT;
951 els->display_name = "rffid";
952 ct = els->io.req.virt;
965 return efc_els_send_req(node, els, EFC_DISC_IO_CT_REQ);
971 struct efc_els_io_req *els = NULL;
980 els = efc_els_io_alloc_size(node, sizeof(*ct), EFC_ELS_GID_PT_RSP_LEN);
981 if (!els) {
986 els->io.iparam.ct.r_ctl = FC_RCTL_ELS_REQ;
987 els->io.iparam.ct.type = FC_TYPE_CT;
988 els->io.iparam.ct.df_ctl = 0;
989 els->io.iparam.ct.timeout = EFC_FC_ELS_SEND_DEFAULT_TIMEOUT;
991 els->display_name = "gidpt";
993 ct = els->io.req.virt;
1001 return efc_els_send_req(node, els, EFC_DISC_IO_CT_REQ);
1005 efc_els_io_cleanup(struct efc_els_io_req *els, int evt, void *arg)
1010 els->els_req_free = true;
1011 efc_node_post_els_resp(els->node, evt, arg);
1013 efc_els_io_free(els);
1019 struct efc_els_io_req *els = arg;
1021 efc_els_io_free(els);
1031 struct efc_els_io_req *els = NULL;
1034 els = efc_els_io_alloc(node, 256);
1035 if (!els) {
1040 rsp = els->io.rsp.virt;
1048 els->display_name = "ct_rsp";
1049 els->cb = efc_ct_acc_cb;
1052 els->io.io_type = EFC_DISC_IO_CT_RESP;
1053 els->io.xmit_len = sizeof(*rsp);
1055 els->io.rpi = node->rnode.indicator;
1056 els->io.d_id = node->rnode.fc_id;
1058 memset(&els->io.iparam, 0, sizeof(els->io.iparam));
1060 els->io.iparam.ct.ox_id = ox_id;
1061 els->io.iparam.ct.r_ctl = 3;
1062 els->io.iparam.ct.type = FC_TYPE_CT;
1063 els->io.iparam.ct.df_ctl = 0;
1064 els->io.iparam.ct.timeout = 5;
1066 if (efc->tt.send_els(efc, &els->io)) {
1067 efc_els_io_free(els);