Lines Matching refs:nport
34 struct efc_nport *nport = data; in efc_nport_cb() local
40 efc_sm_post_event(&nport->sm, event, NULL); in efc_nport_cb()
47 struct efc_nport *nport = NULL; in efc_nport_find_wwn() local
50 list_for_each_entry(nport, &domain->nport_list, list_entry) { in efc_nport_find_wwn()
51 if (nport->wwnn == wwnn && nport->wwpn == wwpn) in efc_nport_find_wwn()
52 return nport; in efc_nport_find_wwn()
60 struct efc_nport *nport = container_of(arg, struct efc_nport, ref); in _efc_nport_free() local
62 kfree(nport); in _efc_nport_free()
69 struct efc_nport *nport; in efc_nport_alloc() local
76 nport = efc_nport_find_wwn(domain, wwnn, wwpn); in efc_nport_alloc()
77 if (nport) { in efc_nport_alloc()
85 nport = kzalloc(sizeof(*nport), GFP_ATOMIC); in efc_nport_alloc()
86 if (!nport) in efc_nport_alloc()
87 return nport; in efc_nport_alloc()
90 kref_init(&nport->ref); in efc_nport_alloc()
91 nport->release = _efc_nport_free; in efc_nport_alloc()
93 nport->efc = domain->efc; in efc_nport_alloc()
94 snprintf(nport->display_name, sizeof(nport->display_name), "------"); in efc_nport_alloc()
95 nport->domain = domain; in efc_nport_alloc()
96 xa_init(&nport->lookup); in efc_nport_alloc()
97 nport->instance_index = domain->nport_count++; in efc_nport_alloc()
98 nport->sm.app = nport; in efc_nport_alloc()
99 nport->enable_ini = enable_ini; in efc_nport_alloc()
100 nport->enable_tgt = enable_tgt; in efc_nport_alloc()
101 nport->enable_rscn = (nport->enable_ini || in efc_nport_alloc()
102 (nport->enable_tgt && enable_target_rscn(nport->efc))); in efc_nport_alloc()
105 memcpy(nport->service_params, domain->service_params, in efc_nport_alloc()
109 nport->fc_id = fc_id; in efc_nport_alloc()
112 nport->wwpn = wwpn; in efc_nport_alloc()
113 nport->wwnn = wwnn; in efc_nport_alloc()
114 snprintf(nport->wwnn_str, sizeof(nport->wwnn_str), "%016llX", in efc_nport_alloc()
122 domain->nport = nport; in efc_nport_alloc()
124 INIT_LIST_HEAD(&nport->list_entry); in efc_nport_alloc()
125 list_add_tail(&nport->list_entry, &domain->nport_list); in efc_nport_alloc()
129 efc_log_debug(domain->efc, "New Nport [%s]\n", nport->display_name); in efc_nport_alloc()
131 return nport; in efc_nport_alloc()
135 efc_nport_free(struct efc_nport *nport) in efc_nport_free() argument
139 if (!nport) in efc_nport_free()
142 domain = nport->domain; in efc_nport_free()
143 efc_log_debug(domain->efc, "[%s] free nport\n", nport->display_name); in efc_nport_free()
144 list_del(&nport->list_entry); in efc_nport_free()
149 if (nport == domain->nport) in efc_nport_free()
150 domain->nport = NULL; in efc_nport_free()
152 xa_destroy(&nport->lookup); in efc_nport_free()
153 xa_erase(&domain->lookup, nport->fc_id); in efc_nport_free()
160 kref_put(&nport->ref, nport->release); in efc_nport_free()
166 struct efc_nport *nport; in efc_nport_find() local
169 nport = xa_load(&domain->lookup, d_id); in efc_nport_find()
170 if (!nport || !kref_get_unless_zero(&nport->ref)) in efc_nport_find()
173 return nport; in efc_nport_find()
177 efc_nport_attach(struct efc_nport *nport, u32 fc_id) in efc_nport_attach() argument
181 struct efc *efc = nport->efc; in efc_nport_attach()
185 rc = xa_err(xa_store(&nport->domain->lookup, fc_id, nport, GFP_ATOMIC)); in efc_nport_attach()
192 efc_node_fcid_display(fc_id, nport->display_name, in efc_nport_attach()
193 sizeof(nport->display_name)); in efc_nport_attach()
195 xa_for_each(&nport->lookup, index, node) { in efc_nport_attach()
199 efc_log_debug(nport->efc, "[%s] attach nport: fc_id x%06x\n", in efc_nport_attach()
200 nport->display_name, fc_id); in efc_nport_attach()
203 rc = efc_cmd_nport_attach(efc, nport, fc_id); in efc_nport_attach()
205 efc_log_err(nport->efc, in efc_nport_attach()
213 efc_nport_shutdown(struct efc_nport *nport) in efc_nport_shutdown() argument
215 struct efc *efc = nport->efc; in efc_nport_shutdown()
219 xa_for_each(&nport->lookup, index, node) { in efc_nport_shutdown()
220 if (!(node->rnode.fc_id == FC_FID_FLOGI && nport->is_vport)) { in efc_nport_shutdown()
255 efc_vport_link_down(struct efc_nport *nport) in efc_vport_link_down() argument
257 struct efc *efc = nport->efc; in efc_vport_link_down()
262 if (vport->nport == nport) { in efc_vport_link_down()
263 kref_put(&nport->ref, nport->release); in efc_vport_link_down()
264 vport->nport = NULL; in efc_vport_link_down()
274 struct efc_nport *nport = ctx->app; in __efc_nport_common() local
275 struct efc_domain *domain = nport->domain; in __efc_nport_common()
276 struct efc *efc = nport->efc; in __efc_nport_common()
289 nport->shutting_down = true; in __efc_nport_common()
291 if (nport->is_vport) in __efc_nport_common()
292 efc_vport_link_down(nport); in __efc_nport_common()
294 if (xa_empty(&nport->lookup)) { in __efc_nport_common()
296 xa_erase(&domain->lookup, nport->fc_id); in __efc_nport_common()
299 if (efc_cmd_nport_free(efc, nport)) { in __efc_nport_common()
300 efc_log_debug(nport->efc, in __efc_nport_common()
303 efc_nport_free(nport); in __efc_nport_common()
309 efc_nport_shutdown(nport); in __efc_nport_common()
313 efc_log_debug(nport->efc, "[%s] %-20s %-20s not handled\n", in __efc_nport_common()
314 nport->display_name, funcname, in __efc_nport_common()
323 struct efc_nport *nport = ctx->app; in __efc_nport_allocated() local
324 struct efc_domain *domain = nport->domain; in __efc_nport_allocated()
326 nport_sm_trace(nport); in __efc_nport_allocated()
331 WARN_ON(nport != domain->nport); in __efc_nport_allocated()
347 struct efc_nport *nport = ctx->app; in __efc_nport_vport_init() local
348 struct efc *efc = nport->efc; in __efc_nport_vport_init()
350 nport_sm_trace(nport); in __efc_nport_vport_init()
354 __be64 be_wwpn = cpu_to_be64(nport->wwpn); in __efc_nport_vport_init()
356 if (nport->wwpn == 0) in __efc_nport_vport_init()
359 if (nport->fc_id != U32_MAX) { in __efc_nport_vport_init()
361 nport->fc_id); in __efc_nport_vport_init()
366 if (efc_cmd_nport_alloc(efc, nport, nport->domain, in __efc_nport_vport_init()
367 nport->wwpn == 0 ? NULL : in __efc_nport_vport_init()
384 struct efc_nport *nport = ctx->app; in __efc_nport_vport_wait_alloc() local
385 struct efc *efc = nport->efc; in __efc_nport_vport_wait_alloc()
387 nport_sm_trace(nport); in __efc_nport_vport_wait_alloc()
393 sp = (struct fc_els_flogi *)nport->service_params; in __efc_nport_vport_wait_alloc()
395 if (nport->wwnn == 0) { in __efc_nport_vport_wait_alloc()
396 nport->wwnn = be64_to_cpu(nport->sli_wwnn); in __efc_nport_vport_wait_alloc()
397 nport->wwpn = be64_to_cpu(nport->sli_wwpn); in __efc_nport_vport_wait_alloc()
398 snprintf(nport->wwnn_str, sizeof(nport->wwnn_str), in __efc_nport_vport_wait_alloc()
399 "%016llX", nport->wwpn); in __efc_nport_vport_wait_alloc()
403 sp->fl_wwpn = cpu_to_be64(nport->wwpn); in __efc_nport_vport_wait_alloc()
404 sp->fl_wwnn = cpu_to_be64(nport->wwnn); in __efc_nport_vport_wait_alloc()
413 if (nport->fc_id == U32_MAX) { in __efc_nport_vport_wait_alloc()
416 fabric = efc_node_alloc(nport, FC_FID_FLOGI, false, in __efc_nport_vport_wait_alloc()
425 snprintf(nport->wwnn_str, sizeof(nport->wwnn_str), in __efc_nport_vport_wait_alloc()
426 "%016llX", nport->wwpn); in __efc_nport_vport_wait_alloc()
427 efc_nport_attach(nport, nport->fc_id); in __efc_nport_vport_wait_alloc()
441 struct efc_nport *nport = ctx->app; in __efc_nport_vport_allocated() local
442 struct efc *efc = nport->efc; in __efc_nport_vport_allocated()
444 nport_sm_trace(nport); in __efc_nport_vport_allocated()
457 node = efc_node_find(nport, FC_FID_FLOGI); in __efc_nport_vport_allocated()
473 efc_vport_update_spec(struct efc_nport *nport) in efc_vport_update_spec() argument
475 struct efc *efc = nport->efc; in efc_vport_update_spec()
481 if (vport->nport == nport) { in efc_vport_update_spec()
482 vport->wwnn = nport->wwnn; in efc_vport_update_spec()
483 vport->wwpn = nport->wwpn; in efc_vport_update_spec()
484 vport->tgt_data = nport->tgt_data; in efc_vport_update_spec()
485 vport->ini_data = nport->ini_data; in efc_vport_update_spec()
496 struct efc_nport *nport = ctx->app; in __efc_nport_attached() local
497 struct efc *efc = nport->efc; in __efc_nport_attached()
499 nport_sm_trace(nport); in __efc_nport_attached()
508 nport->display_name, in __efc_nport_attached()
509 nport->wwpn, nport->wwnn); in __efc_nport_attached()
511 xa_for_each(&nport->lookup, index, node) in __efc_nport_attached()
514 efc->tt.new_nport(efc, nport); in __efc_nport_attached()
520 if (nport->is_vport) in __efc_nport_attached()
521 efc_vport_update_spec(nport); in __efc_nport_attached()
528 nport->display_name, in __efc_nport_attached()
529 nport->wwpn, nport->wwnn); in __efc_nport_attached()
531 efc->tt.del_nport(efc, nport); in __efc_nport_attached()
542 struct efc_nport *nport = ctx->app; in __efc_nport_wait_shutdown() local
543 struct efc_domain *domain = nport->domain; in __efc_nport_wait_shutdown()
544 struct efc *efc = nport->efc; in __efc_nport_wait_shutdown()
546 nport_sm_trace(nport); in __efc_nport_wait_shutdown()
561 xa_erase(&domain->lookup, nport->fc_id); in __efc_nport_wait_shutdown()
563 if (efc_cmd_nport_free(efc, nport)) { in __efc_nport_wait_shutdown()
564 efc_log_err(nport->efc, "efc_hw_port_free failed\n"); in __efc_nport_wait_shutdown()
566 efc_nport_free(nport); in __efc_nport_wait_shutdown()
579 struct efc_nport *nport = ctx->app; in __efc_nport_wait_port_free() local
581 nport_sm_trace(nport); in __efc_nport_wait_port_free()
589 efc_nport_free(nport); in __efc_nport_wait_port_free()
600 struct efc_nport *nport; in efc_vport_nport_alloc() local
604 nport = efc_nport_alloc(domain, vport->wwpn, vport->wwnn, vport->fc_id, in efc_vport_nport_alloc()
606 vport->nport = nport; in efc_vport_nport_alloc()
607 if (!nport) in efc_vport_nport_alloc()
610 kref_get(&nport->ref); in efc_vport_nport_alloc()
611 nport->is_vport = true; in efc_vport_nport_alloc()
612 nport->tgt_data = vport->tgt_data; in efc_vport_nport_alloc()
613 nport->ini_data = vport->ini_data; in efc_vport_nport_alloc()
615 efc_sm_transition(&nport->sm, __efc_nport_vport_init, NULL); in efc_vport_nport_alloc()
632 if (!vport->nport) { in efc_vport_start()
684 struct efc_nport *nport; in efc_nport_vport_del() local
706 list_for_each_entry(nport, &domain->nport_list, list_entry) { in efc_nport_vport_del()
707 if (nport->wwpn == wwpn && nport->wwnn == wwnn) { in efc_nport_vport_del()
709 efc_sm_post_event(&nport->sm, EFC_EVT_SHUTDOWN, NULL); in efc_nport_vport_del()
710 kref_put(&nport->ref, nport->release); in efc_nport_vport_del()