diff options
Diffstat (limited to 'drivers/scsi/bfa/bfa_svc.c')
-rw-r--r-- | drivers/scsi/bfa/bfa_svc.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/scsi/bfa/bfa_svc.c b/drivers/scsi/bfa/bfa_svc.c index d0ed4dd6f35a..aa8a0eaf91f9 100644 --- a/drivers/scsi/bfa/bfa_svc.c +++ b/drivers/scsi/bfa/bfa_svc.c | |||
@@ -4677,6 +4677,7 @@ bfa_rport_isr(struct bfa_s *bfa, struct bfi_msg_s *m) | |||
4677 | rp = BFA_RPORT_FROM_TAG(bfa, msg.create_rsp->bfa_handle); | 4677 | rp = BFA_RPORT_FROM_TAG(bfa, msg.create_rsp->bfa_handle); |
4678 | rp->fw_handle = msg.create_rsp->fw_handle; | 4678 | rp->fw_handle = msg.create_rsp->fw_handle; |
4679 | rp->qos_attr = msg.create_rsp->qos_attr; | 4679 | rp->qos_attr = msg.create_rsp->qos_attr; |
4680 | bfa_rport_set_lunmask(bfa, rp); | ||
4680 | WARN_ON(msg.create_rsp->status != BFA_STATUS_OK); | 4681 | WARN_ON(msg.create_rsp->status != BFA_STATUS_OK); |
4681 | bfa_sm_send_event(rp, BFA_RPORT_SM_FWRSP); | 4682 | bfa_sm_send_event(rp, BFA_RPORT_SM_FWRSP); |
4682 | break; | 4683 | break; |
@@ -4684,6 +4685,7 @@ bfa_rport_isr(struct bfa_s *bfa, struct bfi_msg_s *m) | |||
4684 | case BFI_RPORT_I2H_DELETE_RSP: | 4685 | case BFI_RPORT_I2H_DELETE_RSP: |
4685 | rp = BFA_RPORT_FROM_TAG(bfa, msg.delete_rsp->bfa_handle); | 4686 | rp = BFA_RPORT_FROM_TAG(bfa, msg.delete_rsp->bfa_handle); |
4686 | WARN_ON(msg.delete_rsp->status != BFA_STATUS_OK); | 4687 | WARN_ON(msg.delete_rsp->status != BFA_STATUS_OK); |
4688 | bfa_rport_unset_lunmask(bfa, rp); | ||
4687 | bfa_sm_send_event(rp, BFA_RPORT_SM_FWRSP); | 4689 | bfa_sm_send_event(rp, BFA_RPORT_SM_FWRSP); |
4688 | break; | 4690 | break; |
4689 | 4691 | ||
@@ -4764,6 +4766,37 @@ bfa_rport_speed(struct bfa_rport_s *rport, enum bfa_port_speed speed) | |||
4764 | bfa_sm_send_event(rport, BFA_RPORT_SM_SET_SPEED); | 4766 | bfa_sm_send_event(rport, BFA_RPORT_SM_SET_SPEED); |
4765 | } | 4767 | } |
4766 | 4768 | ||
4769 | /* Set Rport LUN Mask */ | ||
4770 | void | ||
4771 | bfa_rport_set_lunmask(struct bfa_s *bfa, struct bfa_rport_s *rp) | ||
4772 | { | ||
4773 | struct bfa_lps_mod_s *lps_mod = BFA_LPS_MOD(bfa); | ||
4774 | wwn_t lp_wwn, rp_wwn; | ||
4775 | u8 lp_tag = (u8)rp->rport_info.lp_tag; | ||
4776 | |||
4777 | rp_wwn = ((struct bfa_fcs_rport_s *)rp->rport_drv)->pwwn; | ||
4778 | lp_wwn = (BFA_LPS_FROM_TAG(lps_mod, rp->rport_info.lp_tag))->pwwn; | ||
4779 | |||
4780 | BFA_LPS_FROM_TAG(lps_mod, rp->rport_info.lp_tag)->lun_mask = | ||
4781 | rp->lun_mask = BFA_TRUE; | ||
4782 | bfa_fcpim_lunmask_rp_update(bfa, lp_wwn, rp_wwn, rp->rport_tag, lp_tag); | ||
4783 | } | ||
4784 | |||
4785 | /* Unset Rport LUN mask */ | ||
4786 | void | ||
4787 | bfa_rport_unset_lunmask(struct bfa_s *bfa, struct bfa_rport_s *rp) | ||
4788 | { | ||
4789 | struct bfa_lps_mod_s *lps_mod = BFA_LPS_MOD(bfa); | ||
4790 | wwn_t lp_wwn, rp_wwn; | ||
4791 | |||
4792 | rp_wwn = ((struct bfa_fcs_rport_s *)rp->rport_drv)->pwwn; | ||
4793 | lp_wwn = (BFA_LPS_FROM_TAG(lps_mod, rp->rport_info.lp_tag))->pwwn; | ||
4794 | |||
4795 | BFA_LPS_FROM_TAG(lps_mod, rp->rport_info.lp_tag)->lun_mask = | ||
4796 | rp->lun_mask = BFA_FALSE; | ||
4797 | bfa_fcpim_lunmask_rp_update(bfa, lp_wwn, rp_wwn, | ||
4798 | BFA_RPORT_TAG_INVALID, BFA_LP_TAG_INVALID); | ||
4799 | } | ||
4767 | 4800 | ||
4768 | /* | 4801 | /* |
4769 | * SGPG related functions | 4802 | * SGPG related functions |