Lines Matching refs:domain

17 	struct efc_domain *domain = NULL;
22 domain = data;
24 /* Accept domain callback events from the user driver */
36 /* lookup domain, or allocate a new one */
37 domain = efc->domain;
38 if (!domain) {
39 domain = efc_domain_alloc(efc, fcf_wwn);
40 if (!domain) {
45 efc_sm_transition(&domain->drvsm, __efc_domain_init,
48 efc_domain_post_event(domain, EFC_EVT_DOMAIN_FOUND, drec);
53 domain_trace(domain, "EFC_HW_DOMAIN_LOST:\n");
55 efc_domain_post_event(domain, EFC_EVT_DOMAIN_LOST, NULL);
59 domain_trace(domain, "EFC_HW_DOMAIN_ALLOC_OK:\n");
60 efc_domain_post_event(domain, EFC_EVT_DOMAIN_ALLOC_OK, NULL);
64 domain_trace(domain, "EFC_HW_DOMAIN_ALLOC_FAIL:\n");
65 efc_domain_post_event(domain, EFC_EVT_DOMAIN_ALLOC_FAIL,
70 domain_trace(domain, "EFC_HW_DOMAIN_ATTACH_OK:\n");
71 efc_domain_post_event(domain, EFC_EVT_DOMAIN_ATTACH_OK, NULL);
75 domain_trace(domain, "EFC_HW_DOMAIN_ATTACH_FAIL:\n");
76 efc_domain_post_event(domain,
81 domain_trace(domain, "EFC_HW_DOMAIN_FREE_OK:\n");
82 efc_domain_post_event(domain, EFC_EVT_DOMAIN_FREE_OK, NULL);
86 domain_trace(domain, "EFC_HW_DOMAIN_FREE_FAIL:\n");
87 efc_domain_post_event(domain, EFC_EVT_DOMAIN_FREE_FAIL, NULL);
95 if (efc->domain && domain->req_accept_frames) {
96 domain->req_accept_frames = false;
106 struct efc_domain *domain = container_of(arg, struct efc_domain, ref);
107 struct efc *efc = domain->efc;
112 kfree(domain);
116 efc_domain_free(struct efc_domain *domain)
120 efc = domain->efc;
122 /* Hold frames to clear the domain pointer from the xport lookup */
125 efc_log_debug(efc, "Domain free: wwn %016llX\n", domain->fcf_wwn);
127 xa_destroy(&domain->lookup);
128 efc->domain = NULL;
129 kref_put(&domain->ref, domain->release);
135 struct efc_domain *domain;
137 domain = kzalloc(sizeof(*domain), GFP_ATOMIC);
138 if (!domain)
141 domain->efc = efc;
142 domain->drvsm.app = domain;
145 kref_init(&domain->ref);
146 domain->release = _efc_domain_free;
148 xa_init(&domain->lookup);
150 INIT_LIST_HEAD(&domain->nport_list);
151 efc->domain = domain;
152 domain->fcf_wwn = fcf_wwn;
153 efc_log_debug(efc, "Domain allocated: wwn %016llX\n", domain->fcf_wwn);
155 return domain;
163 /* Register a callback to be called when the domain is freed */
166 if (!efc->domain && callback)
174 struct efc_domain *domain = ctx->app;
187 efc_log_warn(domain->efc, "%-20s %-20s not handled\n",
196 struct efc_domain *domain = ctx->app;
205 memcpy(&domain->pending_drec, arg,
206 sizeof(domain->pending_drec));
207 domain->domain_found_pending = true;
211 domain->domain_found_pending = false;
215 efc_log_warn(domain->efc, "%-20s %-20s not handled\n",
221 struct efc_domain *domain = NULL;\
225 domain = ctx->app;\
226 WARN_ON(!domain->efc);\
227 efc = domain->efc
235 domain_sm_trace(domain);
239 domain->attached = false;
261 nport = efc_nport_alloc(domain, my_wwpn, my_wwnn, U32_MAX,
281 domain->is_loop = drec->is_loop;
291 domain->is_nlport = drec->map.loop[1] == 0x00;
293 if (!domain->is_loop) {
294 /* Initiate HW domain alloc */
295 if (efc_cmd_domain_alloc(efc, domain, drec->index)) {
297 "Failed to initiate HW domain allocation\n");
306 (domain->is_nlport ?
342 /* Initiate HW domain alloc */
343 if (efc_cmd_domain_alloc(efc, domain, drec->index)) {
345 "Failed to initiate HW domain allocation\n");
362 domain_sm_trace(domain);
369 nport = domain->nport;
375 /* Save the domain service parameters */
376 memcpy(domain->service_params + 4, domain->dma.virt,
378 memcpy(nport->service_params + 4, domain->dma.virt,
392 if (domain->is_loop && !domain->is_nlport) {
398 * the domain. Note that this breaks the
401 * domain attach callback.
405 __efc_domain_attach_internal(domain, nport->fc_id);
428 domain->req_accept_frames = true;
438 efc_log_err(efc, "shutting down domain\n");
439 domain->req_domain_free = true;
464 domain_sm_trace(domain);
475 efc_log_debug(efc, "Requesting hw domain attach fc_id x%x\n",
478 rc = xa_err(xa_store(&domain->lookup, fc_id, domain->nport,
486 efc_node_fcid_display(fc_id, domain->nport->display_name,
487 sizeof(domain->nport->display_name));
489 /* Issue domain attach call */
490 rc = efc_cmd_domain_attach(efc, domain, fc_id);
511 if (!list_empty(&domain->nport_list)) {
522 &domain->nport_list,
528 /* no nports exist, free domain */
531 if (efc_cmd_domain_free(efc, domain))
549 domain_sm_trace(domain);
558 * Set domain notify pending state to avoid
559 * duplicate domain event post
561 domain->domain_notify_pend = true;
564 domain->attached = true;
571 domain->req_accept_frames = true;
574 * Notify all nodes that the domain attach request
580 &domain->nport_list, list_entry) {
587 domain->domain_notify_pend = false;
606 * go to a state that waits for the domain attach to
607 * complete, then handle domain lost
629 domain_sm_trace(domain);
634 if (efc_vport_start(domain)) {
635 efc_log_debug(domain->efc,
641 if (!list_empty(&domain->nport_list)) {
651 &domain->nport_list,
657 /* no nports exist, free domain */
660 if (efc_cmd_domain_free(efc, domain))
678 /* Assume that the domain is attached */
679 WARN_ON(!domain->attached);
685 WARN_ON(domain->nport->fc_id != fc_id);
700 domain_sm_trace(domain);
702 /* Wait for nodes to free prior to the domain shutdown */
711 rc = efc_cmd_domain_free(efc, domain);
729 domain_sm_trace(domain);
734 if (domain->domain_found_pending) {
736 * save fcf_wwn and drec from this domain,
737 * free current domain and allocate
742 u64 fcf_wwn = domain->fcf_wwn;
743 struct efc_domain_record drec = domain->pending_drec;
745 efc_log_debug(efc, "Reallocating domain\n");
746 domain->req_domain_free = true;
747 domain = efc_domain_alloc(efc, fcf_wwn);
749 if (!domain) {
755 * got a new domain; at this point,
758 * the associated domain will be removed.
760 efc_sm_transition(&domain->drvsm, __efc_domain_init,
762 efc_sm_post_event(&domain->drvsm,
765 domain->req_domain_free = true;
779 domain_sm_trace(domain);
782 * Wait for the domain alloc/attach completion
783 * after receiving a domain lost.
788 if (!list_empty(&domain->nport_list)) {
798 &domain->nport_list,
804 /* no nports exist, free domain */
807 if (efc_cmd_domain_free(efc, domain))
814 efc_log_err(efc, "[domain] %-20s: failed\n",
824 __efc_domain_attach_internal(struct efc_domain *domain, u32 s_id)
826 memcpy(domain->dma.virt,
827 ((uint8_t *)domain->flogi_service_params) + 4,
829 (void)efc_sm_post_event(&domain->drvsm, EFC_EVT_DOMAIN_REQ_ATTACH,
834 efc_domain_attach(struct efc_domain *domain, u32 s_id)
836 __efc_domain_attach_internal(domain, s_id);
840 efc_domain_post_event(struct efc_domain *domain,
846 rc = efc_sm_post_event(&domain->drvsm, event, arg);
848 req_domain_free = domain->req_domain_free;
849 domain->req_domain_free = false;
852 efc_domain_free(domain);
858 efct_domain_process_pending(struct efc_domain *domain)
860 struct efc *efc = domain->efc;
893 if (efc_domain_dispatch_frame(domain, seq))
900 efc_log_debug(efc, "%u domain frames held and processed\n",
907 struct efc_domain *domain = efc->domain;
910 * If we are holding frames or the domain is not yet registered or
914 if (!domain || efc->hold_frames || !list_empty(&efc->pend_frames)) {
922 if (domain) {
924 efct_domain_process_pending(domain);
932 if (efc_domain_dispatch_frame(domain, seq))
940 struct efc_domain *domain = (struct efc_domain *)arg;
941 struct efc *efc = domain->efc;
961 nport = efc_nport_find(domain, d_id);
971 nport = domain->nport;