Lines Matching refs:lport

100 static struct fc_rport_priv *fc_rport_lookup(const struct fc_lport *lport,  in fc_rport_lookup()  argument
105 list_for_each_entry_rcu(rdata, &lport->disc.rports, peers) in fc_rport_lookup()
120 static struct fc_rport_priv *fc_rport_create(struct fc_lport *lport, in fc_rport_create() argument
125 rdata = lport->tt.rport_lookup(lport, port_id); in fc_rport_create()
129 rdata = kzalloc(sizeof(*rdata) + lport->rport_priv_size, GFP_KERNEL); in fc_rport_create()
140 rdata->local_port = lport; in fc_rport_create()
144 rdata->e_d_tov = lport->e_d_tov; in fc_rport_create()
145 rdata->r_a_tov = lport->r_a_tov; in fc_rport_create()
150 rdata->lld_event_callback = lport->tt.rport_event_callback; in fc_rport_create()
151 list_add_rcu(&rdata->peers, &lport->disc.rports); in fc_rport_create()
247 struct fc_lport *lport = rdata->local_port; in fc_rport_work() local
270 rport = fc_remote_port_add(lport->host, 0, &ids); in fc_rport_work()
273 lport->tt.rport_logoff(rdata); in fc_rport_work()
274 kref_put(&rdata->kref, lport->tt.rport_destroy); in fc_rport_work()
285 rpriv->local_port = lport; in fc_rport_work()
294 rport_ops->event_callback(lport, rdata, event); in fc_rport_work()
298 rdata->lld_event_callback(lport, rdata, event); in fc_rport_work()
300 kref_put(&rdata->kref, lport->tt.rport_destroy); in fc_rport_work()
320 rport_ops->event_callback(lport, rdata, event); in fc_rport_work()
324 rdata->lld_event_callback(lport, rdata, event); in fc_rport_work()
331 lport->tt.exch_mgr_reset(lport, 0, port_id); in fc_rport_work()
332 lport->tt.exch_mgr_reset(lport, port_id, 0); in fc_rport_work()
343 mutex_lock(&lport->disc.disc_mutex); in fc_rport_work()
349 kref_put(&rdata->kref, lport->tt.rport_destroy); in fc_rport_work()
352 lport->max_rport_retry_count) { in fc_rport_work()
362 kref_put(&rdata->kref, lport->tt.rport_destroy); in fc_rport_work()
373 mutex_unlock(&lport->disc.disc_mutex); in fc_rport_work()
619 struct fc_lport *lport = rdata->local_port; in fc_rport_login_complete() local
646 rdata->maxframe_size = fc_plogi_get_maxframe(flogi, lport->mfs); in fc_rport_login_complete()
660 struct fc_lport *lport = rdata->local_port; in fc_rport_flogi_resp() local
696 if (rdata->ids.port_name < lport->wwpn) in fc_rport_flogi_resp()
722 struct fc_lport *lport = rdata->local_port; in fc_rport_enter_flogi() local
725 if (!lport->point_to_multipoint) in fc_rport_enter_flogi()
733 fp = fc_frame_alloc(lport, sizeof(struct fc_els_flogi)); in fc_rport_enter_flogi()
737 if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_FLOGI, in fc_rport_enter_flogi()
739 2 * lport->r_a_tov)) in fc_rport_enter_flogi()
750 static void fc_rport_recv_flogi_req(struct fc_lport *lport, in fc_rport_recv_flogi_req() argument
762 FC_RPORT_ID_DBG(lport, sid, "Received FLOGI request\n"); in fc_rport_recv_flogi_req()
764 disc = &lport->disc; in fc_rport_recv_flogi_req()
767 if (!lport->point_to_multipoint) { in fc_rport_recv_flogi_req()
780 rdata = lport->tt.rport_lookup(lport, sid); in fc_rport_recv_flogi_req()
805 if (lport->point_to_multipoint) in fc_rport_recv_flogi_req()
837 fp = fc_frame_alloc(lport, sizeof(*flp)); in fc_rport_recv_flogi_req()
841 fc_flogi_fill(lport, fp); in fc_rport_recv_flogi_req()
846 lport->tt.frame_send(lport, fp); in fc_rport_recv_flogi_req()
848 if (rdata->ids.port_name < lport->wwpn) in fc_rport_recv_flogi_req()
860 lport->tt.seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data); in fc_rport_recv_flogi_req()
878 struct fc_lport *lport = rdata->local_port; in fc_rport_plogi_resp() local
910 if (lport->point_to_multipoint) in fc_rport_plogi_resp()
917 rdata->maxframe_size = fc_plogi_get_maxframe(plp, lport->mfs); in fc_rport_plogi_resp()
930 fc_rport_compatible_roles(struct fc_lport *lport, struct fc_rport_priv *rdata) in fc_rport_compatible_roles() argument
935 (lport->service_params & FCP_SPPF_INIT_FCN)) in fc_rport_compatible_roles()
938 (lport->service_params & FCP_SPPF_TARG_FCN)) in fc_rport_compatible_roles()
952 struct fc_lport *lport = rdata->local_port; in fc_rport_enter_plogi() local
955 if (!fc_rport_compatible_roles(lport, rdata)) { in fc_rport_enter_plogi()
967 fp = fc_frame_alloc(lport, sizeof(struct fc_els_flogi)); in fc_rport_enter_plogi()
973 rdata->e_d_tov = lport->e_d_tov; in fc_rport_enter_plogi()
975 if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_PLOGI, in fc_rport_enter_plogi()
977 2 * lport->r_a_tov)) in fc_rport_enter_plogi()
1091 struct fc_lport *lport = rdata->local_port; in fc_rport_enter_prli() local
1113 fp = fc_frame_alloc(lport, sizeof(*pp)); in fc_rport_enter_prli()
1119 fc_prli_fill(lport, fp); in fc_rport_enter_prli()
1128 fc_host_port_id(lport->host), FC_TYPE_ELS, in fc_rport_enter_prli()
1131 if (!lport->tt.exch_seq_send(lport, fp, fc_rport_prli_resp, in fc_rport_enter_prli()
1132 NULL, rdata, 2 * lport->r_a_tov)) in fc_rport_enter_prli()
1214 struct fc_lport *lport = rdata->local_port; in fc_rport_enter_rtv() local
1221 fp = fc_frame_alloc(lport, sizeof(struct fc_els_rtv)); in fc_rport_enter_rtv()
1227 if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_RTV, in fc_rport_enter_rtv()
1229 2 * lport->r_a_tov)) in fc_rport_enter_rtv()
1244 struct fc_lport *lport = lport_arg; in fc_rport_logo_resp() local
1246 FC_RPORT_ID_DBG(lport, fc_seq_exch(sp)->did, in fc_rport_logo_resp()
1262 struct fc_lport *lport = rdata->local_port; in fc_rport_enter_logo() local
1268 fp = fc_frame_alloc(lport, sizeof(struct fc_els_logo)); in fc_rport_enter_logo()
1271 (void)lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_LOGO, in fc_rport_enter_logo()
1272 fc_rport_logo_resp, lport, 0); in fc_rport_enter_logo()
1342 struct fc_lport *lport = rdata->local_port; in fc_rport_enter_adisc() local
1350 fp = fc_frame_alloc(lport, sizeof(struct fc_els_adisc)); in fc_rport_enter_adisc()
1355 if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_ADISC, in fc_rport_enter_adisc()
1357 2 * lport->r_a_tov)) in fc_rport_enter_adisc()
1373 struct fc_lport *lport = rdata->local_port; in fc_rport_recv_adisc_req() local
1384 lport->tt.seq_els_rsp_send(in_fp, ELS_LS_RJT, &rjt_data); in fc_rport_recv_adisc_req()
1388 fp = fc_frame_alloc(lport, sizeof(*adisc)); in fc_rport_recv_adisc_req()
1391 fc_adisc_fill(lport, fp); in fc_rport_recv_adisc_req()
1395 lport->tt.frame_send(lport, fp); in fc_rport_recv_adisc_req()
1412 struct fc_lport *lport = rdata->local_port; in fc_rport_recv_rls_req() local
1430 fp = fc_frame_alloc(lport, sizeof(*rsp)); in fc_rport_recv_rls_req()
1441 if (lport->tt.get_lesb) { in fc_rport_recv_rls_req()
1443 lport->tt.get_lesb(lport, lesb); in fc_rport_recv_rls_req()
1445 fc_get_host_stats(lport->host); in fc_rport_recv_rls_req()
1446 hst = &lport->host_stats; in fc_rport_recv_rls_req()
1456 lport->tt.frame_send(lport, fp); in fc_rport_recv_rls_req()
1460 lport->tt.seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data); in fc_rport_recv_rls_req()
1475 static void fc_rport_recv_els_req(struct fc_lport *lport, struct fc_frame *fp) in fc_rport_recv_els_req() argument
1480 mutex_lock(&lport->disc.disc_mutex); in fc_rport_recv_els_req()
1481 rdata = lport->tt.rport_lookup(lport, fc_frame_sid(fp)); in fc_rport_recv_els_req()
1483 mutex_unlock(&lport->disc.disc_mutex); in fc_rport_recv_els_req()
1487 mutex_unlock(&lport->disc.disc_mutex); in fc_rport_recv_els_req()
1511 lport->tt.seq_els_rsp_send(fp, ELS_RRQ, NULL); in fc_rport_recv_els_req()
1515 lport->tt.seq_els_rsp_send(fp, ELS_REC, NULL); in fc_rport_recv_els_req()
1532 lport->tt.seq_els_rsp_send(fp, ELS_LS_RJT, &els_data); in fc_rport_recv_els_req()
1543 static void fc_rport_recv_req(struct fc_lport *lport, struct fc_frame *fp) in fc_rport_recv_req() argument
1555 fc_rport_recv_flogi_req(lport, fp); in fc_rport_recv_req()
1558 fc_rport_recv_plogi_req(lport, fp); in fc_rport_recv_req()
1561 fc_rport_recv_logo_req(lport, fp); in fc_rport_recv_req()
1569 fc_rport_recv_els_req(lport, fp); in fc_rport_recv_req()
1574 lport->tt.seq_els_rsp_send(fp, ELS_LS_RJT, &els_data); in fc_rport_recv_req()
1587 static void fc_rport_recv_plogi_req(struct fc_lport *lport, in fc_rport_recv_plogi_req() argument
1599 FC_RPORT_ID_DBG(lport, sid, "Received PLOGI request\n"); in fc_rport_recv_plogi_req()
1603 FC_RPORT_ID_DBG(lport, sid, "Received PLOGI too short\n"); in fc_rport_recv_plogi_req()
1609 disc = &lport->disc; in fc_rport_recv_plogi_req()
1611 rdata = lport->tt.rport_create(lport, sid); in fc_rport_recv_plogi_req()
1645 if (rdata->ids.port_name < lport->wwpn) { in fc_rport_recv_plogi_req()
1669 if (!fc_rport_compatible_roles(lport, rdata)) { in fc_rport_recv_plogi_req()
1680 rdata->maxframe_size = fc_plogi_get_maxframe(pl, lport->mfs); in fc_rport_recv_plogi_req()
1685 fp = fc_frame_alloc(lport, sizeof(*pl)); in fc_rport_recv_plogi_req()
1689 fc_plogi_fill(lport, fp, ELS_LS_ACC); in fc_rport_recv_plogi_req()
1691 lport->tt.frame_send(lport, fp); in fc_rport_recv_plogi_req()
1699 lport->tt.seq_els_rsp_send(fp, ELS_LS_RJT, &rjt_data); in fc_rport_recv_plogi_req()
1714 struct fc_lport *lport = rdata->local_port; in fc_rport_recv_prli_req() local
1747 fp = fc_frame_alloc(lport, len); in fc_rport_recv_prli_req()
1802 lport->tt.frame_send(lport, fp); in fc_rport_recv_prli_req()
1817 lport->tt.seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data); in fc_rport_recv_prli_req()
1833 struct fc_lport *lport = rdata->local_port; in fc_rport_recv_prlo_req() local
1860 fp = fc_frame_alloc(lport, len); in fc_rport_recv_prlo_req()
1881 lport->tt.frame_send(lport, fp); in fc_rport_recv_prlo_req()
1888 lport->tt.seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data); in fc_rport_recv_prlo_req()
1901 static void fc_rport_recv_logo_req(struct fc_lport *lport, struct fc_frame *fp) in fc_rport_recv_logo_req() argument
1906 lport->tt.seq_els_rsp_send(fp, ELS_LS_ACC, NULL); in fc_rport_recv_logo_req()
1910 mutex_lock(&lport->disc.disc_mutex); in fc_rport_recv_logo_req()
1911 rdata = lport->tt.rport_lookup(lport, sid); in fc_rport_recv_logo_req()
1920 FC_RPORT_ID_DBG(lport, sid, in fc_rport_recv_logo_req()
1922 mutex_unlock(&lport->disc.disc_mutex); in fc_rport_recv_logo_req()
1938 int fc_rport_init(struct fc_lport *lport) in fc_rport_init() argument
1940 if (!lport->tt.rport_lookup) in fc_rport_init()
1941 lport->tt.rport_lookup = fc_rport_lookup; in fc_rport_init()
1943 if (!lport->tt.rport_create) in fc_rport_init()
1944 lport->tt.rport_create = fc_rport_create; in fc_rport_init()
1946 if (!lport->tt.rport_login) in fc_rport_init()
1947 lport->tt.rport_login = fc_rport_login; in fc_rport_init()
1949 if (!lport->tt.rport_logoff) in fc_rport_init()
1950 lport->tt.rport_logoff = fc_rport_logoff; in fc_rport_init()
1952 if (!lport->tt.rport_recv_req) in fc_rport_init()
1953 lport->tt.rport_recv_req = fc_rport_recv_req; in fc_rport_init()
1955 if (!lport->tt.rport_flush_queue) in fc_rport_init()
1956 lport->tt.rport_flush_queue = fc_rport_flush_queue; in fc_rport_init()
1958 if (!lport->tt.rport_destroy) in fc_rport_init()
1959 lport->tt.rport_destroy = fc_rport_destroy; in fc_rport_init()
1979 struct fc_lport *lport = rdata->local_port; in fc_rport_fcp_prli() local
1992 if (!(lport->service_params & FCP_SPPF_INIT_FCN)) in fc_rport_fcp_prli()
2001 spp->spp_params = htonl(fcp_parm | lport->service_params); in fc_rport_fcp_prli()
2064 struct fc_lport *lport = rpriv->local_port; in fc_rport_terminate_io() local
2066 lport->tt.exch_mgr_reset(lport, 0, rport->port_id); in fc_rport_terminate_io()
2067 lport->tt.exch_mgr_reset(lport, rport->port_id, 0); in fc_rport_terminate_io()