Lines Matching refs:tgt

96 srpt_stp_start_srp(srpt_target_port_t *tgt)
103 if (tgt == NULL) {
108 if (tgt->tp_ioc == NULL) {
113 ioc = tgt->tp_ioc;
116 " svc_id (%016llx)", (u_longlong_t)tgt->tp_ibt_svc_id);
118 &tgt->tp_ibt_svc_desc, tgt->tp_ibt_svc_id, 1,
119 &tgt->tp_ibt_svc_hdl, NULL);
121 tgt->tp_ibt_svc_hdl = NULL;
132 status = srpt_ioc_svc_bind(tgt, port+1);
142 if (tgt->tp_num_active_ports == 0) {
144 (u_longlong_t)tgt->tp_ibt_svc_id);
149 tgt->tp_srp_enabled = 1;
167 (u_longlong_t)tgt->tp_ibt_svc_id);
178 (u_longlong_t)tgt->tp_ibt_svc_id, dma_status);
187 tgt->tp_srp_enabled = 0;
188 srpt_ioc_svc_unbind_all(tgt);
189 tgt->tp_num_active_ports = 0;
190 if (tgt->tp_ibt_svc_hdl != NULL) {
192 tgt->tp_ibt_svc_hdl);
193 tgt->tp_ibt_svc_hdl = NULL;
204 srpt_stp_stop_srp(srpt_target_port_t *tgt)
211 if (tgt == NULL) {
217 if (tgt->tp_ioc == NULL) {
221 ioc = tgt->tp_ioc;
227 tgt->tp_srp_enabled = 0;
257 "(%016llx)", (u_longlong_t)tgt->tp_ibt_svc_id);
258 if (tgt->tp_ibt_svc_hdl != NULL) {
259 srpt_ioc_svc_unbind_all(tgt);
262 if (tgt->tp_ibt_svc_hdl != NULL) {
264 tgt->tp_ibt_svc_hdl);
269 tgt->tp_ibt_svc_hdl = NULL;
277 mutex_enter(&tgt->tp_ch_list_lock);
278 ch = list_head(&tgt->tp_ch_list);
283 ch = list_next(&tgt->tp_ch_list, ch);
285 mutex_exit(&tgt->tp_ch_list_lock);
290 mutex_enter(&tgt->tp_sess_list_lock);
291 while (!list_is_empty(&tgt->tp_sess_list)) {
292 cv_wait(&tgt->tp_sess_complete, &tgt->tp_sess_list_lock);
294 mutex_exit(&tgt->tp_sess_list_lock);
304 srpt_target_port_t *tgt;
314 lport = stmf_alloc(STMF_STRUCT_STMF_LOCAL_PORT, sizeof (*tgt), 0);
320 tgt = lport->lport_port_private;
321 ASSERT(tgt != NULL);
323 mutex_init(&tgt->tp_lock, NULL, MUTEX_DRIVER, NULL);
325 mutex_init(&tgt->tp_ch_list_lock, NULL, MUTEX_DRIVER, NULL);
326 cv_init(&tgt->tp_offline_complete, NULL, CV_DRIVER, NULL);
327 list_create(&tgt->tp_ch_list, sizeof (srpt_channel_t),
330 mutex_init(&tgt->tp_sess_list_lock, NULL, MUTEX_DRIVER, NULL);
331 cv_init(&tgt->tp_sess_complete, NULL, CV_DRIVER, NULL);
332 list_create(&tgt->tp_sess_list, sizeof (srpt_session_t),
335 tgt->tp_state = SRPT_TGT_STATE_OFFLINE;
336 tgt->tp_drv_disabled = 0;
337 tgt->tp_srp_enabled = 0;
338 tgt->tp_lport = lport;
339 tgt->tp_ioc = ioc;
340 tgt->tp_ibt_svc_id = guid;
341 tgt->tp_ibt_svc_desc.sd_handler = srpt_cm_hdlr;
342 tgt->tp_ibt_svc_desc.sd_flags = IBT_SRV_NO_FLAGS;
343 temp = h2b64(tgt->tp_ibt_svc_id);
344 bcopy(&temp, &tgt->tp_srp_port_id[0], 8);
345 temp = h2b64(tgt->tp_ioc->ioc_guid);
346 bcopy(&temp, &tgt->tp_srp_port_id[8], 8);
348 tgt->tp_nports = ioc->ioc_attr.hca_nports;
349 tgt->tp_hw_port =
350 kmem_zalloc(sizeof (srpt_hw_port_t) * tgt->tp_nports, KM_SLEEP);
351 tgt->tp_num_active_ports = 0;
352 tgt->tp_requested_state = SRPT_TGT_STATE_OFFLINE;
354 tgt->tp_scsi_devid = srpt_stp_alloc_scsi_devid_desc(tgt->tp_ibt_svc_id);
356 lport->lport_id = tgt->tp_scsi_devid;
379 return (tgt);
395 cv_destroy(&tgt->tp_offline_complete);
396 mutex_destroy(&tgt->tp_ch_list_lock);
397 mutex_destroy(&tgt->tp_lock);
398 if (tgt->tp_hw_port) {
399 kmem_free(tgt->tp_hw_port,
400 sizeof (srpt_hw_port_t) * tgt->tp_nports);
402 if (tgt->tp_scsi_devid) {
403 srpt_stp_free_scsi_devid_desc(tgt->tp_scsi_devid);
415 srpt_stp_free_port(srpt_target_port_t *tgt)
417 ASSERT(tgt != NULL);
418 ASSERT(list_is_empty(&tgt->tp_sess_list));
419 ASSERT(list_is_empty(&tgt->tp_ch_list));
421 list_destroy(&tgt->tp_ch_list);
422 list_destroy(&tgt->tp_sess_list);
424 cv_destroy(&tgt->tp_sess_complete);
425 cv_destroy(&tgt->tp_offline_complete);
427 mutex_destroy(&tgt->tp_sess_list_lock);
428 mutex_destroy(&tgt->tp_ch_list_lock);
429 mutex_destroy(&tgt->tp_lock);
433 if (tgt->tp_hw_port) {
434 kmem_free(tgt->tp_hw_port,
435 sizeof (srpt_hw_port_t) * tgt->tp_nports);
438 if (tgt->tp_scsi_devid) {
439 srpt_stp_free_scsi_devid_desc(tgt->tp_scsi_devid);
442 stmf_free(tgt->tp_lport);
451 srpt_stp_destroy_port(srpt_target_port_t *tgt)
457 ASSERT(tgt != NULL);
458 ASSERT(tgt->tp_lport != NULL);
462 mutex_enter(&tgt->tp_lock);
463 if (tgt->tp_drv_disabled != 0) {
465 mutex_exit(&tgt->tp_lock);
469 tgt->tp_drv_disabled = 1;
470 guid = tgt->tp_ioc->ioc_guid;
471 mutex_exit(&tgt->tp_lock);
479 status = stmf_ctl(STMF_CMD_LPORT_OFFLINE, tgt->tp_lport, &cstatus);
486 mutex_enter(&tgt->tp_lock);
487 while (tgt->tp_state != SRPT_TGT_STATE_OFFLINE) {
488 cv_wait(&tgt->tp_offline_complete, &tgt->tp_lock);
490 mutex_exit(&tgt->tp_lock);
497 status = stmf_deregister_local_port(tgt->tp_lport);
1042 srpt_target_port_t *tgt;
1048 tgt = lport->lport_port_private;
1049 ASSERT(tgt->tp_ioc != NULL);
1057 "info (%s)", (u_longlong_t)tgt->tp_ibt_svc_id, cmd, why);
1072 mutex_enter(&tgt->tp_lock);
1074 tgt->tp_requested_state = SRPT_TGT_STATE_ONLINE;
1076 if (tgt->tp_drv_disabled != 0) {
1079 (u_longlong_t)tgt->tp_ibt_svc_id);
1081 } else if ((tgt->tp_state == SRPT_TGT_STATE_ONLINE) ||
1082 (tgt->tp_state == SRPT_TGT_STATE_ONLINING)) {
1084 } else if (tgt->tp_state != SRPT_TGT_STATE_OFFLINE) {
1087 tgt->tp_state = SRPT_TGT_STATE_ONLINING;
1088 status = srpt_stp_start_srp(tgt);
1090 tgt->tp_state = SRPT_TGT_STATE_OFFLINE;
1092 if (tgt->tp_num_active_ports == 0) {
1097 (u_longlong_t)tgt->tp_ibt_svc_id);
1101 mutex_exit(&tgt->tp_lock);
1103 " status (0x%llx)", (u_longlong_t)tgt->tp_ibt_svc_id,
1116 mutex_enter(&tgt->tp_lock);
1126 tgt->tp_requested_state = SRPT_TGT_STATE_OFFLINE;
1129 if ((tgt->tp_state == SRPT_TGT_STATE_OFFLINE) ||
1130 (tgt->tp_state == SRPT_TGT_STATE_OFFLINING)) {
1132 } else if (tgt->tp_state != SRPT_TGT_STATE_ONLINE) {
1135 tgt->tp_state = SRPT_TGT_STATE_OFFLINING;
1136 srpt_stp_stop_srp(tgt);
1138 mutex_exit(&tgt->tp_lock);
1140 " (0x%016llx)", (u_longlong_t)tgt->tp_ibt_svc_id);
1152 mutex_enter(&tgt->tp_lock);
1153 if (tgt->tp_state == SRPT_TGT_STATE_ONLINING) {
1155 tgt->tp_state = SRPT_TGT_STATE_ONLINE;
1159 mutex_exit(&tgt->tp_lock);
1165 mutex_enter(&tgt->tp_lock);
1166 if (tgt->tp_state == SRPT_TGT_STATE_OFFLINING) {
1168 tgt->tp_state = SRPT_TGT_STATE_OFFLINE;
1169 cv_broadcast(&tgt->tp_offline_complete);
1173 mutex_exit(&tgt->tp_lock);
1245 srpt_stp_alloc_session(srpt_target_port_t *tgt,
1255 ASSERT(tgt != NULL);
1258 mutex_enter(&tgt->tp_sess_list_lock);
1267 mutex_exit(&tgt->tp_sess_list_lock);
1286 stmf_ss->ss_lport = tgt->tp_lport;
1290 ss->ss_tgt = tgt;
1309 status = stmf_register_scsi_session(tgt->tp_lport, stmf_ss);
1318 mutex_exit(&tgt->tp_sess_list_lock);
1322 list_insert_tail(&tgt->tp_sess_list, ss);
1323 mutex_exit(&tgt->tp_sess_list_lock);
1334 srpt_target_port_t *tgt;
1338 tgt = session->ss_tgt;
1340 ASSERT(tgt != NULL);
1344 mutex_enter(&tgt->tp_sess_list_lock);
1351 stmf_deregister_scsi_session(tgt->tp_lport, stmf_ss);
1354 list_remove(&tgt->tp_sess_list, session);
1355 cv_signal(&tgt->tp_sess_complete);
1356 mutex_exit(&tgt->tp_sess_list_lock);
1364 srpt_stp_login(srpt_target_port_t *tgt, srp_login_req_t *login,
1377 ASSERT(tgt != NULL);
1409 mutex_enter(&tgt->tp_lock);
1410 ioc = tgt->tp_ioc;
1421 if (memcmp(login->lreq_target_port_id, tgt->tp_srp_port_id,
1432 if (tgt->tp_state != SRPT_TGT_STATE_ONLINE) {
1482 mutex_enter(&tgt->tp_ch_list_lock);
1483 ch = list_head(&tgt->tp_ch_list);
1487 next_ch = list_next(&tgt->tp_ch_list, ch);
1522 mutex_exit(&tgt->tp_ch_list_lock);
1535 mutex_exit(&tgt->tp_ch_list_lock);
1538 session = srpt_stp_alloc_session(tgt,
1569 ch = srpt_ch_alloc(tgt, login_port);
1585 mutex_enter(&tgt->tp_ch_list_lock);
1586 list_insert_tail(&tgt->tp_ch_list, ch);
1587 mutex_exit(&tgt->tp_ch_list_lock);
1590 mutex_exit(&tgt->tp_lock);
1600 mutex_exit(&tgt->tp_lock);