[SCSI] bfa: Add fc host issue lip support
authorKrishna Gudipati <kgudipat@brocade.com>
Wed, 14 Mar 2012 00:37:26 +0000 (17:37 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Wed, 28 Mar 2012 08:49:34 +0000 (09:49 +0100)
Signed-off-by: Krishna Gudipati <kgudipat@brocade.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/bfa/bfad_attr.c

index 1938fe0..06310b8 100644 (file)
@@ -442,6 +442,43 @@ bfad_im_vport_create(struct fc_vport *fc_vport, bool disable)
        return status;
 }
 
+int
+bfad_im_issue_fc_host_lip(struct Scsi_Host *shost)
+{
+       struct bfad_im_port_s *im_port =
+                       (struct bfad_im_port_s *) shost->hostdata[0];
+       struct bfad_s *bfad = im_port->bfad;
+       struct bfad_hal_comp fcomp;
+       unsigned long flags;
+       uint32_t status;
+
+       init_completion(&fcomp.comp);
+       spin_lock_irqsave(&bfad->bfad_lock, flags);
+       status = bfa_port_disable(&bfad->bfa.modules.port,
+                                       bfad_hcb_comp, &fcomp);
+       spin_unlock_irqrestore(&bfad->bfad_lock, flags);
+
+       if (status != BFA_STATUS_OK)
+               return -EIO;
+
+       wait_for_completion(&fcomp.comp);
+       if (fcomp.status != BFA_STATUS_OK)
+               return -EIO;
+
+       spin_lock_irqsave(&bfad->bfad_lock, flags);
+       status = bfa_port_enable(&bfad->bfa.modules.port,
+                                       bfad_hcb_comp, &fcomp);
+       spin_unlock_irqrestore(&bfad->bfad_lock, flags);
+       if (status != BFA_STATUS_OK)
+               return -EIO;
+
+       wait_for_completion(&fcomp.comp);
+       if (fcomp.status != BFA_STATUS_OK)
+               return -EIO;
+
+       return 0;
+}
+
 static int
 bfad_im_vport_delete(struct fc_vport *fc_vport)
 {
@@ -579,7 +616,7 @@ struct fc_function_template bfad_im_fc_function_template = {
        .show_rport_dev_loss_tmo = 1,
        .get_rport_dev_loss_tmo = bfad_im_get_rport_loss_tmo,
        .set_rport_dev_loss_tmo = bfad_im_set_rport_loss_tmo,
-
+       .issue_fc_host_lip = bfad_im_issue_fc_host_lip,
        .vport_create = bfad_im_vport_create,
        .vport_delete = bfad_im_vport_delete,
        .vport_disable = bfad_im_vport_disable,