Lines Matching +full:a +full:- +full:hlm

1 /*-
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48 #define SCSI_ITT_SIZE(ocs) ((ocs->ocs_xport == OCS_XPORT_FC) ? 4 : 8)
50 … SCSI_IOFMT_ARGS(io) io->instance_index, SCSI_ITT_SIZE(io->ocs), io->init_task_tag, SCSI_ITT_SIZE(…
52 #define scsi_io_printf(io, fmt, ...) ocs_log_debug(io->ocs, "[%s]" SCSI_IOFMT fmt, \
53 io->node->display_name, SCSI_IOFMT_ARGS(io), ##__VA_ARGS__)
87 ocs_lock(&node->active_ios_lock); in ocs_node_abort_all_els()
88 ocs_list_foreach_safe(&node->els_io_active_list, els, els_next) { in ocs_node_abort_all_els()
89 ocs_log_debug(node->ocs, "[%s] initiate ELS abort %s\n", node->display_name, els->display_name); in ocs_node_abort_all_els()
90 ocs_unlock(&node->active_ios_lock); in ocs_node_abort_all_els()
93 ocs_lock(&node->active_ios_lock); in ocs_node_abort_all_els()
95 ocs_unlock(&node->active_ios_lock); in ocs_node_abort_all_els()
103 * a node state machine event that is posted to the affected node.
109 * @return returns 0 for success, a negative error code value for failure.
117 ocs_node_t *node = rnode->node; in ocs_remote_node_cb()
138 return -1; in ocs_remote_node_cb()
141 /* If we're using HLM, forward the NODE_ATTACH_OK/FAIL event to all nodes in the node group */ in ocs_remote_node_cb()
142 if ((node->node_group != NULL) && in ocs_remote_node_cb()
147 ocs_sport_lock(node->sport); in ocs_remote_node_cb()
149 ocs_list_foreach(&node->sport->node_list, n) { in ocs_remote_node_cb()
154 if ((!n->rnode.attached) && (node->node_group == n->node_group)) { in ocs_remote_node_cb()
155 n->rnode.attached = attach_ok; in ocs_remote_node_cb()
156 node_printf(n, "rpi[%d] deferred HLM node attach %s posted\n", in ocs_remote_node_cb()
157 n->rnode.index, attach_ok ? "ok" : "fail"); in ocs_remote_node_cb()
164 ocs_sport_unlock(node->sport); in ocs_remote_node_cb()
186 ocs_assert(sport->lookup, NULL); in ocs_node_find()
188 node = spv_get(sport->lookup, port_id); in ocs_node_find()
210 ocs_list_foreach(&sport->node_list, node) { in ocs_node_find_wwpn()
224 * A pool of ocs_node_t objects is allocated.
229 * @return returns 0 for success, a negative error code value for failure.
235 ocs_xport_t *xport = ocs->xport; in ocs_node_create_pool()
243 xport->nodes_count = node_count; in ocs_node_create_pool()
245 xport->nodes = ocs_malloc(ocs, node_count * sizeof(ocs_node_t *), OCS_M_ZERO | OCS_M_NOWAIT); in ocs_node_create_pool()
246 if (xport->nodes == NULL) { in ocs_node_create_pool()
248 return -1; in ocs_node_create_pool()
251 if (0 == ocs_hw_get(&ocs->hw, OCS_HW_MAX_SGE, &max_sge) && in ocs_node_create_pool()
252 0 == ocs_hw_get(&ocs->hw, OCS_HW_N_SGL, &num_sgl)) { in ocs_node_create_pool()
261 ocs_list_init(&xport->nodes_free_list, ocs_node_t, link); in ocs_node_create_pool()
271 node->instance_index = i; in ocs_node_create_pool()
272 node->max_wr_xfer_size = max_xfer_size; in ocs_node_create_pool()
273 node->rnode.indicator = UINT32_MAX; in ocs_node_create_pool()
275 rc = ocs_dma_alloc(ocs, &node->sparm_dma_buf, 256, 16); in ocs_node_create_pool()
282 xport->nodes[i] = node; in ocs_node_create_pool()
283 ocs_list_add_tail(&xport->nodes_free_list, node); in ocs_node_create_pool()
289 return -1; in ocs_node_create_pool()
306 ocs_xport_t *xport = ocs->xport; in ocs_node_free_pool()
310 if (!xport->nodes) in ocs_node_free_pool()
315 for (i = 0; i < xport->nodes_count; i ++) { in ocs_node_free_pool()
316 node = xport->nodes[i]; in ocs_node_free_pool()
319 ocs_dma_free(ocs, &node->sparm_dma_buf); in ocs_node_free_pool()
322 xport->nodes[i] = NULL; in ocs_node_free_pool()
325 ocs_free(ocs, xport->nodes, (xport->nodes_count * sizeof(ocs_node_t *))); in ocs_node_free_pool()
334 * A pointer to the node object given by an instance index is returned.
345 ocs_xport_t *xport = ocs->xport; in ocs_node_get_instance()
348 if (index >= (xport->nodes_count)) { in ocs_node_get_instance()
352 node = xport->nodes[index]; in ocs_node_get_instance()
353 return node->attached ? node : NULL; in ocs_node_get_instance()
362 * @param init Port is an inititiator (sent a plogi)
363 * @param targ Port is potentially a target
375 ocs_t *ocs = sport->ocs; in ocs_node_alloc()
376 ocs_xport_t *xport = ocs->xport; in ocs_node_alloc()
381 if (sport->shutting_down) { in ocs_node_alloc()
387 node = ocs_list_remove_head(&xport->nodes_free_list); in ocs_node_alloc()
395 instance_index = node->instance_index; in ocs_node_alloc()
396 max_wr_xfer_size = node->max_wr_xfer_size; in ocs_node_alloc()
397 sparm_dma_buf = node->sparm_dma_buf; in ocs_node_alloc()
400 node->instance_index = instance_index; in ocs_node_alloc()
401 node->max_wr_xfer_size = max_wr_xfer_size; in ocs_node_alloc()
402 node->sparm_dma_buf = sparm_dma_buf; in ocs_node_alloc()
403 node->rnode.indicator = UINT32_MAX; in ocs_node_alloc()
405 node->sport = sport; in ocs_node_alloc()
408 node->ocs = ocs; in ocs_node_alloc()
409 node->init = init; in ocs_node_alloc()
410 node->targ = targ; in ocs_node_alloc()
412 rc = ocs_hw_node_alloc(&ocs->hw, &node->rnode, port_id, sport); in ocs_node_alloc()
419 ocs_list_add_tail(&xport->nodes_free_list, node); in ocs_node_alloc()
424 ocs_list_add_tail(&sport->node_list, node); in ocs_node_alloc()
427 ocs_lock_init(ocs, &node->pend_frames_lock, "pend_frames_lock[%d]", node->instance_index); in ocs_node_alloc()
428 ocs_list_init(&node->pend_frames, ocs_hw_sequence_t, link); in ocs_node_alloc()
429 ocs_lock_init(ocs, &node->active_ios_lock, "active_ios[%d]", node->instance_index); in ocs_node_alloc()
430 ocs_list_init(&node->active_ios, ocs_io_t, link); in ocs_node_alloc()
431 ocs_list_init(&node->els_io_pend_list, ocs_io_t, link); in ocs_node_alloc()
432 ocs_list_init(&node->els_io_active_list, ocs_io_t, link); in ocs_node_alloc()
436 ocs_memset(node->sparm_dma_buf.virt, 0, node->sparm_dma_buf.size); in ocs_node_alloc()
438 node->rnode.node = node; in ocs_node_alloc()
439 node->sm.app = node; in ocs_node_alloc()
440 node->evtdepth = 0; in ocs_node_alloc()
444 spv_set(sport->lookup, port_id, node); in ocs_node_alloc()
446 node->mgmt_functions = &node_mgmt_functions; in ocs_node_alloc()
453 * @brief free a node structure
459 * @return returns 0 for success, a negative error code value for failure.
472 ocs_assert(node, -1); in ocs_node_free()
473 ocs_assert(node->sport, -1); in ocs_node_free()
474 ocs_assert(node->ocs, -1); in ocs_node_free()
475 sport = node->sport; in ocs_node_free()
476 ocs_assert(sport, -1); in ocs_node_free()
477 ocs = node->ocs; in ocs_node_free()
478 ocs_assert(ocs->xport, -1); in ocs_node_free()
479 xport = ocs->xport; in ocs_node_free()
483 if(node->refound) { in ocs_node_free()
488 ns = ocs_node_find(node->sport, FC_ADDR_NAMESERVER); in ocs_node_free()
493 ocs_list_remove(&sport->node_list, node); in ocs_node_free()
496 if (OCS_HW_RTN_IS_ERROR((rc = ocs_hw_node_free_resources(&ocs->hw, &node->rnode)))) { in ocs_node_free()
498 rc = -1; in ocs_node_free()
502 if (ocs_timer_pending(&node->gidpt_delay_timer)) { in ocs_node_free()
503 ocs_del_timer(&node->gidpt_delay_timer); in ocs_node_free()
506 if (node->fcp2device) { in ocs_node_free()
511 if (sport->lookup == NULL) { in ocs_node_free()
512 ocs_log_test(node->ocs, "assertion failed: sport lookup is NULL\n"); in ocs_node_free()
514 return -1; in ocs_node_free()
517 spv_set(sport->lookup, node->rnode.fc_id, NULL); in ocs_node_free()
520 * If the node_list is empty, then post a ALL_CHILD_NODES_FREE event to the sport, in ocs_node_free()
521 * after the lock is released. The sport may be free'd as a result of the event. in ocs_node_free()
523 if (ocs_list_empty(&sport->node_list)) { in ocs_node_free()
530 ocs_sm_post_event(&sport->sm, OCS_EVT_ALL_CHILD_NODES_FREE, NULL); in ocs_node_free()
533 node->sport = NULL; in ocs_node_free()
534 node->sm.current_state = NULL; in ocs_node_free()
537 ocs_lock_free(&node->pend_frames_lock); in ocs_node_free()
538 ocs_lock_free(&node->active_ios_lock); in ocs_node_free()
542 ocs_list_add_tail(&xport->nodes_free_list, node); in ocs_node_free()
554 * @brief free memory resources of a node object
559 * @param node pointer to a node object
573 ocs_sm_disable(&node->sm); in ocs_node_force_free()
574 ocs_strncpy(node->prev_state_name, node->current_state_name, sizeof(node->prev_state_name)); in ocs_node_force_free()
575 ocs_strncpy(node->current_state_name, "disabled", sizeof(node->current_state_name)); in ocs_node_force_free()
580 ocs_lock(&node->active_ios_lock); in ocs_node_force_free()
581 ocs_list_foreach_safe(&node->active_ios, io, next) { in ocs_node_force_free()
582 ocs_list_remove(&io->node->active_ios, io); in ocs_node_force_free()
583 ocs_io_free(node->ocs, io); in ocs_node_force_free()
585 ocs_unlock(&node->active_ios_lock); in ocs_node_force_free()
588 ocs_lock(&node->active_ios_lock); in ocs_node_force_free()
589 ocs_list_foreach_safe(&node->els_io_pend_list, els, els_next) { in ocs_node_force_free()
591 ocs_list_remove(&node->els_io_pend_list, els); in ocs_node_force_free()
593 ocs_io_free(node->ocs, els); in ocs_node_force_free()
595 ocs_unlock(&node->active_ios_lock); in ocs_node_force_free()
598 ocs_lock(&node->active_ios_lock); in ocs_node_force_free()
599 ocs_list_foreach_safe(&node->els_io_active_list, els, els_next) { in ocs_node_force_free()
601 ocs_list_remove(&node->els_io_active_list, els); in ocs_node_force_free()
603 ocs_io_free(node->ocs, els); in ocs_node_force_free()
605 ocs_unlock(&node->active_ios_lock); in ocs_node_force_free()
615 * @brief Perform HW call to attach a remote node
619 * @return 0 on success, non-zero otherwise
625 ocs_sport_t *sport = node->sport; in ocs_node_attach()
626 ocs_domain_t *domain = sport->domain; in ocs_node_attach()
627 ocs_t *ocs = node->ocs; in ocs_node_attach()
629 if (!domain->attached) { in ocs_node_attach()
631 return -1; in ocs_node_attach()
633 /* Update node->wwpn/wwnn */ in ocs_node_attach()
635 ocs_node_build_eui_name(node->wwpn, sizeof(node->wwpn), ocs_node_get_wwpn(node)); in ocs_node_attach()
636 ocs_node_build_eui_name(node->wwnn, sizeof(node->wwnn), ocs_node_get_wwnn(node)); in ocs_node_attach()
638 if (ocs->enable_hlm) { in ocs_node_attach()
642 ocs_dma_copy_in(&node->sparm_dma_buf, node->service_params+4, sizeof(node->service_params)-4); in ocs_node_attach()
644 /* take lock to protect node->rnode.attached */ in ocs_node_attach()
646 rc = ocs_hw_node_attach(&ocs->hw, &node->rnode, &node->sparm_dma_buf); in ocs_node_attach()
657 * @brief Generate text for a node's fc_id
659 * The text for a nodes fc_id is generated, either as a well known name, or a 6 digit
708 uint32_t port_id = node->rnode.fc_id; in ocs_node_update_display_name()
709 ocs_sport_t *sport = node->sport; in ocs_node_update_display_name()
716 …ocs_snprintf(node->display_name, sizeof(node->display_name), "%s.%s", sport->display_name, portid_… in ocs_node_update_display_name()
732 ocs_t *ocs = node->ocs; in ocs_node_send_ls_io_cleanup()
734 if (node->send_ls_acc != OCS_NODE_SEND_LS_ACC_NONE) { in ocs_node_send_ls_io_cleanup()
735 ocs_assert(node->ls_acc_io); in ocs_node_send_ls_io_cleanup()
737 node->display_name, node->ls_acc_oxid); in ocs_node_send_ls_io_cleanup()
739 node->ls_acc_io->hio = NULL; in ocs_node_send_ls_io_cleanup()
740 ocs_els_io_free(node->ls_acc_io); in ocs_node_send_ls_io_cleanup()
741 node->send_ls_acc = OCS_NODE_SEND_LS_ACC_NONE; in ocs_node_send_ls_io_cleanup()
742 node->ls_acc_io = NULL; in ocs_node_send_ls_io_cleanup()
748 * @brief state: shutdown a node
750 * A node is shutdown,
773 ocs_assert(ocs_els_io_list_empty(node, &node->els_io_active_list), NULL); in __ocs_node_shutdown()
776 node->req_free = 1; in __ocs_node_shutdown()
778 switch (node->shutdown_reason) { in __ocs_node_shutdown()
789 ocs_assert(node->send_ls_acc == OCS_NODE_SEND_LS_ACC_PLOGI, NULL); in __ocs_node_shutdown()
790 node_printf(node, "Shutdown reason: implicit logout, re-authenticate\n"); in __ocs_node_shutdown()
794 /* Re-attach node with the same HW node resources */ in __ocs_node_shutdown()
795 node->req_free = 0; in __ocs_node_shutdown()
807 ocs_assert(ocs_els_io_list_empty(node, &node->els_io_pend_list), NULL); in __ocs_node_shutdown()
809 ocs_lock(&node->pend_frames_lock); in __ocs_node_shutdown()
810 pend_frames_empty = ocs_list_empty(&node->pend_frames); in __ocs_node_shutdown()
811 ocs_unlock(&node->pend_frames_lock); in __ocs_node_shutdown()
815 * 2. we're an initiator and the remote node is a target and we in __ocs_node_shutdown()
816 * need to re-authenticate in __ocs_node_shutdown()
819 !pend_frames_empty, node->sport->enable_ini, node->targ); in __ocs_node_shutdown()
821 if((!pend_frames_empty) || (node->sport->enable_ini && node->targ)) { in __ocs_node_shutdown()
823 if (node->sport->enable_ini && node->targ) { in __ocs_node_shutdown()
824 /* we're an initiator and node shutting down is a target; we'll in __ocs_node_shutdown()
825 * need to re-authenticate in initial state in __ocs_node_shutdown()
832 node->req_free = 0; in __ocs_node_shutdown()
834 /* either pending frames exist, or we're re-authenticating with PLOGI in __ocs_node_shutdown()
850 ocs_assert(ocs_els_io_list_empty(node, &node->els_io_pend_list), NULL); in __ocs_node_shutdown()
885 ocs_assert(node, -1); in ocs_node_check_els_quiesced()
888 if ((node->els_req_cnt == 0) && (node->els_cmpl_cnt == 0) && in ocs_node_check_els_quiesced()
889 ocs_els_io_list_empty(node, &node->els_io_active_list)) { in ocs_node_check_els_quiesced()
890 if (!node->attached) { in ocs_node_check_els_quiesced()
908 * Note: this function must be called with a non-attached node
909 * or a node for which the node detach (ocs_hw_node_detach())
924 ocs = node->ocs; in ocs_node_initiate_cleanup()
927 ocs_lock(&node->active_ios_lock); in ocs_node_initiate_cleanup()
928 ocs_list_foreach_safe(&node->els_io_pend_list, els, els_next) { in ocs_node_initiate_cleanup()
929 /* skip the ELS IO for which a response will be sent after shutdown */ in ocs_node_initiate_cleanup()
930 if ((node->send_ls_acc != OCS_NODE_SEND_LS_ACC_NONE) && in ocs_node_initiate_cleanup()
931 (els == node->ls_acc_io)) { in ocs_node_initiate_cleanup()
935 node_printf(node, "Freeing pending els %s\n", els->display_name); in ocs_node_initiate_cleanup()
936 ocs_list_remove(&node->els_io_pend_list, els); in ocs_node_initiate_cleanup()
938 ocs_io_free(node->ocs, els); in ocs_node_initiate_cleanup()
940 ocs_unlock(&node->active_ios_lock); in ocs_node_initiate_cleanup()
942 if (node->ls_acc_io && node->ls_acc_io->hio != NULL) { in ocs_node_initiate_cleanup()
945 * shutdown and its HW IO is non-NULL, it better be an in ocs_node_initiate_cleanup()
950 ocs_assert(node->shutdown_reason == OCS_NODE_SHUTDOWN_IMPLICIT_LOGO); in ocs_node_initiate_cleanup()
951 ocs_assert(node->send_ls_acc == OCS_NODE_SEND_LS_ACC_PLOGI); in ocs_node_initiate_cleanup()
955 ocs_hw_io_free(&ocs->hw, node->ls_acc_io->hio); in ocs_node_initiate_cleanup()
957 /* NULL out hio to force the LS_ACC to grab a new XRI */ in ocs_node_initiate_cleanup()
958 node->ls_acc_io->hio = NULL; in ocs_node_initiate_cleanup()
1001 if (ocs_els_io_list_empty(node, &node->els_io_active_list)) { in __ocs_node_wait_els_shutdown()
1015 ocs_assert(node->els_req_cnt, NULL); in __ocs_node_wait_els_shutdown()
1016 node->els_req_cnt--; in __ocs_node_wait_els_shutdown()
1022 ocs_assert(node->els_cmpl_cnt, NULL); in __ocs_node_wait_els_shutdown()
1023 node->els_cmpl_cnt--; in __ocs_node_wait_els_shutdown()
1030 ocs_assert(ocs_els_io_list_empty(node, &node->els_io_active_list), NULL); in __ocs_node_wait_els_shutdown()
1044 node->shutdown_reason = OCS_NODE_SHUTDOWN_DEFAULT; in __ocs_node_wait_els_shutdown()
1064 * @brief Node state machine: Wait for a HW node free event to
1095 node->attached = FALSE; in __ocs_node_wait_node_free()
1111 node->shutdown_reason = OCS_NODE_SHUTDOWN_DEFAULT; in __ocs_node_wait_node_free()
1129 * State is entered when a node receives a shutdown event, and it's waiting
1153 if (ocs_els_io_list_empty(node, &node->els_io_active_list)) { in __ocs_node_wait_ios_shutdown()
1156 ocs_lock(&node->active_ios_lock); in __ocs_node_wait_ios_shutdown()
1157 ocs_list_foreach_safe(&node->active_ios, io, next) { in __ocs_node_wait_ios_shutdown()
1158 ocs_list_remove(&io->node->active_ios, io); in __ocs_node_wait_ios_shutdown()
1159 ocs_io_free(node->ocs, io); in __ocs_node_wait_ios_shutdown()
1161 ocs_unlock(&node->active_ios_lock); in __ocs_node_wait_ios_shutdown()
1170 ocs_els_io_list_empty(node, &node->els_io_active_list)) { in __ocs_node_wait_ios_shutdown()
1182 ocs_assert(node->els_req_cnt, NULL); in __ocs_node_wait_ios_shutdown()
1183 node->els_req_cnt--; in __ocs_node_wait_ios_shutdown()
1189 node->shutdown_reason = OCS_NODE_SHUTDOWN_DEFAULT; in __ocs_node_wait_ios_shutdown()
1193 ocs_log_debug(ocs, "[%s] %-20s\n", node->display_name, ocs_sm_event_name(evt)); in __ocs_node_wait_ios_shutdown()
1227 ocs_assert(ctx->app, NULL); in __ocs_node_common()
1228 node = ctx->app; in __ocs_node_common()
1229 ocs_assert(node->ocs, NULL); in __ocs_node_common()
1230 ocs = node->ocs; in __ocs_node_common()
1242 node->refound = 1; in __ocs_node_common()
1245 /* node->attached must be set appropriately for all node attach/detach events */ in __ocs_node_common()
1247 node->attached = TRUE; in __ocs_node_common()
1252 node->attached = FALSE; in __ocs_node_common()
1260 ocs_assert(node->els_cmpl_cnt, NULL); in __ocs_node_common()
1261 node->els_cmpl_cnt--; in __ocs_node_common()
1271 ocs_assert(node->els_req_cnt, NULL); in __ocs_node_common()
1272 node->els_req_cnt--; in __ocs_node_common()
1276 fc_header_t *hdr = cbdata->header->dma.virt; in __ocs_node_common()
1280 node->display_name, funcname, ((uint8_t*)cbdata->payload->dma.virt)[0]); in __ocs_node_common()
1281 ocs_send_ls_rjt(cbdata->io, ocs_be16toh(hdr->ox_id), in __ocs_node_common()
1297 fc_header_t *hdr = cbdata->header->dma.virt; in __ocs_node_common()
1300 node->display_name, funcname, ocs_sm_event_name(evt)); in __ocs_node_common()
1301 /* if we didn't catch this in a state, send generic LS_RJT */ in __ocs_node_common()
1302 ocs_send_ls_rjt(cbdata->io, ocs_be16toh(hdr->ox_id), in __ocs_node_common()
1311 fc_header_t *hdr = cbdata->header->dma.virt; in __ocs_node_common()
1313 node->display_name, funcname, ocs_sm_event_name(evt)); in __ocs_node_common()
1314 …ocs_send_ct_rsp(cbdata->io, hdr->ox_id, cbdata->payload->dma.virt, FCCT_HDR_CMDRSP_REJECT, FCCT_CO… in __ocs_node_common()
1319 fc_header_t *hdr = cbdata->header->dma.virt; in __ocs_node_common()
1321 node->display_name, funcname, ocs_sm_event_name(evt)); in __ocs_node_common()
1324 ocs_bls_send_acc_hdr(cbdata->io, hdr); in __ocs_node_common()
1329 ocs_log_test(node->ocs, "[%s] %-20s %-20s not handled\n", node->display_name, funcname, in __ocs_node_common()
1351 ocs_memcpy(node->service_params, payload, sizeof(node->service_params)); in ocs_node_save_sparms()
1376 node->evtdepth ++; in ocs_node_post_event()
1378 ocs_sm_post_event(&node->sm, evt, arg); in ocs_node_post_event()
1384 if (!node->hold_frames && (node->evtdepth == 1)) { in ocs_node_post_event()
1387 node->evtdepth --; in ocs_node_post_event()
1392 if ((node->evtdepth == 0) && node->req_free) { in ocs_node_post_event()
1406 * @brief transition state of a node
1421 ocs_sm_ctx_t *ctx = &node->sm; in ocs_node_transition()
1424 if (ctx->current_state == state) { in ocs_node_transition()
1428 ctx->current_state = state; in ocs_node_transition()
1438 * Build a WWN given the somewhat transport agnostic iScsi naming specification, for FC
1458 * @brief return nodes' WWPN as a uint64_t
1460 * The WWPN is computed from service parameters and returned as a uint64_t
1471 fc_plogi_payload_t *sp = (fc_plogi_payload_t*) node->service_params; in ocs_node_get_wwpn()
1473 return (((uint64_t)ocs_be32toh(sp->port_name_hi) << 32ll) | (ocs_be32toh(sp->port_name_lo))); in ocs_node_get_wwpn()
1478 * @brief return nodes' WWNN as a uint64_t
1480 * The WWNN is computed from service parameters and returned as a uint64_t
1491 fc_plogi_payload_t *sp = (fc_plogi_payload_t*) node->service_params; in ocs_node_get_wwnn()
1493 return (((uint64_t)ocs_be32toh(sp->node_name_hi) << 32ll) | (ocs_be32toh(sp->node_name_lo))); in ocs_node_get_wwnn()
1504 * @return Returns 0 on success, or a negative value on failure.
1514 ocs_ddump_section(textbuf, "node", node->instance_index); in ocs_ddump_node()
1515 ocs_ddump_value(textbuf, "display_name", "%s", node->display_name); in ocs_ddump_node()
1516 ocs_ddump_value(textbuf, "current_state", "%s", node->current_state_name); in ocs_ddump_node()
1517 ocs_ddump_value(textbuf, "prev_state", "%s", node->prev_state_name); in ocs_ddump_node()
1518 ocs_ddump_value(textbuf, "current_evt", "%s", ocs_sm_event_name(node->current_evt)); in ocs_ddump_node()
1519 ocs_ddump_value(textbuf, "prev_evt", "%s", ocs_sm_event_name(node->prev_evt)); in ocs_ddump_node()
1521 ocs_ddump_value(textbuf, "indicator", "%#x", node->rnode.indicator); in ocs_ddump_node()
1522 ocs_ddump_value(textbuf, "fc_id", "%#06x", node->rnode.fc_id); in ocs_ddump_node()
1523 ocs_ddump_value(textbuf, "attached", "%d", node->rnode.attached); in ocs_ddump_node()
1525 ocs_ddump_value(textbuf, "hold_frames", "%d", node->hold_frames); in ocs_ddump_node()
1526 ocs_ddump_value(textbuf, "io_alloc_enabled", "%d", node->io_alloc_enabled); in ocs_ddump_node()
1527 ocs_ddump_value(textbuf, "shutdown_reason", "%d", node->shutdown_reason); in ocs_ddump_node()
1528 ocs_ddump_value(textbuf, "send_ls_acc", "%d", node->send_ls_acc); in ocs_ddump_node()
1529 ocs_ddump_value(textbuf, "ls_acc_did", "%d", node->ls_acc_did); in ocs_ddump_node()
1530 ocs_ddump_value(textbuf, "ls_acc_oxid", "%#04x", node->ls_acc_oxid); in ocs_ddump_node()
1531 ocs_ddump_value(textbuf, "req_free", "%d", node->req_free); in ocs_ddump_node()
1532 ocs_ddump_value(textbuf, "els_req_cnt", "%d", node->els_req_cnt); in ocs_ddump_node()
1533 ocs_ddump_value(textbuf, "els_cmpl_cnt", "%d", node->els_cmpl_cnt); in ocs_ddump_node()
1535 ocs_ddump_value(textbuf, "targ", "%d", node->targ); in ocs_ddump_node()
1536 ocs_ddump_value(textbuf, "init", "%d", node->init); in ocs_ddump_node()
1537 ocs_ddump_value(textbuf, "wwnn", "%s", node->wwnn); in ocs_ddump_node()
1538 ocs_ddump_value(textbuf, "wwpn", "%s", node->wwpn); in ocs_ddump_node()
1539 …ocs_ddump_value(textbuf, "login_state", "%d", (node->sm.current_state == __ocs_d_device_ready) ? 1… in ocs_ddump_node()
1540 ocs_ddump_value(textbuf, "chained_io_count", "%d", node->chained_io_count); in ocs_ddump_node()
1541 ocs_ddump_value(textbuf, "abort_cnt", "%d", node->abort_cnt); in ocs_ddump_node()
1543 ocs_display_sparams(NULL, "node_sparams", 1, textbuf, node->service_params+4); in ocs_ddump_node()
1545 ocs_lock(&node->pend_frames_lock); in ocs_ddump_node()
1546 if (!ocs_list_empty(&node->pend_frames)) { in ocs_ddump_node()
1549 ocs_list_foreach(&node->pend_frames, frame) { in ocs_ddump_node()
1553 hdr = frame->header->dma.virt; in ocs_ddump_node()
1555 hdr->r_ctl, ocs_be16toh(hdr->ox_id), ocs_be16toh(hdr->rx_id), in ocs_ddump_node()
1556 frame->payload->dma.len); in ocs_ddump_node()
1561 ocs_unlock(&node->pend_frames_lock); in ocs_ddump_node()
1566 ocs_lock(&node->active_ios_lock); in ocs_ddump_node()
1568 ocs_list_foreach(&node->active_ios, io) { in ocs_ddump_node()
1574 ocs_list_foreach(&node->els_io_pend_list, els) { in ocs_ddump_node()
1580 ocs_list_foreach(&node->els_io_active_list, els) { in ocs_ddump_node()
1584 ocs_unlock(&node->active_ios_lock); in ocs_ddump_node()
1586 ocs_ddump_endsection(textbuf, "node", node->instance_index); in ocs_ddump_node()
1606 * @return zero if ELS command matches, -1 otherwise
1615 ocs_assert(ctx, -1); in node_check_els_req()
1616 node = ctx->app; in node_check_els_req()
1617 ocs_assert(node, -1); in node_check_els_req()
1618 ocs = node->ocs; in node_check_els_req()
1619 ocs_assert(ocs, -1); in node_check_els_req()
1621 ocs_assert(cbdata, -1); in node_check_els_req()
1622 ocs_assert(cbdata->els, -1); in node_check_els_req()
1623 els_gen = (fc_els_gen_t *)cbdata->els->els_req.virt; in node_check_els_req()
1624 ocs_assert(els_gen, -1); in node_check_els_req()
1626 if ((cbdata->els->hio_type != OCS_HW_ELS_REQ) || (els_gen->command_code != cmd)) { in node_check_els_req()
1627 if (cbdata->els->hio_type != OCS_HW_ELS_REQ) { in node_check_els_req()
1628 ocs_log_debug(node->ocs, "[%s] %-20s expecting ELS cmd=x%x received type=%d\n", in node_check_els_req()
1629 node->display_name, funcname, cmd, cbdata->els->hio_type); in node_check_els_req()
1631 ocs_log_debug(node->ocs, "[%s] %-20s expecting ELS cmd=x%x received cmd=x%x\n", in node_check_els_req()
1632 node->display_name, funcname, cmd, els_gen->command_code); in node_check_els_req()
1636 return -1; in node_check_els_req()
1656 * @return zero if NS command matches, -1 otherwise
1665 ocs_assert(ctx, -1); in node_check_ns_req()
1666 node = ctx->app; in node_check_ns_req()
1667 ocs_assert(node, -1); in node_check_ns_req()
1668 ocs = node->ocs; in node_check_ns_req()
1669 ocs_assert(ocs, -1); in node_check_ns_req()
1671 ocs_assert(cbdata, -1); in node_check_ns_req()
1672 ocs_assert(cbdata->els, -1); in node_check_ns_req()
1673 fcct = (fcct_iu_header_t *)cbdata->els->els_req.virt; in node_check_ns_req()
1674 ocs_assert(fcct, -1); in node_check_ns_req()
1676 if ((cbdata->els->hio_type != OCS_HW_FC_CT) || fcct->cmd_rsp_code != ocs_htobe16(cmd)) { in node_check_ns_req()
1677 if (cbdata->els->hio_type != OCS_HW_FC_CT) { in node_check_ns_req()
1678 ocs_log_debug(node->ocs, "[%s] %-20s expecting NS cmd=x%x received type=%d\n", in node_check_ns_req()
1679 node->display_name, funcname, cmd, cbdata->els->hio_type); in node_check_ns_req()
1681 ocs_log_debug(node->ocs, "[%s] %-20s expecting NS cmd=x%x received cmd=x%x\n", in node_check_ns_req()
1682 node->display_name, funcname, cmd, fcct->cmd_rsp_code); in node_check_ns_req()
1686 return -1; in node_check_ns_req()
1697 ocs_mgmt_start_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_list()
1720 ocs_lock(&node->active_ios_lock); in ocs_mgmt_node_list()
1721 ocs_list_foreach(&node->active_ios, io) { in ocs_mgmt_node_list()
1722 if ((io->mgmt_functions) && (io->mgmt_functions->get_list_handler)) { in ocs_mgmt_node_list()
1723 io->mgmt_functions->get_list_handler(textbuf, io); in ocs_mgmt_node_list()
1726 ocs_unlock(&node->active_ios_lock); in ocs_mgmt_node_list()
1728 ocs_mgmt_end_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_list()
1737 int retval = -1; in ocs_mgmt_node_get()
1739 ocs_mgmt_start_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_get()
1741 ocs_snprintf(qualifier, sizeof(qualifier), "%s/node[%d]", parent, node->instance_index); in ocs_mgmt_node_get()
1747 /* See if it's a value I can supply */ in ocs_mgmt_node_get()
1749 ocs_mgmt_emit_string(textbuf, MGMT_MODE_RD, "display_name", node->display_name); in ocs_mgmt_node_get()
1752 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "indicator", "0x%x", node->rnode.indicator); in ocs_mgmt_node_get()
1755 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "fc_id", "0x%06x", node->rnode.fc_id); in ocs_mgmt_node_get()
1758 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "attached", node->rnode.attached); in ocs_mgmt_node_get()
1761 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "hold_frames", node->hold_frames); in ocs_mgmt_node_get()
1764 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "io_alloc_enabled", node->io_alloc_enabled); in ocs_mgmt_node_get()
1767 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "req_free", node->req_free); in ocs_mgmt_node_get()
1770 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "ls_acc_oxid", "0x%#04x", node->ls_acc_oxid); in ocs_mgmt_node_get()
1773 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "ls_acc_did", "0x%#04x", node->ls_acc_did); in ocs_mgmt_node_get()
1776 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "abort_cnt", "%d", node->abort_cnt); in ocs_mgmt_node_get()
1779 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "targ", node->targ); in ocs_mgmt_node_get()
1782 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "init", node->init); in ocs_mgmt_node_get()
1785 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "wwpn", "%s", node->wwpn); in ocs_mgmt_node_get()
1788 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "wwnn", "%s", node->wwnn); in ocs_mgmt_node_get()
1791 ocs_mgmt_emit_string(textbuf, MGMT_MODE_RD, "current_state", node->current_state_name); in ocs_mgmt_node_get()
1794 …ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "login_state", "%d", (node->sm.current_state == __ocs_d_d… in ocs_mgmt_node_get()
1798 ocs_lock(&node->pend_frames_lock); in ocs_mgmt_node_get()
1799 ocs_list_foreach(&node->pend_frames, frame) { in ocs_mgmt_node_get()
1803 hdr = frame->header->dma.virt; in ocs_mgmt_node_get()
1804 ocs_snprintf(buf, sizeof(buf), "%02x/%04x/%04x len %zu", hdr->r_ctl, in ocs_mgmt_node_get()
1805 ocs_be16toh(hdr->ox_id), ocs_be16toh(hdr->rx_id), in ocs_mgmt_node_get()
1806 frame->payload->dma.len); in ocs_mgmt_node_get()
1809 ocs_unlock(&node->pend_frames_lock); in ocs_mgmt_node_get()
1812 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "chained_io_count", "%d", node->chained_io_count); in ocs_mgmt_node_get()
1816 ocs_lock(&node->active_ios_lock); in ocs_mgmt_node_get()
1817 ocs_list_foreach(&node->active_ios, io) { in ocs_mgmt_node_get()
1818 if ((io->mgmt_functions) && (io->mgmt_functions->get_handler)) { in ocs_mgmt_node_get()
1819 retval = io->mgmt_functions->get_handler(textbuf, qualifier, name, io); in ocs_mgmt_node_get()
1826 ocs_unlock(&node->active_ios_lock); in ocs_mgmt_node_get()
1830 ocs_mgmt_end_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_get()
1842 ocs_mgmt_start_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_get_all()
1844 ocs_mgmt_emit_string(textbuf, MGMT_MODE_RD, "display_name", node->display_name); in ocs_mgmt_node_get_all()
1845 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "indicator", "0x%x", node->rnode.indicator); in ocs_mgmt_node_get_all()
1846 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "fc_id", "0x%06x", node->rnode.fc_id); in ocs_mgmt_node_get_all()
1847 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "attached", node->rnode.attached); in ocs_mgmt_node_get_all()
1848 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "hold_frames", node->hold_frames); in ocs_mgmt_node_get_all()
1849 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "io_alloc_enabled", node->io_alloc_enabled); in ocs_mgmt_node_get_all()
1850 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "req_free", node->req_free); in ocs_mgmt_node_get_all()
1851 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "ls_acc_oxid", "0x%#04x", node->ls_acc_oxid); in ocs_mgmt_node_get_all()
1852 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "ls_acc_did", "0x%#04x", node->ls_acc_did); in ocs_mgmt_node_get_all()
1853 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "abort_cnt", "%d", node->abort_cnt); in ocs_mgmt_node_get_all()
1854 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "targ", node->targ); in ocs_mgmt_node_get_all()
1855 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "init", node->init); in ocs_mgmt_node_get_all()
1856 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "wwpn", "%s", node->wwpn); in ocs_mgmt_node_get_all()
1857 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "wwnn", "%s", node->wwnn); in ocs_mgmt_node_get_all()
1859 ocs_lock(&node->pend_frames_lock); in ocs_mgmt_node_get_all()
1860 ocs_list_foreach(&node->pend_frames, frame) { in ocs_mgmt_node_get_all()
1864 hdr = frame->header->dma.virt; in ocs_mgmt_node_get_all()
1865 ocs_snprintf(buf, sizeof(buf), "%02x/%04x/%04x len %zu", hdr->r_ctl, in ocs_mgmt_node_get_all()
1866 ocs_be16toh(hdr->ox_id), ocs_be16toh(hdr->rx_id), in ocs_mgmt_node_get_all()
1867 frame->payload->dma.len); in ocs_mgmt_node_get_all()
1870 ocs_unlock(&node->pend_frames_lock); in ocs_mgmt_node_get_all()
1872 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "chained_io_count", "%d", node->chained_io_count); in ocs_mgmt_node_get_all()
1874 ocs_mgmt_emit_string(textbuf, MGMT_MODE_RD, "current_state", node->current_state_name); in ocs_mgmt_node_get_all()
1875 …ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "login_state", "%d", (node->sm.current_state == __ocs_d_d… in ocs_mgmt_node_get_all()
1877 ocs_lock(&node->active_ios_lock); in ocs_mgmt_node_get_all()
1878 ocs_list_foreach(&node->active_ios, io) { in ocs_mgmt_node_get_all()
1879 if ((io->mgmt_functions) && (io->mgmt_functions->get_all_handler)) { in ocs_mgmt_node_get_all()
1880 io->mgmt_functions->get_all_handler(textbuf,io); in ocs_mgmt_node_get_all()
1883 ocs_unlock(&node->active_ios_lock); in ocs_mgmt_node_get_all()
1885 ocs_mgmt_end_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_get_all()
1894 int retval = -1; in ocs_mgmt_node_set()
1896 ocs_snprintf(qualifier, sizeof(qualifier), "%s/node[%d]", parent, node->instance_index); in ocs_mgmt_node_set()
1900 ocs_lock(&node->active_ios_lock); in ocs_mgmt_node_set()
1901 ocs_list_foreach(&node->active_ios, io) { in ocs_mgmt_node_set()
1902 if ((io->mgmt_functions) && (io->mgmt_functions->set_handler)) { in ocs_mgmt_node_set()
1903 retval = io->mgmt_functions->set_handler(qualifier, name, value, io); in ocs_mgmt_node_set()
1910 ocs_unlock(&node->active_ios_lock); in ocs_mgmt_node_set()
1923 int retval = -1; in ocs_mgmt_node_exec()
1925 ocs_snprintf(qualifier, sizeof(qualifier), "%s.node%d", parent, node->instance_index); in ocs_mgmt_node_exec()
1937 ocs_lock(&node->active_ios_lock); in ocs_mgmt_node_exec()
1938 ocs_list_foreach(&node->active_ios, io) { in ocs_mgmt_node_exec()
1939 if ((io->mgmt_functions) && (io->mgmt_functions->exec_handler)) { in ocs_mgmt_node_exec()
1940 retval = io->mgmt_functions->exec_handler(qualifier, action, arg_in, arg_in_length, in ocs_mgmt_node_exec()
1948 ocs_unlock(&node->active_ios_lock); in ocs_mgmt_node_exec()
1958 * Test if node->active_ios list is empty while holding the node->active_ios_lock.
1970 ocs_lock(&node->active_ios_lock); in ocs_node_active_ios_empty()
1971 empty = ocs_list_empty(&node->active_ios); in ocs_node_active_ios_empty()
1972 ocs_unlock(&node->active_ios_lock); in ocs_node_active_ios_empty()
1977 * @brief Pause a node
1991 node->nodedb_state = state; in ocs_node_pause()
1998 * This state is entered when a state is "paused". When resumed, the node
1999 * is transitioned to a previously saved state (node->ndoedb_state)
2021 ocs_sm_function_t pf = node->nodedb_state; in __ocs_node_paused()
2023 node->nodedb_state = NULL; in __ocs_node_paused()
2032 node->req_free = 1; in __ocs_node_paused()
2043 * @brief Resume a paused state
2045 * Posts a resume event to the paused node.
2049 * @return returns 0 for success, a negative error code value for failure.
2055 ocs_assert(node != NULL, -1); in ocs_node_resume()
2064 * @brief Dispatch a ELS frame.
2068 * RQ Pair mode: this function is always called with a NULL hw
2075 * up appropriately, -1 if frame not handled and RX buffers need
2099 ocs_t *ocs = node->ocs; in ocs_node_recv_els_frame()
2101 fc_header_t *hdr = seq->header->dma.virt; in ocs_node_recv_els_frame()
2102 uint8_t *buf = seq->payload->dma.virt; in ocs_node_recv_els_frame()
2108 cbdata.header = seq->header; in ocs_node_recv_els_frame()
2109 cbdata.payload = seq->payload; in ocs_node_recv_els_frame()
2111 /* find a matching event for the ELS command */ in ocs_node_recv_els_frame()
2122 …ocs_display_sparams(node->display_name, "flogi rcvd req", 0, NULL, ((uint8_t*)seq->payload->dma.vi… in ocs_node_recv_els_frame()
2125 …ocs_display_sparams(node->display_name, "fdisc rcvd req", 0, NULL, ((uint8_t*)seq->payload->dma.vi… in ocs_node_recv_els_frame()
2128 …ocs_display_sparams(node->display_name, "plogi rcvd req", 0, NULL, ((uint8_t*)seq->payload->dma.vi… in ocs_node_recv_els_frame()
2137 cbdata.io->hw_priv = seq->hw_priv; in ocs_node_recv_els_frame()
2139 cbdata.io->seq_init = 1; in ocs_node_recv_els_frame()
2144 … fc_be24toh(hdr->s_id), fc_be24toh(hdr->d_id), ocs_be16toh(hdr->ox_id), ocs_be16toh(hdr->rx_id)); in ocs_node_recv_els_frame()
2146 ocs_hw_sequence_free(&ocs->hw, seq); in ocs_node_recv_els_frame()
2152 * @brief Dispatch a ABTS frame (RQ Pair/sequence coalescing).
2162 * up appropriately, -1 if frame not handled and RX buffers need
2169 ocs_t *ocs = node->ocs; in ocs_node_recv_abts_frame()
2170 ocs_xport_t *xport = ocs->xport; in ocs_node_recv_abts_frame()
2171 fc_header_t *hdr = seq->header->dma.virt; in ocs_node_recv_abts_frame()
2172 uint16_t ox_id = ocs_be16toh(hdr->ox_id); in ocs_node_recv_abts_frame()
2173 uint16_t rx_id = ocs_be16toh(hdr->rx_id); in ocs_node_recv_abts_frame()
2177 node->abort_cnt++; in ocs_node_recv_abts_frame()
2189 rc = ocs_hw_get(&ocs->hw, OCS_HW_SEND_FRAME_CAPABLE, &send_frame_capable); in ocs_node_recv_abts_frame()
2201 cbdata.header = seq->header; in ocs_node_recv_abts_frame()
2202 cbdata.payload = seq->payload; in ocs_node_recv_abts_frame()
2206 cbdata.io->hw_priv = seq->hw_priv; in ocs_node_recv_abts_frame()
2208 cbdata.io->seq_init = 1; in ocs_node_recv_abts_frame()
2211 cbdata.io->ocs = ocs; in ocs_node_recv_abts_frame()
2212 cbdata.io->node = node; in ocs_node_recv_abts_frame()
2213 cbdata.io->cmd_tgt = TRUE; in ocs_node_recv_abts_frame()
2217 ocs_atomic_add_return(&xport->io_alloc_failed_count, 1); in ocs_node_recv_abts_frame()
2219 … fc_be24toh(hdr->s_id), fc_be24toh(hdr->d_id), ocs_be16toh(hdr->ox_id), ocs_be16toh(hdr->rx_id)); in ocs_node_recv_abts_frame()
2223 ocs_hw_sequence_free(&ocs->hw, seq); in ocs_node_recv_abts_frame()
2229 * @brief Dispatch a CT frame.
2232 * A CT frame is dispatched to the \c node state machine.
2233 * RQ Pair mode: this function is always called with a NULL hw
2240 * up appropriately, -1 if frame not handled and RX buffers need
2247 ocs_t *ocs = node->ocs; in ocs_node_recv_ct_frame()
2248 fc_header_t *hdr = seq->header->dma.virt; in ocs_node_recv_ct_frame()
2249 fcct_iu_header_t *iu = seq->payload->dma.virt; in ocs_node_recv_ct_frame()
2252 uint16_t gscmd = ocs_be16toh(iu->cmd_rsp_code); in ocs_node_recv_ct_frame()
2278 cbdata.header = seq->header; in ocs_node_recv_ct_frame()
2279 cbdata.payload = seq->payload; in ocs_node_recv_ct_frame()
2281 /* find a matching event for the ELS/GS command */ in ocs_node_recv_ct_frame()
2290 /* Allocate an IO and send a reject */ in ocs_node_recv_ct_frame()
2294 fc_be24toh(hdr->s_id), fc_be24toh(hdr->d_id), in ocs_node_recv_ct_frame()
2295 ocs_be16toh(hdr->ox_id), ocs_be16toh(hdr->rx_id)); in ocs_node_recv_ct_frame()
2296 return -1; in ocs_node_recv_ct_frame()
2298 cbdata.io->hw_priv = seq->hw_priv; in ocs_node_recv_ct_frame()
2301 ocs_hw_sequence_free(&ocs->hw, seq); in ocs_node_recv_ct_frame()
2307 * @brief Dispatch a FCP command frame when the node is not ready.
2310 * A frame is dispatched to the \c node state machine.
2316 * up appropriately, -1 if frame not handled.
2323 ocs_t *ocs = node->ocs; in ocs_node_recv_fcp_cmd()
2326 cbdata.header = seq->header; in ocs_node_recv_fcp_cmd()
2327 cbdata.payload = seq->payload; in ocs_node_recv_fcp_cmd()
2329 ocs_hw_sequence_free(&ocs->hw, seq); in ocs_node_recv_fcp_cmd()
2335 * @brief Stub handler for non-ABTS BLS frames
2338 * Log message and drop. Customer can plumb it to their back-end as needed
2349 fc_header_t *hdr = seq->header->dma.virt; in ocs_node_recv_bls_no_sit()
2359 return -1; in ocs_node_recv_bls_no_sit()