Lines Matching refs:port

258 static void fp_log_port_event(fc_local_port_t *port, char *subclass);
259 static void fp_log_target_event(fc_local_port_t *port, char *subclass,
262 static void fp_init_symbolic_names(fc_local_port_t *port);
401 fc_local_port_t *port; in fp_detach() local
405 if ((port = ddi_get_soft_state(fp_driver_softstate, in fp_detach()
410 mutex_enter(&port->fp_mutex); in fp_detach()
412 if (port->fp_ulp_attach) { in fp_detach()
413 mutex_exit(&port->fp_mutex); in fp_detach()
419 if (port->fp_task != FP_TASK_IDLE) { in fp_detach()
420 mutex_exit(&port->fp_mutex); in fp_detach()
425 port->fp_soft_state |= FP_DETACH_INPROGRESS; in fp_detach()
427 mutex_exit(&port->fp_mutex); in fp_detach()
429 if (fctl_detach_ulps(port, FC_CMD_DETACH, in fp_detach()
431 mutex_enter(&port->fp_mutex); in fp_detach()
432 port->fp_soft_state &= ~FP_DETACH_INPROGRESS; in fp_detach()
433 mutex_exit(&port->fp_mutex); in fp_detach()
438 mutex_enter(&port->fp_mutex); in fp_detach()
439 for (cnt = 0; (port->fp_job_head) && (cnt < fp_cmd_wait_cnt); in fp_detach()
441 mutex_exit(&port->fp_mutex); in fp_detach()
443 mutex_enter(&port->fp_mutex); in fp_detach()
446 if (port->fp_job_head) { in fp_detach()
447 mutex_exit(&port->fp_mutex); in fp_detach()
451 mutex_exit(&port->fp_mutex); in fp_detach()
453 rval = fp_detach_handler(port); in fp_detach()
457 mutex_exit(&port->fp_mutex); in fp_detach()
459 if (fctl_detach_ulps(port, FC_CMD_SUSPEND, in fp_detach()
464 if ((rval = fp_suspend_handler(port)) != DDI_SUCCESS) { in fp_detach()
465 (void) callb_generic_cpr(&port->fp_cpr_info, in fp_detach()
471 mutex_exit(&port->fp_mutex); in fp_detach()
481 mutex_enter(&port->fp_mutex); in fp_detach()
482 port->fp_ulp_attach = 1; in fp_detach()
490 if ((port->fp_soft_state & FP_SOFT_POWER_DOWN) && in fp_detach()
491 (!(port->fp_soft_state & FP_SOFT_NO_PMCOMP))) { in fp_detach()
492 mutex_exit(&port->fp_mutex); in fp_detach()
493 (void) pm_raise_power(port->fp_port_dip, in fp_detach()
496 mutex_exit(&port->fp_mutex); in fp_detach()
500 fp_attach_ulps(port, converse); in fp_detach()
502 mutex_enter(&port->fp_mutex); in fp_detach()
503 while (port->fp_ulp_attach) { in fp_detach()
504 cv_wait(&port->fp_attach_cv, &port->fp_mutex); in fp_detach()
507 port->fp_soft_state &= ~FP_DETACH_INPROGRESS; in fp_detach()
515 port->fp_soft_state |= FP_DETACH_FAILED; in fp_detach()
517 mutex_exit(&port->fp_mutex); in fp_detach()
536 fc_local_port_t *port; in fp_getinfo() local
543 if ((port = ddi_get_soft_state(fp_driver_softstate, in fp_getinfo()
548 *result = (void *)port->fp_port_dip; in fp_getinfo()
571 fc_local_port_t *port; in fp_power() local
573 port = ddi_get_soft_state(fp_driver_softstate, ddi_get_instance(dip)); in fp_power()
574 if (port == NULL || comp != FP_PM_COMPONENT) { in fp_power()
586 mutex_enter(&port->fp_mutex); in fp_power()
587 if (port->fp_soft_state & FP_SOFT_SUSPEND) { in fp_power()
588 port->fp_soft_state &= ~FP_SOFT_POWER_DOWN; in fp_power()
589 port->fp_pm_level = FP_PM_PORT_UP; in fp_power()
590 mutex_exit(&port->fp_mutex); in fp_power()
591 fctl_attach_ulps(port, FC_CMD_POWER_UP, &modlinkage); in fp_power()
595 if (port->fp_soft_state & FP_SOFT_POWER_DOWN) { in fp_power()
596 ASSERT(port->fp_pm_level == FP_PM_PORT_DOWN); in fp_power()
598 port->fp_pm_level = FP_PM_PORT_UP; in fp_power()
599 rval = fp_power_up(port); in fp_power()
601 port->fp_pm_level = FP_PM_PORT_DOWN; in fp_power()
604 port->fp_pm_level = FP_PM_PORT_UP; in fp_power()
606 mutex_exit(&port->fp_mutex); in fp_power()
610 mutex_enter(&port->fp_mutex); in fp_power()
612 ASSERT(!(port->fp_soft_state & FP_SOFT_NO_PMCOMP)); in fp_power()
613 if (port->fp_soft_state & FP_SOFT_NO_PMCOMP) { in fp_power()
618 mutex_exit(&port->fp_mutex); in fp_power()
623 if (port->fp_ulp_attach) { in fp_power()
625 mutex_exit(&port->fp_mutex); in fp_power()
632 if (port->fp_soft_state & FP_SOFT_IN_DETACH) { in fp_power()
633 port->fp_pm_level = FP_PM_PORT_DOWN; in fp_power()
634 mutex_exit(&port->fp_mutex); in fp_power()
639 if (!port->fp_pm_busy && !port->fp_pm_busy_nocomp) { in fp_power()
640 port->fp_pm_level = FP_PM_PORT_DOWN; in fp_power()
642 rval = fp_power_down(port); in fp_power()
644 port->fp_pm_level = FP_PM_PORT_UP; in fp_power()
645 ASSERT(!(port->fp_soft_state & in fp_power()
648 ASSERT(port->fp_soft_state & in fp_power()
652 mutex_exit(&port->fp_mutex); in fp_power()
670 fc_local_port_t *port; in fp_open() local
688 port = ddi_get_soft_state(fp_driver_softstate, instance); in fp_open()
689 if (port == NULL) { in fp_open()
693 mutex_enter(&port->fp_mutex); in fp_open()
694 if (port->fp_flag & FP_EXCL) { in fp_open()
699 mutex_exit(&port->fp_mutex); in fp_open()
704 if (port->fp_flag & FP_OPEN) { in fp_open()
709 mutex_exit(&port->fp_mutex); in fp_open()
712 port->fp_flag |= FP_EXCL; in fp_open()
714 port->fp_flag |= FP_OPEN; in fp_open()
715 mutex_exit(&port->fp_mutex); in fp_open()
733 fc_local_port_t *port; in fp_close() local
741 port = ddi_get_soft_state(fp_driver_softstate, instance); in fp_close()
742 if (port == NULL) { in fp_close()
746 mutex_enter(&port->fp_mutex); in fp_close()
747 if ((port->fp_flag & FP_OPEN) == 0) { in fp_close()
748 mutex_exit(&port->fp_mutex); in fp_close()
751 port->fp_flag = FP_IDLE; in fp_close()
752 mutex_exit(&port->fp_mutex); in fp_close()
768 fc_local_port_t *port; in fp_ioctl() local
772 port = ddi_get_soft_state(fp_driver_softstate, instance); in fp_ioctl()
773 if (port == NULL) { in fp_ioctl()
777 mutex_enter(&port->fp_mutex); in fp_ioctl()
778 if ((port->fp_flag & FP_OPEN) == 0) { in fp_ioctl()
779 mutex_exit(&port->fp_mutex); in fp_ioctl()
783 if (port->fp_soft_state & FP_SOFT_SUSPEND) { in fp_ioctl()
784 mutex_exit(&port->fp_mutex); in fp_ioctl()
788 mutex_exit(&port->fp_mutex); in fp_ioctl()
791 ret = fctl_busy_port(port); in fp_ioctl()
796 ASSERT(port->fp_pm_level == FP_PM_PORT_UP); in fp_ioctl()
843 ret = fp_fciocmd(port, data, mode, &fcio); in fp_ioctl()
849 ret = fctl_ulp_port_ioctl(port, dev, cmd, data, in fp_ioctl()
853 fctl_idle_port(port); in fp_ioctl()
871 fp_init_symbolic_names(fc_local_port_t *port) in fp_init_symbolic_names() argument
873 const char *vendorname = ddi_driver_name(port->fp_fca_dip); in fp_init_symbolic_names()
878 if (port->fp_sym_node_namelen == 0) { in fp_init_symbolic_names()
881 "%s%d", vendorname, ddi_get_instance(port->fp_fca_dip)); in fp_init_symbolic_names()
886 port->fp_sym_node_namelen = strlen(sym_name); in fp_init_symbolic_names()
887 if (port->fp_sym_node_namelen >= FCHBA_SYMB_NAME_LEN) { in fp_init_symbolic_names()
888 port->fp_sym_node_namelen = FCHBA_SYMB_NAME_LEN; in fp_init_symbolic_names()
890 (void) strncpy(port->fp_sym_node_name, sym_name, in fp_init_symbolic_names()
891 port->fp_sym_node_namelen); in fp_init_symbolic_names()
895 if (port->fp_sym_port_namelen == 0) { in fp_init_symbolic_names()
898 (void) ddi_pathname(port->fp_port_dip, pathname); in fp_init_symbolic_names()
899 port->fp_sym_port_namelen = strlen(pathname); in fp_init_symbolic_names()
900 if (port->fp_sym_port_namelen >= FCHBA_SYMB_NAME_LEN) { in fp_init_symbolic_names()
901 port->fp_sym_port_namelen = FCHBA_SYMB_NAME_LEN; in fp_init_symbolic_names()
903 (void) strncpy(port->fp_sym_port_name, pathname, in fp_init_symbolic_names()
904 port->fp_sym_port_namelen); in fp_init_symbolic_names()
924 fc_local_port_t *port; in fp_attach_handler() local
963 port = ddi_get_soft_state(fp_driver_softstate, instance); in fp_attach_handler()
965 (void) sprintf(port->fp_ibuf, "fp(%d)", instance); in fp_attach_handler()
967 port->fp_instance = instance; in fp_attach_handler()
968 port->fp_ulp_attach = 1; in fp_attach_handler()
969 port->fp_port_num = port_num; in fp_attach_handler()
970 port->fp_verbose = fp_verbosity; in fp_attach_handler()
971 port->fp_options = fp_options; in fp_attach_handler()
973 port->fp_fca_dip = ddi_get_parent(dip); in fp_attach_handler()
974 port->fp_port_dip = dip; in fp_attach_handler()
975 port->fp_fca_tran = (fc_fca_tran_t *) in fp_attach_handler()
976 ddi_get_driver_private(port->fp_fca_dip); in fp_attach_handler()
978 port->fp_task = port->fp_last_task = FP_TASK_IDLE; in fp_attach_handler()
985 port->fp_rscn_count = FC_INVALID_RSCN_COUNT + 1; in fp_attach_handler()
987 mutex_init(&port->fp_mutex, NULL, MUTEX_DRIVER, NULL); in fp_attach_handler()
988 cv_init(&port->fp_cv, NULL, CV_DRIVER, NULL); in fp_attach_handler()
989 cv_init(&port->fp_attach_cv, NULL, CV_DRIVER, NULL); in fp_attach_handler()
999 port->fp_npiv_type = FC_NPIV_PORT; in fp_attach_handler()
1006 port->fp_pkt_cache = kmem_cache_create(name, in fp_attach_handler()
1007 (port->fp_fca_tran->fca_pkt_size) + sizeof (fp_cmd_t), 8, in fp_attach_handler()
1008 fp_cache_constructor, fp_cache_destructor, NULL, (void *)port, in fp_attach_handler()
1010 port->fp_out_fpcmds = 0; in fp_attach_handler()
1011 if (port->fp_pkt_cache == NULL) { in fp_attach_handler()
1020 port->fp_did_table = kmem_zalloc(did_table_size * in fp_attach_handler()
1023 port->fp_pwwn_table = kmem_zalloc(pwwn_table_size * in fp_attach_handler()
1026 port->fp_taskq = taskq_create("fp_ulp_callback", 1, in fp_attach_handler()
1030 port->fp_soft_state |= FP_SOFT_NO_PMCOMP; in fp_attach_handler()
1041 if (fp_bind_callbacks(port) != DDI_SUCCESS) { in fp_attach_handler()
1048 phyport->fp_port_next->fp_port_prev = port; in fp_attach_handler()
1049 port->fp_port_next = phyport->fp_port_next; in fp_attach_handler()
1050 phyport->fp_port_next = port; in fp_attach_handler()
1051 port->fp_port_prev = phyport; in fp_attach_handler()
1053 phyport->fp_port_next = port; in fp_attach_handler()
1054 phyport->fp_port_prev = port; in fp_attach_handler()
1055 port->fp_port_next = phyport; in fp_attach_handler()
1056 port->fp_port_prev = phyport; in fp_attach_handler()
1064 fp_init_symbolic_names(port); in fp_attach_handler()
1066 pkt = fp_alloc_pkt(port, sizeof (la_els_logi_t), sizeof (la_els_logi_t), in fp_attach_handler()
1075 (void) thread_create(NULL, 0, fp_job_handler, port, 0, &p0, TS_RUN, in fp_attach_handler()
1078 fc_wwn_to_str(&port->fp_service_params.nport_ww_name, i_pwwn); in fp_attach_handler()
1081 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_attach_handler()
1086 fc_wwn_to_str(&port->fp_service_params.node_ww_name, i_pwwn); in fp_attach_handler()
1089 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_attach_handler()
1094 mutex_enter(&port->fp_mutex); in fp_attach_handler()
1095 port->fp_els_resp_pkt = pkt; in fp_attach_handler()
1096 mutex_exit(&port->fp_mutex); in fp_attach_handler()
1101 fp_retrieve_caps(port); in fp_attach_handler()
1106 if (port->fp_ub_count) { in fp_attach_handler()
1107 ub_count = port->fp_ub_count; in fp_attach_handler()
1108 port->fp_ub_tokens = kmem_zalloc(ub_count * in fp_attach_handler()
1109 sizeof (*port->fp_ub_tokens), KM_SLEEP); in fp_attach_handler()
1114 if (fc_ulp_uballoc(port, &ub_count, fp_unsol_buf_size, in fp_attach_handler()
1115 FC_TYPE_EXTENDED_LS, port->fp_ub_tokens) != in fp_attach_handler()
1116 FC_SUCCESS || ub_count != port->fp_ub_count) { in fp_attach_handler()
1120 kmem_free(port->fp_ub_tokens, in fp_attach_handler()
1121 sizeof (*port->fp_ub_tokens) * port->fp_ub_count); in fp_attach_handler()
1122 port->fp_ub_tokens = NULL; in fp_attach_handler()
1126 fp_load_ulp_modules(dip, port); in fp_attach_handler()
1139 mutex_enter(&port->fp_mutex); in fp_attach_handler()
1140 fctl_add_port(port); in fp_attach_handler()
1147 if (FC_PORT_STATE_MASK(port->fp_bind_state) == FC_STATE_OFFLINE || in fp_attach_handler()
1148 port->fp_statec_busy) { in fp_attach_handler()
1149 port->fp_bind_state = FC_STATE_OFFLINE; in fp_attach_handler()
1150 mutex_exit(&port->fp_mutex); in fp_attach_handler()
1152 fp_startup_done((opaque_t)port, FC_PKT_SUCCESS); in fp_attach_handler()
1159 ASSERT(port->fp_job_tail == NULL && port->fp_job_head == NULL); in fp_attach_handler()
1161 port->fp_last_task = port->fp_task; in fp_attach_handler()
1162 port->fp_task = FP_TASK_PORT_STARTUP; in fp_attach_handler()
1165 fp_startup_done, (opaque_t)port, KM_SLEEP); in fp_attach_handler()
1167 port->fp_job_head = port->fp_job_tail = job; in fp_attach_handler()
1169 cv_signal(&port->fp_cv); in fp_attach_handler()
1171 mutex_exit(&port->fp_mutex); in fp_attach_handler()
1174 mutex_enter(&port->fp_mutex); in fp_attach_handler()
1175 while (port->fp_ulp_attach) { in fp_attach_handler()
1176 cv_wait(&port->fp_attach_cv, &port->fp_mutex); in fp_attach_handler()
1178 mutex_exit(&port->fp_mutex); in fp_attach_handler()
1186 mutex_enter(&port->fp_mutex); in fp_attach_handler()
1187 port->fp_pm_level = FP_PM_PORT_UP; in fp_attach_handler()
1188 mutex_exit(&port->fp_mutex); in fp_attach_handler()
1194 mutex_enter(&port->fp_mutex); in fp_attach_handler()
1195 port->fp_pm_level = FP_PM_PORT_UP; in fp_attach_handler()
1196 mutex_exit(&port->fp_mutex); in fp_attach_handler()
1205 mutex_enter(&port->fp_mutex); in fp_attach_handler()
1206 port->fp_soft_state &= ~FP_SOFT_NO_PMCOMP; in fp_attach_handler()
1207 mutex_exit(&port->fp_mutex); in fp_attach_handler()
1212 fp_log_port_event(port, ESC_SUNFC_PORT_ATTACH); in fp_attach_handler()
1222 if (port->fp_fca_handle != NULL) { in fp_attach_handler()
1223 port->fp_fca_tran->fca_unbind_port(port->fp_fca_handle); in fp_attach_handler()
1224 port->fp_fca_handle = NULL; in fp_attach_handler()
1227 if (port->fp_ub_tokens != NULL) { in fp_attach_handler()
1228 (void) fc_ulp_ubfree(port, port->fp_ub_count, in fp_attach_handler()
1229 port->fp_ub_tokens); in fp_attach_handler()
1230 kmem_free(port->fp_ub_tokens, in fp_attach_handler()
1231 port->fp_ub_count * sizeof (*port->fp_ub_tokens)); in fp_attach_handler()
1232 port->fp_ub_tokens = NULL; in fp_attach_handler()
1235 if (port->fp_els_resp_pkt != NULL) { in fp_attach_handler()
1236 fp_free_pkt(port->fp_els_resp_pkt); in fp_attach_handler()
1237 port->fp_els_resp_pkt = NULL; in fp_attach_handler()
1242 if (port->fp_taskq != NULL) { in fp_attach_handler()
1243 taskq_destroy(port->fp_taskq); in fp_attach_handler()
1246 if (port->fp_pwwn_table != NULL) { in fp_attach_handler()
1247 kmem_free(port->fp_pwwn_table, in fp_attach_handler()
1249 port->fp_pwwn_table = NULL; in fp_attach_handler()
1252 if (port->fp_did_table != NULL) { in fp_attach_handler()
1253 kmem_free(port->fp_did_table, in fp_attach_handler()
1255 port->fp_did_table = NULL; in fp_attach_handler()
1258 if (port->fp_pkt_cache != NULL) { in fp_attach_handler()
1259 kmem_cache_destroy(port->fp_pkt_cache); in fp_attach_handler()
1260 port->fp_pkt_cache = NULL; in fp_attach_handler()
1265 cv_destroy(&port->fp_attach_cv); in fp_attach_handler()
1266 cv_destroy(&port->fp_cv); in fp_attach_handler()
1267 mutex_destroy(&port->fp_mutex); in fp_attach_handler()
1268 ddi_remove_minor_node(port->fp_port_dip, NULL); in fp_attach_handler()
1283 fc_local_port_t *port; in fp_resume_handler() local
1285 port = ddi_get_soft_state(fp_driver_softstate, ddi_get_instance(dip)); in fp_resume_handler()
1287 ASSERT(port != NULL); in fp_resume_handler()
1290 mutex_enter(&port->fp_mutex); in fp_resume_handler()
1291 ASSERT(port->fp_soft_state & FP_SOFT_SUSPEND); in fp_resume_handler()
1292 mutex_exit(&port->fp_mutex); in fp_resume_handler()
1298 mutex_enter(&port->fp_mutex); in fp_resume_handler()
1299 if ((port->fp_soft_state & FP_SOFT_POWER_DOWN) && in fp_resume_handler()
1300 (!(port->fp_soft_state & FP_SOFT_NO_PMCOMP))) { in fp_resume_handler()
1301 ASSERT(port->fp_pm_level == FP_PM_PORT_DOWN); in fp_resume_handler()
1303 mutex_exit(&port->fp_mutex); in fp_resume_handler()
1310 mutex_enter(&port->fp_mutex); in fp_resume_handler()
1312 port->fp_soft_state &= ~FP_SOFT_SUSPEND; in fp_resume_handler()
1313 mutex_exit(&port->fp_mutex); in fp_resume_handler()
1326 (void) callb_generic_cpr(&port->fp_cpr_info, CB_CODE_CPR_RESUME); in fp_resume_handler()
1328 rval = fp_resume_all(port, FC_CMD_RESUME); in fp_resume_handler()
1330 mutex_enter(&port->fp_mutex); in fp_resume_handler()
1331 port->fp_soft_state |= FP_SOFT_SUSPEND; in fp_resume_handler()
1332 mutex_exit(&port->fp_mutex); in fp_resume_handler()
1333 (void) callb_generic_cpr(&port->fp_cpr_info, in fp_resume_handler()
1344 fp_power_up(fc_local_port_t *port) in fp_power_up() argument
1348 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_power_up()
1350 ASSERT((port->fp_soft_state & FP_SOFT_SUSPEND) == 0); in fp_power_up()
1351 ASSERT(port->fp_soft_state & FP_SOFT_POWER_DOWN); in fp_power_up()
1353 port->fp_soft_state &= ~FP_SOFT_POWER_DOWN; in fp_power_up()
1355 mutex_exit(&port->fp_mutex); in fp_power_up()
1357 rval = fp_resume_all(port, FC_CMD_POWER_UP); in fp_power_up()
1359 mutex_enter(&port->fp_mutex); in fp_power_up()
1360 port->fp_soft_state |= FP_SOFT_POWER_DOWN; in fp_power_up()
1362 mutex_enter(&port->fp_mutex); in fp_power_up()
1381 fp_resume_all(fc_local_port_t *port, fc_attach_cmd_t cmd) in fp_resume_all() argument
1384 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_resume_all()
1386 if (fp_bind_callbacks(port) != DDI_SUCCESS) { in fp_resume_all()
1390 mutex_enter(&port->fp_mutex); in fp_resume_all()
1399 if (port->fp_restore & FP_RESTORE_WAIT_TIMEOUT) { in fp_resume_all()
1402 port->fp_restore &= ~FP_RESTORE_WAIT_TIMEOUT; in fp_resume_all()
1404 mutex_exit(&port->fp_mutex); in fp_resume_all()
1405 while ((cmd = fp_deque_cmd(port)) != NULL) { in fp_resume_all()
1409 mutex_enter(&port->fp_mutex); in fp_resume_all()
1412 if (FC_PORT_STATE_MASK(port->fp_bind_state) == FC_STATE_OFFLINE) { in fp_resume_all()
1413 if ((port->fp_restore & FP_RESTORE_OFFLINE_TIMEOUT) || in fp_resume_all()
1414 port->fp_dev_count) { in fp_resume_all()
1415 port->fp_restore &= ~FP_RESTORE_OFFLINE_TIMEOUT; in fp_resume_all()
1416 port->fp_offline_tid = timeout(fp_offline_timeout, in fp_resume_all()
1417 (caddr_t)port, fp_offline_ticks); in fp_resume_all()
1419 if (port->fp_job_head) { in fp_resume_all()
1420 cv_signal(&port->fp_cv); in fp_resume_all()
1422 mutex_exit(&port->fp_mutex); in fp_resume_all()
1423 fctl_attach_ulps(port, cmd, &modlinkage); in fp_resume_all()
1432 port->fp_restore &= ~FP_RESTORE_OFFLINE_TIMEOUT; in fp_resume_all()
1433 if (port->fp_statec_busy == 0) { in fp_resume_all()
1434 port->fp_soft_state |= FP_SOFT_IN_STATEC_CB; in fp_resume_all()
1436 port->fp_statec_busy++; in fp_resume_all()
1437 mutex_exit(&port->fp_mutex); in fp_resume_all()
1441 fctl_enque_job(port, job); in fp_resume_all()
1444 fctl_remove_oldies(port); in fp_resume_all()
1446 fctl_attach_ulps(port, cmd, &modlinkage); in fp_resume_all()
1485 fp_detach_handler(fc_local_port_t *port) in fp_detach_handler() argument
1500 mutex_enter(&port->fp_mutex); in fp_detach_handler()
1501 if (port->fp_out_fpcmds != 0) { in fp_detach_handler()
1509 port->fp_soft_state &= ~FP_DETACH_INPROGRESS; in fp_detach_handler()
1510 mutex_exit(&port->fp_mutex); in fp_detach_handler()
1513 " Failing detach", port->fp_instance, port->fp_out_fpcmds); in fp_detach_handler()
1517 while ((port->fp_soft_state & in fp_detach_handler()
1520 mutex_exit(&port->fp_mutex); in fp_detach_handler()
1523 mutex_enter(&port->fp_mutex); in fp_detach_handler()
1526 if (port->fp_soft_state & in fp_detach_handler()
1528 port->fp_soft_state &= ~FP_DETACH_INPROGRESS; in fp_detach_handler()
1529 mutex_exit(&port->fp_mutex); in fp_detach_handler()
1532 " Failing detach", port->fp_instance); in fp_detach_handler()
1536 port->fp_soft_state |= FP_SOFT_IN_DETACH; in fp_detach_handler()
1537 port->fp_soft_state &= ~FP_DETACH_INPROGRESS; in fp_detach_handler()
1538 mutex_exit(&port->fp_mutex); in fp_detach_handler()
1545 if (fctl_busy_port(port) != 0) { in fp_detach_handler()
1547 port->fp_instance); in fp_detach_handler()
1548 mutex_enter(&port->fp_mutex); in fp_detach_handler()
1549 port->fp_soft_state &= ~FP_SOFT_IN_DETACH; in fp_detach_handler()
1550 mutex_exit(&port->fp_mutex); in fp_detach_handler()
1567 (opaque_t)port, KM_SLEEP); in fp_detach_handler()
1568 fctl_enque_job(port, job); in fp_detach_handler()
1573 (void) pm_lower_power(port->fp_port_dip, FP_PM_COMPONENT, in fp_detach_handler()
1576 if (port->fp_taskq) { in fp_detach_handler()
1577 taskq_destroy(port->fp_taskq); in fp_detach_handler()
1580 ddi_prop_remove_all(port->fp_port_dip); in fp_detach_handler()
1582 ddi_remove_minor_node(port->fp_port_dip, NULL); in fp_detach_handler()
1584 fctl_remove_port(port); in fp_detach_handler()
1586 fp_free_pkt(port->fp_els_resp_pkt); in fp_detach_handler()
1588 if (port->fp_ub_tokens) { in fp_detach_handler()
1589 if (fc_ulp_ubfree(port, port->fp_ub_count, in fp_detach_handler()
1590 port->fp_ub_tokens) != FC_SUCCESS) { in fp_detach_handler()
1592 " unsolicited buffers", port->fp_instance); in fp_detach_handler()
1594 kmem_free(port->fp_ub_tokens, in fp_detach_handler()
1595 sizeof (*port->fp_ub_tokens) * port->fp_ub_count); in fp_detach_handler()
1596 port->fp_ub_tokens = NULL; in fp_detach_handler()
1599 if (port->fp_pkt_cache != NULL) { in fp_detach_handler()
1600 kmem_cache_destroy(port->fp_pkt_cache); in fp_detach_handler()
1603 port->fp_fca_tran->fca_unbind_port(port->fp_fca_handle); in fp_detach_handler()
1605 mutex_enter(&port->fp_mutex); in fp_detach_handler()
1606 if (port->fp_did_table) { in fp_detach_handler()
1607 kmem_free(port->fp_did_table, did_table_size * in fp_detach_handler()
1611 if (port->fp_pwwn_table) { in fp_detach_handler()
1612 kmem_free(port->fp_pwwn_table, pwwn_table_size * in fp_detach_handler()
1615 orp = port->fp_orphan_list; in fp_detach_handler()
1622 mutex_exit(&port->fp_mutex); in fp_detach_handler()
1624 fp_log_port_event(port, ESC_SUNFC_PORT_DETACH); in fp_detach_handler()
1626 mutex_destroy(&port->fp_mutex); in fp_detach_handler()
1627 cv_destroy(&port->fp_attach_cv); in fp_detach_handler()
1628 cv_destroy(&port->fp_cv); in fp_detach_handler()
1629 ddi_soft_state_free(fp_driver_softstate, port->fp_instance); in fp_detach_handler()
1647 fp_suspend_handler(fc_local_port_t *port) in fp_suspend_handler() argument
1651 mutex_enter(&port->fp_mutex); in fp_suspend_handler()
1657 if (port->fp_soft_state & FP_SOFT_SUSPEND) { in fp_suspend_handler()
1658 mutex_exit(&port->fp_mutex); in fp_suspend_handler()
1668 if (port->fp_soft_state & FP_SOFT_POWER_DOWN) { in fp_suspend_handler()
1669 port->fp_soft_state |= FP_SOFT_SUSPEND; in fp_suspend_handler()
1670 mutex_exit(&port->fp_mutex); in fp_suspend_handler()
1688 while ((port->fp_soft_state & (FP_SOFT_IN_STATEC_CB | in fp_suspend_handler()
1690 mutex_exit(&port->fp_mutex); in fp_suspend_handler()
1693 mutex_enter(&port->fp_mutex); in fp_suspend_handler()
1696 if (port->fp_soft_state & (FP_SOFT_IN_STATEC_CB | in fp_suspend_handler()
1698 mutex_exit(&port->fp_mutex); in fp_suspend_handler()
1700 " Failing suspend", port->fp_instance); in fp_suspend_handler()
1707 if (port->fp_job_head) { in fp_suspend_handler()
1708 mutex_exit(&port->fp_mutex); in fp_suspend_handler()
1713 port->fp_soft_state |= FP_SOFT_SUSPEND; in fp_suspend_handler()
1715 fp_suspend_all(port); in fp_suspend_handler()
1716 mutex_exit(&port->fp_mutex); in fp_suspend_handler()
1726 fp_power_down(fc_local_port_t *port) in fp_power_down() argument
1728 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_power_down()
1734 if (port->fp_soft_state & FP_SOFT_SUSPEND) { in fp_power_down()
1735 port->fp_soft_state |= FP_SOFT_POWER_DOWN; in fp_power_down()
1743 if (port->fp_soft_state & FP_SOFT_POWER_DOWN) { in fp_power_down()
1753 if ((port->fp_soft_state & FP_SOFT_IN_STATEC_CB) || in fp_power_down()
1754 (port->fp_soft_state & FP_SOFT_IN_UNSOL_CB)) { in fp_power_down()
1763 if (port->fp_job_head) { in fp_power_down()
1768 port->fp_soft_state |= FP_SOFT_POWER_DOWN; in fp_power_down()
1773 mutex_exit(&port->fp_mutex); in fp_power_down()
1774 if (fctl_detach_ulps(port, FC_CMD_POWER_DOWN, in fp_power_down()
1776 mutex_enter(&port->fp_mutex); in fp_power_down()
1777 port->fp_soft_state &= ~FP_SOFT_POWER_DOWN; in fp_power_down()
1778 mutex_exit(&port->fp_mutex); in fp_power_down()
1783 fp_attach_ulps(port, FC_CMD_POWER_UP); in fp_power_down()
1787 mutex_enter(&port->fp_mutex); in fp_power_down()
1790 mutex_enter(&port->fp_mutex); in fp_power_down()
1792 fp_suspend_all(port); in fp_power_down()
1802 fp_suspend_all(fc_local_port_t *port) in fp_suspend_all() argument
1808 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_suspend_all()
1810 if (port->fp_wait_tid != 0) { in fp_suspend_all()
1813 tid = port->fp_wait_tid; in fp_suspend_all()
1814 port->fp_wait_tid = (timeout_id_t)NULL; in fp_suspend_all()
1815 mutex_exit(&port->fp_mutex); in fp_suspend_all()
1817 mutex_enter(&port->fp_mutex); in fp_suspend_all()
1818 port->fp_restore |= FP_RESTORE_WAIT_TIMEOUT; in fp_suspend_all()
1821 if (port->fp_offline_tid) { in fp_suspend_all()
1824 tid = port->fp_offline_tid; in fp_suspend_all()
1825 port->fp_offline_tid = (timeout_id_t)NULL; in fp_suspend_all()
1826 mutex_exit(&port->fp_mutex); in fp_suspend_all()
1828 mutex_enter(&port->fp_mutex); in fp_suspend_all()
1829 port->fp_restore |= FP_RESTORE_OFFLINE_TIMEOUT; in fp_suspend_all()
1831 mutex_exit(&port->fp_mutex); in fp_suspend_all()
1832 port->fp_fca_tran->fca_unbind_port(port->fp_fca_handle); in fp_suspend_all()
1833 mutex_enter(&port->fp_mutex); in fp_suspend_all()
1841 head = &port->fp_pwwn_table[index]; in fp_suspend_all()
1846 fctl_delist_did_table(port, pd); in fp_suspend_all()
1873 fc_local_port_t *port = (fc_local_port_t *)cdarg; in fp_cache_constructor() local
1881 cmd->cmd_port = port; in fp_cache_constructor()
1884 if (!(port->fp_soft_state & FP_SOFT_FCA_IS_NODMA)) { in fp_cache_constructor()
1885 if (ddi_dma_alloc_handle(port->fp_fca_dip, in fp_cache_constructor()
1886 port->fp_fca_tran->fca_dma_attr, cb, NULL, in fp_cache_constructor()
1891 if (ddi_dma_alloc_handle(port->fp_fca_dip, in fp_cache_constructor()
1892 port->fp_fca_tran->fca_dma_attr, cb, NULL, in fp_cache_constructor()
1966 fp_alloc_pkt(fc_local_port_t *port, int cmd_len, int resp_len, int kmflags, in fp_alloc_pkt() argument
1978 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_alloc_pkt()
1982 cmd = (fp_cmd_t *)kmem_cache_alloc(port->fp_pkt_cache, kmflags); in fp_alloc_pkt()
2010 if (fc_ulp_init_packet((opaque_t)port, pkt, kmflags) != FC_SUCCESS) { in fp_alloc_pkt()
2014 if (cmd_len && !(port->fp_soft_state & FP_SOFT_FCA_IS_NODMA)) { in fp_alloc_pkt()
2018 port->fp_fca_tran->fca_acc_attr, DDI_DMA_CONSISTENT, in fp_alloc_pkt()
2043 port->fp_fca_tran->fca_dma_attr->dma_attr_sgllen) { in fp_alloc_pkt()
2068 if (resp_len && !(port->fp_soft_state & FP_SOFT_FCA_IS_NODMA)) { in fp_alloc_pkt()
2072 port->fp_fca_tran->fca_acc_attr, in fp_alloc_pkt()
2098 port->fp_fca_tran->fca_dma_attr->dma_attr_sgllen) { in fp_alloc_pkt()
2145 if (port->fp_soft_state & FP_SOFT_FCA_IS_NODMA) { in fp_alloc_pkt()
2155 kmem_cache_free(port->fp_pkt_cache, cmd); in fp_alloc_pkt()
2167 fc_local_port_t *port; in fp_free_pkt() local
2178 port = cmd->cmd_port; in fp_free_pkt()
2192 if (port->fp_soft_state & FP_SOFT_FCA_IS_NODMA) { in fp_free_pkt()
2205 (void) fc_ulp_uninit_packet((opaque_t)port, pkt); in fp_free_pkt()
2206 kmem_cache_free(port->fp_pkt_cache, (void *)cmd); in fp_free_pkt()
2254 fp_job_handler(fc_local_port_t *port) in fp_job_handler() argument
2266 CALLB_CPR_INIT(&port->fp_cpr_info, &port->fp_mutex, in fp_job_handler()
2274 mutex_enter(&port->fp_mutex); in fp_job_handler()
2280 while (port->fp_job_head == NULL || in fp_job_handler()
2281 (port->fp_soft_state & (FP_SOFT_POWER_DOWN | in fp_job_handler()
2283 CALLB_CPR_SAFE_BEGIN(&port->fp_cpr_info); in fp_job_handler()
2284 cv_wait(&port->fp_cv, &port->fp_mutex); in fp_job_handler()
2285 CALLB_CPR_SAFE_END(&port->fp_cpr_info, &port->fp_mutex); in fp_job_handler()
2292 job = fctl_deque_job(port); in fp_job_handler()
2307 fp_port_shutdown(port, job); in fp_job_handler()
2313 CALLB_CPR_EXIT(&(port->fp_cpr_info)); in fp_job_handler()
2315 mutex_exit(&port->fp_mutex); in fp_job_handler()
2336 if (port->fp_soft_state & (FP_DETACH_INPROGRESS | in fp_job_handler()
2347 port->fp_ulp_attach = 1; in fp_job_handler()
2350 mutex_exit(&port->fp_mutex); in fp_job_handler()
2367 fp_startup_done((opaque_t)port, FC_PKT_SUCCESS); in fp_job_handler()
2383 port->fp_last_task = port->fp_task; in fp_job_handler()
2384 port->fp_task = FP_TASK_OFFLINE; in fp_job_handler()
2385 fp_port_offline(port, 0); in fp_job_handler()
2386 port->fp_task = port->fp_last_task; in fp_job_handler()
2387 port->fp_last_task = FP_TASK_IDLE; in fp_job_handler()
2390 if (--port->fp_statec_busy == 0) { in fp_job_handler()
2391 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_job_handler()
2394 mutex_exit(&port->fp_mutex); in fp_job_handler()
2396 job->job_result = fp_ulp_notify(port, statec, KM_SLEEP); in fp_job_handler()
2410 mutex_exit(&port->fp_mutex); in fp_job_handler()
2412 pd = fctl_get_remote_port_by_did(port, *d_id); in fp_job_handler()
2425 mutex_enter(&port->fp_mutex); in fp_job_handler()
2426 if (FC_IS_TOP_SWITCH(port->fp_topology)) { in fp_job_handler()
2427 mutex_exit(&port->fp_mutex); in fp_job_handler()
2428 pd = fp_create_remote_port_by_ns(port, in fp_job_handler()
2436 mutex_exit(&port->fp_mutex); in fp_job_handler()
2443 rval = fp_port_login(port, *d_id, job, in fp_job_handler()
2470 mutex_exit(&port->fp_mutex); in fp_job_handler()
2478 mutex_exit(&port->fp_mutex); in fp_job_handler()
2483 mutex_exit(&port->fp_mutex); in fp_job_handler()
2485 (void) fp_logout(port, pd, job); in fp_job_handler()
2493 mutex_exit(&port->fp_mutex); in fp_job_handler()
2495 fp_fcio_login(port, job->job_private, job); in fp_job_handler()
2503 mutex_exit(&port->fp_mutex); in fp_job_handler()
2505 fp_fcio_logout(port, job->job_private, job); in fp_job_handler()
2511 port->fp_last_task = port->fp_task; in fp_job_handler()
2512 port->fp_task = FP_TASK_GETMAP; in fp_job_handler()
2514 switch (port->fp_topology) { in fp_job_handler()
2518 fp_get_loopmap(port, job); in fp_job_handler()
2519 mutex_exit(&port->fp_mutex); in fp_job_handler()
2521 fctl_fillout_map(port, in fp_job_handler()
2525 mutex_enter(&port->fp_mutex); in fp_job_handler()
2530 mutex_exit(&port->fp_mutex); in fp_job_handler()
2533 job->job_result = fp_ns_getmap(port, in fp_job_handler()
2538 mutex_enter(&port->fp_mutex); in fp_job_handler()
2542 mutex_exit(&port->fp_mutex); in fp_job_handler()
2543 fctl_fillout_map(port, in fp_job_handler()
2547 mutex_enter(&port->fp_mutex); in fp_job_handler()
2551 mutex_exit(&port->fp_mutex); in fp_job_handler()
2553 mutex_enter(&port->fp_mutex); in fp_job_handler()
2556 port->fp_task = port->fp_last_task; in fp_job_handler()
2557 port->fp_last_task = FP_TASK_IDLE; in fp_job_handler()
2558 mutex_exit(&port->fp_mutex); in fp_job_handler()
2563 fp_log_port_event(port, ESC_SUNFC_PORT_OFFLINE); in fp_job_handler()
2565 port->fp_last_task = port->fp_task; in fp_job_handler()
2566 port->fp_task = FP_TASK_OFFLINE; in fp_job_handler()
2568 if (port->fp_statec_busy > 2) { in fp_job_handler()
2570 fp_port_offline(port, 0); in fp_job_handler()
2571 if (--port->fp_statec_busy == 0) { in fp_job_handler()
2572 port->fp_soft_state &= in fp_job_handler()
2576 fp_port_offline(port, 1); in fp_job_handler()
2579 port->fp_task = port->fp_last_task; in fp_job_handler()
2580 port->fp_last_task = FP_TASK_IDLE; in fp_job_handler()
2582 mutex_exit(&port->fp_mutex); in fp_job_handler()
2589 if ((rval = fp_port_startup(port, job)) != FC_SUCCESS) { in fp_job_handler()
2590 if (port->fp_statec_busy > 1) { in fp_job_handler()
2591 mutex_exit(&port->fp_mutex); in fp_job_handler()
2594 mutex_exit(&port->fp_mutex); in fp_job_handler()
2605 if (port->fp_topology == FC_TOP_PRIVATE_LOOP) { in fp_job_handler()
2608 fp_get_loopmap(port, job); in fp_job_handler()
2609 mutex_exit(&port->fp_mutex); in fp_job_handler()
2611 mutex_enter(&port->fp_mutex); in fp_job_handler()
2612 if (port->fp_lilp_map.lilp_magic < MAGIC_LIRP) { in fp_job_handler()
2613 ASSERT(port->fp_total_devices == 0); in fp_job_handler()
2614 port->fp_total_devices = in fp_job_handler()
2615 port->fp_dev_count; in fp_job_handler()
2617 } else if (FC_IS_TOP_SWITCH(port->fp_topology)) { in fp_job_handler()
2621 port->fp_statec_busy++; in fp_job_handler()
2622 port->fp_soft_state |= FP_SOFT_IN_STATEC_CB; in fp_job_handler()
2625 fp_fabric_online(port, job); in fp_job_handler()
2628 mutex_exit(&port->fp_mutex); in fp_job_handler()
2638 fp_log_port_event(port, ESC_SUNFC_PORT_ONLINE); in fp_job_handler()
2644 if (port->fp_statec_busy > 1) { in fp_job_handler()
2645 --port->fp_statec_busy; in fp_job_handler()
2646 mutex_exit(&port->fp_mutex); in fp_job_handler()
2651 switch (old_top = port->fp_topology) { in fp_job_handler()
2673 port->fp_last_task = port->fp_task; in fp_job_handler()
2674 port->fp_task = FP_TASK_ONLINE; in fp_job_handler()
2676 if ((rval = fp_port_startup(port, job)) != FC_SUCCESS) { in fp_job_handler()
2678 port->fp_task = port->fp_last_task; in fp_job_handler()
2679 port->fp_last_task = FP_TASK_IDLE; in fp_job_handler()
2681 if (port->fp_statec_busy > 1) { in fp_job_handler()
2682 --port->fp_statec_busy; in fp_job_handler()
2683 mutex_exit(&port->fp_mutex); in fp_job_handler()
2687 port->fp_state = FC_STATE_OFFLINE; in fp_job_handler()
2692 if (--port->fp_statec_busy == 0) { in fp_job_handler()
2693 port->fp_soft_state &= in fp_job_handler()
2697 if (port->fp_offline_tid == NULL) { in fp_job_handler()
2698 port->fp_offline_tid = in fp_job_handler()
2700 (caddr_t)port, fp_offline_ticks); in fp_job_handler()
2703 mutex_exit(&port->fp_mutex); in fp_job_handler()
2707 switch (port->fp_topology) { in fp_job_handler()
2730 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_job_handler()
2735 switch (port->fp_topology) { in fp_job_handler()
2740 mutex_exit(&port->fp_mutex); in fp_job_handler()
2741 fp_loop_online(port, job, orphan); in fp_job_handler()
2748 fp_fabric_online(port, job); in fp_job_handler()
2749 mutex_exit(&port->fp_mutex); in fp_job_handler()
2753 fp_p2p_online(port, job); in fp_job_handler()
2754 mutex_exit(&port->fp_mutex); in fp_job_handler()
2758 if (--port->fp_statec_busy != 0) { in fp_job_handler()
2763 mutex_exit(&port->fp_mutex); in fp_job_handler()
2770 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_job_handler()
2771 port->fp_state = FC_STATE_OFFLINE; in fp_job_handler()
2773 if (port->fp_offline_tid == NULL) { in fp_job_handler()
2774 port->fp_offline_tid = in fp_job_handler()
2776 (caddr_t)port, fp_offline_ticks); in fp_job_handler()
2778 mutex_exit(&port->fp_mutex); in fp_job_handler()
2782 mutex_enter(&port->fp_mutex); in fp_job_handler()
2784 port->fp_task = port->fp_last_task; in fp_job_handler()
2785 port->fp_last_task = FP_TASK_IDLE; in fp_job_handler()
2787 mutex_exit(&port->fp_mutex); in fp_job_handler()
2794 mutex_exit(&port->fp_mutex); in fp_job_handler()
2795 fp_plogi_group(port, job); in fp_job_handler()
2800 mutex_exit(&port->fp_mutex); in fp_job_handler()
2801 fp_handle_unsol_buf(port, in fp_job_handler()
2810 mutex_exit(&port->fp_mutex); in fp_job_handler()
2830 rval = fp_ns_reg(port, ns_cmd->ns_pd, in fp_job_handler()
2842 rval = fp_ns_query(port, ns_cmd, job, 0, KM_SLEEP); in fp_job_handler()
2856 topology = port->fp_topology; in fp_job_handler()
2857 mutex_exit(&port->fp_mutex); in fp_job_handler()
2862 rval = port->fp_fca_tran->fca_reset( in fp_job_handler()
2863 port->fp_fca_handle, FC_FCA_LINK_RESET); in fp_job_handler()
2871 rval = fp_remote_lip(port, pwwn, in fp_job_handler()
2885 mutex_exit(&port->fp_mutex); in fp_job_handler()
2899 fp_port_startup(fc_local_port_t *port, job_request_t *job) in fp_port_startup() argument
2906 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_port_startup()
2910 " port=%p, job=%p", port, job); in fp_port_startup()
2912 port->fp_topology = FC_TOP_UNKNOWN; in fp_port_startup()
2913 port->fp_port_id.port_id = 0; in fp_port_startup()
2914 state = FC_PORT_STATE_MASK(port->fp_state); in fp_port_startup()
2917 port->fp_port_type.port_type = FC_NS_PORT_UNKNOWN; in fp_port_startup()
2919 mutex_exit(&port->fp_mutex); in fp_port_startup()
2921 mutex_enter(&port->fp_mutex); in fp_port_startup()
2926 port->fp_port_type.port_type = FC_NS_PORT_NL; in fp_port_startup()
2927 mutex_exit(&port->fp_mutex); in fp_port_startup()
2929 lilp_map = &port->fp_lilp_map; in fp_port_startup()
2930 if ((rval = fp_get_lilpmap(port, lilp_map)) != FC_SUCCESS) { in fp_port_startup()
2936 mutex_enter(&port->fp_mutex); in fp_port_startup()
2943 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_port_startup()
2945 mutex_enter(&port->fp_mutex); in fp_port_startup()
2965 rval = port->fp_fca_tran->fca_port_manage( in fp_port_startup()
2966 port->fp_fca_handle, &pm); in fp_port_startup()
2969 port->fp_port_id.port_id = p2p_info.fca_d_id; in fp_port_startup()
2970 port->fp_port_type.port_type = FC_NS_PORT_N; in fp_port_startup()
2971 port->fp_topology = FC_TOP_PT_PT; in fp_port_startup()
2972 port->fp_total_devices = 1; in fp_port_startup()
2974 &port->fp_service_params.nport_ww_name, in fp_port_startup()
2977 mutex_exit(&port->fp_mutex); in fp_port_startup()
2978 pd = fctl_create_remote_port(port, in fp_port_startup()
2984 " P2P port=%p pd=%p fp %x pd %x", port, pd, in fp_port_startup()
2985 port->fp_port_id.port_id, p2p_info.d_id); in fp_port_startup()
2986 mutex_enter(&port->fp_mutex); in fp_port_startup()
2989 port->fp_port_type.port_type = FC_NS_PORT_N; in fp_port_startup()
2990 mutex_exit(&port->fp_mutex); in fp_port_startup()
2997 if ((rval = fp_fabric_login(port, src_id, job, FP_CMD_PLOGI_DONT_CARE, in fp_port_startup()
2999 port->fp_port_type.port_type = FC_NS_PORT_UNKNOWN; in fp_port_startup()
3003 mutex_enter(&port->fp_mutex); in fp_port_startup()
3004 if (port->fp_statec_busy <= 1) { in fp_port_startup()
3005 mutex_exit(&port->fp_mutex); in fp_port_startup()
3006 fp_printf(port, CE_NOTE, FP_LOG_ONLY, rval, NULL, in fp_port_startup()
3008 mutex_enter(&port->fp_mutex); in fp_port_startup()
3015 mutex_enter(&port->fp_mutex); in fp_port_startup()
3017 if (FC_IS_TOP_SWITCH(port->fp_topology)) { in fp_port_startup()
3018 mutex_exit(&port->fp_mutex); in fp_port_startup()
3019 fp_ns_init(port, job, KM_SLEEP); in fp_port_startup()
3020 mutex_enter(&port->fp_mutex); in fp_port_startup()
3024 port->fp_topology = FC_TOP_PRIVATE_LOOP; in fp_port_startup()
3025 port->fp_port_id.port_id = in fp_port_startup()
3026 port->fp_lilp_map.lilp_myalpa & 0xFF; in fp_port_startup()
3031 port, job); in fp_port_startup()
3044 fc_local_port_t *port = arg; in fp_startup_done() local
3046 fp_attach_ulps(port, FC_CMD_ATTACH); in fp_startup_done()
3048 FP_DTRACE(FP_NHEAD1(2, 0), "fp_startup almost complete; port=%p", port); in fp_startup_done()
3059 fc_local_port_t *port = att->att_port; in fp_ulp_port_attach() local
3062 " ULPs begin; port=%p, cmd=%x", port, att->att_cmd); in fp_ulp_port_attach()
3067 fctl_idle_port(port); in fp_ulp_port_attach()
3071 " ULPs end; port=%p, cmd=%x", port, att->att_cmd); in fp_ulp_port_attach()
3076 port->fp_task = port->fp_last_task; in fp_ulp_port_attach()
3077 port->fp_last_task = FP_TASK_IDLE; in fp_ulp_port_attach()
3090 fp_sendcmd(fc_local_port_t *port, fp_cmd_t *cmd, opaque_t fca_handle) in fp_sendcmd() argument
3094 mutex_enter(&port->fp_mutex); in fp_sendcmd()
3095 if (port->fp_statec_busy > 1 || (cmd->cmd_ulp_pkt != NULL && in fp_sendcmd()
3096 (port->fp_statec_busy || FC_PORT_STATE_MASK(port->fp_state) == in fp_sendcmd()
3115 mutex_exit(&port->fp_mutex); in fp_sendcmd()
3119 if (FC_PORT_STATE_MASK(port->fp_state) == FC_STATE_OFFLINE) { in fp_sendcmd()
3122 mutex_exit(&port->fp_mutex); in fp_sendcmd()
3126 mutex_exit(&port->fp_mutex); in fp_sendcmd()
3138 mutex_enter(&port->fp_mutex); in fp_sendcmd()
3139 port->fp_out_fpcmds++; in fp_sendcmd()
3140 mutex_exit(&port->fp_mutex); in fp_sendcmd()
3161 fc_local_port_t *port; in fp_resendcmd() local
3165 port = port_handle; in fp_resendcmd()
3166 mutex_enter(&port->fp_mutex); in fp_resendcmd()
3167 cur_tail = port->fp_wait_tail; in fp_resendcmd()
3168 mutex_exit(&port->fp_mutex); in fp_resendcmd()
3170 while ((cmd = fp_deque_cmd(port)) != NULL) { in fp_resendcmd()
3173 if (port->fp_soft_state & in fp_resendcmd()
3179 rval = cmd->cmd_transport(port->fp_fca_handle, in fp_resendcmd()
3185 fp_enque_cmd(port, cmd); in fp_resendcmd()
3200 mutex_enter(&port->fp_mutex); in fp_resendcmd()
3201 port->fp_out_fpcmds++; in fp_resendcmd()
3202 mutex_exit(&port->fp_mutex); in fp_resendcmd()
3205 fp_enque_cmd(port, cmd); in fp_resendcmd()
3213 mutex_enter(&port->fp_mutex); in fp_resendcmd()
3214 if (port->fp_wait_head) { in fp_resendcmd()
3217 mutex_exit(&port->fp_mutex); in fp_resendcmd()
3218 tid = timeout(fp_resendcmd, (caddr_t)port, in fp_resendcmd()
3220 mutex_enter(&port->fp_mutex); in fp_resendcmd()
3221 port->fp_wait_tid = tid; in fp_resendcmd()
3223 port->fp_wait_tid = NULL; in fp_resendcmd()
3225 mutex_exit(&port->fp_mutex); in fp_resendcmd()
3261 fp_enque_cmd(fc_local_port_t *port, fp_cmd_t *cmd) in fp_enque_cmd() argument
3265 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_enque_cmd()
3268 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, &cmd->cmd_pkt, in fp_enque_cmd()
3272 mutex_enter(&port->fp_mutex); in fp_enque_cmd()
3273 if (port->fp_wait_tail) { in fp_enque_cmd()
3274 port->fp_wait_tail->cmd_next = cmd; in fp_enque_cmd()
3275 port->fp_wait_tail = cmd; in fp_enque_cmd()
3277 ASSERT(port->fp_wait_head == NULL); in fp_enque_cmd()
3278 port->fp_wait_head = port->fp_wait_tail = cmd; in fp_enque_cmd()
3279 if (port->fp_wait_tid == NULL) { in fp_enque_cmd()
3280 mutex_exit(&port->fp_mutex); in fp_enque_cmd()
3281 tid = timeout(fp_resendcmd, (caddr_t)port, in fp_enque_cmd()
3283 mutex_enter(&port->fp_mutex); in fp_enque_cmd()
3284 port->fp_wait_tid = tid; in fp_enque_cmd()
3287 mutex_exit(&port->fp_mutex); in fp_enque_cmd()
3300 fc_local_port_t *port; in fp_handle_reject() local
3303 port = cmd->cmd_port; in fp_handle_reject()
3366 fp_get_nextclass(fc_local_port_t *port, uchar_t cur_class) in fp_get_nextclass() argument
3370 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_get_nextclass()
3374 if (port->fp_cos & FC_NS_CLASS1) { in fp_get_nextclass()
3381 if (port->fp_cos & FC_NS_CLASS2) { in fp_get_nextclass()
3388 if (port->fp_cos & FC_NS_CLASS3) { in fp_get_nextclass()
3450 fp_deque_cmd(fc_local_port_t *port) in fp_deque_cmd() argument
3454 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_deque_cmd()
3456 mutex_enter(&port->fp_mutex); in fp_deque_cmd()
3458 if (port->fp_wait_head == NULL) { in fp_deque_cmd()
3463 port->fp_wait_tid = NULL; in fp_deque_cmd()
3464 mutex_exit(&port->fp_mutex); in fp_deque_cmd()
3468 cmd = port->fp_wait_head; in fp_deque_cmd()
3469 port->fp_wait_head = cmd->cmd_next; in fp_deque_cmd()
3472 if (port->fp_wait_head == NULL) { in fp_deque_cmd()
3473 port->fp_wait_tail = NULL; in fp_deque_cmd()
3475 mutex_exit(&port->fp_mutex); in fp_deque_cmd()
3544 fc_local_port_t *port; in fp_iodone() local
3547 port = cmd->cmd_port; in fp_iodone()
3556 ASSERT(port != NULL); in fp_iodone()
3558 if (fctl_destroy_remote_port(port, pd) == 0) { in fp_iodone()
3609 fp_port_shutdown(fc_local_port_t *port, job_request_t *job) in fp_port_shutdown() argument
3618 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_port_shutdown()
3622 if (port->fp_taskq) { in fp_port_shutdown()
3628 mutex_exit(&port->fp_mutex); in fp_port_shutdown()
3629 taskq_wait(port->fp_taskq); in fp_port_shutdown()
3630 mutex_enter(&port->fp_mutex); in fp_port_shutdown()
3633 if (port->fp_offline_tid) { in fp_port_shutdown()
3636 tid = port->fp_offline_tid; in fp_port_shutdown()
3637 port->fp_offline_tid = NULL; in fp_port_shutdown()
3638 mutex_exit(&port->fp_mutex); in fp_port_shutdown()
3640 mutex_enter(&port->fp_mutex); in fp_port_shutdown()
3643 if (port->fp_wait_tid) { in fp_port_shutdown()
3646 tid = port->fp_wait_tid; in fp_port_shutdown()
3647 port->fp_wait_tid = NULL; in fp_port_shutdown()
3648 mutex_exit(&port->fp_mutex); in fp_port_shutdown()
3651 mutex_exit(&port->fp_mutex); in fp_port_shutdown()
3658 while ((cmd = fp_deque_cmd(port)) != NULL) { in fp_port_shutdown()
3667 mutex_enter(&port->fp_mutex); in fp_port_shutdown()
3670 head = &port->fp_pwwn_table[index]; in fp_port_shutdown()
3692 head = &port->fp_pwwn_table[index]; in fp_port_shutdown()
3704 mutex_exit(&port->fp_mutex); in fp_port_shutdown()
3705 (void) fp_logout(port, pd, job); in fp_port_shutdown()
3706 mutex_enter(&port->fp_mutex); in fp_port_shutdown()
3713 mutex_exit(&port->fp_mutex); in fp_port_shutdown()
3716 mutex_exit(&port->fp_mutex); in fp_port_shutdown()
3726 fctl_destroy_all_remote_ports(port); in fp_port_shutdown()
3728 mutex_enter(&port->fp_mutex); in fp_port_shutdown()
3729 if (FC_IS_TOP_SWITCH(port->fp_topology)) { in fp_port_shutdown()
3730 mutex_exit(&port->fp_mutex); in fp_port_shutdown()
3731 fp_ns_fini(port, job); in fp_port_shutdown()
3733 mutex_exit(&port->fp_mutex); in fp_port_shutdown()
3740 mutex_enter(&port->fp_mutex); in fp_port_shutdown()
3749 fp_get_loopmap(fc_local_port_t *port, job_request_t *job) in fp_get_loopmap() argument
3758 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_get_loopmap()
3760 if (FC_PORT_STATE_MASK(port->fp_state) == FC_STATE_OFFLINE) { in fp_get_loopmap()
3762 mutex_exit(&port->fp_mutex); in fp_get_loopmap()
3764 mutex_enter(&port->fp_mutex); in fp_get_loopmap()
3768 if (port->fp_lilp_map.lilp_length == 0) { in fp_get_loopmap()
3769 mutex_exit(&port->fp_mutex); in fp_get_loopmap()
3772 mutex_enter(&port->fp_mutex); in fp_get_loopmap()
3775 mutex_exit(&port->fp_mutex); in fp_get_loopmap()
3777 lilp_map = &port->fp_lilp_map; in fp_get_loopmap()
3794 pd = fctl_get_remote_port_by_did(port, d_id); in fp_get_loopmap()
3806 rval = fp_port_login(port, d_id, job, flag, in fp_get_loopmap()
3813 mutex_enter(&port->fp_mutex); in fp_get_loopmap()
3821 fp_loop_online(fc_local_port_t *port, job_request_t *job, int orphan) in fp_loop_online() argument
3831 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_loop_online()
3834 port, job); in fp_loop_online()
3836 lilp_map = &port->fp_lilp_map; in fp_loop_online()
3839 mutex_enter(&port->fp_mutex); in fp_loop_online()
3840 if (port->fp_soft_state & FP_SOFT_IN_FCA_RESET) { in fp_loop_online()
3841 port->fp_soft_state &= ~FP_SOFT_IN_FCA_RESET; in fp_loop_online()
3842 mutex_exit(&port->fp_mutex); in fp_loop_online()
3845 mutex_exit(&port->fp_mutex); in fp_loop_online()
3858 pd = fctl_get_remote_port_by_did(port, d_id); in fp_loop_online()
3871 rval = fp_port_login(port, d_id, job, in fp_loop_online()
3884 mutex_enter(&port->fp_mutex); in fp_loop_online()
3885 ASSERT(port->fp_statec_busy > 0); in fp_loop_online()
3886 if (port->fp_statec_busy == 1) { in fp_loop_online()
3887 mutex_exit(&port->fp_mutex); in fp_loop_online()
3888 fctl_fillout_map(port, &changelist, &listlen, in fp_loop_online()
3891 mutex_enter(&port->fp_mutex); in fp_loop_online()
3892 if (port->fp_lilp_map.lilp_magic < MAGIC_LIRP) { in fp_loop_online()
3893 ASSERT(port->fp_total_devices == 0); in fp_loop_online()
3894 port->fp_total_devices = port->fp_dev_count; in fp_loop_online()
3899 mutex_exit(&port->fp_mutex); in fp_loop_online()
3903 (void) fp_ulp_statec_cb(port, FC_STATE_ONLINE, changelist, in fp_loop_online()
3906 mutex_enter(&port->fp_mutex); in fp_loop_online()
3907 if (--port->fp_statec_busy == 0) { in fp_loop_online()
3908 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_loop_online()
3911 mutex_exit(&port->fp_mutex); in fp_loop_online()
3915 port, job); in fp_loop_online()
3923 fp_get_lilpmap(fc_local_port_t *port, fc_lilpmap_t *lilp_map) in fp_get_lilpmap() argument
3928 port, lilp_map); in fp_get_lilpmap()
3931 rval = port->fp_fca_tran->fca_getmap(port->fp_fca_handle, lilp_map); in fp_get_lilpmap()
3954 mutex_enter(&port->fp_mutex); in fp_get_lilpmap()
3955 port->fp_total_devices = lilp_map->lilp_length - 1; in fp_get_lilpmap()
3956 mutex_exit(&port->fp_mutex); in fp_get_lilpmap()
3960 mutex_enter(&port->fp_mutex); in fp_get_lilpmap()
3961 if (rval != FC_SUCCESS && !(port->fp_soft_state & FP_SOFT_BAD_LINK)) { in fp_get_lilpmap()
3962 port->fp_soft_state |= FP_SOFT_BAD_LINK; in fp_get_lilpmap()
3963 mutex_exit(&port->fp_mutex); in fp_get_lilpmap()
3965 if (port->fp_fca_tran->fca_reset(port->fp_fca_handle, in fp_get_lilpmap()
3972 port->fp_soft_state &= ~FP_SOFT_BAD_LINK; in fp_get_lilpmap()
3973 mutex_exit(&port->fp_mutex); in fp_get_lilpmap()
3975 mutex_exit(&port->fp_mutex); in fp_get_lilpmap()
3978 FP_TRACE(FP_NHEAD1(1, 0), "fp_get_lilpmap End; port=%p, map=%p", port, in fp_get_lilpmap()
3996 fp_fabric_login(fc_local_port_t *port, uint32_t s_id, job_request_t *job, in fp_fabric_login() argument
4003 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_fabric_login()
4006 port, job); in fp_fabric_login()
4008 class = fp_get_nextclass(port, FC_TRAN_CLASS_INVALID); in fp_fabric_login()
4013 cmd = fp_alloc_pkt(port, sizeof (la_els_logi_t), in fp_fabric_login()
4025 fp_xlogi_init(port, cmd, s_id, 0xFFFFFE, fp_flogi_intr, in fp_fabric_login()
4028 rval = fp_sendcmd(port, cmd, port->fp_fca_handle); in fp_fabric_login()
4034 port, job); in fp_fabric_login()
4049 fp_port_login(fc_local_port_t *port, uint32_t d_id, job_request_t *job, in fp_port_login() argument
4061 ASSERT(fctl_get_remote_port_by_did(port, d_id) == NULL); in fp_port_login()
4066 class = fp_get_nextclass(port, FC_TRAN_CLASS_INVALID); in fp_port_login()
4071 mutex_enter(&port->fp_mutex); in fp_port_login()
4072 tmp_pd = fctl_lookup_pd_by_did(port, d_id); in fp_port_login()
4073 mutex_exit(&port->fp_mutex); in fp_port_login()
4093 cmd = fp_alloc_pkt(port, sizeof (la_els_adisc_t), in fp_port_login()
4105 mutex_enter(&port->fp_mutex); in fp_port_login()
4109 mutex_exit(&port->fp_mutex); in fp_port_login()
4115 cmd = fp_alloc_pkt(port, sizeof (la_els_logi_t), in fp_port_login()
4127 mutex_enter(&port->fp_mutex); in fp_port_login()
4128 src_id = port->fp_port_id.port_id; in fp_port_login()
4129 mutex_exit(&port->fp_mutex); in fp_port_login()
4131 fp_xlogi_init(port, cmd, src_id, d_id, fp_plogi_intr, in fp_port_login()
4143 ((port->fp_npiv_type == FC_NPIV_PORT) || in fp_port_login()
4144 (port->fp_npiv_flag == FC_NPIV_ENABLE))) { in fp_port_login()
4146 (port->fp_port_id.port_id & 0xffff00)) { in fp_port_login()
4152 (fp_sendcmd(port, cmd, port->fp_fca_handle) != FC_SUCCESS)) { in fp_port_login()
4290 fp_port_offline(fc_local_port_t *port, int notify) in fp_port_offline() argument
4298 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_port_offline()
4301 head = &port->fp_pwwn_table[index]; in fp_port_offline()
4306 fctl_delist_did_table(port, pd); in fp_port_offline()
4311 port->fp_total_devices = 0; in fp_port_offline()
4320 ASSERT(port->fp_statec_busy > 0); in fp_port_offline()
4321 if (--port->fp_statec_busy == 0) { in fp_port_offline()
4322 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_port_offline()
4324 mutex_exit(&port->fp_mutex); in fp_port_offline()
4325 (void) fp_ulp_statec_cb(port, FC_STATE_OFFLINE, NULL, in fp_port_offline()
4327 mutex_enter(&port->fp_mutex); in fp_port_offline()
4329 if (port->fp_statec_busy) { in fp_port_offline()
4332 } else if (port->fp_statec_busy > 1) { in fp_port_offline()
4336 if ((tid = port->fp_offline_tid) != NULL) { in fp_port_offline()
4337 mutex_exit(&port->fp_mutex); in fp_port_offline()
4339 mutex_enter(&port->fp_mutex); in fp_port_offline()
4343 port->fp_offline_tid = timeout(fp_offline_timeout, in fp_port_offline()
4344 (caddr_t)port, fp_offline_ticks); in fp_port_offline()
4356 fc_local_port_t *port = port_handle; in fp_offline_timeout() local
4360 mutex_enter(&port->fp_mutex); in fp_offline_timeout()
4362 if ((FC_PORT_STATE_MASK(port->fp_state) != FC_STATE_OFFLINE) || in fp_offline_timeout()
4363 (port->fp_soft_state & in fp_offline_timeout()
4365 port->fp_dev_count == 0 || port->fp_statec_busy) { in fp_offline_timeout()
4366 port->fp_offline_tid = NULL; in fp_offline_timeout()
4367 mutex_exit(&port->fp_mutex); in fp_offline_timeout()
4371 mutex_exit(&port->fp_mutex); in fp_offline_timeout()
4375 if (port->fp_options & FP_CORE_ON_OFFLINE_TIMEOUT) { in fp_offline_timeout()
4376 if ((ret = port->fp_fca_tran->fca_reset(port->fp_fca_handle, in fp_offline_timeout()
4384 } else if (port->fp_options & FP_RESET_CORE_ON_OFFLINE_TIMEOUT) { in fp_offline_timeout()
4385 if ((ret = port->fp_fca_tran->fca_reset(port->fp_fca_handle, in fp_offline_timeout()
4395 fctl_fillout_map(port, &changelist, &listlen, 1, 0, 0); in fp_offline_timeout()
4396 (void) fp_ulp_statec_cb(port, FC_STATE_OFFLINE, changelist, in fp_offline_timeout()
4399 mutex_enter(&port->fp_mutex); in fp_offline_timeout()
4400 port->fp_offline_tid = NULL; in fp_offline_timeout()
4401 mutex_exit(&port->fp_mutex); in fp_offline_timeout()
4438 fp_xlogi_init(fc_local_port_t *port, fp_cmd_t *cmd, uint32_t s_id, in fp_xlogi_init() argument
4444 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_xlogi_init()
4449 FC_SET_CMD(port, cmd->cmd_pkt.pkt_cmd_acc, in fp_xlogi_init()
4450 (uint8_t *)&port->fp_service_params, in fp_xlogi_init()
4451 (uint8_t *)cmd->cmd_pkt.pkt_cmd, sizeof (port->fp_service_params), in fp_xlogi_init()
4454 FC_SET_CMD(port, cmd->cmd_pkt.pkt_cmd_acc, (uint8_t *)&payload, in fp_xlogi_init()
4466 fc_local_port_t *port; in fp_logo_init() local
4470 port = pd->pd_port; in fp_logo_init()
4472 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_logo_init()
4475 fp_els_init(cmd, port->fp_port_id.port_id, pd->pd_port_id.port_id, in fp_logo_init()
4478 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_logo_init()
4485 payload.nport_ww_name = port->fp_service_params.nport_ww_name; in fp_logo_init()
4486 payload.nport_id = port->fp_port_id; in fp_logo_init()
4488 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_logo_init()
4498 fc_local_port_t *port; in fp_rnid_init() local
4505 port = pd->pd_port; in fp_rnid_init()
4507 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_rnid_init()
4510 fp_els_init(cmd, port->fp_port_id.port_id, pd->pd_port_id.port_id, in fp_rnid_init()
4513 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_rnid_init()
4521 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_rnid_init()
4531 fc_local_port_t *port; in fp_rls_init() local
4538 port = pd->pd_port; in fp_rls_init()
4540 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_rls_init()
4543 fp_els_init(cmd, port->fp_port_id.port_id, pd->pd_port_id.port_id, in fp_rls_init()
4546 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_rls_init()
4552 payload.rls_portid = port->fp_port_id; in fp_rls_init()
4554 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_rls_init()
4565 fc_local_port_t *port; in fp_adisc_init() local
4572 port = pd->pd_port; in fp_adisc_init()
4577 fp_els_init(cmd, port->fp_port_id.port_id, pd->pd_port_id.port_id, in fp_adisc_init()
4580 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_adisc_init()
4586 payload.nport_id = port->fp_port_id; in fp_adisc_init()
4587 payload.port_wwn = port->fp_service_params.nport_ww_name; in fp_adisc_init()
4588 payload.node_wwn = port->fp_service_params.node_ww_name; in fp_adisc_init()
4589 payload.hard_addr = port->fp_hard_addr; in fp_adisc_init()
4591 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_adisc_init()
4601 fp_ulp_statec_cb(fc_local_port_t *port, uint32_t state, in fp_ulp_statec_cb() argument
4608 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_ulp_statec_cb()
4618 mutex_enter(&port->fp_mutex); in fp_ulp_statec_cb()
4619 clist->clist_flags = port->fp_topology; in fp_ulp_statec_cb()
4620 mutex_exit(&port->fp_mutex); in fp_ulp_statec_cb()
4622 clist->clist_port = (opaque_t)port; in fp_ulp_statec_cb()
4671 pd = fctl_get_remote_port_by_pwwn(port, &pwwn); in fp_ulp_statec_cb()
4674 pd = fctl_get_remote_port_by_did(port, in fp_ulp_statec_cb()
4682 mutex_enter(&port->fp_mutex); in fp_ulp_statec_cb()
4685 if (--port->fp_statec_busy == 0) { in fp_ulp_statec_cb()
4686 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_ulp_statec_cb()
4689 mutex_exit(&port->fp_mutex); in fp_ulp_statec_cb()
4691 (void) taskq_dispatch(port->fp_taskq, fctl_ulp_statec_cb, in fp_ulp_statec_cb()
4695 "state=%x, len=%d", port, state, listlen); in fp_ulp_statec_cb()
4705 fp_ulp_devc_cb(fc_local_port_t *port, fc_portmap_t *changelist, in fp_ulp_devc_cb() argument
4711 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_ulp_devc_cb()
4721 mutex_enter(&port->fp_mutex); in fp_ulp_devc_cb()
4722 clist->clist_flags = port->fp_topology; in fp_ulp_devc_cb()
4723 mutex_exit(&port->fp_mutex); in fp_ulp_devc_cb()
4725 clist->clist_port = (opaque_t)port; in fp_ulp_devc_cb()
4759 mutex_enter(&port->fp_mutex); in fp_ulp_devc_cb()
4760 port->fp_last_change++; in fp_ulp_devc_cb()
4761 mutex_exit(&port->fp_mutex); in fp_ulp_devc_cb()
4764 fp_log_target_event(port, in fp_ulp_devc_cb()
4776 mutex_enter(&port->fp_mutex); in fp_ulp_devc_cb()
4777 port->fp_last_change++; in fp_ulp_devc_cb()
4778 mutex_exit(&port->fp_mutex); in fp_ulp_devc_cb()
4788 fp_log_target_event(port, in fp_ulp_devc_cb()
4825 pd = fctl_get_remote_port_by_pwwn(port, &pwwn); in fp_ulp_devc_cb()
4828 pd = fctl_get_remote_port_by_did(port, in fp_ulp_devc_cb()
4842 ret = taskq_dispatch(port->fp_taskq, fctl_ulp_statec_cb, clist, sleep); in fp_ulp_devc_cb()
4857 "port=%p", port); in fp_ulp_devc_cb()
4863 port, listlen); in fp_ulp_devc_cb()
4874 fp_plogi_group(fc_local_port_t *port, job_request_t *job) in fp_plogi_group() argument
4890 port, job); in fp_plogi_group()
4896 mutex_enter(&port->fp_mutex); in fp_plogi_group()
4897 offline = (port->fp_statec_busy || in fp_plogi_group()
4898 FC_PORT_STATE_MASK(port->fp_state) == FC_STATE_OFFLINE) ? 1 : 0; in fp_plogi_group()
4899 mutex_exit(&port->fp_mutex); in fp_plogi_group()
4924 pd = fctl_get_remote_port_by_did(port, d_id); in fp_plogi_group()
4963 tmp_pd = fctl_get_remote_port_by_did(port, d_id); in fp_plogi_group()
4976 "port=%p, pd=%p", port, pd); in fp_plogi_group()
5070 pd = fctl_get_remote_port_by_did(port, d_id); in fp_plogi_group()
5114 pd = fctl_get_remote_port_by_did(port, d_id); in fp_plogi_group()
5123 mutex_enter(&port->fp_mutex); in fp_plogi_group()
5124 if (FC_IS_TOP_SWITCH(port->fp_topology)) { in fp_plogi_group()
5125 mutex_exit(&port->fp_mutex); in fp_plogi_group()
5126 pd = fp_create_remote_port_by_ns(port, in fp_plogi_group()
5138 " pd=%p", port, job, pd); in fp_plogi_group()
5141 mutex_exit(&port->fp_mutex); in fp_plogi_group()
5155 rval = fp_port_login(port, d_id, job, cmd_flags, in fp_plogi_group()
5179 " PD removed; port=%p, job=%p", port, job); in fp_plogi_group()
5188 if (fctl_destroy_remote_port(port, pd) == 0) { in fp_plogi_group()
5201 port, job); in fp_plogi_group()
5209 fp_ns_init(fc_local_port_t *port, job_request_t *job, int sleep) in fp_ns_init() argument
5220 rval = fp_port_login(port, 0xFFFFFC, job, FP_CMD_PLOGI_RETAIN, in fp_ns_init()
5224 mutex_enter(&port->fp_mutex); in fp_ns_init()
5225 port->fp_topology = FC_TOP_NO_NS; in fp_ns_init()
5226 mutex_exit(&port->fp_mutex); in fp_ns_init()
5233 mutex_enter(&port->fp_mutex); in fp_ns_init()
5234 port->fp_topology = FC_TOP_NO_NS; in fp_ns_init()
5235 mutex_exit(&port->fp_mutex); in fp_ns_init()
5254 if (fp_ns_reg(port, NULL, ns_reg_cmds[count], in fp_ns_init()
5265 (void) fp_ns_get_devcount(port, job, 0, KM_SLEEP); in fp_ns_init()
5267 if (port->fp_dev_count < FP_MAX_DEVICES) { in fp_ns_init()
5268 (void) fp_ns_get_devcount(port, job, 1, KM_SLEEP); in fp_ns_init()
5273 if (fp_ns_scr(port, job, FC_SCR_FULL_REGISTRATION, in fp_ns_init()
5287 fp_ns_fini(fc_local_port_t *port, job_request_t *job) in fp_ns_fini() argument
5299 if (fp_ns_scr(port, job, FC_SCR_CLEAR_REGISTRATION, KM_SLEEP) != in fp_ns_fini()
5307 if (fp_ns_reg(port, NULL, NS_DA_ID, job, 0, KM_SLEEP) != FC_SUCCESS) { in fp_ns_fini()
5314 cmd = fp_alloc_pkt(port, sizeof (la_els_logo_t), in fp_ns_fini()
5318 mutex_enter(&port->fp_mutex); in fp_ns_fini()
5319 class = port->fp_ns_login_class; in fp_ns_fini()
5320 s_id = port->fp_port_id.port_id; in fp_ns_fini()
5321 payload.nport_id = port->fp_port_id; in fp_ns_fini()
5322 mutex_exit(&port->fp_mutex); in fp_ns_fini()
5330 if (port->fp_npiv_type == FC_NPIV_PORT) { in fp_ns_fini()
5336 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_ns_fini()
5340 payload.nport_ww_name = port->fp_service_params.nport_ww_name; in fp_ns_fini()
5342 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_ns_fini()
5345 if (fp_sendcmd(port, cmd, port->fp_fca_handle) != FC_SUCCESS) { in fp_ns_fini()
5364 fp_ns_reg(fc_local_port_t *port, fc_remote_port_t *pd, uint16_t cmd_code, in fp_ns_reg() argument
5373 mutex_enter(&port->fp_mutex); in fp_ns_reg()
5374 s_id = port->fp_port_id; in fp_ns_reg()
5375 mutex_exit(&port->fp_mutex); in fp_ns_reg()
5391 cmd = fp_alloc_pkt(port, sizeof (fc_ct_header_t) + in fp_ns_reg()
5396 fp_ct_init(port, cmd, NULL, cmd_code, NULL, 0, 0, job); in fp_ns_reg()
5401 (port->fp_service_params.nport_ww_name) : in fp_ns_reg()
5402 (port->fp_service_params.node_ww_name)); in fp_ns_reg()
5422 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rxn, in fp_ns_reg()
5432 cmd = fp_alloc_pkt(port, sizeof (fc_ct_header_t) + in fp_ns_reg()
5437 fp_ct_init(port, cmd, NULL, cmd_code, NULL, 0, 0, job); in fp_ns_reg()
5441 rcos.rcos_cos = port->fp_cos; in fp_ns_reg()
5449 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rcos, in fp_ns_reg()
5459 cmd = fp_alloc_pkt(port, sizeof (fc_ct_header_t) + in fp_ns_reg()
5465 fp_ct_init(port, cmd, NULL, cmd_code, NULL, 0, 0, job); in fp_ns_reg()
5469 mutex_enter(&port->fp_mutex); in fp_ns_reg()
5470 bcopy(port->fp_fc4_types, rfc.rfc_types, in fp_ns_reg()
5471 sizeof (port->fp_fc4_types)); in fp_ns_reg()
5472 mutex_exit(&port->fp_mutex); in fp_ns_reg()
5481 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rfc, in fp_ns_reg()
5494 mutex_enter(&port->fp_mutex); in fp_ns_reg()
5495 name_len = port->fp_sym_port_namelen; in fp_ns_reg()
5496 mutex_exit(&port->fp_mutex); in fp_ns_reg()
5505 cmd = fp_alloc_pkt(port, sizeof (fc_ct_header_t) + pl_size, in fp_ns_reg()
5511 fp_ct_init(port, cmd, NULL, cmd_code, NULL, 0, 0, job); in fp_ns_reg()
5517 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&spn, (uint8_t *) in fp_ns_reg()
5520 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&name_len, in fp_ns_reg()
5525 mutex_enter(&port->fp_mutex); in fp_ns_reg()
5526 FC_SET_CMD(port, pkt->pkt_cmd_acc, in fp_ns_reg()
5527 (uint8_t *)port->fp_sym_port_name, (uint8_t *) in fp_ns_reg()
5530 mutex_exit(&port->fp_mutex); in fp_ns_reg()
5533 FC_SET_CMD(port, pkt->pkt_cmd_acc, in fp_ns_reg()
5545 cmd = fp_alloc_pkt(port, sizeof (fc_ct_header_t) + in fp_ns_reg()
5550 fp_ct_init(port, cmd, NULL, cmd_code, NULL, 0, 0, job); in fp_ns_reg()
5554 rpt.rpt_type = port->fp_port_type; in fp_ns_reg()
5562 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rpt, in fp_ns_reg()
5572 cmd = fp_alloc_pkt(port, sizeof (fc_ct_header_t) + in fp_ns_reg()
5577 fp_ct_init(port, cmd, NULL, cmd_code, NULL, 0, 0, job); in fp_ns_reg()
5582 port->fp_service_params.node_ww_name; in fp_ns_reg()
5583 bcopy(port->fp_ip_addr, rip.rip_ip_addr, in fp_ns_reg()
5584 sizeof (port->fp_ip_addr)); in fp_ns_reg()
5606 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rip, in fp_ns_reg()
5616 cmd = fp_alloc_pkt(port, sizeof (fc_ct_header_t) + in fp_ns_reg()
5621 fp_ct_init(port, cmd, NULL, cmd_code, NULL, 0, 0, job); in fp_ns_reg()
5626 port->fp_service_params.node_ww_name; in fp_ns_reg()
5627 bcopy(port->fp_ipa, ipa.ipa_value, in fp_ns_reg()
5628 sizeof (port->fp_ipa)); in fp_ns_reg()
5643 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&ipa, in fp_ns_reg()
5657 mutex_enter(&port->fp_mutex); in fp_ns_reg()
5658 name_len = port->fp_sym_node_namelen; in fp_ns_reg()
5659 mutex_exit(&port->fp_mutex); in fp_ns_reg()
5672 cmd = fp_alloc_pkt(port, sizeof (fc_ct_header_t) + in fp_ns_reg()
5677 fp_ct_init(port, cmd, NULL, cmd_code, NULL, 0, 0, job); in fp_ns_reg()
5681 bcopy(&port->fp_service_params.node_ww_name, in fp_ns_reg()
5685 mutex_enter(&port->fp_mutex); in fp_ns_reg()
5686 FC_SET_CMD(port, pkt->pkt_cmd_acc, in fp_ns_reg()
5687 (uint8_t *)port->fp_sym_node_name, (uint8_t *) in fp_ns_reg()
5690 mutex_exit(&port->fp_mutex); in fp_ns_reg()
5694 FC_SET_CMD(port, pkt->pkt_cmd_acc, in fp_ns_reg()
5701 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&snn, in fp_ns_reg()
5704 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&name_len, in fp_ns_reg()
5717 cmd = fp_alloc_pkt(port, sizeof (fc_ct_header_t) + in fp_ns_reg()
5724 fp_ct_init(port, cmd, NULL, cmd_code, NULL, 0, 0, job); in fp_ns_reg()
5737 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rall, in fp_ns_reg()
5748 rval = fp_sendcmd(port, cmd, port->fp_fca_handle); in fp_ns_reg()
5774 fc_local_port_t *port; in fp_common_intr() local
5777 port = cmd->cmd_port; in fp_common_intr()
5783 mutex_enter(&port->fp_mutex); in fp_common_intr()
5784 if (cmd->cmd_ulp_pkt != NULL && port->fp_statec_busy) { in fp_common_intr()
5785 mutex_exit(&port->fp_mutex); in fp_common_intr()
5788 } else if (!(port->fp_soft_state & in fp_common_intr()
5790 mutex_exit(&port->fp_mutex); in fp_common_intr()
5819 mutex_exit(&port->fp_mutex); in fp_common_intr()
5856 fc_local_port_t *port; in fp_flogi_intr() local
5866 port = cmd->cmd_port; in fp_flogi_intr()
5868 mutex_enter(&port->fp_mutex); in fp_flogi_intr()
5869 port->fp_out_fpcmds--; in fp_flogi_intr()
5870 mutex_exit(&port->fp_mutex); in fp_flogi_intr()
5873 port, pkt, pkt->pkt_state); in fp_flogi_intr()
5887 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp, (uint8_t *)acc, in fp_flogi_intr()
5896 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&csp, in fp_flogi_intr()
5901 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_flogi_intr()
5903 mutex_enter(&port->fp_mutex); in fp_flogi_intr()
5904 state = FC_PORT_STATE_MASK(port->fp_state); in fp_flogi_intr()
5905 mutex_exit(&port->fp_mutex); in fp_flogi_intr()
5909 swwn = &port->fp_service_params.nport_ww_name; in fp_flogi_intr()
5911 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&dwwn, in fp_flogi_intr()
5915 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&nwwn, in fp_flogi_intr()
5919 mutex_enter(&port->fp_mutex); in fp_flogi_intr()
5921 port->fp_topology = FC_TOP_PT_PT; in fp_flogi_intr()
5922 port->fp_total_devices = 1; in fp_flogi_intr()
5924 port->fp_ptpt_master = 1; in fp_flogi_intr()
5930 s_id = port->fp_instance + FP_DEFAULT_SID; in fp_flogi_intr()
5931 d_id = port->fp_instance + FP_DEFAULT_DID; in fp_flogi_intr()
5932 port->fp_port_id.port_id = s_id; in fp_flogi_intr()
5933 mutex_exit(&port->fp_mutex); in fp_flogi_intr()
5936 "pd %x", port->fp_port_id.port_id, d_id); in fp_flogi_intr()
5937 pd = fctl_create_remote_port(port, in fp_flogi_intr()
5941 fp_printf(port, CE_NOTE, FP_LOG_ONLY, in fp_flogi_intr()
5954 fp_xlogi_init(port, cmd, s_id, d_id, in fp_flogi_intr()
5970 if (fp_sendcmd(port, cmd, in fp_flogi_intr()
5971 port->fp_fca_handle) == FC_SUCCESS) { in fp_flogi_intr()
5979 port->fp_ptpt_master = 0; in fp_flogi_intr()
5980 mutex_exit(&port->fp_mutex); in fp_flogi_intr()
5986 mutex_enter(&port->fp_mutex); in fp_flogi_intr()
5988 port->fp_topology = FC_TOP_PUBLIC_LOOP; in fp_flogi_intr()
5990 port->fp_topology = FC_TOP_FABRIC; in fp_flogi_intr()
5992 FC_GET_RSP(port, pkt->pkt_resp_acc, in fp_flogi_intr()
5993 (uint8_t *)&port->fp_fabric_name, in fp_flogi_intr()
5998 port->fp_port_id.port_id = pkt->pkt_resp_fhdr.d_id; in fp_flogi_intr()
5999 mutex_exit(&port->fp_mutex); in fp_flogi_intr()
6019 fc_local_port_t *port; in fp_plogi_intr() local
6027 port = cmd->cmd_port; in fp_plogi_intr()
6035 " jcount=%d pkt=%p, state=%x", port, cmd->cmd_job, d_id, in fp_plogi_intr()
6042 mutex_enter(&port->fp_mutex); in fp_plogi_intr()
6043 port->fp_out_fpcmds--; in fp_plogi_intr()
6044 bailout = ((port->fp_statec_busy || in fp_plogi_intr()
6045 FC_PORT_STATE_MASK(port->fp_state) == FC_STATE_OFFLINE) && in fp_plogi_intr()
6047 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6066 fctl_get_remote_port_by_did(port, d_id) != NULL) { in fp_plogi_intr()
6083 d_id, port); in fp_plogi_intr()
6093 if ((pd = fctl_get_remote_port_by_did(port, d_id)) != NULL) { in fp_plogi_intr()
6101 mutex_enter(&port->fp_mutex); in fp_plogi_intr()
6102 if (!bailout && !(skip_msg && port->fp_statec_busy) && in fp_plogi_intr()
6103 port->fp_statec_busy <= 1 && in fp_plogi_intr()
6105 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6116 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, pkt, in fp_plogi_intr()
6123 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6132 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp, (uint8_t *)acc, in fp_plogi_intr()
6142 mutex_enter(&port->fp_mutex); in fp_plogi_intr()
6143 port->fp_ns_login_class = FC_TRAN_CLASS(pkt->pkt_tran_flags); in fp_plogi_intr()
6144 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6151 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&pwwn, in fp_plogi_intr()
6155 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&nwwn, in fp_plogi_intr()
6163 pd = fctl_get_remote_port_by_pwwn(port, &pwwn); in fp_plogi_intr()
6166 port->fp_port_id.port_id, d_id); in fp_plogi_intr()
6167 pd = fctl_create_remote_port(port, &nwwn, &pwwn, d_id, in fp_plogi_intr()
6170 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_plogi_intr()
6179 tmp_pd = fctl_get_remote_port_by_did(port, d_id); in fp_plogi_intr()
6185 mutex_enter(&port->fp_mutex); in fp_plogi_intr()
6194 fctl_delist_did_table(port, pd); in fp_plogi_intr()
6208 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6217 fctl_enlist_did_table(port, pd); in fp_plogi_intr()
6220 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6225 tmp_pd = fctl_get_remote_port_by_did(port, d_id); in fp_plogi_intr()
6226 new_wwn_pd = fctl_get_remote_port_by_pwwn(port, &pwwn); in fp_plogi_intr()
6228 mutex_enter(&port->fp_mutex); in fp_plogi_intr()
6267 fctl_delist_pwwn_table(port, pd); in fp_plogi_intr()
6365 fctl_enlist_did_table(port, pd); in fp_plogi_intr()
6376 fctl_enlist_pwwn_table(port, pd); in fp_plogi_intr()
6379 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6383 (void) fp_ulp_devc_cb(port, changelist, len, in fp_plogi_intr()
6398 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6401 mutex_enter(&port->fp_mutex); in fp_plogi_intr()
6408 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6417 fctl_enlist_did_table(port, pd); in fp_plogi_intr()
6420 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6450 mutex_enter(&port->fp_mutex); in fp_plogi_intr()
6451 if (port->fp_topology == FC_TOP_PRIVATE_LOOP || nl_port) { in fp_plogi_intr()
6475 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6477 if (fp_sendcmd(port, cmd, port->fp_fca_handle) == FC_SUCCESS) { in fp_plogi_intr()
6481 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6485 mutex_enter(&port->fp_mutex); in fp_plogi_intr()
6498 mutex_exit(&port->fp_mutex); in fp_plogi_intr()
6500 if (fp_sendcmd(port, cmd, port->fp_fca_handle) == FC_SUCCESS) { in fp_plogi_intr()
6518 fc_local_port_t *port; in fp_adisc_intr() local
6528 port = cmd->cmd_port; in fp_adisc_intr()
6534 ASSERT(pd != NULL && port != NULL && cmd != NULL); in fp_adisc_intr()
6536 mutex_enter(&port->fp_mutex); in fp_adisc_intr()
6537 port->fp_out_fpcmds--; in fp_adisc_intr()
6538 bailout = ((port->fp_statec_busy || in fp_adisc_intr()
6539 FC_PORT_STATE_MASK(port->fp_state) == FC_STATE_OFFLINE) && in fp_adisc_intr()
6541 mutex_exit(&port->fp_mutex); in fp_adisc_intr()
6551 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp, in fp_adisc_intr()
6557 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&ha, in fp_adisc_intr()
6561 mutex_enter(&port->fp_mutex); in fp_adisc_intr()
6564 (port->fp_topology == FC_TOP_PRIVATE_LOOP) ? 1 : 0; in fp_adisc_intr()
6568 fctl_enlist_did_table(port, pd); in fp_adisc_intr()
6572 mutex_exit(&port->fp_mutex); in fp_adisc_intr()
6590 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_adisc_intr()
6611 mutex_enter(&port->fp_mutex); in fp_adisc_intr()
6612 if (port->fp_statec_busy <= 1) { in fp_adisc_intr()
6613 mutex_exit(&port->fp_mutex); in fp_adisc_intr()
6620 class = fp_get_nextclass(port, in fp_adisc_intr()
6630 port->fp_state, pkt->pkt_state, in fp_adisc_intr()
6634 logi_cmd = fp_alloc_pkt(port, in fp_adisc_intr()
6650 mutex_enter(&port->fp_mutex); in fp_adisc_intr()
6651 src_id = port->fp_port_id.port_id; in fp_adisc_intr()
6652 mutex_exit(&port->fp_mutex); in fp_adisc_intr()
6654 fp_xlogi_init(port, logi_cmd, src_id, in fp_adisc_intr()
6663 if (fp_sendcmd(port, logi_cmd, in fp_adisc_intr()
6664 port->fp_fca_handle) == FC_SUCCESS) { in fp_adisc_intr()
6671 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, pkt, in fp_adisc_intr()
6678 mutex_exit(&port->fp_mutex); in fp_adisc_intr()
6708 mutex_enter(&port->fp_mutex); in fp_adisc_intr()
6721 mutex_exit(&port->fp_mutex); in fp_adisc_intr()
6723 rval = fp_sendcmd(port, cmd, port->fp_fca_handle); in fp_adisc_intr()
6750 "map_flags=%x initiator=%d", port, pd, in fp_adisc_intr()
6754 (void) fp_ulp_devc_cb(port, changelist, in fp_adisc_intr()
6772 fc_local_port_t *port = ((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port; in fp_logo_intr() local
6778 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp, in fp_logo_intr()
6810 fc_local_port_t *port = ((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port; in fp_rnid_intr() local
6812 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp, in fp_rnid_intr()
6832 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)job->job_private, in fp_rnid_intr()
6850 fc_local_port_t *port = ((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port; in fp_rls_intr() local
6852 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp, in fp_rls_intr()
6872 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)job->job_private, in fp_rls_intr()
6906 fc_local_port_t *port = port_handle; in fp_statec_cb() local
6914 mutex_enter(&port->fp_mutex); in fp_statec_cb()
6915 if ((port->fp_soft_state & in fp_statec_cb()
6917 (FC_PORT_STATE_MASK(port->fp_state) == FC_PORT_STATE_MASK(state))) { in fp_statec_cb()
6918 mutex_exit(&port->fp_mutex); in fp_statec_cb()
6922 if (port->fp_statec_busy == 0) { in fp_statec_cb()
6923 port->fp_soft_state |= FP_SOFT_IN_STATEC_CB; in fp_statec_cb()
6926 ASSERT(port->fp_soft_state & FP_SOFT_IN_STATEC_CB); in fp_statec_cb()
6930 port->fp_statec_busy++; in fp_statec_cb()
6938 state = FC_PORT_SPEED_MASK(port->fp_state) | FC_STATE_LOOP; in fp_statec_cb()
6939 fp_port_offline(port, 0); in fp_statec_cb()
6941 mutex_exit(&port->fp_mutex); in fp_statec_cb()
6948 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_statec_cb()
6951 mutex_enter(&port->fp_mutex); in fp_statec_cb()
6952 if (--port->fp_statec_busy == 0) { in fp_statec_cb()
6953 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_statec_cb()
6955 mutex_exit(&port->fp_mutex); in fp_statec_cb()
6958 mutex_enter(&port->fp_mutex); in fp_statec_cb()
6963 bzero(&port->fp_fabric_name, sizeof (la_wwn_t)); in fp_statec_cb()
6964 port->fp_state = state; in fp_statec_cb()
6965 mutex_exit(&port->fp_mutex); in fp_statec_cb()
6967 fctl_enque_job(port, job); in fp_statec_cb()
6972 mutex_enter(&port->fp_mutex); in fp_statec_cb()
6973 port->fp_state = state; in fp_statec_cb()
6975 if (port->fp_offline_tid) { in fp_statec_cb()
6978 tid = port->fp_offline_tid; in fp_statec_cb()
6979 port->fp_offline_tid = NULL; in fp_statec_cb()
6980 mutex_exit(&port->fp_mutex); in fp_statec_cb()
6983 mutex_exit(&port->fp_mutex); in fp_statec_cb()
6989 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_statec_cb()
6993 mutex_enter(&port->fp_mutex); in fp_statec_cb()
6994 if (--port->fp_statec_busy == 0) { in fp_statec_cb()
6995 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_statec_cb()
6997 mutex_exit(&port->fp_mutex); in fp_statec_cb()
7000 fctl_enque_job(port, job); in fp_statec_cb()
7004 mutex_enter(&port->fp_mutex); in fp_statec_cb()
7005 port->fp_state = FC_STATE_OFFLINE; in fp_statec_cb()
7006 port->fp_soft_state |= FP_SOFT_IN_FCA_RESET; in fp_statec_cb()
7007 mutex_exit(&port->fp_mutex); in fp_statec_cb()
7014 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_statec_cb()
7018 mutex_enter(&port->fp_mutex); in fp_statec_cb()
7019 if (--port->fp_statec_busy == 0) { in fp_statec_cb()
7020 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_statec_cb()
7022 mutex_exit(&port->fp_mutex); in fp_statec_cb()
7028 fctl_enque_job(port, job); in fp_statec_cb()
7032 (void) fp_ulp_notify(port, state, KM_NOSLEEP); in fp_statec_cb()
7039 mutex_enter(&port->fp_mutex); in fp_statec_cb()
7040 if (--port->fp_statec_busy == 0) { in fp_statec_cb()
7041 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_statec_cb()
7043 mutex_exit(&port->fp_mutex); in fp_statec_cb()
7053 fp_ns_scr(fc_local_port_t *port, job_request_t *job, uchar_t scr_func, in fp_ns_scr() argument
7062 mutex_enter(&port->fp_mutex); in fp_ns_scr()
7063 s_id = port->fp_port_id.port_id; in fp_ns_scr()
7064 class = port->fp_ns_login_class; in fp_ns_scr()
7065 mutex_exit(&port->fp_mutex); in fp_ns_scr()
7067 cmd = fp_alloc_pkt(port, sizeof (fc_scr_req_t), in fp_ns_scr()
7080 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_ns_scr()
7089 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_ns_scr()
7094 if (fp_sendcmd(port, cmd, port->fp_fca_handle) != FC_SUCCESS) { in fp_ns_scr()
7124 fp_ns_get_devcount(fc_local_port_t *port, job_request_t *job, int create, in fp_ns_get_devcount() argument
7132 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_ns_get_devcount()
7134 mutex_enter(&port->fp_mutex); in fp_ns_get_devcount()
7135 src_id = port->fp_port_id.port_id; in fp_ns_get_devcount()
7136 mutex_exit(&port->fp_mutex); in fp_ns_get_devcount()
7138 if (!create && (port->fp_options & FP_NS_SMART_COUNT)) { in fp_ns_get_devcount()
7178 rval = fp_ns_query(port, ns_cmd, job, 1, sleep); in fp_ns_get_devcount()
7181 if (!create && (port->fp_options & FP_NS_SMART_COUNT)) { in fp_ns_get_devcount()
7190 mutex_enter(&port->fp_mutex); in fp_ns_get_devcount()
7191 port->fp_options &= ~FP_NS_SMART_COUNT; in fp_ns_get_devcount()
7192 mutex_exit(&port->fp_mutex); in fp_ns_get_devcount()
7195 return (fp_ns_get_devcount(port, job, create, sleep)); in fp_ns_get_devcount()
7198 mutex_enter(&port->fp_mutex); in fp_ns_get_devcount()
7199 port->fp_total_devices = 1; in fp_ns_get_devcount()
7208 port->fp_total_devices += max_resid; in fp_ns_get_devcount()
7210 mutex_exit(&port->fp_mutex); in fp_ns_get_devcount()
7212 mutex_enter(&port->fp_mutex); in fp_ns_get_devcount()
7213 port->fp_total_devices = *((int *)ns_cmd->ns_data_buf); in fp_ns_get_devcount()
7214 mutex_exit(&port->fp_mutex); in fp_ns_get_devcount()
7224 fp_fciocmd(fc_local_port_t *port, intptr_t data, int mode, fcio_t *fcio) in fp_fciocmd() argument
7246 mutex_enter(&port->fp_mutex); in fp_fciocmd()
7247 if (port->fp_soft_state & (FP_SOFT_IN_STATEC_CB | in fp_fciocmd()
7250 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7257 open_flag = port->fp_flag; in fp_fciocmd()
7258 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7274 mutex_enter(&port->fp_mutex); in fp_fciocmd()
7275 if (port->fp_flag & FP_EXCL) { in fp_fciocmd()
7276 if (port->fp_flag & FP_EXCL_BUSY) { in fp_fciocmd()
7277 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7281 port->fp_flag |= FP_EXCL_BUSY; in fp_fciocmd()
7283 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7312 mutex_enter(&port->fp_mutex); in fp_fciocmd()
7313 val->dev_did = port->fp_port_id; in fp_fciocmd()
7314 val->dev_hard_addr = port->fp_hard_addr; in fp_fciocmd()
7315 val->dev_pwwn = port->fp_service_params.nport_ww_name; in fp_fciocmd()
7316 val->dev_nwwn = port->fp_service_params.node_ww_name; in fp_fciocmd()
7317 val->dev_state = port->fp_state; in fp_fciocmd()
7319 lilp_map = &port->fp_lilp_map; in fp_fciocmd()
7326 if (d_id == port->fp_port_id.port_id) { in fp_fciocmd()
7332 bcopy(port->fp_fc4_types, val->dev_type, in fp_fciocmd()
7333 sizeof (port->fp_fc4_types)); in fp_fciocmd()
7334 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7348 sizeof (port->fp_fc4_types)); in fp_fciocmd()
7391 tmpPort = fctl_get_adapter_port_by_index(port, index); in fp_fciocmd()
7438 mutex_enter(&port->fp_mutex); in fp_fciocmd()
7439 bcopy(port->fp_hba_port_attrs.manufacturer, in fp_fciocmd()
7442 bcopy(port->fp_hba_port_attrs.serial_number, in fp_fciocmd()
7445 bcopy(port->fp_hba_port_attrs.model, in fp_fciocmd()
7448 bcopy(port->fp_hba_port_attrs.model_description, in fp_fciocmd()
7451 bcopy(port->fp_sym_node_name, val->NodeSymbolicName, in fp_fciocmd()
7452 port->fp_sym_node_namelen); in fp_fciocmd()
7453 bcopy(port->fp_hba_port_attrs.hardware_version, in fp_fciocmd()
7456 bcopy(port->fp_hba_port_attrs.option_rom_version, in fp_fciocmd()
7459 bcopy(port->fp_hba_port_attrs.firmware_version, in fp_fciocmd()
7463 port->fp_hba_port_attrs.vendor_specific_id; in fp_fciocmd()
7464 bcopy(&port->fp_service_params.node_ww_name.raw_wwn, in fp_fciocmd()
7469 bcopy(port->fp_hba_port_attrs.driver_name, in fp_fciocmd()
7472 bcopy(port->fp_hba_port_attrs.driver_version, in fp_fciocmd()
7475 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7478 val->NumberOfPorts = fctl_count_fru_ports(port, 0); in fp_fciocmd()
7480 val->NumberOfPorts = fctl_count_fru_ports(port, 1); in fp_fciocmd()
7541 mutex_enter(&port->fp_mutex); in fp_fciocmd()
7542 bcopy(&port->fp_service_params.node_ww_name.raw_wwn, in fp_fciocmd()
7545 bcopy(&port->fp_service_params.nport_ww_name.raw_wwn, in fp_fciocmd()
7548 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7576 tmpport = fc_delete_npiv_port(port, &vwwn[0]); in fp_fciocmd()
7599 mutex_enter(&port->fp_mutex); in fp_fciocmd()
7601 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7604 mutex_enter(&port->fp_mutex); in fp_fciocmd()
7607 if (port == port->fp_port_next) { in fp_fciocmd()
7608 port->fp_port_next = in fp_fciocmd()
7609 port->fp_port_prev = NULL; in fp_fciocmd()
7611 port->fp_npiv_portnum--; in fp_fciocmd()
7614 port->fp_npiv_portindex[portindex-1] = 0; in fp_fciocmd()
7615 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7629 (void) ddi_pathname(port->fp_port_dip, portname); in fp_fciocmd()
7631 (void) ddi_pathname(port->fp_fca_dip, fcaname); in fp_fciocmd()
7634 ddi_driver_name(port->fp_fca_dip)); in fp_fciocmd()
7650 if (fc_get_npiv_port(port, &entrybuf.VPortWWN)) { in fp_fciocmd()
7654 npiv_ret = fctl_fca_create_npivport(port->fp_fca_dip, in fp_fciocmd()
7655 port->fp_port_dip, ww_nname, ww_pname, &vportindex); in fp_fciocmd()
7657 mutex_enter(&port->fp_mutex); in fp_fciocmd()
7658 port->fp_npiv_portnum++; in fp_fciocmd()
7659 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7692 if (port->fp_npiv_portnum > count) { in fp_fciocmd()
7693 list->numAdapters = port->fp_npiv_portnum; in fp_fciocmd()
7696 count = fc_ulp_get_npiv_port_list(port, in fp_fciocmd()
7729 mutex_enter(&port->fp_mutex); in fp_fciocmd()
7730 val->npivflag = port->fp_npiv_flag; in fp_fciocmd()
7731 val->lastChange = port->fp_last_change; in fp_fciocmd()
7732 bcopy(&port->fp_service_params.nport_ww_name.raw_wwn, in fp_fciocmd()
7735 bcopy(&port->fp_service_params.node_ww_name.raw_wwn, in fp_fciocmd()
7738 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7740 val->NumberOfNPIVPorts = fc_ulp_get_npiv_port_num(port); in fp_fciocmd()
7741 if (port->fp_npiv_type != FC_NPIV_PORT) { in fp_fciocmd()
7743 port->fp_fca_tran->fca_num_npivports; in fp_fciocmd()
7780 mutex_enter(&port->fp_mutex); in fp_fciocmd()
7781 val->lastChange = port->fp_last_change; in fp_fciocmd()
7782 val->fp_minor = port->fp_instance; in fp_fciocmd()
7784 bcopy(&port->fp_service_params.nport_ww_name.raw_wwn, in fp_fciocmd()
7787 bcopy(&port->fp_service_params.node_ww_name.raw_wwn, in fp_fciocmd()
7790 bcopy(&port->fp_fabric_name, &val->FabricName.raw_wwn, in fp_fciocmd()
7793 val->PortFcId = port->fp_port_id.port_id; in fp_fciocmd()
7795 switch (FC_PORT_STATE_MASK(port->fp_state)) { in fp_fciocmd()
7810 switch (port->fp_port_type.port_type) { in fp_fciocmd()
7838 switch (port->fp_topology) { in fp_fciocmd()
7856 if (port->fp_bind_state == FC_STATE_OFFLINE) { in fp_fciocmd()
7871 port->fp_hba_port_attrs.supported_cos; in fp_fciocmd()
7873 bcopy(port->fp_fc4_types, val->PortActiveFc4Types, in fp_fciocmd()
7875 bcopy(port->fp_sym_port_name, val->PortSymbolicName, in fp_fciocmd()
7876 port->fp_sym_port_namelen); in fp_fciocmd()
7878 port->fp_hba_port_attrs.supported_speed; in fp_fciocmd()
7880 switch (FC_PORT_SPEED_MASK(port->fp_state)) { in fp_fciocmd()
7906 val->PortMaxFrameSize = port->fp_hba_port_attrs.max_frame_size; in fp_fciocmd()
7907 val->NumberofDiscoveredPorts = port->fp_dev_count; in fp_fciocmd()
7908 mutex_exit(&port->fp_mutex); in fp_fciocmd()
7990 if (index >= port->fp_dev_count) { in fp_fciocmd()
8004 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8005 tmp_pd = fctl_lookup_pd_by_index(port, index); in fp_fciocmd()
8011 val->lastChange = port->fp_last_change; in fp_fciocmd()
8012 val->fp_minor = port->fp_instance; in fp_fciocmd()
8103 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8136 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8137 tmp_pd = fctl_lookup_pd_by_wwn(port, wwn); in fp_fciocmd()
8138 val->lastChange = port->fp_last_change; in fp_fciocmd()
8139 val->fp_minor = port->fp_instance; in fp_fciocmd()
8140 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8242 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8243 switch (port->fp_topology) { in fp_fciocmd()
8246 num_devices = port->fp_total_devices; in fp_fciocmd()
8252 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8263 (void) fp_ns_get_devcount(port, job, 0, KM_SLEEP); in fp_fciocmd()
8266 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8267 num_devices = port->fp_total_devices; in fp_fciocmd()
8280 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8307 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8308 if (num_devices < port->fp_total_devices) { in fp_fciocmd()
8310 new_count = port->fp_total_devices; in fp_fciocmd()
8311 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8328 if (port->fp_total_devices <= 0) { in fp_fciocmd()
8330 new_count = port->fp_total_devices; in fp_fciocmd()
8331 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8348 switch (port->fp_topology) { in fp_fciocmd()
8350 if (fp_fillout_loopmap(port, fcio, in fp_fciocmd()
8361 if (fp_fillout_p2pmap(port, fcio, in fp_fciocmd()
8376 sizeof (fc_port_dev_t) * port->fp_total_devices; in fp_fciocmd()
8378 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8395 ret = fp_ns_query(port, ns_cmd, job, 1, KM_SLEEP); in fp_fciocmd()
8407 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8414 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8419 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8430 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8439 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8447 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8457 num_devices = port->fp_total_devices; in fp_fciocmd()
8473 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8529 pd = fctl_hold_remote_port_by_pwwn(port, &pwwn); in fp_fciocmd()
8531 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8532 my_pwwn = &port->fp_service_params.nport_ww_name; in fp_fciocmd()
8533 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8541 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8542 *params = port->fp_service_params; in fp_fciocmd()
8543 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8646 fctl_enque_job(port, job); in fp_fciocmd()
8681 pd = fctl_hold_remote_port_by_pwwn(port, &pwwn); in fp_fciocmd()
8683 mutex_enter(&port->fp_mutex); in fp_fciocmd()
8684 if (FC_IS_TOP_SWITCH(port->fp_topology)) { in fp_fciocmd()
8685 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8703 ret = fp_ns_query(port, ns_cmd, job, in fp_fciocmd()
8721 mutex_exit(&port->fp_mutex); in fp_fciocmd()
8762 pd = fctl_hold_remote_port_by_pwwn(port, &pwwn); in fp_fciocmd()
8791 (void) fp_ulp_devc_cb(port, changelist, 1, 1, KM_SLEEP, 1); in fp_fciocmd()
8815 ret = port->fp_fca_tran->fca_port_manage( in fp_fciocmd()
8816 port->fp_fca_handle, &pm); in fp_fciocmd()
8865 ret = port->fp_fca_tran->fca_port_manage( in fp_fciocmd()
8866 port->fp_fca_handle, &pm); in fp_fciocmd()
8903 ret = port->fp_fca_tran->fca_port_manage( in fp_fciocmd()
8904 port->fp_fca_handle, &pm); in fp_fciocmd()
8950 ret = port->fp_fca_tran->fca_port_manage( in fp_fciocmd()
8951 port->fp_fca_handle, &pm); in fp_fciocmd()
8989 ret = port->fp_fca_tran->fca_port_manage( in fp_fciocmd()
8990 port->fp_fca_handle, &pm); in fp_fciocmd()
9005 ret = port->fp_fca_tran->fca_reset( in fp_fciocmd()
9006 port->fp_fca_handle, FC_FCA_CORE); in fp_fciocmd()
9033 ret = port->fp_fca_tran->fca_port_manage( in fp_fciocmd()
9034 port->fp_fca_handle, &pm); in fp_fciocmd()
9061 ret = port->fp_fca_tran->fca_port_manage( in fp_fciocmd()
9062 port->fp_fca_handle, &pm); in fp_fciocmd()
9093 mutex_enter(&port->fp_mutex); in fp_fciocmd()
9094 if (FC_PORT_STATE_MASK(port->fp_state) == FC_STATE_OFFLINE) { in fp_fciocmd()
9097 user_topology = port->fp_topology; in fp_fciocmd()
9099 mutex_exit(&port->fp_mutex); in fp_fciocmd()
9132 mutex_enter(&port->fp_mutex); in fp_fciocmd()
9133 if (port->fp_soft_state & FP_SOFT_IN_LINK_RESET) { in fp_fciocmd()
9134 mutex_exit(&port->fp_mutex); in fp_fciocmd()
9137 port->fp_soft_state |= FP_SOFT_IN_LINK_RESET; in fp_fciocmd()
9138 mutex_exit(&port->fp_mutex); in fp_fciocmd()
9148 fctl_enque_job(port, job); in fp_fciocmd()
9151 mutex_enter(&port->fp_mutex); in fp_fciocmd()
9152 port->fp_soft_state &= ~FP_SOFT_IN_LINK_RESET; in fp_fciocmd()
9153 mutex_exit(&port->fp_mutex); in fp_fciocmd()
9167 ret = port->fp_fca_tran->fca_reset( in fp_fciocmd()
9168 port->fp_fca_handle, FC_FCA_RESET); in fp_fciocmd()
9179 ret = port->fp_fca_tran->fca_reset( in fp_fciocmd()
9180 port->fp_fca_handle, FC_FCA_RESET_CORE); in fp_fciocmd()
9231 ret = port->fp_fca_tran->fca_port_manage( in fp_fciocmd()
9232 port->fp_fca_handle, &pm); in fp_fciocmd()
9257 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_fciocmd()
9303 rval = fp_get_rnid(port, data, mode, fcio); in fp_fciocmd()
9325 rval = fp_send_rnid(port, data, mode, fcio, &pwwn); in fp_fciocmd()
9338 rval = fp_set_rnid(port, data, mode, fcio); in fp_fciocmd()
9379 mutex_enter(&port->fp_mutex); in fp_fciocmd()
9380 src_id = port->fp_port_id.port_id; in fp_fciocmd()
9381 mutex_exit(&port->fp_mutex); in fp_fciocmd()
9399 ret = port->fp_fca_tran->fca_port_manage( in fp_fciocmd()
9400 port->fp_fca_handle, &pm); in fp_fciocmd()
9434 pd = fctl_hold_remote_port_by_did(port, dest); in fp_fciocmd()
9470 cmd = fp_alloc_pkt(port, sizeof (la_els_rls_t), in fp_fciocmd()
9488 mutex_enter(&port->fp_mutex); in fp_fciocmd()
9505 mutex_exit(&port->fp_mutex); in fp_fciocmd()
9507 if (fp_sendcmd(port, cmd, port->fp_fca_handle) == FC_SUCCESS) { in fp_fciocmd()
9537 mutex_enter(&port->fp_mutex); in fp_fciocmd()
9543 mutex_exit(&port->fp_mutex); in fp_fciocmd()
9635 fctl_enque_job(port, job); in fp_fciocmd()
9674 mutex_enter(&port->fp_mutex); in fp_fciocmd()
9675 if (port->fp_flag & FP_EXCL_BUSY) { in fp_fciocmd()
9676 port->fp_flag &= ~FP_EXCL_BUSY; in fp_fciocmd()
9678 mutex_exit(&port->fp_mutex); in fp_fciocmd()
9700 fp_set_rnid(fc_local_port_t *port, intptr_t data, int mode, fcio_t *fcio) in fp_set_rnid() argument
9724 rval = port->fp_fca_tran->fca_port_manage( in fp_set_rnid()
9725 port->fp_fca_handle, &pm); in fp_set_rnid()
9734 mutex_enter(&port->fp_mutex); in fp_set_rnid()
9736 bcopy(rnid, &port->fp_rnid_params, in fp_set_rnid()
9737 sizeof (port->fp_rnid_params)); in fp_set_rnid()
9738 mutex_exit(&port->fp_mutex); in fp_set_rnid()
9754 fp_get_rnid(fc_local_port_t *port, intptr_t data, int mode, fcio_t *fcio) in fp_get_rnid() argument
9764 mutex_enter(&port->fp_mutex); in fp_get_rnid()
9765 if (port->fp_rnid_init == 1) { in fp_get_rnid()
9766 bcopy(&port->fp_rnid_params, rnid, sizeof (fc_rnid_t)); in fp_get_rnid()
9767 mutex_exit(&port->fp_mutex); in fp_get_rnid()
9787 mutex_exit(&port->fp_mutex); in fp_get_rnid()
9798 ret = port->fp_fca_tran->fca_port_manage( in fp_get_rnid()
9799 port->fp_fca_handle, in fp_get_rnid()
9804 mutex_enter(&port->fp_mutex); in fp_get_rnid()
9805 port->fp_rnid_init = 1; in fp_get_rnid()
9806 bcopy(rnid, &port->fp_rnid_params, sizeof (*rnid)); in fp_get_rnid()
9807 mutex_exit(&port->fp_mutex); in fp_get_rnid()
9838 fp_send_rnid(fc_local_port_t *port, intptr_t data, int mode, fcio_t *fcio, in fp_send_rnid() argument
9847 pd = fctl_get_remote_port_by_pwwn(port, pwwn); in fp_send_rnid()
9872 cmd = fp_alloc_pkt(port, sizeof (la_els_rnid_t), in fp_send_rnid()
9891 mutex_enter(&port->fp_mutex); in fp_send_rnid()
9907 mutex_exit(&port->fp_mutex); in fp_send_rnid()
9909 if (fp_sendcmd(port, cmd, port->fp_fca_handle) == FC_SUCCESS) { in fp_send_rnid()
10011 fp_p2p_online(fc_local_port_t *port, job_request_t *job) in fp_p2p_online() argument
10016 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_p2p_online()
10017 ASSERT(port->fp_topology == FC_TOP_PT_PT); in fp_p2p_online()
10024 if (port->fp_statec_busy > 1) { in fp_p2p_online()
10028 mutex_exit(&port->fp_mutex); in fp_p2p_online()
10031 fctl_fillout_map(port, &changelist, &listlen, 1, 0, 0); in fp_p2p_online()
10032 (void) fp_ulp_statec_cb(port, FC_STATE_ONLINE, changelist, in fp_p2p_online()
10035 mutex_enter(&port->fp_mutex); in fp_p2p_online()
10038 mutex_enter(&port->fp_mutex); in fp_p2p_online()
10039 if (--port->fp_statec_busy == 0) { in fp_p2p_online()
10040 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_p2p_online()
10046 fp_fillout_p2pmap(fc_local_port_t *port, fcio_t *fcio, int mode) in fp_fillout_p2pmap() argument
10057 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_fillout_p2pmap()
10064 head = &port->fp_pwwn_table[index]; in fp_fillout_p2pmap()
10124 fp_fabric_online(fc_local_port_t *port, job_request_t *job) in fp_fabric_online() argument
10139 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_fabric_online()
10140 ASSERT(FC_IS_TOP_SWITCH(port->fp_topology)); in fp_fabric_online()
10154 if (port->fp_orphan_count) { in fp_fabric_online()
10159 for (orp = port->fp_orphan_list; orp; orp = norp) { in fp_fabric_online()
10161 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10174 rval = fp_ns_query(port, ns_cmd, job, 1, KM_SLEEP); in fp_fabric_online()
10178 pd = fp_create_remote_port_by_ns(port, in fp_fabric_online()
10184 fp_printf(port, CE_WARN, FP_LOG_ONLY, in fp_fabric_online()
10189 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10194 port->fp_orphan_list); in fp_fabric_online()
10195 port->fp_orphan_list = in fp_fabric_online()
10198 port->fp_orphan_count--; in fp_fabric_online()
10199 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10214 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, in fp_fabric_online()
10220 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10225 port->fp_orphan_list); in fp_fabric_online()
10226 port->fp_orphan_list = in fp_fabric_online()
10229 port->fp_orphan_count--; in fp_fabric_online()
10230 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10237 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10248 head = &port->fp_pwwn_table[index]; in fp_fabric_online()
10262 if (port->fp_dev_count >= FP_MAX_DEVICES || in fp_fabric_online()
10263 (port->fp_options & FP_TARGET_MODE)) { in fp_fabric_online()
10298 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10300 rval = fp_ns_query(port, ns_cmd, job, 1, KM_SLEEP); in fp_fabric_online()
10319 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10325 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10328 fctl_delist_did_table(port, pd); in fp_fabric_online()
10338 fctl_enlist_did_table(port, pd); in fp_fabric_online()
10352 if (port->fp_soft_state & FP_SOFT_IN_FCA_RESET) { in fp_fabric_online()
10353 port->fp_soft_state &= ~FP_SOFT_IN_FCA_RESET; in fp_fabric_online()
10354 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10356 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10364 head = &port->fp_pwwn_table[index]; in fp_fabric_online()
10386 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10388 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10401 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10403 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10421 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10423 rval = fp_port_login(port, d_id, job, in fp_fabric_online()
10429 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10432 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10437 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10439 ASSERT(port->fp_statec_busy > 0); in fp_fabric_online()
10441 if (port->fp_statec_busy > 1) { in fp_fabric_online()
10445 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10447 ASSERT(port->fp_statec_busy > 0); in fp_fabric_online()
10448 if (port->fp_statec_busy > 1) { in fp_fabric_online()
10451 mutex_exit(&port->fp_mutex); in fp_fabric_online()
10455 fctl_fillout_map(port, &changelist, &listlen, 1, 0, 0); in fp_fabric_online()
10457 (void) fp_ulp_statec_cb(port, FC_STATE_ONLINE, changelist, in fp_fabric_online()
10460 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10463 mutex_enter(&port->fp_mutex); in fp_fabric_online()
10464 if (--port->fp_statec_busy == 0) { in fp_fabric_online()
10465 port->fp_soft_state &= ~FP_SOFT_IN_STATEC_CB; in fp_fabric_online()
10475 fp_fillout_loopmap(fc_local_port_t *port, fcio_t *fcio, int mode) in fp_fillout_loopmap() argument
10487 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_fillout_loopmap()
10490 if (port->fp_total_devices > port->fp_dev_count && in fp_fillout_loopmap()
10491 num_devices >= port->fp_total_devices) { in fp_fillout_loopmap()
10494 mutex_exit(&port->fp_mutex); in fp_fillout_loopmap()
10498 mutex_enter(&port->fp_mutex); in fp_fillout_loopmap()
10499 fp_get_loopmap(port, job); in fp_fillout_loopmap()
10500 mutex_exit(&port->fp_mutex); in fp_fillout_loopmap()
10505 mutex_exit(&port->fp_mutex); in fp_fillout_loopmap()
10509 mutex_enter(&port->fp_mutex); in fp_fillout_loopmap()
10517 lilp_map = &port->fp_lilp_map; in fp_fillout_loopmap()
10539 mutex_exit(&port->fp_mutex); in fp_fillout_loopmap()
10540 pd = fctl_get_remote_port_by_did(port, d_id); in fp_fillout_loopmap()
10541 mutex_enter(&port->fp_mutex); in fp_fillout_loopmap()
10591 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_fillout_loopmap()
10604 fc_local_port_t *port; in fp_unsol_intr() local
10607 port = cmd->cmd_port; in fp_unsol_intr()
10609 mutex_enter(&port->fp_mutex); in fp_unsol_intr()
10610 port->fp_out_fpcmds--; in fp_unsol_intr()
10611 mutex_exit(&port->fp_mutex); in fp_unsol_intr()
10614 fp_printf(port, CE_WARN, FP_LOG_ONLY, 0, pkt, in fp_unsol_intr()
10620 if (cmd == port->fp_els_resp_pkt) { in fp_unsol_intr()
10621 mutex_enter(&port->fp_mutex); in fp_unsol_intr()
10622 port->fp_els_resp_pkt_busy = 0; in fp_unsol_intr()
10623 mutex_exit(&port->fp_mutex); in fp_unsol_intr()
10640 fc_local_port_t *port = ((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port; in fp_linit_intr() local
10655 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&acc, in fp_linit_intr()
10684 fc_local_port_t *port; in fp_unsol_cb() local
10688 port = port_handle; in fp_unsol_cb()
10711 mutex_enter(&port->fp_mutex); in fp_unsol_cb()
10712 port->fp_active_ubs++; in fp_unsol_cb()
10713 if ((port->fp_soft_state & in fp_unsol_cb()
10715 FC_PORT_STATE_MASK(port->fp_state) == FC_STATE_OFFLINE) { in fp_unsol_cb()
10724 ASSERT(port->fp_active_ubs > 0); in fp_unsol_cb()
10725 if (--(port->fp_active_ubs) == 0) { in fp_unsol_cb()
10726 port->fp_soft_state &= ~FP_SOFT_IN_UNSOL_CB; in fp_unsol_cb()
10729 mutex_exit(&port->fp_mutex); in fp_unsol_cb()
10731 port->fp_fca_tran->fca_ub_release(port->fp_fca_handle, in fp_unsol_cb()
10739 if (port->fp_active_ubs == 1) { in fp_unsol_cb()
10740 port->fp_soft_state |= FP_SOFT_IN_UNSOL_CB; in fp_unsol_cb()
10744 port->fp_statec_busy) { in fp_unsol_cb()
10745 mutex_exit(&port->fp_mutex); in fp_unsol_cb()
10746 pd = fctl_get_remote_port_by_did(port, s_id); in fp_unsol_cb()
10758 mutex_enter(&port->fp_mutex); in fp_unsol_cb()
10759 ASSERT(port->fp_active_ubs > 0); in fp_unsol_cb()
10760 if (--(port->fp_active_ubs) == 0) { in fp_unsol_cb()
10761 port->fp_soft_state &= ~FP_SOFT_IN_UNSOL_CB; in fp_unsol_cb()
10763 mutex_exit(&port->fp_mutex); in fp_unsol_cb()
10765 port->fp_fca_tran->fca_ub_release(port->fp_fca_handle, in fp_unsol_cb()
10774 if (port->fp_els_resp_pkt_busy == 0) { in fp_unsol_cb()
10781 port->fp_els_resp_pkt_busy = 1; in fp_unsol_cb()
10782 mutex_exit(&port->fp_mutex); in fp_unsol_cb()
10783 fp_i_handle_unsol_els(port, buf); in fp_unsol_cb()
10785 mutex_enter(&port->fp_mutex); in fp_unsol_cb()
10786 ASSERT(port->fp_active_ubs > 0); in fp_unsol_cb()
10787 if (--(port->fp_active_ubs) == 0) { in fp_unsol_cb()
10788 port->fp_soft_state &= in fp_unsol_cb()
10791 mutex_exit(&port->fp_mutex); in fp_unsol_cb()
10792 port->fp_fca_tran->fca_ub_release( in fp_unsol_cb()
10793 port->fp_fca_handle, 1, &buf->ub_token); in fp_unsol_cb()
10797 if (++(port)->fp_rscn_count == in fp_unsol_cb()
10799 ++(port)->fp_rscn_count; in fp_unsol_cb()
10801 rscn_count = port->fp_rscn_count; in fp_unsol_cb()
10810 if (++port->fp_rscn_count == FC_INVALID_RSCN_COUNT) { in fp_unsol_cb()
10811 ++port->fp_rscn_count; in fp_unsol_cb()
10813 rscn_count = port->fp_rscn_count; in fp_unsol_cb()
10816 mutex_exit(&port->fp_mutex); in fp_unsol_cb()
10844 pd = fctl_get_remote_port_by_did(port, s_id); in fp_unsol_cb()
10867 fctl_ulp_unsol_cb(port, buf, buf->ub_frame.type); in fp_unsol_cb()
10872 cmd = fp_alloc_pkt(port, sizeof (la_els_rjt_t), in fp_unsol_cb()
10875 fp_els_rjt_init(port, cmd, buf, in fp_unsol_cb()
10879 if (fp_sendcmd(port, cmd, in fp_unsol_cb()
10880 port->fp_fca_handle) != FC_SUCCESS) { in fp_unsol_cb()
10886 mutex_enter(&port->fp_mutex); in fp_unsol_cb()
10887 ASSERT(port->fp_active_ubs > 0); in fp_unsol_cb()
10888 if (--(port->fp_active_ubs) == 0) { in fp_unsol_cb()
10889 port->fp_soft_state &= ~FP_SOFT_IN_UNSOL_CB; in fp_unsol_cb()
10891 mutex_exit(&port->fp_mutex); in fp_unsol_cb()
10892 port->fp_fca_tran->fca_ub_release(port->fp_fca_handle, in fp_unsol_cb()
10940 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, "fp_unsol_cb() " in fp_unsol_cb()
10943 mutex_enter(&port->fp_mutex); in fp_unsol_cb()
10945 if (--port->fp_rscn_count == FC_INVALID_RSCN_COUNT) { in fp_unsol_cb()
10946 --port->fp_rscn_count; in fp_unsol_cb()
10949 ASSERT(port->fp_active_ubs > 0); in fp_unsol_cb()
10950 if (--(port->fp_active_ubs) == 0) { in fp_unsol_cb()
10951 port->fp_soft_state &= ~FP_SOFT_IN_UNSOL_CB; in fp_unsol_cb()
10954 mutex_exit(&port->fp_mutex); in fp_unsol_cb()
10955 port->fp_fca_tran->fca_ub_release(port->fp_fca_handle, in fp_unsol_cb()
10961 fctl_enque_job(port, job); in fp_unsol_cb()
10969 fp_handle_unsol_buf(fc_local_port_t *port, fc_unsol_buf_t *buf, in fp_handle_unsol_buf() argument
10993 pd = fctl_get_remote_port_by_did(port, s_id); in fp_handle_unsol_buf()
11001 if ((cmd = fp_alloc_pkt(port, in fp_handle_unsol_buf()
11012 fp_els_rjt_init(port, cmd, buf, in fp_handle_unsol_buf()
11016 if (fp_sendcmd(port, cmd, in fp_handle_unsol_buf()
11017 port->fp_fca_handle) != FC_SUCCESS) { in fp_handle_unsol_buf()
11024 fp_handle_unsol_logo(port, buf, pd, job); in fp_handle_unsol_buf()
11026 fp_handle_unsol_adisc(port, buf, pd, job); in fp_handle_unsol_buf()
11028 fp_handle_unsol_prlo(port, buf, pd, job); in fp_handle_unsol_buf()
11033 fp_handle_unsol_plogi(port, buf, job, KM_SLEEP); in fp_handle_unsol_buf()
11037 fp_handle_unsol_flogi(port, buf, job, KM_SLEEP); in fp_handle_unsol_buf()
11041 fp_handle_unsol_rscn(port, buf, job, KM_SLEEP); in fp_handle_unsol_buf()
11046 ub_spec->port = port; in fp_handle_unsol_buf()
11049 (void) taskq_dispatch(port->fp_taskq, in fp_handle_unsol_buf()
11063 cmd = fp_alloc_pkt(port, sizeof (la_ba_rjt_t), in fp_handle_unsol_buf()
11066 fp_ba_rjt_init(port, cmd, buf, job); in fp_handle_unsol_buf()
11067 if (fp_sendcmd(port, cmd, in fp_handle_unsol_buf()
11068 port->fp_fca_handle) != FC_SUCCESS) { in fp_handle_unsol_buf()
11084 cmd = fp_alloc_pkt(port, sizeof (la_els_rjt_t), in fp_handle_unsol_buf()
11087 fp_els_rjt_init(port, cmd, buf, in fp_handle_unsol_buf()
11091 if (fp_sendcmd(port, cmd, in fp_handle_unsol_buf()
11092 port->fp_fca_handle) != in fp_handle_unsol_buf()
11104 ub_spec->port = port; in fp_handle_unsol_buf()
11107 (void) taskq_dispatch(port->fp_taskq, in fp_handle_unsol_buf()
11132 cmd = fp_alloc_pkt(port, sizeof (la_els_rjt_t), in fp_handle_unsol_buf()
11135 fp_els_rjt_init(port, cmd, buf, in fp_handle_unsol_buf()
11139 if (fp_sendcmd(port, cmd, in fp_handle_unsol_buf()
11140 port->fp_fca_handle) != FC_SUCCESS) { in fp_handle_unsol_buf()
11148 mutex_enter(&port->fp_mutex); in fp_handle_unsol_buf()
11149 ASSERT(port->fp_active_ubs > 0); in fp_handle_unsol_buf()
11150 if (--(port->fp_active_ubs) == 0) { in fp_handle_unsol_buf()
11151 port->fp_soft_state &= ~FP_SOFT_IN_UNSOL_CB; in fp_handle_unsol_buf()
11153 mutex_exit(&port->fp_mutex); in fp_handle_unsol_buf()
11154 port->fp_fca_tran->fca_ub_release(port->fp_fca_handle, in fp_handle_unsol_buf()
11163 fp_ba_rjt_init(fc_local_port_t *port, fp_cmd_t *cmd, fc_unsol_buf_t *buf, in fp_ba_rjt_init() argument
11169 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_ba_rjt_init()
11177 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_ba_rjt_init()
11189 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_ba_rjt_init()
11198 fp_els_rjt_init(fc_local_port_t *port, fp_cmd_t *cmd, fc_unsol_buf_t *buf, in fp_els_rjt_init() argument
11204 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_els_rjt_init()
11212 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_els_rjt_init()
11226 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_els_rjt_init()
11248 fp_prlo_acc_init(fc_local_port_t *port, fc_remote_port_t *pd, in fp_prlo_acc_init() argument
11264 cmd = fp_alloc_pkt(port, (int)len, 0, sleep, pd); in fp_prlo_acc_init()
11276 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_prlo_acc_init()
11292 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)req, in fp_prlo_acc_init()
11302 fp_els_acc_init(fc_local_port_t *port, fp_cmd_t *cmd, fc_unsol_buf_t *buf, in fp_els_acc_init() argument
11314 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_els_acc_init()
11324 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_els_acc_init()
11360 fp_handle_unsol_prlo(fc_local_port_t *port, fc_unsol_buf_t *buf, in fp_handle_unsol_prlo() argument
11393 mutex_enter(&port->fp_mutex); in fp_handle_unsol_prlo()
11394 busy = port->fp_statec_busy; in fp_handle_unsol_prlo()
11395 mutex_exit(&port->fp_mutex); in fp_handle_unsol_prlo()
11434 cmd = fp_prlo_acc_init(port, pd, buf, job, KM_SLEEP); in fp_handle_unsol_prlo()
11439 rval = fp_sendcmd(port, cmd, port->fp_fca_handle); in fp_handle_unsol_prlo()
11469 (void) fp_ulp_devc_cb(port, listptr, 1, 1, KM_SLEEP, 0); in fp_handle_unsol_prlo()
11475 cmd = fp_alloc_pkt(port, sizeof (la_els_rjt_t), 0, KM_SLEEP, pd); in fp_handle_unsol_prlo()
11477 fp_els_rjt_init(port, cmd, buf, FC_ACTION_NON_RETRYABLE, in fp_handle_unsol_prlo()
11480 if (fp_sendcmd(port, cmd, port->fp_fca_handle) != FC_SUCCESS) { in fp_handle_unsol_prlo()
11490 fp_handle_unsol_logo(fc_local_port_t *port, fc_unsol_buf_t *buf, in fp_handle_unsol_logo() argument
11500 mutex_enter(&port->fp_mutex); in fp_handle_unsol_logo()
11501 busy = port->fp_statec_busy; in fp_handle_unsol_logo()
11502 mutex_exit(&port->fp_mutex); in fp_handle_unsol_logo()
11523 cmd = fp_alloc_pkt(port, sizeof (la_els_rjt_t), in fp_handle_unsol_logo()
11526 fp_els_rjt_init(port, cmd, buf, in fp_handle_unsol_logo()
11530 if (fp_sendcmd(port, cmd, in fp_handle_unsol_logo()
11531 port->fp_fca_handle) != FC_SUCCESS) { in fp_handle_unsol_logo()
11552 cmd = fp_alloc_pkt(port, FP_PORT_IDENTIFIER_LEN, 0, in fp_handle_unsol_logo()
11558 fp_els_acc_init(port, cmd, buf, job); in fp_handle_unsol_logo()
11560 rval = fp_sendcmd(port, cmd, port->fp_fca_handle); in fp_handle_unsol_logo()
11578 JOB_NS_CMD, 0, NULL, (opaque_t)port, KM_SLEEP); in fp_handle_unsol_logo()
11594 port, ns_cmd, job, 1, KM_SLEEP); in fp_handle_unsol_logo()
11630 (void) fp_ulp_devc_cb(port, listptr, 1, 1, KM_SLEEP, 0); in fp_handle_unsol_logo()
11670 fp_i_handle_unsol_els(fc_local_port_t *port, fc_unsol_buf_t *buf) in fp_i_handle_unsol_els() argument
11680 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_i_handle_unsol_els()
11682 cmd = port->fp_els_resp_pkt; in fp_i_handle_unsol_els()
11684 mutex_enter(&port->fp_mutex); in fp_i_handle_unsol_els()
11685 do_acc = (port->fp_statec_busy == 0) ? 1 : 0; in fp_i_handle_unsol_els()
11686 mutex_exit(&port->fp_mutex); in fp_i_handle_unsol_els()
11697 small = fctl_wwn_cmp(&port->fp_service_params.nport_ww_name, in fp_i_handle_unsol_els()
11699 pd = fctl_get_remote_port_by_pwwn(port, in fp_i_handle_unsol_els()
11751 if (fp_is_class_supported(port->fp_cos, in fp_i_handle_unsol_els()
11757 fp_els_rjt_init(port, cmd, buf, in fp_i_handle_unsol_els()
11766 mutex_enter(&port->fp_mutex); in fp_i_handle_unsol_els()
11767 port->fp_els_resp_pkt_busy = 0; in fp_i_handle_unsol_els()
11768 mutex_exit(&port->fp_mutex); in fp_i_handle_unsol_els()
11786 mutex_enter(&port->fp_mutex); in fp_i_handle_unsol_els()
11787 if ((port->fp_port_id.port_id == 0) && in fp_i_handle_unsol_els()
11788 (port->fp_topology == FC_TOP_PT_PT || in fp_i_handle_unsol_els()
11789 port->fp_topology == FC_TOP_UNKNOWN)) { in fp_i_handle_unsol_els()
11790 port->fp_port_id.port_id = in fp_i_handle_unsol_els()
11793 mutex_exit(&port->fp_mutex); in fp_i_handle_unsol_els()
11800 fp_login_acc_init(port, cmd, buf, NULL, in fp_i_handle_unsol_els()
11810 port->fp_options & FP_SEND_RJT) { in fp_i_handle_unsol_els()
11813 fp_els_rjt_init(port, cmd, buf, in fp_i_handle_unsol_els()
11821 mutex_enter(&port->fp_mutex); in fp_i_handle_unsol_els()
11822 port->fp_els_resp_pkt_busy = 0; in fp_i_handle_unsol_els()
11823 mutex_exit(&port->fp_mutex); in fp_i_handle_unsol_els()
11831 if (fp_is_class_supported(port->fp_cos, in fp_i_handle_unsol_els()
11836 fp_els_rjt_init(port, cmd, buf, in fp_i_handle_unsol_els()
11843 mutex_enter(&port->fp_mutex); in fp_i_handle_unsol_els()
11844 port->fp_els_resp_pkt_busy = 0; in fp_i_handle_unsol_els()
11845 mutex_exit(&port->fp_mutex); in fp_i_handle_unsol_els()
11849 mutex_enter(&port->fp_mutex); in fp_i_handle_unsol_els()
11850 if (FC_PORT_STATE_MASK(port->fp_state) != in fp_i_handle_unsol_els()
11851 FC_STATE_ONLINE || (port->fp_port_id.port_id && in fp_i_handle_unsol_els()
11852 buf->ub_frame.s_id == port->fp_port_id.port_id)) { in fp_i_handle_unsol_els()
11853 mutex_exit(&port->fp_mutex); in fp_i_handle_unsol_els()
11858 fp_els_rjt_init(port, cmd, buf, in fp_i_handle_unsol_els()
11867 mutex_enter(&port->fp_mutex); in fp_i_handle_unsol_els()
11868 port->fp_els_resp_pkt_busy = 0; in fp_i_handle_unsol_els()
11869 mutex_exit(&port->fp_mutex); in fp_i_handle_unsol_els()
11873 mutex_exit(&port->fp_mutex); in fp_i_handle_unsol_els()
11883 fp_login_acc_init(port, cmd, buf, in fp_i_handle_unsol_els()
11896 if ((fp_sendcmd(port, cmd, port->fp_fca_handle)) != FC_SUCCESS) { in fp_i_handle_unsol_els()
11897 mutex_enter(&port->fp_mutex); in fp_i_handle_unsol_els()
11898 port->fp_els_resp_pkt_busy = 0; in fp_i_handle_unsol_els()
11899 mutex_exit(&port->fp_mutex); in fp_i_handle_unsol_els()
11908 fp_handle_unsol_plogi(fc_local_port_t *port, fc_unsol_buf_t *buf, in fp_handle_unsol_plogi() argument
11925 mutex_enter(&port->fp_mutex); in fp_handle_unsol_plogi()
11926 do_acc = (port->fp_statec_busy == 0) ? 1 : 0; in fp_handle_unsol_plogi()
11927 mutex_exit(&port->fp_mutex); in fp_handle_unsol_plogi()
11936 swwn = &port->fp_service_params.nport_ww_name; in fp_handle_unsol_plogi()
11939 pd = fctl_get_remote_port_by_pwwn(port, dwwn); in fp_handle_unsol_plogi()
12016 if (fp_is_class_supported(port->fp_cos, in fp_handle_unsol_plogi()
12019 cmd = fp_alloc_pkt(port, in fp_handle_unsol_plogi()
12026 fp_els_rjt_init(port, cmd, buf, in fp_handle_unsol_plogi()
12034 cmd = fp_alloc_pkt(port, sizeof (la_els_logi_t), in fp_handle_unsol_plogi()
12046 fp_login_acc_init(port, cmd, buf, job, KM_SLEEP); in fp_handle_unsol_plogi()
12062 mutex_enter(&port->fp_mutex); in fp_handle_unsol_plogi()
12063 if ((port->fp_port_id.port_id == 0) && in fp_handle_unsol_plogi()
12064 (port->fp_topology == FC_TOP_PT_PT || in fp_handle_unsol_plogi()
12065 port->fp_topology == FC_TOP_UNKNOWN)) { in fp_handle_unsol_plogi()
12066 port->fp_port_id.port_id = in fp_handle_unsol_plogi()
12069 mutex_exit(&port->fp_mutex); in fp_handle_unsol_plogi()
12073 port->fp_options & FP_SEND_RJT) { in fp_handle_unsol_plogi()
12074 cmd = fp_alloc_pkt(port, sizeof (la_els_logi_t), in fp_handle_unsol_plogi()
12085 fp_els_rjt_init(port, cmd, buf, in fp_handle_unsol_plogi()
12099 if (fp_sendcmd(port, cmd, port->fp_fca_handle) != FC_SUCCESS) { in fp_handle_unsol_plogi()
12112 fp_handle_unsol_flogi(fc_local_port_t *port, fc_unsol_buf_t *buf, in fp_handle_unsol_flogi() argument
12119 if (fp_is_class_supported(port->fp_cos, buf->ub_class) == FC_FAILURE) { in fp_handle_unsol_flogi()
12121 cmd = fp_alloc_pkt(port, sizeof (la_els_rjt_t), in fp_handle_unsol_flogi()
12126 fp_els_rjt_init(port, cmd, buf, in fp_handle_unsol_flogi()
12142 mutex_enter(&port->fp_mutex); in fp_handle_unsol_flogi()
12143 state = FC_PORT_STATE_MASK(port->fp_state); in fp_handle_unsol_flogi()
12144 s_id = port->fp_port_id.port_id; in fp_handle_unsol_flogi()
12145 mutex_exit(&port->fp_mutex); in fp_handle_unsol_flogi()
12150 cmd = fp_alloc_pkt(port, sizeof (la_els_rjt_t), in fp_handle_unsol_flogi()
12155 fp_els_rjt_init(port, cmd, buf, in fp_handle_unsol_flogi()
12165 cmd = fp_alloc_pkt(port, sizeof (la_els_logi_t), in fp_handle_unsol_flogi()
12176 fp_login_acc_init(port, cmd, buf, job, KM_SLEEP); in fp_handle_unsol_flogi()
12182 if (fp_sendcmd(port, cmd, port->fp_fca_handle) != FC_SUCCESS) { in fp_handle_unsol_flogi()
12192 fp_login_acc_init(fc_local_port_t *port, fp_cmd_t *cmd, fc_unsol_buf_t *buf, in fp_login_acc_init() argument
12214 small = fctl_wwn_cmp(&port->fp_service_params.nport_ww_name, in fp_login_acc_init()
12217 mutex_enter(&port->fp_mutex); in fp_login_acc_init()
12218 do_acc = (port->fp_statec_busy == 0) ? 1 : 0; in fp_login_acc_init()
12219 mutex_exit(&port->fp_mutex); in fp_login_acc_init()
12222 port->fp_port_id.port_id, buf->ub_frame.s_id); in fp_login_acc_init()
12223 pd = fctl_create_remote_port(port, &req->node_ww_name, in fp_login_acc_init()
12231 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_login_acc_init()
12258 (void) fp_ulp_devc_cb(port, listptr, in fp_login_acc_init()
12276 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_login_acc_init()
12283 payload = port->fp_service_params; in fp_login_acc_init()
12286 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_login_acc_init()
12294 port->fp_service_params.nport_ww_name.w.naa_id, in fp_login_acc_init()
12295 port->fp_service_params.nport_ww_name.w.nport_id, in fp_login_acc_init()
12296 port->fp_service_params.nport_ww_name.w.wwn_hi, in fp_login_acc_init()
12297 port->fp_service_params.nport_ww_name.w.wwn_lo, in fp_login_acc_init()
12302 port->fp_statec_busy); in fp_login_acc_init()
12312 fp_handle_unsol_rscn(fc_local_port_t *port, fc_unsol_buf_t *buf, in fp_handle_unsol_rscn() argument
12327 mutex_enter(&port->fp_mutex); in fp_handle_unsol_rscn()
12328 if (!FC_IS_TOP_SWITCH(port->fp_topology)) { in fp_handle_unsol_rscn()
12329 if (--port->fp_rscn_count == FC_INVALID_RSCN_COUNT) { in fp_handle_unsol_rscn()
12330 --port->fp_rscn_count; in fp_handle_unsol_rscn()
12332 mutex_exit(&port->fp_mutex); in fp_handle_unsol_rscn()
12335 mutex_exit(&port->fp_mutex); in fp_handle_unsol_rscn()
12337 cmd = fp_alloc_pkt(port, FP_PORT_IDENTIFIER_LEN, 0, sleep, NULL); in fp_handle_unsol_rscn()
12339 fp_els_acc_init(port, cmd, buf, job); in fp_handle_unsol_rscn()
12340 if (fp_sendcmd(port, cmd, port->fp_fca_handle) != FC_SUCCESS) { in fp_handle_unsol_rscn()
12352 mutex_enter(&port->fp_mutex); in fp_handle_unsol_rscn()
12353 if (--port->fp_rscn_count == FC_INVALID_RSCN_COUNT) { in fp_handle_unsol_rscn()
12354 --port->fp_rscn_count; in fp_handle_unsol_rscn()
12356 mutex_exit(&port->fp_mutex); in fp_handle_unsol_rscn()
12375 mutex_enter(&port->fp_mutex); in fp_handle_unsol_rscn()
12376 if (--port->fp_rscn_count == FC_INVALID_RSCN_COUNT) { in fp_handle_unsol_rscn()
12377 --port->fp_rscn_count; in fp_handle_unsol_rscn()
12379 mutex_exit(&port->fp_mutex); in fp_handle_unsol_rscn()
12397 port->fp_instance) == DDI_SUCCESS && in fp_handle_unsol_rscn()
12399 port->fp_service_params.nport_ww_name.raw_wwn, in fp_handle_unsol_rscn()
12425 fp_validate_rscn_page(port, page, job, ns_cmd, in fp_handle_unsol_rscn()
12434 mutex_enter(&port->fp_mutex); in fp_handle_unsol_rscn()
12435 if (--port->fp_rscn_count == in fp_handle_unsol_rscn()
12437 --port->fp_rscn_count; in fp_handle_unsol_rscn()
12439 mutex_exit(&port->fp_mutex); in fp_handle_unsol_rscn()
12451 fp_validate_area_domain(port, page->aff_d_id, mask, in fp_handle_unsol_rscn()
12460 fp_validate_area_domain(port, 0, 0, job, sleep); in fp_handle_unsol_rscn()
12468 (void) ddi_log_sysevent(port->fp_port_dip, DDI_VENDOR_SUNW, in fp_handle_unsol_rscn()
12496 (void) fp_ulp_devc_cb(port, listptr, listindex, count, in fp_handle_unsol_rscn()
12512 fc_local_port_t *port; in fp_fillout_old_map_held() local
12514 port = pd->pd_port; in fp_fillout_old_map_held()
12517 ASSERT(port != NULL); in fp_fillout_old_map_held()
12518 ASSERT(MUTEX_HELD(&port->fp_mutex)); in fp_fillout_old_map_held()
12525 is_switch = FC_IS_TOP_SWITCH(port->fp_topology); in fp_fillout_old_map_held()
12527 fctl_delist_did_table(port, pd); in fp_fillout_old_map_held()
12528 fctl_delist_pwwn_table(port, pd); in fp_fillout_old_map_held()
12532 port, pd->pd_port_id.port_id, pd); in fp_fillout_old_map_held()
12534 if ((!flag) && port && initiator && is_switch) { in fp_fillout_old_map_held()
12535 (void) fctl_add_orphan_held(port, pd); in fp_fillout_old_map_held()
12549 fc_local_port_t *port; in fp_fillout_old_map() local
12552 port = pd->pd_port; in fp_fillout_old_map()
12555 mutex_enter(&port->fp_mutex); in fp_fillout_old_map()
12561 is_switch = FC_IS_TOP_SWITCH(port->fp_topology); in fp_fillout_old_map()
12563 fctl_delist_did_table(port, pd); in fp_fillout_old_map()
12564 fctl_delist_pwwn_table(port, pd); in fp_fillout_old_map()
12568 port, pd->pd_port_id.port_id, pd); in fp_fillout_old_map()
12571 mutex_exit(&port->fp_mutex); in fp_fillout_old_map()
12573 ASSERT(port != NULL); in fp_fillout_old_map()
12574 if ((!flag) && port && initiator && is_switch) { in fp_fillout_old_map()
12575 (void) fctl_add_orphan(port, pd, KM_NOSLEEP); in fp_fillout_old_map()
12611 fp_fillout_new_nsmap(fc_local_port_t *port, ddi_acc_handle_t *handle, in fp_fillout_new_nsmap() argument
12614 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_fillout_new_nsmap()
12617 FC_GET_RSP(port, *handle, (uint8_t *)&port_map->map_pwwn, in fp_fillout_new_nsmap()
12620 FC_GET_RSP(port, *handle, (uint8_t *)&port_map->map_nwwn, in fp_fillout_new_nsmap()
12623 FC_GET_RSP(port, *handle, (uint8_t *)port_map->map_fc4_types, in fp_fillout_new_nsmap()
12643 (void) fctl_remove_if_orphan(port, &port_map->map_pwwn); in fp_fillout_new_nsmap()
12645 ASSERT(port != NULL); in fp_fillout_new_nsmap()
12653 fp_remote_lip(fc_local_port_t *port, la_wwn_t *pwwn, int sleep, in fp_remote_lip() argument
12673 pd = fctl_get_remote_port_by_pwwn(port, pwwn); in fp_remote_lip()
12688 ret = fp_ns_query(port, ns_cmd, job, 1, sleep); in fp_remote_lip()
12718 ret = fp_ns_query(port, ns_cmd, job, 1, sleep); in fp_remote_lip()
12754 mutex_enter(&port->fp_mutex); in fp_remote_lip()
12755 s_id = port->fp_port_id.port_id; in fp_remote_lip()
12756 class = port->fp_ns_login_class; in fp_remote_lip()
12757 mutex_exit(&port->fp_mutex); in fp_remote_lip()
12759 cmd = fp_alloc_pkt(port, sizeof (fc_linit_req_t), in fp_remote_lip()
12772 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_remote_lip()
12809 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_remote_lip()
12814 ret = fp_sendcmd(port, cmd, port->fp_fca_handle); in fp_remote_lip()
12836 fc_local_port_t *port; in fp_stuff_device_with_gan() local
12841 port = pd->pd_port; in fp_stuff_device_with_gan()
12850 FC_GET_RSP(port, *handle, (uint8_t *)&type, in fp_stuff_device_with_gan()
12858 FC_GET_RSP(port, *handle, (uint8_t *)pd->pd_spn, in fp_stuff_device_with_gan()
12863 FC_GET_RSP(port, *handle, (uint8_t *)pd->pd_ip_addr, in fp_stuff_device_with_gan()
12866 FC_GET_RSP(port, *handle, (uint8_t *)&pd->pd_cos, in fp_stuff_device_with_gan()
12869 FC_GET_RSP(port, *handle, (uint8_t *)pd->pd_fc4types, in fp_stuff_device_with_gan()
12878 FC_GET_RSP(port, *handle, (uint8_t *)node->fd_ipa, in fp_stuff_device_with_gan()
12884 FC_GET_RSP(port, *handle, (uint8_t *)node->fd_snn, in fp_stuff_device_with_gan()
12898 fp_ns_query(fc_local_port_t *port, fctl_ns_req_t *ns_cmd, job_request_t *job, in fp_ns_query() argument
12904 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_ns_query()
12908 port->fp_port_id.port_id, ns_cmd->ns_gan_sid); in fp_ns_query()
12915 cmd = fp_alloc_pkt(port, sizeof (fc_ct_header_t) + in fp_ns_query()
12922 fp_ct_init(port, cmd, ns_cmd, ns_cmd->ns_cmd_code, ns_cmd->ns_cmd_buf, in fp_ns_query()
12929 rval = fp_sendcmd(port, cmd, port->fp_fca_handle); in fp_ns_query()
12955 fp_ct_init(fc_local_port_t *port, fp_cmd_t *cmd, fctl_ns_req_t *ns_cmd, in fp_ct_init() argument
12964 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_ct_init()
12966 mutex_enter(&port->fp_mutex); in fp_ct_init()
12967 s_id = port->fp_port_id.port_id; in fp_ct_init()
12968 class = port->fp_ns_login_class; in fp_ct_init()
12969 mutex_exit(&port->fp_mutex); in fp_ct_init()
12988 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&ct, in fp_ct_init()
13010 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)cmd_buf, in fp_ct_init()
13015 cmd->cmd_transport = port->fp_fca_tran->fca_transport; in fp_ct_init()
13032 fc_local_port_t *port; in fp_ns_intr() local
13038 port = cmd->cmd_port; in fp_ns_intr()
13040 mutex_enter(&port->fp_mutex); in fp_ns_intr()
13041 port->fp_out_fpcmds--; in fp_ns_intr()
13042 mutex_exit(&port->fp_mutex); in fp_ns_intr()
13044 FC_GET_RSP(port, pkt->pkt_cmd_acc, (uint8_t *)&cmd_hdr, in fp_ns_intr()
13049 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp_hdr, in fp_ns_intr()
13097 port->fp_port_id.port_id, pkt->pkt_state, in fp_ns_intr()
13108 fc_local_port_t *port; in fp_ns_intr() local
13113 port = cmd->cmd_port; in fp_ns_intr()
13146 fc_local_port_t *port; in fp_gan_handler() local
13154 port = cmd->cmd_port; in fp_gan_handler()
13158 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&d_id, in fp_gan_handler()
13169 pd = fctl_get_remote_port_by_did(port, d_id.port_id); in fp_gan_handler()
13182 mutex_enter(&port->fp_mutex); in fp_gan_handler()
13183 my_did = (d_id.port_id == port->fp_port_id.port_id) ? 1 : 0; in fp_gan_handler()
13184 mutex_exit(&port->fp_mutex); in fp_gan_handler()
13186 FP_TRACE(FP_NHEAD1(1, 0), "GAN response; port=%p, fp %x pd %x", port, in fp_gan_handler()
13187 port->fp_port_id.port_id, d_id.port_id); in fp_gan_handler()
13196 port, d_id.port_id, gan_resp->gan_type_id, in fp_gan_handler()
13216 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&nwwn, in fp_gan_handler()
13220 FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&pwwn, in fp_gan_handler()
13226 "pd %x", port->fp_port_id.port_id, d_id.port_id); in fp_gan_handler()
13227 pd = fctl_create_remote_port(port, &nwwn, &pwwn, in fp_gan_handler()
13251 FC_GET_RSP(port, pkt->pkt_resp_acc, in fp_gan_handler()
13283 fp_fillout_new_nsmap(port, &pkt->pkt_resp_acc, in fp_gan_handler()
13297 FC_GET_RSP(port, pkt->pkt_resp_acc, in fp_gan_handler()
13312 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&gan_req, in fp_gan_handler()
13316 if (cmd->cmd_transport(port->fp_fca_handle, pkt) != FC_SUCCESS) { in fp_gan_handler()
13320 mutex_enter(&port->fp_mutex); in fp_gan_handler()
13321 port->fp_out_fpcmds++; in fp_gan_handler()
13322 mutex_exit(&port->fp_mutex); in fp_gan_handler()
13334 fc_local_port_t *port; in fp_ns_query_handler() local
13339 port = cmd->cmd_port; in fp_ns_query_handler()
13355 FC_GET_RSP(port, pkt->pkt_resp_acc, in fp_ns_query_handler()
13382 fp_handle_unsol_adisc(fc_local_port_t *port, fc_unsol_buf_t *buf, in fp_handle_unsol_adisc() argument
13389 port, pd->pd_port_id.port_id, pd->pd_state, pd); in fp_handle_unsol_adisc()
13394 cmd = fp_alloc_pkt(port, sizeof (la_els_rjt_t), in fp_handle_unsol_adisc()
13397 fp_els_rjt_init(port, cmd, buf, in fp_handle_unsol_adisc()
13401 if (fp_sendcmd(port, cmd, in fp_handle_unsol_adisc()
13402 port->fp_fca_handle) != FC_SUCCESS) { in fp_handle_unsol_adisc()
13417 cmd = fp_alloc_pkt(port, sizeof (la_els_adisc_t), in fp_handle_unsol_adisc()
13422 fp_adisc_acc_init(port, cmd, buf, job); in fp_handle_unsol_adisc()
13423 rval = fp_sendcmd(port, cmd, port->fp_fca_handle); in fp_handle_unsol_adisc()
13435 fp_adisc_acc_init(fc_local_port_t *port, fp_cmd_t *cmd, fc_unsol_buf_t *buf, in fp_adisc_acc_init() argument
13447 cmd->cmd_transport = port->fp_fca_tran->fca_els_send; in fp_adisc_acc_init()
13457 mutex_enter(&port->fp_mutex); in fp_adisc_acc_init()
13458 payload.nport_id = port->fp_port_id; in fp_adisc_acc_init()
13459 payload.hard_addr = port->fp_hard_addr; in fp_adisc_acc_init()
13460 mutex_exit(&port->fp_mutex); in fp_adisc_acc_init()
13462 payload.port_wwn = port->fp_service_params.nport_ww_name; in fp_adisc_acc_init()
13463 payload.node_wwn = port->fp_service_params.node_ww_name; in fp_adisc_acc_init()
13465 FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload, in fp_adisc_acc_init()
13474 fp_load_ulp_modules(dev_info_t *dip, fc_local_port_t *port) in fp_load_ulp_modules() argument
13484 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_load_ulp_modules()
13494 port->fp_ulp_nload = fctl_atoi(data_buf, 10); in fp_load_ulp_modules()
13497 for (count = 0; count < port->fp_ulp_nload; count++) { in fp_load_ulp_modules()
13506 fp_printf(port, CE_NOTE, FP_LOG_ONLY, in fp_load_ulp_modules()
13511 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_load_ulp_modules()
13532 fp_logout(fc_local_port_t *port, fc_remote_port_t *pd, job_request_t *job) in fp_logout() argument
13537 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_logout()
13540 cmd = fp_alloc_pkt(port, sizeof (la_els_logo_t), in fp_logout()
13543 mutex_enter(&port->fp_mutex); in fp_logout()
13558 mutex_exit(&port->fp_mutex); in fp_logout()
13560 rval = fp_sendcmd(port, cmd, port->fp_fca_handle); in fp_logout()
13573 fp_attach_ulps(fc_local_port_t *port, fc_attach_cmd_t cmd) in fp_attach_ulps() argument
13579 att->att_port = port; in fp_attach_ulps()
13587 if (fctl_busy_port(port) == 0) { in fp_attach_ulps()
13593 (void) taskq_dispatch(port->fp_taskq, fp_ulp_port_attach, in fp_attach_ulps()
13604 fp_ulp_notify(fc_local_port_t *port, uint32_t statec, int sleep) in fp_ulp_notify() argument
13615 mutex_enter(&port->fp_mutex); in fp_ulp_notify()
13616 clist->clist_flags = port->fp_topology; in fp_ulp_notify()
13617 mutex_exit(&port->fp_mutex); in fp_ulp_notify()
13619 clist->clist_port = (opaque_t)port; in fp_ulp_notify()
13624 (void) taskq_dispatch(port->fp_taskq, fctl_ulp_statec_cb, in fp_ulp_notify()
13635 fp_ns_getmap(fc_local_port_t *port, job_request_t *job, fc_portmap_t **map, in fp_ns_getmap() argument
13659 ret = fp_ns_query(port, ns_cmd, job, 1, KM_SLEEP); in fp_ns_getmap()
13676 fp_create_remote_port_by_ns(fc_local_port_t *port, uint32_t d_id, int sleep) in fp_create_remote_port_by_ns() argument
13683 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_create_remote_port_by_ns()
13686 port, d_id); in fp_create_remote_port_by_ns()
13689 mutex_enter(&port->fp_mutex); in fp_create_remote_port_by_ns()
13690 ASSERT(FC_IS_TOP_SWITCH(port->fp_topology)); in fp_create_remote_port_by_ns()
13691 mutex_exit(&port->fp_mutex); in fp_create_remote_port_by_ns()
13694 job = fctl_alloc_job(JOB_NS_CMD, 0, NULL, (opaque_t)port, sleep); in fp_create_remote_port_by_ns()
13714 rval = fp_ns_query(port, ns_cmd, job, 1, KM_SLEEP); in fp_create_remote_port_by_ns()
13723 pd = fctl_get_remote_port_by_did(port, d_id); in fp_create_remote_port_by_ns()
13726 port, d_id, pd); in fp_create_remote_port_by_ns()
13777 fp_bind_callbacks(fc_local_port_t *port) in fp_bind_callbacks() argument
13786 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_bind_callbacks()
13788 if (ddi_prop_lookup_string(DDI_DEV_T_ANY, port->fp_port_dip, in fp_bind_callbacks()
13798 if (ddi_prop_lookup_string(DDI_DEV_T_ANY, port->fp_port_dip, in fp_bind_callbacks()
13808 if (port->fp_npiv_type == FC_NPIV_PORT) { in fp_bind_callbacks()
13820 bind_info.port_num = port->fp_port_num; in fp_bind_callbacks()
13821 bind_info.port_handle = (opaque_t)port; in fp_bind_callbacks()
13830 mutex_enter(&port->fp_mutex); in fp_bind_callbacks()
13832 port->fp_fca_handle = port->fp_fca_tran->fca_bind_port( in fp_bind_callbacks()
13833 port->fp_fca_dip, port_info, &bind_info); in fp_bind_callbacks()
13835 if (port->fp_fca_handle == NULL) { in fp_bind_callbacks()
13844 port->fp_soft_state |= FP_SOFT_FCA_IS_NODMA; in fp_bind_callbacks()
13848 port->fp_bind_state = port->fp_state = port_info->pi_port_state; in fp_bind_callbacks()
13849 port->fp_service_params = port_info->pi_login_params; in fp_bind_callbacks()
13850 port->fp_hard_addr = port_info->pi_hard_addr; in fp_bind_callbacks()
13853 port->fp_hba_port_attrs = port_info->pi_attrs; in fp_bind_callbacks()
13856 port->fp_rnid_init = 1; in fp_bind_callbacks()
13858 &port->fp_rnid_params, in fp_bind_callbacks()
13859 sizeof (port->fp_rnid_params)); in fp_bind_callbacks()
13861 port->fp_rnid_init = 0; in fp_bind_callbacks()
13867 &port->fp_sym_node_name, in fp_bind_callbacks()
13869 port->fp_sym_node_namelen = node_namelen; in fp_bind_callbacks()
13874 &port->fp_sym_port_name, in fp_bind_callbacks()
13876 port->fp_sym_port_namelen = port_namelen; in fp_bind_callbacks()
13880 port->fp_service_params.ls_code.mbz = 0; in fp_bind_callbacks()
13881 port->fp_service_params.ls_code.ls_code = 0; in fp_bind_callbacks()
13882 bzero(&port->fp_service_params.reserved, in fp_bind_callbacks()
13883 sizeof (port->fp_service_params.reserved)); in fp_bind_callbacks()
13886 port->fp_cos |= (class & 0x8000) ? FC_NS_CLASS1 : 0; in fp_bind_callbacks()
13889 port->fp_cos |= (class & 0x8000) ? FC_NS_CLASS2 : 0; in fp_bind_callbacks()
13892 port->fp_cos |= (class & 0x8000) ? FC_NS_CLASS3 : 0; in fp_bind_callbacks()
13901 mutex_exit(&port->fp_mutex); in fp_bind_callbacks()
13912 fp_retrieve_caps(fc_local_port_t *port) in fp_retrieve_caps() argument
13920 ASSERT(!MUTEX_HELD(&port->fp_mutex)); in fp_retrieve_caps()
13922 rval = port->fp_fca_tran->fca_get_cap(port->fp_fca_handle, in fp_retrieve_caps()
13939 (ub_count / port->fp_fca_tran->fca_numports) >> 2; in fp_retrieve_caps()
13949 mutex_enter(&port->fp_mutex); in fp_retrieve_caps()
13950 port->fp_ub_count = ub_count; in fp_retrieve_caps()
13951 mutex_exit(&port->fp_mutex); in fp_retrieve_caps()
13953 rval = port->fp_fca_tran->fca_get_cap(port->fp_fca_handle, in fp_retrieve_caps()
13975 mutex_enter(&port->fp_mutex); in fp_retrieve_caps()
13976 port->fp_reset_action = action; in fp_retrieve_caps()
13977 mutex_exit(&port->fp_mutex); in fp_retrieve_caps()
13979 rval = port->fp_fca_tran->fca_get_cap(port->fp_fca_handle, in fp_retrieve_caps()
14008 mutex_enter(&port->fp_mutex); in fp_retrieve_caps()
14009 port->fp_dma_behavior = dma_behavior; in fp_retrieve_caps()
14010 mutex_exit(&port->fp_mutex); in fp_retrieve_caps()
14012 rval = port->fp_fca_tran->fca_get_cap(port->fp_fca_handle, in fp_retrieve_caps()
14020 mutex_enter(&port->fp_mutex); in fp_retrieve_caps()
14021 port->fp_fcp_dma = fcp_dma; in fp_retrieve_caps()
14022 mutex_exit(&port->fp_mutex); in fp_retrieve_caps()
14030 fp_validate_area_domain(fc_local_port_t *port, uint32_t id, uint32_t mask, in fp_validate_area_domain() argument
14058 mutex_enter(&port->fp_mutex); in fp_validate_area_domain()
14059 if (--port->fp_rscn_count == FC_INVALID_RSCN_COUNT) { in fp_validate_area_domain()
14060 --port->fp_rscn_count; in fp_validate_area_domain()
14062 mutex_exit(&port->fp_mutex); in fp_validate_area_domain()
14074 (void) fp_ns_get_devcount(port, job, 1, sleep); in fp_validate_area_domain()
14078 port->fp_total_devices); in fp_validate_area_domain()
14080 mutex_enter(&port->fp_mutex); in fp_validate_area_domain()
14083 head = &port->fp_pwwn_table[index]; in fp_validate_area_domain()
14112 ASSERT(port->fp_orphan_count >= 0); in fp_validate_area_domain()
14114 count += port->fp_orphan_count; in fp_validate_area_domain()
14126 count += port->fp_total_devices; in fp_validate_area_domain()
14129 port->fp_orphan_count, count); in fp_validate_area_domain()
14132 mutex_exit(&port->fp_mutex); in fp_validate_area_domain()
14140 fp_printf(port, CE_NOTE, FP_LOG_ONLY, 0, NULL, in fp_validate_area_domain()
14146 mutex_enter(&port->fp_mutex); in fp_validate_area_domain()
14147 if (--port->fp_rscn_count == FC_INVALID_RSCN_COUNT) { in fp_validate_area_domain()
14148 --port->fp_rscn_count; in fp_validate_area_domain()
14150 mutex_exit(&port->fp_mutex); in fp_validate_area_domain()
14160 mutex_enter(&port->fp_mutex); in fp_validate_area_domain()
14162 head = &port->fp_pwwn_table[index]; in fp_validate_area_domain()
14183 mutex_exit(&port->fp_mutex); in fp_validate_area_domain()
14185 rval = fp_ns_query(port, ns_cmd, job, 1, in fp_validate_area_domain()
14210 mutex_enter(&port->fp_mutex); in fp_validate_area_domain()
14217 mutex_exit(&port->fp_mutex); in fp_validate_area_domain()
14255 rval = fp_port_login(port, d_id, job, in fp_validate_area_domain()
14275 rval = fp_ns_validate_device(port, pd, job, in fp_validate_area_domain()
14305 mutex_enter(&port->fp_mutex); in fp_validate_area_domain()
14306 for (prev = NULL, orp = port->fp_orphan_list; port->fp_orphan_count && in fp_validate_area_domain()
14309 mutex_exit(&port->fp_mutex); in fp_validate_area_domain()
14321 rval = fp_ns_query(port, ns_cmd, job, 1, KM_SLEEP); in fp_validate_area_domain()
14324 pd = fp_create_remote_port_by_ns(port, d_id, KM_SLEEP); in fp_validate_area_domain()
14336 mutex_enter(&port->fp_mutex); in fp_validate_area_domain()
14340 ASSERT(orp == port->fp_orphan_list); in fp_validate_area_domain()
14341 port->fp_orphan_list = orp->orp_next; in fp_validate_area_domain()
14343 port->fp_orphan_count--; in fp_validate_area_domain()
14344 mutex_exit(&port->fp_mutex); in fp_validate_area_domain()
14354 mutex_enter(&port->fp_mutex); in fp_validate_area_domain()
14356 mutex_exit(&port->fp_mutex); in fp_validate_area_domain()
14409 mutex_enter(&port->fp_mutex); in fp_validate_area_domain()
14413 fctl_delist_did_table(port, pd); in fp_validate_area_domain()
14414 fctl_delist_pwwn_table(port, pd); in fp_validate_area_domain()
14417 mutex_exit(&port->fp_mutex); in fp_validate_area_domain()
14420 (void) fctl_add_orphan(port, pd, sleep); in fp_validate_area_domain()
14439 (void) fp_ulp_devc_cb(port, list, listindex, count, in fp_validate_area_domain()
14444 mutex_enter(&port->fp_mutex); in fp_validate_area_domain()
14445 if (--port->fp_rscn_count == FC_INVALID_RSCN_COUNT) { in fp_validate_area_domain()
14446 --port->fp_rscn_count; in fp_validate_area_domain()
14448 mutex_exit(&port->fp_mutex); in fp_validate_area_domain()
14457 fp_validate_rscn_page(fc_local_port_t *port, fc_affected_id_t *page, in fp_validate_rscn_page() argument
14467 did_pd = fctl_get_remote_port_by_did(port, page->aff_d_id); in fp_validate_rscn_page()
14470 "port=%p, d_id=%x, pd=%p, rscn_count:0x%x", port, page->aff_d_id, in fp_validate_rscn_page()
14479 port, page->aff_d_id, did_pd); in fp_validate_rscn_page()
14494 rval = fp_ns_query(port, ns_cmd, job, 1, sleep); in fp_validate_rscn_page()
14542 pwwn_pd = fctl_get_remote_port_by_pwwn(port, pwwn); in fp_validate_rscn_page()
14566 rval = fp_port_login(port, page->aff_d_id, job, in fp_validate_rscn_page()
14628 mutex_enter(&port->fp_mutex); in fp_validate_rscn_page()
14629 if (port->fp_orphan_count) { in fp_validate_rscn_page()
14631 for (orp = port->fp_orphan_list; orp; orp = norp) { in fp_validate_rscn_page()
14643 port->fp_orphan_list); in fp_validate_rscn_page()
14644 port->fp_orphan_list = in fp_validate_rscn_page()
14647 port->fp_orphan_count--; in fp_validate_rscn_page()
14652 mutex_exit(&port->fp_mutex); in fp_validate_rscn_page()
14653 pwwn_pd = fp_create_remote_port_by_ns(port, in fp_validate_rscn_page()
14694 mutex_enter(&port->fp_mutex); in fp_validate_rscn_page()
14699 fctl_delist_did_table(port, pwwn_pd); in fp_validate_rscn_page()
14706 fctl_enlist_did_table(port, pwwn_pd); in fp_validate_rscn_page()
14717 mutex_exit(&port->fp_mutex); in fp_validate_rscn_page()
14723 rval = fp_port_login(port, page->aff_d_id, job, in fp_validate_rscn_page()
14736 mutex_exit(&port->fp_mutex); in fp_validate_rscn_page()
14774 if (fp_ns_getmap(port, job, &ptr, &len, in fp_validate_rscn_page()
14796 mutex_enter(&port->fp_mutex); in fp_validate_rscn_page()
14801 fctl_delist_did_table(port, pwwn_pd); in fp_validate_rscn_page()
14802 fctl_delist_pwwn_table(port, pwwn_pd); in fp_validate_rscn_page()
14818 mutex_exit(&port->fp_mutex); in fp_validate_rscn_page()
14825 mutex_enter(&port->fp_mutex); in fp_validate_rscn_page()
14828 fctl_delist_pwwn_table(port, did_pd); in fp_validate_rscn_page()
14834 fctl_enlist_pwwn_table(port, did_pd); in fp_validate_rscn_page()
14852 mutex_exit(&port->fp_mutex); in fp_validate_rscn_page()
14854 rval = fp_port_login(port, page->aff_d_id, job, in fp_validate_rscn_page()
14867 mutex_exit(&port->fp_mutex); in fp_validate_rscn_page()
14880 fp_ns_validate_device(fc_local_port_t *port, fc_remote_port_t *pd, in fp_ns_validate_device() argument
14905 return (fp_ns_query(port, ns_cmd, job, polled, sleep)); in fp_ns_validate_device()
14958 fctl_ulp_unsol_cb(ub_spec->port, ub_spec->buf, in fp_ulp_unsol_cb()
14970 fp_printf(fc_local_port_t *port, int level, fp_mesg_dest_t dest, int fc_errno, in fp_printf() argument
14978 if ((port->fp_verbose & FP_WARNING_MESSAGES) == 0) { in fp_printf()
14984 if ((port->fp_verbose & FP_FATAL_MESSAGES) == 0) { in fp_printf()
14995 (void) sprintf(buf, "fp(%d): ", port->fp_instance); in fp_printf()
15041 fp_fcio_login(fc_local_port_t *port, fcio_t *fcio, job_request_t *job) in fp_fcio_login() argument
15053 mutex_enter(&port->fp_mutex); in fp_fcio_login()
15054 if (FC_IS_TOP_SWITCH(port->fp_topology)) { in fp_fcio_login()
15055 mutex_exit(&port->fp_mutex); in fp_fcio_login()
15069 ret = fp_ns_query(port, ns_cmd, job, 1, KM_SLEEP); in fp_fcio_login()
15083 mutex_exit(&port->fp_mutex); in fp_fcio_login()
15085 held_pd = fctl_hold_remote_port_by_pwwn(port, &pwwn); in fp_fcio_login()
15099 pd = fctl_get_remote_port_by_did(port, d_id); in fp_fcio_login()
15116 mutex_enter(&port->fp_mutex); in fp_fcio_login()
15117 if (FC_IS_TOP_SWITCH(port->fp_topology)) { in fp_fcio_login()
15118 mutex_exit(&port->fp_mutex); in fp_fcio_login()
15119 pd = fp_create_remote_port_by_ns(port, d_id, KM_SLEEP); in fp_fcio_login()
15128 mutex_exit(&port->fp_mutex); in fp_fcio_login()
15135 ret = fp_port_login(port, d_id, job, FP_CMD_PLOGI_RETAIN, in fp_fcio_login()
15157 pd = fctl_hold_remote_port_by_pwwn(port, &pwwn); in fp_fcio_login()
15168 (void) fp_ulp_devc_cb(port, changelist, 1, 1, KM_SLEEP, 1); in fp_fcio_login()
15181 fp_fcio_logout(fc_local_port_t *port, fcio_t *fcio, job_request_t *job) in fp_fcio_logout() argument
15190 pd = fctl_hold_remote_port_by_pwwn(port, &pwwn); in fp_fcio_logout()
15229 (void) fp_ulp_devc_cb(port, changelist, 1, 1, KM_SLEEP, 1); in fp_fcio_logout()
15239 cmd = fp_alloc_pkt(port, sizeof (la_els_logo_t), in fp_fcio_logout()
15252 mutex_enter(&port->fp_mutex); in fp_fcio_logout()
15264 mutex_exit(&port->fp_mutex); in fp_fcio_logout()
15266 if (fp_sendcmd(port, cmd, port->fp_fca_handle) != FC_SUCCESS) { in fp_fcio_logout()
15298 mutex_enter(&port->fp_mutex); in fp_fcio_logout()
15301 fctl_delist_did_table(port, pd); in fp_fcio_logout()
15302 fctl_delist_pwwn_table(port, pd); in fp_fcio_logout()
15306 mutex_exit(&port->fp_mutex); in fp_fcio_logout()
15308 (void) fp_ulp_devc_cb(port, changelist, 1, 1, KM_SLEEP, 1); in fp_fcio_logout()
15321 fp_log_port_event(fc_local_port_t *port, char *subclass) in fp_log_port_event() argument
15331 port->fp_instance) != DDI_SUCCESS) { in fp_log_port_event()
15336 port->fp_service_params.nport_ww_name.raw_wwn, in fp_log_port_event()
15341 (void) ddi_log_sysevent(port->fp_port_dip, DDI_VENDOR_SUNW, EC_SUNFC, in fp_log_port_event()
15355 fp_log_target_event(fc_local_port_t *port, char *subclass, la_wwn_t tgt_pwwn, in fp_log_target_event() argument
15366 port->fp_instance) != DDI_SUCCESS) { in fp_log_target_event()
15371 port->fp_service_params.nport_ww_name.raw_wwn, in fp_log_target_event()
15386 (void) ddi_log_sysevent(port->fp_port_dip, DDI_VENDOR_SUNW, EC_SUNFC, in fp_log_target_event()