aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/bfa/vport.c
diff options
context:
space:
mode:
authorJing Huang <huangj@brocade.com>2010-07-08 22:46:26 -0400
committerJames Bottomley <James.Bottomley@suse.de>2010-07-27 13:04:04 -0400
commitd9883548a0b0afec4786e6c5cd8d03d43a30b779 (patch)
treed7ec50fa682ef49063c80f8d77ca85a4fa38b052 /drivers/scsi/bfa/vport.c
parented96932470e4ca3aab29518a748dc1162853b456 (diff)
[SCSI] bfa: PBC vport create
This patch enables creating PBC vport. During fcs init, fcs will read PBC vport using bfa iocfc API and invoke fcb callback to add the pbc vport entries into a list. The pbc vport list will be traversed in the subsequent pci probe process and vport will be created using fc transport provided vport create function. Signed-off-by: Jing Huang <huangj@brocade.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/bfa/vport.c')
-rw-r--r--drivers/scsi/bfa/vport.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/drivers/scsi/bfa/vport.c b/drivers/scsi/bfa/vport.c
index 27cd619a227a..f14e9f2d2c30 100644
--- a/drivers/scsi/bfa/vport.c
+++ b/drivers/scsi/bfa/vport.c
@@ -594,6 +594,15 @@ bfa_fcs_vport_cleanup(struct bfa_fcs_vport_s *vport)
594} 594}
595 595
596/** 596/**
597 * delete notification from fabric SM. To be invoked from within FCS.
598 */
599void
600bfa_fcs_vport_fcs_delete(struct bfa_fcs_vport_s *vport)
601{
602 bfa_sm_send_event(vport, BFA_FCS_VPORT_SM_DELETE);
603}
604
605/**
597 * Delete completion callback from associated lport 606 * Delete completion callback from associated lport
598 */ 607 */
599void 608void
@@ -646,6 +655,7 @@ bfa_fcs_vport_create(struct bfa_fcs_vport_s *vport, struct bfa_fcs_s *fcs,
646 return BFA_STATUS_VPORT_MAX; 655 return BFA_STATUS_VPORT_MAX;
647 656
648 vport->vport_drv = vport_drv; 657 vport->vport_drv = vport_drv;
658 vport_cfg->preboot_vp = BFA_FALSE;
649 bfa_sm_set_state(vport, bfa_fcs_vport_sm_uninit); 659 bfa_sm_set_state(vport, bfa_fcs_vport_sm_uninit);
650 660
651 bfa_fcs_lport_attach(&vport->lport, fcs, vf_id, vport); 661 bfa_fcs_lport_attach(&vport->lport, fcs, vf_id, vport);
@@ -657,6 +667,36 @@ bfa_fcs_vport_create(struct bfa_fcs_vport_s *vport, struct bfa_fcs_s *fcs,
657} 667}
658 668
659/** 669/**
670 * Use this function to instantiate a new FCS PBC vport object. This
671 * function will not trigger any HW initialization process (which will be
672 * done in vport_start() call)
673 *
674 * param[in] vport - pointer to bfa_fcs_vport_t. This space
675 * needs to be allocated by the driver.
676 * param[in] fcs - FCS instance
677 * param[in] vport_cfg - vport configuration
678 * param[in] vf_id - VF_ID if vport is created within a VF.
679 * FC_VF_ID_NULL to specify base fabric.
680 * param[in] vport_drv - Opaque handle back to the driver's vport
681 * structure
682 *
683 * retval BFA_STATUS_OK - on success.
684 * retval BFA_STATUS_FAILED - on failure.
685 */
686bfa_status_t
687bfa_fcs_pbc_vport_create(struct bfa_fcs_vport_s *vport, struct bfa_fcs_s *fcs,
688 uint16_t vf_id, struct bfa_port_cfg_s *vport_cfg,
689 struct bfad_vport_s *vport_drv)
690{
691 bfa_status_t rc;
692
693 rc = bfa_fcs_vport_create(vport, fcs, vf_id, vport_cfg, vport_drv);
694 vport->lport.port_cfg.preboot_vp = BFA_TRUE;
695
696 return rc;
697}
698
699/**
660 * Use this function initialize the vport. 700 * Use this function initialize the vport.
661 * 701 *
662 * @param[in] vport - pointer to bfa_fcs_vport_t. 702 * @param[in] vport - pointer to bfa_fcs_vport_t.
@@ -692,6 +732,8 @@ bfa_fcs_vport_stop(struct bfa_fcs_vport_s *vport)
692 * Use this function to delete a vport object. Fabric object should 732 * Use this function to delete a vport object. Fabric object should
693 * be stopped before this function call. 733 * be stopped before this function call.
694 * 734 *
735 * Donot invoke this from within FCS
736 *
695 * param[in] vport - pointer to bfa_fcs_vport_t. 737 * param[in] vport - pointer to bfa_fcs_vport_t.
696 * 738 *
697 * return None 739 * return None
@@ -699,6 +741,9 @@ bfa_fcs_vport_stop(struct bfa_fcs_vport_s *vport)
699bfa_status_t 741bfa_status_t
700bfa_fcs_vport_delete(struct bfa_fcs_vport_s *vport) 742bfa_fcs_vport_delete(struct bfa_fcs_vport_s *vport)
701{ 743{
744 if (vport->lport.port_cfg.preboot_vp)
745 return BFA_STATUS_PBC;
746
702 bfa_sm_send_event(vport, BFA_FCS_VPORT_SM_DELETE); 747 bfa_sm_send_event(vport, BFA_FCS_VPORT_SM_DELETE);
703 748
704 return BFA_STATUS_OK; 749 return BFA_STATUS_OK;