Lines Matching refs:node
55 io->node->display_name, SCSI_IOFMT_ARGS(io), ##__VA_ARGS__)
57 void ocs_mgmt_node_list(ocs_textbuf_t *textbuf, void *node);
58 void ocs_mgmt_node_get_all(ocs_textbuf_t *textbuf, void *node);
59 int ocs_mgmt_node_get(ocs_textbuf_t *textbuf, char *parent, char *name, void *node);
60 int ocs_mgmt_node_set(char *parent, char *name, char *value, void *node);
62 void *arg_out, uint32_t arg_out_length, void *node);
83 ocs_node_abort_all_els(ocs_node_t *node) in ocs_node_abort_all_els() argument
89 ocs_node_hold_frames(node); in ocs_node_abort_all_els()
90 ocs_lock(&node->active_ios_lock); in ocs_node_abort_all_els()
91 ocs_list_foreach_safe(&node->els_io_active_list, els, els_next) { in ocs_node_abort_all_els()
92 ocs_log_debug(node->ocs, "[%s] initiate ELS abort %s\n", node->display_name, els->display_name); in ocs_node_abort_all_els()
93 ocs_unlock(&node->active_ios_lock); in ocs_node_abort_all_els()
96 ocs_lock(&node->active_ios_lock); in ocs_node_abort_all_els()
98 ocs_unlock(&node->active_ios_lock); in ocs_node_abort_all_els()
120 ocs_node_t *node = rnode->node; in ocs_remote_node_cb() local
145 if ((node->node_group != NULL) && in ocs_remote_node_cb()
150 ocs_sport_lock(node->sport); in ocs_remote_node_cb()
152 ocs_list_foreach(&node->sport->node_list, n) { in ocs_remote_node_cb()
153 if (node == n) { in ocs_remote_node_cb()
157 if ((!n->rnode.attached) && (node->node_group == n->node_group)) { in ocs_remote_node_cb()
167 ocs_sport_unlock(node->sport); in ocs_remote_node_cb()
170 ocs_node_post_event(node, sm_event, NULL); in ocs_remote_node_cb()
187 ocs_node_t *node; in ocs_node_find() local
191 node = spv_get(sport->lookup, port_id); in ocs_node_find()
193 return node; in ocs_node_find()
208 ocs_node_t *node = NULL;; in ocs_node_find_wwpn() local
213 ocs_list_foreach(&sport->node_list, node) { in ocs_node_find_wwpn()
214 if (ocs_node_get_wwpn(node) == wwpn) { in ocs_node_find_wwpn()
216 return node; in ocs_node_find_wwpn()
240 ocs_node_t *node; in ocs_node_create_pool() local
268 node = ocs_malloc(ocs, sizeof(ocs_node_t), OCS_M_ZERO | OCS_M_NOWAIT); in ocs_node_create_pool()
269 if (node == NULL) { in ocs_node_create_pool()
275 node->instance_index = i; in ocs_node_create_pool()
276 node->max_wr_xfer_size = max_xfer_size; in ocs_node_create_pool()
277 node->rnode.indicator = UINT32_MAX; in ocs_node_create_pool()
279 rc = ocs_dma_alloc(ocs, &node->sparm_dma_buf, 256, 16); in ocs_node_create_pool()
281 ocs_free(ocs, node, sizeof(ocs_node_t)); in ocs_node_create_pool()
286 xport->nodes[i] = node; in ocs_node_create_pool()
287 ocs_list_add_tail(&xport->nodes_free_list, node); in ocs_node_create_pool()
311 ocs_node_t *node; in ocs_node_free_pool() local
320 node = xport->nodes[i]; in ocs_node_free_pool()
321 if (node) { in ocs_node_free_pool()
323 ocs_dma_free(ocs, &node->sparm_dma_buf); in ocs_node_free_pool()
324 ocs_free(ocs, node, sizeof(ocs_node_t)); in ocs_node_free_pool()
350 ocs_node_t *node = NULL; in ocs_node_get_instance() local
356 node = xport->nodes[index]; in ocs_node_get_instance()
357 return node->attached ? node : NULL; in ocs_node_get_instance()
376 ocs_node_t *node = NULL; in ocs_node_alloc() local
391 node = ocs_list_remove_head(&xport->nodes_free_list); in ocs_node_alloc()
393 if (node == NULL) { in ocs_node_alloc()
399 instance_index = node->instance_index; in ocs_node_alloc()
400 max_wr_xfer_size = node->max_wr_xfer_size; in ocs_node_alloc()
401 sparm_dma_buf = node->sparm_dma_buf; in ocs_node_alloc()
403 ocs_memset(node, 0, sizeof(*node)); in ocs_node_alloc()
404 node->instance_index = instance_index; in ocs_node_alloc()
405 node->max_wr_xfer_size = max_wr_xfer_size; in ocs_node_alloc()
406 node->sparm_dma_buf = sparm_dma_buf; in ocs_node_alloc()
407 node->rnode.indicator = UINT32_MAX; in ocs_node_alloc()
409 node->sport = sport; in ocs_node_alloc()
412 node->ocs = ocs; in ocs_node_alloc()
413 node->init = init; in ocs_node_alloc()
414 node->targ = targ; in ocs_node_alloc()
416 rc = ocs_hw_node_alloc(&ocs->hw, &node->rnode, port_id, sport); in ocs_node_alloc()
423 ocs_list_add_tail(&xport->nodes_free_list, node); in ocs_node_alloc()
428 ocs_list_add_tail(&sport->node_list, node); in ocs_node_alloc()
430 ocs_node_lock_init(node); in ocs_node_alloc()
431 ocs_lock_init(ocs, &node->pend_frames_lock, "pend_frames_lock[%d]", node->instance_index); in ocs_node_alloc()
432 ocs_list_init(&node->pend_frames, ocs_hw_sequence_t, link); in ocs_node_alloc()
433 ocs_lock_init(ocs, &node->active_ios_lock, "active_ios[%d]", node->instance_index); in ocs_node_alloc()
434 ocs_list_init(&node->active_ios, ocs_io_t, link); in ocs_node_alloc()
435 ocs_list_init(&node->els_io_pend_list, ocs_io_t, link); in ocs_node_alloc()
436 ocs_list_init(&node->els_io_active_list, ocs_io_t, link); in ocs_node_alloc()
437 ocs_scsi_io_alloc_enable(node); in ocs_node_alloc()
440 ocs_memset(node->sparm_dma_buf.virt, 0, node->sparm_dma_buf.size); in ocs_node_alloc()
442 node->rnode.node = node; in ocs_node_alloc()
443 node->sm.app = node; in ocs_node_alloc()
444 node->evtdepth = 0; in ocs_node_alloc()
446 ocs_node_update_display_name(node); in ocs_node_alloc()
448 spv_set(sport->lookup, port_id, node); in ocs_node_alloc()
450 node->mgmt_functions = &node_mgmt_functions; in ocs_node_alloc()
452 return node; in ocs_node_alloc()
467 ocs_node_free(ocs_node_t *node) in ocs_node_free() argument
476 ocs_assert(node, -1); in ocs_node_free()
477 ocs_assert(node->sport, -1); in ocs_node_free()
478 ocs_assert(node->ocs, -1); in ocs_node_free()
479 sport = node->sport; in ocs_node_free()
481 ocs = node->ocs; in ocs_node_free()
485 node_printf(node, "Free'd\n"); in ocs_node_free()
487 if(node->refound) { in ocs_node_free()
492 ns = ocs_node_find(node->sport, FC_ADDR_NAMESERVER); in ocs_node_free()
497 ocs_list_remove(&sport->node_list, node); in ocs_node_free()
500 if (OCS_HW_RTN_IS_ERROR((rc = ocs_hw_node_free_resources(&ocs->hw, &node->rnode)))) { in ocs_node_free()
506 if (ocs_timer_pending(&node->gidpt_delay_timer)) { in ocs_node_free()
507 ocs_del_timer(&node->gidpt_delay_timer); in ocs_node_free()
510 if (node->fcp2device) { in ocs_node_free()
511 ocs_del_crn(node); in ocs_node_free()
516 ocs_log_test(node->ocs, "assertion failed: sport lookup is NULL\n"); in ocs_node_free()
521 spv_set(sport->lookup, node->rnode.fc_id, NULL); in ocs_node_free()
537 node->sport = NULL; in ocs_node_free()
538 node->sm.current_state = NULL; in ocs_node_free()
540 ocs_node_lock_free(node); in ocs_node_free()
541 ocs_lock_free(&node->pend_frames_lock); in ocs_node_free()
542 ocs_lock_free(&node->active_ios_lock); in ocs_node_free()
546 ocs_list_add_tail(&xport->nodes_free_list, node); in ocs_node_free()
569 ocs_node_force_free(ocs_node_t *node) in ocs_node_force_free() argument
577 ocs_sm_disable(&node->sm); in ocs_node_force_free()
578 ocs_strncpy(node->prev_state_name, node->current_state_name, sizeof(node->prev_state_name)); in ocs_node_force_free()
579 ocs_strncpy(node->current_state_name, "disabled", sizeof(node->current_state_name)); in ocs_node_force_free()
582 ocs_scsi_notify_node_force_free(node); in ocs_node_force_free()
584 ocs_lock(&node->active_ios_lock); in ocs_node_force_free()
585 ocs_list_foreach_safe(&node->active_ios, io, next) { in ocs_node_force_free()
586 ocs_list_remove(&io->node->active_ios, io); in ocs_node_force_free()
587 ocs_io_free(node->ocs, io); in ocs_node_force_free()
589 ocs_unlock(&node->active_ios_lock); in ocs_node_force_free()
592 ocs_lock(&node->active_ios_lock); in ocs_node_force_free()
593 ocs_list_foreach_safe(&node->els_io_pend_list, els, els_next) { in ocs_node_force_free()
595 ocs_list_remove(&node->els_io_pend_list, els); in ocs_node_force_free()
597 ocs_io_free(node->ocs, els); in ocs_node_force_free()
599 ocs_unlock(&node->active_ios_lock); in ocs_node_force_free()
602 ocs_lock(&node->active_ios_lock); in ocs_node_force_free()
603 ocs_list_foreach_safe(&node->els_io_active_list, els, els_next) { in ocs_node_force_free()
605 ocs_list_remove(&node->els_io_active_list, els); in ocs_node_force_free()
607 ocs_io_free(node->ocs, els); in ocs_node_force_free()
609 ocs_unlock(&node->active_ios_lock); in ocs_node_force_free()
612 ocs_node_purge_pending(node); in ocs_node_force_free()
614 ocs_node_free(node); in ocs_node_force_free()
626 ocs_node_attach(ocs_node_t *node) in ocs_node_attach() argument
629 ocs_sport_t *sport = node->sport; in ocs_node_attach()
631 ocs_t *ocs = node->ocs; in ocs_node_attach()
639 ocs_node_build_eui_name(node->wwpn, sizeof(node->wwpn), ocs_node_get_wwpn(node)); in ocs_node_attach()
640 ocs_node_build_eui_name(node->wwnn, sizeof(node->wwnn), ocs_node_get_wwnn(node)); in ocs_node_attach()
643 ocs_node_group_init(node); in ocs_node_attach()
646 ocs_dma_copy_in(&node->sparm_dma_buf, node->service_params+4, sizeof(node->service_params)-4); in ocs_node_attach()
649 ocs_node_lock(node); in ocs_node_attach()
650 rc = ocs_hw_node_attach(&ocs->hw, &node->rnode, &node->sparm_dma_buf); in ocs_node_attach()
654 ocs_node_unlock(node); in ocs_node_attach()
710 ocs_node_update_display_name(ocs_node_t *node) in ocs_node_update_display_name() argument
712 uint32_t port_id = node->rnode.fc_id; in ocs_node_update_display_name()
713 ocs_sport_t *sport = node->sport; in ocs_node_update_display_name()
720 …ocs_snprintf(node->display_name, sizeof(node->display_name), "%s.%s", sport->display_name, portid_… in ocs_node_update_display_name()
734 ocs_node_send_ls_io_cleanup(ocs_node_t *node) in ocs_node_send_ls_io_cleanup() argument
736 ocs_t *ocs = node->ocs; in ocs_node_send_ls_io_cleanup()
738 if (node->send_ls_acc != OCS_NODE_SEND_LS_ACC_NONE) { in ocs_node_send_ls_io_cleanup()
739 ocs_assert(node->ls_acc_io); in ocs_node_send_ls_io_cleanup()
741 node->display_name, node->ls_acc_oxid); in ocs_node_send_ls_io_cleanup()
743 node->ls_acc_io->hio = NULL; in ocs_node_send_ls_io_cleanup()
744 ocs_els_io_free(node->ls_acc_io); in ocs_node_send_ls_io_cleanup()
745 node->send_ls_acc = OCS_NODE_SEND_LS_ACC_NONE; in ocs_node_send_ls_io_cleanup()
746 node->ls_acc_io = NULL; in ocs_node_send_ls_io_cleanup()
775 ocs_node_hold_frames(node); in __ocs_node_shutdown()
776 ocs_assert(ocs_node_active_ios_empty(node), NULL); in __ocs_node_shutdown()
777 ocs_assert(ocs_els_io_list_empty(node, &node->els_io_active_list), NULL); in __ocs_node_shutdown()
780 node->req_free = 1; in __ocs_node_shutdown()
782 switch (node->shutdown_reason) { in __ocs_node_shutdown()
793 ocs_assert(node->send_ls_acc == OCS_NODE_SEND_LS_ACC_PLOGI, NULL); in __ocs_node_shutdown()
794 node_printf(node, "Shutdown reason: implicit logout, re-authenticate\n"); in __ocs_node_shutdown()
796 ocs_scsi_io_alloc_enable(node); in __ocs_node_shutdown()
799 node->req_free = 0; in __ocs_node_shutdown()
800 rc = ocs_node_attach(node); in __ocs_node_shutdown()
801 ocs_node_transition(node, __ocs_d_wait_node_attach, NULL); in __ocs_node_shutdown()
803 ocs_node_post_event(node, OCS_EVT_NODE_ATTACH_OK, NULL); in __ocs_node_shutdown()
810 ocs_node_send_ls_io_cleanup(node); in __ocs_node_shutdown()
811 ocs_assert(ocs_els_io_list_empty(node, &node->els_io_pend_list), NULL); in __ocs_node_shutdown()
813 ocs_lock(&node->pend_frames_lock); in __ocs_node_shutdown()
814 pend_frames_empty = ocs_list_empty(&node->pend_frames); in __ocs_node_shutdown()
815 ocs_unlock(&node->pend_frames_lock); in __ocs_node_shutdown()
822 node_printf(node, "Shutdown: explicit logo pend=%d sport.ini=%d node.tgt=%d\n", in __ocs_node_shutdown()
823 !pend_frames_empty, node->sport->enable_ini, node->targ); in __ocs_node_shutdown()
825 if((!pend_frames_empty) || (node->sport->enable_ini && node->targ)) { in __ocs_node_shutdown()
827 if (node->sport->enable_ini && node->targ) { in __ocs_node_shutdown()
835 ocs_scsi_io_alloc_enable(node); in __ocs_node_shutdown()
836 node->req_free = 0; in __ocs_node_shutdown()
841 ocs_node_init_device(node, send_plogi); in __ocs_node_shutdown()
854 ocs_node_send_ls_io_cleanup(node); in __ocs_node_shutdown()
855 ocs_assert(ocs_els_io_list_empty(node, &node->els_io_pend_list), NULL); in __ocs_node_shutdown()
857 node_printf(node, "Shutdown reason: default, purge pending\n"); in __ocs_node_shutdown()
858 ocs_node_purge_pending(node); in __ocs_node_shutdown()
865 ocs_node_accept_frames(node); in __ocs_node_shutdown()
888 ocs_node_check_els_quiesced(ocs_node_t *node) in ocs_node_check_els_quiesced() argument
890 ocs_assert(node, -1); in ocs_node_check_els_quiesced()
893 if ((node->els_req_cnt == 0) && (node->els_cmpl_cnt == 0) && in ocs_node_check_els_quiesced()
894 ocs_els_io_list_empty(node, &node->els_io_active_list)) { in ocs_node_check_els_quiesced()
895 if (!node->attached) { in ocs_node_check_els_quiesced()
897 node_printf(node, "HW node not attached\n"); in ocs_node_check_els_quiesced()
898 ocs_node_transition(node, __ocs_node_wait_ios_shutdown, NULL); in ocs_node_check_els_quiesced()
901 node_printf(node, "HW node still attached\n"); in ocs_node_check_els_quiesced()
902 ocs_node_transition(node, __ocs_node_wait_node_free, NULL); in ocs_node_check_els_quiesced()
923 ocs_node_initiate_cleanup(ocs_node_t *node) in ocs_node_initiate_cleanup() argument
928 ocs_assert(node); in ocs_node_initiate_cleanup()
929 ocs = node->ocs; in ocs_node_initiate_cleanup()
932 ocs_lock(&node->active_ios_lock); in ocs_node_initiate_cleanup()
933 ocs_list_foreach_safe(&node->els_io_pend_list, els, els_next) { in ocs_node_initiate_cleanup()
936 if ((node->send_ls_acc != OCS_NODE_SEND_LS_ACC_NONE) && in ocs_node_initiate_cleanup()
937 (els == node->ls_acc_io)) { in ocs_node_initiate_cleanup()
941 node_printf(node, "Freeing pending els %s\n", els->display_name); in ocs_node_initiate_cleanup()
942 ocs_list_remove(&node->els_io_pend_list, els); in ocs_node_initiate_cleanup()
944 ocs_io_free(node->ocs, els); in ocs_node_initiate_cleanup()
946 ocs_unlock(&node->active_ios_lock); in ocs_node_initiate_cleanup()
948 if (node->ls_acc_io && node->ls_acc_io->hio != NULL) { in ocs_node_initiate_cleanup()
956 ocs_assert(node->shutdown_reason == OCS_NODE_SHUTDOWN_IMPLICIT_LOGO); in ocs_node_initiate_cleanup()
957 ocs_assert(node->send_ls_acc == OCS_NODE_SEND_LS_ACC_PLOGI); in ocs_node_initiate_cleanup()
958 node_printf(node, "invalidating ls_acc_io due to implicit logo\n"); in ocs_node_initiate_cleanup()
961 ocs_hw_io_free(&ocs->hw, node->ls_acc_io->hio); in ocs_node_initiate_cleanup()
964 node->ls_acc_io->hio = NULL; in ocs_node_initiate_cleanup()
971 if (ocs_node_check_els_quiesced(node) == 0) { in ocs_node_initiate_cleanup()
976 ocs_node_abort_all_els(node); in ocs_node_initiate_cleanup()
977 ocs_node_transition(node, __ocs_node_wait_els_shutdown, NULL); in ocs_node_initiate_cleanup()
1007 ocs_node_hold_frames(node); in __ocs_node_wait_els_shutdown()
1008 if (ocs_els_io_list_empty(node, &node->els_io_active_list)) { in __ocs_node_wait_els_shutdown()
1009 node_printf(node, "All ELS IOs complete\n"); in __ocs_node_wait_els_shutdown()
1015 ocs_node_accept_frames(node); in __ocs_node_wait_els_shutdown()
1022 ocs_assert(node->els_req_cnt, NULL); in __ocs_node_wait_els_shutdown()
1023 node->els_req_cnt--; in __ocs_node_wait_els_shutdown()
1029 ocs_assert(node->els_cmpl_cnt, NULL); in __ocs_node_wait_els_shutdown()
1030 node->els_cmpl_cnt--; in __ocs_node_wait_els_shutdown()
1036 node_printf(node, "All ELS IOs complete\n"); in __ocs_node_wait_els_shutdown()
1037 ocs_assert(ocs_els_io_list_empty(node, &node->els_io_active_list), NULL); in __ocs_node_wait_els_shutdown()
1051 node->shutdown_reason = OCS_NODE_SHUTDOWN_DEFAULT; in __ocs_node_wait_els_shutdown()
1055 node_printf(node, "%s received\n", ocs_sm_event_name(evt)); in __ocs_node_wait_els_shutdown()
1064 ocs_node_check_els_quiesced(node); in __ocs_node_wait_els_shutdown()
1094 ocs_node_hold_frames(node); in __ocs_node_wait_node_free()
1098 ocs_node_accept_frames(node); in __ocs_node_wait_node_free()
1103 node->attached = FALSE; in __ocs_node_wait_node_free()
1104 ocs_node_transition(node, __ocs_node_wait_ios_shutdown, NULL); in __ocs_node_wait_node_free()
1119 node->shutdown_reason = OCS_NODE_SHUTDOWN_DEFAULT; in __ocs_node_wait_node_free()
1123 node_printf(node, "%s received\n", ocs_sm_event_name(evt)); in __ocs_node_wait_node_free()
1158 ocs_node_hold_frames(node); in __ocs_node_wait_ios_shutdown()
1161 if (ocs_els_io_list_empty(node, &node->els_io_active_list)) { in __ocs_node_wait_ios_shutdown()
1163 if (!ocs_node_active_ios_empty(node)) { in __ocs_node_wait_ios_shutdown()
1164 ocs_lock(&node->active_ios_lock); in __ocs_node_wait_ios_shutdown()
1165 ocs_list_foreach_safe(&node->active_ios, io, next) { in __ocs_node_wait_ios_shutdown()
1166 ocs_list_remove(&io->node->active_ios, io); in __ocs_node_wait_ios_shutdown()
1167 ocs_io_free(node->ocs, io); in __ocs_node_wait_ios_shutdown()
1169 ocs_unlock(&node->active_ios_lock); in __ocs_node_wait_ios_shutdown()
1171 ocs_node_transition(node, __ocs_node_shutdown, NULL); in __ocs_node_wait_ios_shutdown()
1177 if (ocs_node_active_ios_empty(node) && in __ocs_node_wait_ios_shutdown()
1178 ocs_els_io_list_empty(node, &node->els_io_active_list)) { in __ocs_node_wait_ios_shutdown()
1179 ocs_node_transition(node, __ocs_node_shutdown, NULL); in __ocs_node_wait_ios_shutdown()
1185 ocs_node_accept_frames(node); in __ocs_node_wait_ios_shutdown()
1190 ocs_assert(node->els_req_cnt, NULL); in __ocs_node_wait_ios_shutdown()
1191 node->els_req_cnt--; in __ocs_node_wait_ios_shutdown()
1197 node->shutdown_reason = OCS_NODE_SHUTDOWN_DEFAULT; in __ocs_node_wait_ios_shutdown()
1201 ocs_log_debug(ocs, "[%s] %-20s\n", node->display_name, ocs_sm_event_name(evt)); in __ocs_node_wait_ios_shutdown()
1231 ocs_node_t *node = NULL; in __ocs_node_common() local
1236 node = ctx->app; in __ocs_node_common()
1237 ocs_assert(node->ocs, NULL); in __ocs_node_common()
1238 ocs = node->ocs; in __ocs_node_common()
1250 node->refound = 1; in __ocs_node_common()
1255 node->attached = TRUE; in __ocs_node_common()
1260 node->attached = FALSE; in __ocs_node_common()
1268 ocs_assert(node->els_cmpl_cnt, NULL); in __ocs_node_common()
1269 node->els_cmpl_cnt--; in __ocs_node_common()
1279 ocs_assert(node->els_req_cnt, NULL); in __ocs_node_common()
1280 node->els_req_cnt--; in __ocs_node_common()
1288 node->display_name, funcname, ((uint8_t*)cbdata->payload->dma.virt)[0]); in __ocs_node_common()
1308 node->display_name, funcname, ocs_sm_event_name(evt)); in __ocs_node_common()
1321 node->display_name, funcname, ocs_sm_event_name(evt)); in __ocs_node_common()
1329 node->display_name, funcname, ocs_sm_event_name(evt)); in __ocs_node_common()
1337 ocs_log_test(node->ocs, "[%s] %-20s %-20s not handled\n", node->display_name, funcname, in __ocs_node_common()
1358 ocs_node_save_sparms(ocs_node_t *node, void *payload) in ocs_node_save_sparms() argument
1360 ocs_memcpy(node->service_params, payload, sizeof(node->service_params)); in ocs_node_save_sparms()
1379 ocs_node_post_event(ocs_node_t *node, ocs_sm_event_t evt, void *arg) in ocs_node_post_event() argument
1382 ocs_assert(node); in ocs_node_post_event()
1384 ocs_node_lock(node); in ocs_node_post_event()
1385 node->evtdepth ++; in ocs_node_post_event()
1387 ocs_sm_post_event(&node->sm, evt, arg); in ocs_node_post_event()
1393 if (!node->hold_frames && (node->evtdepth == 1)) { in ocs_node_post_event()
1394 ocs_process_node_pending(node); in ocs_node_post_event()
1396 node->evtdepth --; in ocs_node_post_event()
1401 if ((node->evtdepth == 0) && node->req_free) { in ocs_node_post_event()
1404 ocs_node_unlock(node); in ocs_node_post_event()
1407 ocs_node_free(node); in ocs_node_post_event()
1428 ocs_node_transition(ocs_node_t *node, ocs_sm_function_t state, void *data) in ocs_node_transition() argument
1430 ocs_sm_ctx_t *ctx = &node->sm; in ocs_node_transition()
1432 ocs_node_lock(node); in ocs_node_transition()
1434 ocs_node_post_event(node, OCS_EVT_REENTER, data); in ocs_node_transition()
1436 ocs_node_post_event(node, OCS_EVT_EXIT, data); in ocs_node_transition()
1438 ocs_node_post_event(node, OCS_EVT_ENTER, data); in ocs_node_transition()
1440 ocs_node_unlock(node); in ocs_node_transition()
1478 ocs_node_get_wwpn(ocs_node_t *node) in ocs_node_get_wwpn() argument
1480 fc_plogi_payload_t *sp = (fc_plogi_payload_t*) node->service_params; in ocs_node_get_wwpn()
1498 ocs_node_get_wwnn(ocs_node_t *node) in ocs_node_get_wwnn() argument
1500 fc_plogi_payload_t *sp = (fc_plogi_payload_t*) node->service_params; in ocs_node_get_wwnn()
1517 ocs_ddump_node(ocs_textbuf_t *textbuf, ocs_node_t *node) in ocs_ddump_node() argument
1523 ocs_ddump_section(textbuf, "node", node->instance_index); in ocs_ddump_node()
1524 ocs_ddump_value(textbuf, "display_name", "%s", node->display_name); in ocs_ddump_node()
1525 ocs_ddump_value(textbuf, "current_state", "%s", node->current_state_name); in ocs_ddump_node()
1526 ocs_ddump_value(textbuf, "prev_state", "%s", node->prev_state_name); in ocs_ddump_node()
1527 ocs_ddump_value(textbuf, "current_evt", "%s", ocs_sm_event_name(node->current_evt)); in ocs_ddump_node()
1528 ocs_ddump_value(textbuf, "prev_evt", "%s", ocs_sm_event_name(node->prev_evt)); in ocs_ddump_node()
1530 ocs_ddump_value(textbuf, "indicator", "%#x", node->rnode.indicator); in ocs_ddump_node()
1531 ocs_ddump_value(textbuf, "fc_id", "%#06x", node->rnode.fc_id); in ocs_ddump_node()
1532 ocs_ddump_value(textbuf, "attached", "%d", node->rnode.attached); in ocs_ddump_node()
1534 ocs_ddump_value(textbuf, "hold_frames", "%d", node->hold_frames); in ocs_ddump_node()
1535 ocs_ddump_value(textbuf, "io_alloc_enabled", "%d", node->io_alloc_enabled); in ocs_ddump_node()
1536 ocs_ddump_value(textbuf, "shutdown_reason", "%d", node->shutdown_reason); in ocs_ddump_node()
1537 ocs_ddump_value(textbuf, "send_ls_acc", "%d", node->send_ls_acc); in ocs_ddump_node()
1538 ocs_ddump_value(textbuf, "ls_acc_did", "%d", node->ls_acc_did); in ocs_ddump_node()
1539 ocs_ddump_value(textbuf, "ls_acc_oxid", "%#04x", node->ls_acc_oxid); in ocs_ddump_node()
1540 ocs_ddump_value(textbuf, "req_free", "%d", node->req_free); in ocs_ddump_node()
1541 ocs_ddump_value(textbuf, "els_req_cnt", "%d", node->els_req_cnt); in ocs_ddump_node()
1542 ocs_ddump_value(textbuf, "els_cmpl_cnt", "%d", node->els_cmpl_cnt); in ocs_ddump_node()
1544 ocs_ddump_value(textbuf, "targ", "%d", node->targ); in ocs_ddump_node()
1545 ocs_ddump_value(textbuf, "init", "%d", node->init); in ocs_ddump_node()
1546 ocs_ddump_value(textbuf, "wwnn", "%s", node->wwnn); in ocs_ddump_node()
1547 ocs_ddump_value(textbuf, "wwpn", "%s", node->wwpn); in ocs_ddump_node()
1548 …ocs_ddump_value(textbuf, "login_state", "%d", (node->sm.current_state == __ocs_d_device_ready) ? 1… in ocs_ddump_node()
1549 ocs_ddump_value(textbuf, "chained_io_count", "%d", node->chained_io_count); in ocs_ddump_node()
1550 ocs_ddump_value(textbuf, "abort_cnt", "%d", node->abort_cnt); in ocs_ddump_node()
1552 ocs_display_sparams(NULL, "node_sparams", 1, textbuf, node->service_params+4); in ocs_ddump_node()
1554 ocs_lock(&node->pend_frames_lock); in ocs_ddump_node()
1555 if (!ocs_list_empty(&node->pend_frames)) { in ocs_ddump_node()
1558 ocs_list_foreach(&node->pend_frames, frame) { in ocs_ddump_node()
1570 ocs_unlock(&node->pend_frames_lock); in ocs_ddump_node()
1572 ocs_scsi_ini_ddump(textbuf, OCS_SCSI_DDUMP_NODE, node); in ocs_ddump_node()
1573 ocs_scsi_tgt_ddump(textbuf, OCS_SCSI_DDUMP_NODE, node); in ocs_ddump_node()
1575 ocs_lock(&node->active_ios_lock); in ocs_ddump_node()
1577 ocs_list_foreach(&node->active_ios, io) { in ocs_ddump_node()
1583 ocs_list_foreach(&node->els_io_pend_list, els) { in ocs_ddump_node()
1589 ocs_list_foreach(&node->els_io_active_list, els) { in ocs_ddump_node()
1593 ocs_unlock(&node->active_ios_lock); in ocs_ddump_node()
1595 ocs_ddump_endsection(textbuf, "node", node->instance_index); in ocs_ddump_node()
1620 ocs_node_t *node = NULL; in node_check_els_req() local
1625 node = ctx->app; in node_check_els_req()
1626 ocs_assert(node, -1); in node_check_els_req()
1627 ocs = node->ocs; in node_check_els_req()
1637 ocs_log_debug(node->ocs, "[%s] %-20s expecting ELS cmd=x%x received type=%d\n", in node_check_els_req()
1638 node->display_name, funcname, cmd, cbdata->els->hio_type); in node_check_els_req()
1640 ocs_log_debug(node->ocs, "[%s] %-20s expecting ELS cmd=x%x received cmd=x%x\n", in node_check_els_req()
1641 node->display_name, funcname, cmd, els_gen->command_code); in node_check_els_req()
1670 ocs_node_t *node = NULL; in node_check_ns_req() local
1675 node = ctx->app; in node_check_ns_req()
1676 ocs_assert(node, -1); in node_check_ns_req()
1677 ocs = node->ocs; in node_check_ns_req()
1687 ocs_log_debug(node->ocs, "[%s] %-20s expecting NS cmd=x%x received type=%d\n", in node_check_ns_req()
1688 node->display_name, funcname, cmd, cbdata->els->hio_type); in node_check_ns_req()
1690 ocs_log_debug(node->ocs, "[%s] %-20s expecting NS cmd=x%x received cmd=x%x\n", in node_check_ns_req()
1691 node->display_name, funcname, cmd, fcct->cmd_rsp_code); in node_check_ns_req()
1705 ocs_node_t *node = (ocs_node_t *)object; in ocs_mgmt_node_list() local
1707 ocs_mgmt_start_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_list()
1730 ocs_lock(&node->active_ios_lock); in ocs_mgmt_node_list()
1731 ocs_list_foreach(&node->active_ios, io) { in ocs_mgmt_node_list()
1736 ocs_unlock(&node->active_ios_lock); in ocs_mgmt_node_list()
1738 ocs_mgmt_end_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_list()
1745 ocs_node_t *node = (ocs_node_t *)object; in ocs_mgmt_node_get() local
1749 ocs_mgmt_start_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_get()
1751 ocs_snprintf(qualifier, sizeof(qualifier), "%s/node[%d]", parent, node->instance_index); in ocs_mgmt_node_get()
1759 ocs_mgmt_emit_string(textbuf, MGMT_MODE_RD, "display_name", node->display_name); in ocs_mgmt_node_get()
1762 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "indicator", "0x%x", node->rnode.indicator); in ocs_mgmt_node_get()
1765 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "fc_id", "0x%06x", node->rnode.fc_id); in ocs_mgmt_node_get()
1768 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "attached", node->rnode.attached); in ocs_mgmt_node_get()
1771 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "hold_frames", node->hold_frames); in ocs_mgmt_node_get()
1774 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "io_alloc_enabled", node->io_alloc_enabled); in ocs_mgmt_node_get()
1777 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "req_free", node->req_free); in ocs_mgmt_node_get()
1780 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "ls_acc_oxid", "0x%#04x", node->ls_acc_oxid); in ocs_mgmt_node_get()
1783 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "ls_acc_did", "0x%#04x", node->ls_acc_did); in ocs_mgmt_node_get()
1786 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "abort_cnt", "%d", node->abort_cnt); in ocs_mgmt_node_get()
1789 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "targ", node->targ); in ocs_mgmt_node_get()
1792 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "init", node->init); in ocs_mgmt_node_get()
1795 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "wwpn", "%s", node->wwpn); in ocs_mgmt_node_get()
1798 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "wwnn", "%s", node->wwnn); in ocs_mgmt_node_get()
1801 ocs_mgmt_emit_string(textbuf, MGMT_MODE_RD, "current_state", node->current_state_name); in ocs_mgmt_node_get()
1804 …ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "login_state", "%d", (node->sm.current_state == __ocs_d_d… in ocs_mgmt_node_get()
1808 ocs_lock(&node->pend_frames_lock); in ocs_mgmt_node_get()
1809 ocs_list_foreach(&node->pend_frames, frame) { in ocs_mgmt_node_get()
1819 ocs_unlock(&node->pend_frames_lock); in ocs_mgmt_node_get()
1822 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "chained_io_count", "%d", node->chained_io_count); in ocs_mgmt_node_get()
1826 ocs_lock(&node->active_ios_lock); in ocs_mgmt_node_get()
1827 ocs_list_foreach(&node->active_ios, io) { in ocs_mgmt_node_get()
1836 ocs_unlock(&node->active_ios_lock); in ocs_mgmt_node_get()
1840 ocs_mgmt_end_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_get()
1849 ocs_node_t *node = (ocs_node_t *)object; in ocs_mgmt_node_get_all() local
1852 ocs_mgmt_start_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_get_all()
1854 ocs_mgmt_emit_string(textbuf, MGMT_MODE_RD, "display_name", node->display_name); in ocs_mgmt_node_get_all()
1855 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "indicator", "0x%x", node->rnode.indicator); in ocs_mgmt_node_get_all()
1856 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "fc_id", "0x%06x", node->rnode.fc_id); in ocs_mgmt_node_get_all()
1857 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "attached", node->rnode.attached); in ocs_mgmt_node_get_all()
1858 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "hold_frames", node->hold_frames); in ocs_mgmt_node_get_all()
1859 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "io_alloc_enabled", node->io_alloc_enabled); in ocs_mgmt_node_get_all()
1860 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "req_free", node->req_free); in ocs_mgmt_node_get_all()
1861 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "ls_acc_oxid", "0x%#04x", node->ls_acc_oxid); in ocs_mgmt_node_get_all()
1862 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "ls_acc_did", "0x%#04x", node->ls_acc_did); in ocs_mgmt_node_get_all()
1863 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "abort_cnt", "%d", node->abort_cnt); in ocs_mgmt_node_get_all()
1864 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "targ", node->targ); in ocs_mgmt_node_get_all()
1865 ocs_mgmt_emit_boolean(textbuf, MGMT_MODE_RD, "init", node->init); in ocs_mgmt_node_get_all()
1866 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "wwpn", "%s", node->wwpn); in ocs_mgmt_node_get_all()
1867 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "wwnn", "%s", node->wwnn); in ocs_mgmt_node_get_all()
1869 ocs_lock(&node->pend_frames_lock); in ocs_mgmt_node_get_all()
1870 ocs_list_foreach(&node->pend_frames, frame) { in ocs_mgmt_node_get_all()
1880 ocs_unlock(&node->pend_frames_lock); in ocs_mgmt_node_get_all()
1882 ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "chained_io_count", "%d", node->chained_io_count); in ocs_mgmt_node_get_all()
1884 ocs_mgmt_emit_string(textbuf, MGMT_MODE_RD, "current_state", node->current_state_name); in ocs_mgmt_node_get_all()
1885 …ocs_mgmt_emit_int(textbuf, MGMT_MODE_RD, "login_state", "%d", (node->sm.current_state == __ocs_d_d… in ocs_mgmt_node_get_all()
1887 ocs_lock(&node->active_ios_lock); in ocs_mgmt_node_get_all()
1888 ocs_list_foreach(&node->active_ios, io) { in ocs_mgmt_node_get_all()
1893 ocs_unlock(&node->active_ios_lock); in ocs_mgmt_node_get_all()
1895 ocs_mgmt_end_section(textbuf, "node", node->instance_index); in ocs_mgmt_node_get_all()
1902 ocs_node_t *node = (ocs_node_t *)object; in ocs_mgmt_node_set() local
1906 ocs_snprintf(qualifier, sizeof(qualifier), "%s/node[%d]", parent, node->instance_index); in ocs_mgmt_node_set()
1911 ocs_lock(&node->active_ios_lock); in ocs_mgmt_node_set()
1912 ocs_list_foreach(&node->active_ios, io) { in ocs_mgmt_node_set()
1922 ocs_unlock(&node->active_ios_lock); in ocs_mgmt_node_set()
1934 ocs_node_t *node = (ocs_node_t *)object; in ocs_mgmt_node_exec() local
1938 ocs_snprintf(qualifier, sizeof(qualifier), "%s.node%d", parent, node->instance_index); in ocs_mgmt_node_exec()
1945 ocs_node_post_event(node, OCS_EVT_RESUME, NULL); in ocs_mgmt_node_exec()
1950 ocs_lock(&node->active_ios_lock); in ocs_mgmt_node_exec()
1951 ocs_list_foreach(&node->active_ios, io) { in ocs_mgmt_node_exec()
1962 ocs_unlock(&node->active_ios_lock); in ocs_mgmt_node_exec()
1982 ocs_node_active_ios_empty(ocs_node_t *node) in ocs_node_active_ios_empty() argument
1986 ocs_lock(&node->active_ios_lock); in ocs_node_active_ios_empty()
1987 empty = ocs_list_empty(&node->active_ios); in ocs_node_active_ios_empty()
1988 ocs_unlock(&node->active_ios_lock); in ocs_node_active_ios_empty()
2005 ocs_node_pause(ocs_node_t *node, ocs_sm_function_t state) in ocs_node_pause() argument
2007 node->nodedb_state = state; in ocs_node_pause()
2008 ocs_node_transition(node, __ocs_node_paused, NULL); in ocs_node_pause()
2033 node_printf(node, "Paused\n"); in __ocs_node_paused()
2037 ocs_sm_function_t pf = node->nodedb_state; in __ocs_node_paused()
2039 node->nodedb_state = NULL; in __ocs_node_paused()
2040 ocs_node_transition(node, pf, NULL); in __ocs_node_paused()
2048 node->req_free = 1; in __ocs_node_paused()
2069 ocs_node_resume(ocs_node_t *node) in ocs_node_resume() argument
2071 ocs_assert(node != NULL, -1); in ocs_node_resume()
2073 ocs_node_post_event(node, OCS_EVT_RESUME, NULL); in ocs_node_resume()
2096 ocs_node_recv_els_frame(ocs_node_t *node, ocs_hw_sequence_t *seq) in ocs_node_recv_els_frame() argument
2115 ocs_t *ocs = node->ocs; in ocs_node_recv_els_frame()
2138 …ocs_display_sparams(node->display_name, "flogi rcvd req", 0, NULL, ((uint8_t*)seq->payload->dma.vi… in ocs_node_recv_els_frame()
2141 …ocs_display_sparams(node->display_name, "fdisc rcvd req", 0, NULL, ((uint8_t*)seq->payload->dma.vi… in ocs_node_recv_els_frame()
2144 …ocs_display_sparams(node->display_name, "plogi rcvd req", 0, NULL, ((uint8_t*)seq->payload->dma.vi… in ocs_node_recv_els_frame()
2150 cbdata.io = ocs_els_io_alloc(node, payload_size, OCS_ELS_ROLE_RESPONDER); in ocs_node_recv_els_frame()
2157 ocs_node_post_event(node, evt, &cbdata); in ocs_node_recv_els_frame()
2159 …node_printf(node, "failure to allocate SCSI IO for ELS s_id %06x d_id %06x ox_id %04x rx_id %04x\n… in ocs_node_recv_els_frame()
2183 ocs_node_recv_abts_frame(ocs_node_t *node, ocs_hw_sequence_t *seq) in ocs_node_recv_abts_frame() argument
2185 ocs_t *ocs = node->ocs; in ocs_node_recv_abts_frame()
2193 node->abort_cnt++; in ocs_node_recv_abts_frame()
2199 if (ocs_io_find_tgt_io(ocs, node, ox_id, rx_id) == NULL) { in ocs_node_recv_abts_frame()
2207 rc = ocs_sframe_send_bls_acc(node, seq); in ocs_node_recv_abts_frame()
2220 cbdata.io = ocs_scsi_io_alloc(node, OCS_SCSI_IO_ROLE_RESPONDER); in ocs_node_recv_abts_frame()
2228 cbdata.io->node = node; in ocs_node_recv_abts_frame()
2231 ocs_node_post_event(node, OCS_EVT_ABTS_RCVD, &cbdata); in ocs_node_recv_abts_frame()
2234 …node_printf(node, "SCSI IO allocation failed for ABTS received s_id %06x d_id %06x ox_id %04x rx_i… in ocs_node_recv_abts_frame()
2261 ocs_node_recv_ct_frame(ocs_node_t *node, ocs_hw_sequence_t *seq) in ocs_node_recv_ct_frame() argument
2263 ocs_t *ocs = node->ocs; in ocs_node_recv_ct_frame()
2307 cbdata.io = ocs_els_io_alloc(node, payload_size, OCS_ELS_ROLE_RESPONDER); in ocs_node_recv_ct_frame()
2309 node_printf(node, "GS IO failed for s_id %06x d_id %06x ox_id %04x rx_id %04x\n", in ocs_node_recv_ct_frame()
2315 ocs_node_post_event(node, evt, &cbdata); in ocs_node_recv_ct_frame()
2336 ocs_node_recv_fcp_cmd(ocs_node_t *node, ocs_hw_sequence_t *seq) in ocs_node_recv_fcp_cmd() argument
2339 ocs_t *ocs = node->ocs; in ocs_node_recv_fcp_cmd()
2344 ocs_node_post_event(node, OCS_EVT_FCP_CMD_RCVD, &cbdata); in ocs_node_recv_fcp_cmd()
2363 ocs_node_recv_bls_no_sit(ocs_node_t *node, ocs_hw_sequence_t *seq) in ocs_node_recv_bls_no_sit() argument
2367 node_printf(node, "Dropping frame hdr = %08x %08x %08x %08x %08x %08x\n", in ocs_node_recv_bls_no_sit()