Lines Matching refs:sfp
3630 static void bfa_sfp_getdata_send(struct bfa_sfp_s *sfp);
3631 static void bfa_sfp_media_get(struct bfa_sfp_s *sfp);
3632 static bfa_status_t bfa_sfp_speed_valid(struct bfa_sfp_s *sfp,
3636 bfa_cb_sfp_show(struct bfa_sfp_s *sfp)
3638 bfa_trc(sfp, sfp->lock);
3639 if (sfp->cbfn)
3640 sfp->cbfn(sfp->cbarg, sfp->status);
3641 sfp->lock = 0;
3642 sfp->cbfn = NULL;
3646 bfa_cb_sfp_state_query(struct bfa_sfp_s *sfp)
3648 bfa_trc(sfp, sfp->portspeed);
3649 if (sfp->media) {
3650 bfa_sfp_media_get(sfp);
3651 if (sfp->state_query_cbfn)
3652 sfp->state_query_cbfn(sfp->state_query_cbarg,
3653 sfp->status);
3654 sfp->media = NULL;
3657 if (sfp->portspeed) {
3658 sfp->status = bfa_sfp_speed_valid(sfp, sfp->portspeed);
3659 if (sfp->state_query_cbfn)
3660 sfp->state_query_cbfn(sfp->state_query_cbarg,
3661 sfp->status);
3662 sfp->portspeed = BFA_PORT_SPEED_UNKNOWN;
3665 sfp->state_query_lock = 0;
3666 sfp->state_query_cbfn = NULL;
3675 struct bfa_sfp_s *sfp = sfp_arg;
3677 bfa_trc(sfp, event);
3678 bfa_trc(sfp, sfp->lock);
3679 bfa_trc(sfp, sfp->state_query_lock);
3684 if (sfp->lock) {
3685 sfp->status = BFA_STATUS_IOC_FAILURE;
3686 bfa_cb_sfp_show(sfp);
3689 if (sfp->state_query_lock) {
3690 sfp->status = BFA_STATUS_IOC_FAILURE;
3691 bfa_cb_sfp_state_query(sfp);
3704 bfa_sfp_scn_aen_post(struct bfa_sfp_s *sfp, struct bfi_sfp_scn_s *rsp)
3706 struct bfad_s *bfad = (struct bfad_s *)sfp->ioc->bfa->bfad;
3710 bfa_trc(sfp, (((u64)rsp->pomlvl) << 16) | (((u64)rsp->sfpid) << 8) |
3717 aen_entry->aen_data.port.ioc_type = bfa_ioc_get_type(sfp->ioc);
3718 aen_entry->aen_data.port.pwwn = sfp->ioc->attr->pwwn;
3719 aen_entry->aen_data.port.mac = bfa_ioc_get_mac(sfp->ioc);
3739 bfa_trc(sfp, rsp->event);
3744 bfad_im_post_vendor_event(aen_entry, bfad, ++sfp->ioc->ioc_aen_seq,
3752 bfa_sfp_getdata_send(struct bfa_sfp_s *sfp)
3754 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg;
3756 bfa_trc(sfp, req->memtype);
3760 bfa_ioc_portid(sfp->ioc));
3763 bfa_ioc_mbox_queue(sfp->ioc, &sfp->mbcmd);
3767 * SFP is valid, read sfp data
3770 bfa_sfp_getdata(struct bfa_sfp_s *sfp, enum bfi_sfp_mem_e memtype)
3772 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg;
3774 WARN_ON(sfp->lock != 0);
3775 bfa_trc(sfp, sfp->state);
3777 sfp->lock = 1;
3778 sfp->memtype = memtype;
3782 bfa_alen_set(&req->alen, sizeof(struct sfp_mem_s), sfp->dbuf_pa);
3784 bfa_sfp_getdata_send(sfp);
3791 bfa_sfp_scn(struct bfa_sfp_s *sfp, struct bfi_mbmsg_s *msg)
3797 sfp->state = BFA_SFP_STATE_INSERTED;
3798 sfp->data_valid = 0;
3799 bfa_sfp_scn_aen_post(sfp, rsp);
3802 sfp->state = BFA_SFP_STATE_REMOVED;
3803 sfp->data_valid = 0;
3804 bfa_sfp_scn_aen_post(sfp, rsp);
3807 sfp->state = BFA_SFP_STATE_FAILED;
3808 sfp->data_valid = 0;
3809 bfa_sfp_scn_aen_post(sfp, rsp);
3812 sfp->state = BFA_SFP_STATE_UNSUPPORT;
3813 bfa_sfp_scn_aen_post(sfp, rsp);
3814 if (!sfp->lock)
3815 bfa_sfp_getdata(sfp, BFI_SFP_MEM_ALL);
3818 bfa_sfp_scn_aen_post(sfp, rsp);
3821 sfp->state = BFA_SFP_STATE_VALID;
3822 if (!sfp->lock)
3823 bfa_sfp_getdata(sfp, BFI_SFP_MEM_ALL);
3826 bfa_trc(sfp, rsp->event);
3835 bfa_sfp_show_comp(struct bfa_sfp_s *sfp, struct bfi_mbmsg_s *msg)
3839 if (!sfp->lock) {
3843 bfa_trc(sfp, sfp->lock);
3847 bfa_trc(sfp, rsp->status);
3849 sfp->data_valid = 1;
3850 if (sfp->state == BFA_SFP_STATE_VALID)
3851 sfp->status = BFA_STATUS_OK;
3852 else if (sfp->state == BFA_SFP_STATE_UNSUPPORT)
3853 sfp->status = BFA_STATUS_SFP_UNSUPP;
3855 bfa_trc(sfp, sfp->state);
3857 sfp->data_valid = 0;
3858 sfp->status = rsp->status;
3859 /* sfpshow shouldn't change sfp state */
3862 bfa_trc(sfp, sfp->memtype);
3863 if (sfp->memtype == BFI_SFP_MEM_DIAGEXT) {
3864 bfa_trc(sfp, sfp->data_valid);
3865 if (sfp->data_valid) {
3867 u8 *des = (u8 *)(sfp->sfpmem);
3868 memcpy(des, sfp->dbuf_kva, size);
3873 bfa_cb_sfp_show(sfp);
3875 sfp->lock = 0;
3877 bfa_trc(sfp, sfp->state_query_lock);
3878 if (sfp->state_query_lock) {
3879 sfp->state = rsp->state;
3881 bfa_cb_sfp_state_query(sfp);
3886 * SFP query fw sfp state
3889 bfa_sfp_state_query(struct bfa_sfp_s *sfp)
3891 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg;
3894 WARN_ON(sfp->state != BFA_SFP_STATE_INIT);
3895 WARN_ON(sfp->state_query_lock != 0);
3896 bfa_trc(sfp, sfp->state);
3898 sfp->state_query_lock = 1;
3901 if (!sfp->lock)
3902 bfa_sfp_getdata(sfp, BFI_SFP_MEM_ALL);
3906 bfa_sfp_media_get(struct bfa_sfp_s *sfp)
3908 enum bfa_defs_sfp_media_e *media = sfp->media;
3912 if (sfp->state == BFA_SFP_STATE_UNSUPPORT)
3914 else if (sfp->state == BFA_SFP_STATE_VALID) {
3916 struct sfp_mem_s *sfpmem = (struct sfp_mem_s *)sfp->dbuf_kva;
3921 bfa_trc(sfp, e10g.b);
3922 bfa_trc(sfp, xmtr_tech);
3946 bfa_trc(sfp, 0);
3948 bfa_trc(sfp, sfp->state);
3952 bfa_sfp_speed_valid(struct bfa_sfp_s *sfp, enum bfa_port_speed portspeed)
3954 struct sfp_mem_s *sfpmem = (struct sfp_mem_s *)sfp->dbuf_kva;
3963 bfa_trc(sfp, e10g.b);
3974 bfa_trc(sfp, portspeed);
3975 bfa_trc(sfp, fc3.b);
3976 bfa_trc(sfp, e10g.b);
3987 struct bfa_sfp_s *sfp = sfparg;
3991 bfa_sfp_show_comp(sfp, msg);
3995 bfa_sfp_scn(sfp, msg);
3999 bfa_trc(sfp, msg->mh.msg_id);
4005 * Return DMA memory needed by sfp module.
4017 bfa_sfp_attach(struct bfa_sfp_s *sfp, struct bfa_ioc_s *ioc, void *dev,
4020 sfp->dev = dev;
4021 sfp->ioc = ioc;
4022 sfp->trcmod = trcmod;
4024 sfp->cbfn = NULL;
4025 sfp->cbarg = NULL;
4026 sfp->sfpmem = NULL;
4027 sfp->lock = 0;
4028 sfp->data_valid = 0;
4029 sfp->state = BFA_SFP_STATE_INIT;
4030 sfp->state_query_lock = 0;
4031 sfp->state_query_cbfn = NULL;
4032 sfp->state_query_cbarg = NULL;
4033 sfp->media = NULL;
4034 sfp->portspeed = BFA_PORT_SPEED_UNKNOWN;
4035 sfp->is_elb = BFA_FALSE;
4037 bfa_ioc_mbox_regisr(sfp->ioc, BFI_MC_SFP, bfa_sfp_intr, sfp);
4038 bfa_q_qe_init(&sfp->ioc_notify);
4039 bfa_ioc_notify_init(&sfp->ioc_notify, bfa_sfp_notify, sfp);
4040 list_add_tail(&sfp->ioc_notify.qe, &sfp->ioc->notify_q);
4047 bfa_sfp_memclaim(struct bfa_sfp_s *sfp, u8 *dm_kva, u64 dm_pa)
4049 sfp->dbuf_kva = dm_kva;
4050 sfp->dbuf_pa = dm_pa;
4051 memset(sfp->dbuf_kva, 0, sizeof(struct sfp_mem_s));
4060 * @param[in] sfp - bfa sfp module
4062 * @param[out] sfpmem - sfp eeprom data
4066 bfa_sfp_show(struct bfa_sfp_s *sfp, struct sfp_mem_s *sfpmem,
4070 if (!bfa_ioc_is_operational(sfp->ioc)) {
4071 bfa_trc(sfp, 0);
4075 if (sfp->lock) {
4076 bfa_trc(sfp, 0);
4080 sfp->cbfn = cbfn;
4081 sfp->cbarg = cbarg;
4082 sfp->sfpmem = sfpmem;
4084 bfa_sfp_getdata(sfp, BFI_SFP_MEM_DIAGEXT);
4091 * @param[in] sfp - bfa sfp module
4097 bfa_sfp_media(struct bfa_sfp_s *sfp, enum bfa_defs_sfp_media_e *media,
4100 if (!bfa_ioc_is_operational(sfp->ioc)) {
4101 bfa_trc(sfp, 0);
4105 sfp->media = media;
4106 if (sfp->state == BFA_SFP_STATE_INIT) {
4107 if (sfp->state_query_lock) {
4108 bfa_trc(sfp, 0);
4111 sfp->state_query_cbfn = cbfn;
4112 sfp->state_query_cbarg = cbarg;
4113 bfa_sfp_state_query(sfp);
4118 bfa_sfp_media_get(sfp);
4125 * @param[in] sfp - bfa sfp module
4130 bfa_sfp_speed(struct bfa_sfp_s *sfp, enum bfa_port_speed portspeed,
4135 if (!bfa_ioc_is_operational(sfp->ioc))
4139 if (bfa_mfg_is_mezz(sfp->ioc->attr->card_type))
4143 sfp->portspeed = portspeed;
4144 if (sfp->state == BFA_SFP_STATE_INIT) {
4145 if (sfp->state_query_lock) {
4146 bfa_trc(sfp, 0);
4149 sfp->state_query_cbfn = cbfn;
4150 sfp->state_query_cbarg = cbarg;
4151 bfa_sfp_state_query(sfp);
4156 if (sfp->state == BFA_SFP_STATE_REMOVED ||
4157 sfp->state == BFA_SFP_STATE_FAILED) {
4158 bfa_trc(sfp, sfp->state);
4162 if (sfp->state == BFA_SFP_STATE_INSERTED) {
4163 bfa_trc(sfp, sfp->state);
4164 return BFA_STATUS_DEVBUSY; /* sfp is reading data */
4168 if (sfp->is_elb)
4171 return bfa_sfp_speed_valid(sfp, portspeed);