diff options
Diffstat (limited to 'drivers/scsi/bfa/bfa_fcs_rport.c')
-rw-r--r-- | drivers/scsi/bfa/bfa_fcs_rport.c | 38 |
1 files changed, 5 insertions, 33 deletions
diff --git a/drivers/scsi/bfa/bfa_fcs_rport.c b/drivers/scsi/bfa/bfa_fcs_rport.c index caaee6f06937..2ec5719b654d 100644 --- a/drivers/scsi/bfa/bfa_fcs_rport.c +++ b/drivers/scsi/bfa/bfa_fcs_rport.c | |||
@@ -1356,7 +1356,8 @@ bfa_fcs_rport_send_plogi(void *rport_cbarg, struct bfa_fcxp_s *fcxp_alloced) | |||
1356 | len = fc_plogi_build(&fchs, bfa_fcxp_get_reqbuf(fcxp), rport->pid, | 1356 | len = fc_plogi_build(&fchs, bfa_fcxp_get_reqbuf(fcxp), rport->pid, |
1357 | bfa_fcs_lport_get_fcid(port), 0, | 1357 | bfa_fcs_lport_get_fcid(port), 0, |
1358 | port->port_cfg.pwwn, port->port_cfg.nwwn, | 1358 | port->port_cfg.pwwn, port->port_cfg.nwwn, |
1359 | bfa_fcport_get_maxfrsize(port->fcs->bfa)); | 1359 | bfa_fcport_get_maxfrsize(port->fcs->bfa), |
1360 | bfa_fcport_get_rx_bbcredit(port->fcs->bfa)); | ||
1360 | 1361 | ||
1361 | bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE, | 1362 | bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE, |
1362 | FC_CLASS_3, len, &fchs, bfa_fcs_rport_plogi_response, | 1363 | FC_CLASS_3, len, &fchs, bfa_fcs_rport_plogi_response, |
@@ -1476,7 +1477,8 @@ bfa_fcs_rport_send_plogiacc(void *rport_cbarg, struct bfa_fcxp_s *fcxp_alloced) | |||
1476 | rport->pid, bfa_fcs_lport_get_fcid(port), | 1477 | rport->pid, bfa_fcs_lport_get_fcid(port), |
1477 | rport->reply_oxid, port->port_cfg.pwwn, | 1478 | rport->reply_oxid, port->port_cfg.pwwn, |
1478 | port->port_cfg.nwwn, | 1479 | port->port_cfg.nwwn, |
1479 | bfa_fcport_get_maxfrsize(port->fcs->bfa)); | 1480 | bfa_fcport_get_maxfrsize(port->fcs->bfa), |
1481 | bfa_fcport_get_rx_bbcredit(port->fcs->bfa)); | ||
1480 | 1482 | ||
1481 | bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE, | 1483 | bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE, |
1482 | FC_CLASS_3, len, &fchs, NULL, NULL, FC_MAX_PDUSZ, 0); | 1484 | FC_CLASS_3, len, &fchs, NULL, NULL, FC_MAX_PDUSZ, 0); |
@@ -2120,7 +2122,7 @@ bfa_fcs_rport_update(struct bfa_fcs_rport_s *rport, struct fc_logi_s *plogi) | |||
2120 | 2122 | ||
2121 | port->fabric->bb_credit = be16_to_cpu(plogi->csp.bbcred); | 2123 | port->fabric->bb_credit = be16_to_cpu(plogi->csp.bbcred); |
2122 | bfa_fcport_set_tx_bbcredit(port->fcs->bfa, | 2124 | bfa_fcport_set_tx_bbcredit(port->fcs->bfa, |
2123 | port->fabric->bb_credit); | 2125 | port->fabric->bb_credit, 0); |
2124 | } | 2126 | } |
2125 | 2127 | ||
2126 | } | 2128 | } |
@@ -2233,22 +2235,6 @@ bfa_fcs_rport_plogi_create(struct bfa_fcs_lport_s *port, struct fchs_s *fchs, | |||
2233 | bfa_sm_send_event(rport, RPSM_EVENT_PLOGI_RCVD); | 2235 | bfa_sm_send_event(rport, RPSM_EVENT_PLOGI_RCVD); |
2234 | } | 2236 | } |
2235 | 2237 | ||
2236 | static int | ||
2237 | wwn_compare(wwn_t wwn1, wwn_t wwn2) | ||
2238 | { | ||
2239 | u8 *b1 = (u8 *) &wwn1; | ||
2240 | u8 *b2 = (u8 *) &wwn2; | ||
2241 | int i; | ||
2242 | |||
2243 | for (i = 0; i < sizeof(wwn_t); i++) { | ||
2244 | if (b1[i] < b2[i]) | ||
2245 | return -1; | ||
2246 | if (b1[i] > b2[i]) | ||
2247 | return 1; | ||
2248 | } | ||
2249 | return 0; | ||
2250 | } | ||
2251 | |||
2252 | /* | 2238 | /* |
2253 | * Called by bport/vport to handle PLOGI received from an existing | 2239 | * Called by bport/vport to handle PLOGI received from an existing |
2254 | * remote port. | 2240 | * remote port. |
@@ -2266,20 +2252,6 @@ bfa_fcs_rport_plogi(struct bfa_fcs_rport_s *rport, struct fchs_s *rx_fchs, | |||
2266 | rport->reply_oxid = rx_fchs->ox_id; | 2252 | rport->reply_oxid = rx_fchs->ox_id; |
2267 | bfa_trc(rport->fcs, rport->reply_oxid); | 2253 | bfa_trc(rport->fcs, rport->reply_oxid); |
2268 | 2254 | ||
2269 | /* | ||
2270 | * In Switched fabric topology, | ||
2271 | * PLOGI to each other. If our pwwn is smaller, ignore it, | ||
2272 | * if it is not a well known address. | ||
2273 | * If the link topology is N2N, | ||
2274 | * this Plogi should be accepted. | ||
2275 | */ | ||
2276 | if ((wwn_compare(rport->port->port_cfg.pwwn, rport->pwwn) == -1) && | ||
2277 | (bfa_fcs_fabric_is_switched(rport->port->fabric)) && | ||
2278 | (!BFA_FCS_PID_IS_WKA(rport->pid))) { | ||
2279 | bfa_trc(rport->fcs, rport->pid); | ||
2280 | return; | ||
2281 | } | ||
2282 | |||
2283 | rport->stats.plogi_rcvd++; | 2255 | rport->stats.plogi_rcvd++; |
2284 | bfa_sm_send_event(rport, RPSM_EVENT_PLOGI_RCVD); | 2256 | bfa_sm_send_event(rport, RPSM_EVENT_PLOGI_RCVD); |
2285 | } | 2257 | } |