Lines Matching refs:sfp

3631 static void bfa_sfp_getdata_send(struct bfa_sfp_s *sfp);
3632 static void bfa_sfp_media_get(struct bfa_sfp_s *sfp);
3633 static bfa_status_t bfa_sfp_speed_valid(struct bfa_sfp_s *sfp,
3637 bfa_cb_sfp_show(struct bfa_sfp_s *sfp)
3639 bfa_trc(sfp, sfp->lock);
3640 if (sfp->cbfn)
3641 sfp->cbfn(sfp->cbarg, sfp->status);
3642 sfp->lock = 0;
3643 sfp->cbfn = NULL;
3647 bfa_cb_sfp_state_query(struct bfa_sfp_s *sfp)
3649 bfa_trc(sfp, sfp->portspeed);
3650 if (sfp->media) {
3651 bfa_sfp_media_get(sfp);
3652 if (sfp->state_query_cbfn)
3653 sfp->state_query_cbfn(sfp->state_query_cbarg,
3654 sfp->status);
3655 sfp->media = NULL;
3658 if (sfp->portspeed) {
3659 sfp->status = bfa_sfp_speed_valid(sfp, sfp->portspeed);
3660 if (sfp->state_query_cbfn)
3661 sfp->state_query_cbfn(sfp->state_query_cbarg,
3662 sfp->status);
3663 sfp->portspeed = BFA_PORT_SPEED_UNKNOWN;
3666 sfp->state_query_lock = 0;
3667 sfp->state_query_cbfn = NULL;
3676 struct bfa_sfp_s *sfp = sfp_arg;
3678 bfa_trc(sfp, event);
3679 bfa_trc(sfp, sfp->lock);
3680 bfa_trc(sfp, sfp->state_query_lock);
3685 if (sfp->lock) {
3686 sfp->status = BFA_STATUS_IOC_FAILURE;
3687 bfa_cb_sfp_show(sfp);
3690 if (sfp->state_query_lock) {
3691 sfp->status = BFA_STATUS_IOC_FAILURE;
3692 bfa_cb_sfp_state_query(sfp);
3705 bfa_sfp_scn_aen_post(struct bfa_sfp_s *sfp, struct bfi_sfp_scn_s *rsp)
3707 struct bfad_s *bfad = (struct bfad_s *)sfp->ioc->bfa->bfad;
3711 bfa_trc(sfp, (((u64)rsp->pomlvl) << 16) | (((u64)rsp->sfpid) << 8) |
3718 aen_entry->aen_data.port.ioc_type = bfa_ioc_get_type(sfp->ioc);
3719 aen_entry->aen_data.port.pwwn = sfp->ioc->attr->pwwn;
3720 aen_entry->aen_data.port.mac = bfa_ioc_get_mac(sfp->ioc);
3740 bfa_trc(sfp, rsp->event);
3745 bfad_im_post_vendor_event(aen_entry, bfad, ++sfp->ioc->ioc_aen_seq,
3753 bfa_sfp_getdata_send(struct bfa_sfp_s *sfp)
3755 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg;
3757 bfa_trc(sfp, req->memtype);
3761 bfa_ioc_portid(sfp->ioc));
3764 bfa_ioc_mbox_queue(sfp->ioc, &sfp->mbcmd);
3768 * SFP is valid, read sfp data
3771 bfa_sfp_getdata(struct bfa_sfp_s *sfp, enum bfi_sfp_mem_e memtype)
3773 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg;
3775 WARN_ON(sfp->lock != 0);
3776 bfa_trc(sfp, sfp->state);
3778 sfp->lock = 1;
3779 sfp->memtype = memtype;
3783 bfa_alen_set(&req->alen, sizeof(struct sfp_mem_s), sfp->dbuf_pa);
3785 bfa_sfp_getdata_send(sfp);
3792 bfa_sfp_scn(struct bfa_sfp_s *sfp, struct bfi_mbmsg_s *msg)
3798 sfp->state = BFA_SFP_STATE_INSERTED;
3799 sfp->data_valid = 0;
3800 bfa_sfp_scn_aen_post(sfp, rsp);
3803 sfp->state = BFA_SFP_STATE_REMOVED;
3804 sfp->data_valid = 0;
3805 bfa_sfp_scn_aen_post(sfp, rsp);
3808 sfp->state = BFA_SFP_STATE_FAILED;
3809 sfp->data_valid = 0;
3810 bfa_sfp_scn_aen_post(sfp, rsp);
3813 sfp->state = BFA_SFP_STATE_UNSUPPORT;
3814 bfa_sfp_scn_aen_post(sfp, rsp);
3815 if (!sfp->lock)
3816 bfa_sfp_getdata(sfp, BFI_SFP_MEM_ALL);
3819 bfa_sfp_scn_aen_post(sfp, rsp);
3822 sfp->state = BFA_SFP_STATE_VALID;
3823 if (!sfp->lock)
3824 bfa_sfp_getdata(sfp, BFI_SFP_MEM_ALL);
3827 bfa_trc(sfp, rsp->event);
3836 bfa_sfp_show_comp(struct bfa_sfp_s *sfp, struct bfi_mbmsg_s *msg)
3840 if (!sfp->lock) {
3844 bfa_trc(sfp, sfp->lock);
3848 bfa_trc(sfp, rsp->status);
3850 sfp->data_valid = 1;
3851 if (sfp->state == BFA_SFP_STATE_VALID)
3852 sfp->status = BFA_STATUS_OK;
3853 else if (sfp->state == BFA_SFP_STATE_UNSUPPORT)
3854 sfp->status = BFA_STATUS_SFP_UNSUPP;
3856 bfa_trc(sfp, sfp->state);
3858 sfp->data_valid = 0;
3859 sfp->status = rsp->status;
3860 /* sfpshow shouldn't change sfp state */
3863 bfa_trc(sfp, sfp->memtype);
3864 if (sfp->memtype == BFI_SFP_MEM_DIAGEXT) {
3865 bfa_trc(sfp, sfp->data_valid);
3866 if (sfp->data_valid) {
3868 u8 *des = (u8 *)(sfp->sfpmem);
3869 memcpy(des, sfp->dbuf_kva, size);
3874 bfa_cb_sfp_show(sfp);
3876 sfp->lock = 0;
3878 bfa_trc(sfp, sfp->state_query_lock);
3879 if (sfp->state_query_lock) {
3880 sfp->state = rsp->state;
3882 bfa_cb_sfp_state_query(sfp);
3887 * SFP query fw sfp state
3890 bfa_sfp_state_query(struct bfa_sfp_s *sfp)
3892 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg;
3895 WARN_ON(sfp->state != BFA_SFP_STATE_INIT);
3896 WARN_ON(sfp->state_query_lock != 0);
3897 bfa_trc(sfp, sfp->state);
3899 sfp->state_query_lock = 1;
3902 if (!sfp->lock)
3903 bfa_sfp_getdata(sfp, BFI_SFP_MEM_ALL);
3907 bfa_sfp_media_get(struct bfa_sfp_s *sfp)
3909 enum bfa_defs_sfp_media_e *media = sfp->media;
3913 if (sfp->state == BFA_SFP_STATE_UNSUPPORT)
3915 else if (sfp->state == BFA_SFP_STATE_VALID) {
3917 struct sfp_mem_s *sfpmem = (struct sfp_mem_s *)sfp->dbuf_kva;
3922 bfa_trc(sfp, e10g.b);
3923 bfa_trc(sfp, xmtr_tech);
3947 bfa_trc(sfp, 0);
3949 bfa_trc(sfp, sfp->state);
3953 bfa_sfp_speed_valid(struct bfa_sfp_s *sfp, enum bfa_port_speed portspeed)
3955 struct sfp_mem_s *sfpmem = (struct sfp_mem_s *)sfp->dbuf_kva;
3964 bfa_trc(sfp, e10g.b);
3975 bfa_trc(sfp, portspeed);
3976 bfa_trc(sfp, fc3.b);
3977 bfa_trc(sfp, e10g.b);
3988 struct bfa_sfp_s *sfp = sfparg;
3992 bfa_sfp_show_comp(sfp, msg);
3996 bfa_sfp_scn(sfp, msg);
4000 bfa_trc(sfp, msg->mh.msg_id);
4006 * Return DMA memory needed by sfp module.
4018 bfa_sfp_attach(struct bfa_sfp_s *sfp, struct bfa_ioc_s *ioc, void *dev,
4021 sfp->dev = dev;
4022 sfp->ioc = ioc;
4023 sfp->trcmod = trcmod;
4025 sfp->cbfn = NULL;
4026 sfp->cbarg = NULL;
4027 sfp->sfpmem = NULL;
4028 sfp->lock = 0;
4029 sfp->data_valid = 0;
4030 sfp->state = BFA_SFP_STATE_INIT;
4031 sfp->state_query_lock = 0;
4032 sfp->state_query_cbfn = NULL;
4033 sfp->state_query_cbarg = NULL;
4034 sfp->media = NULL;
4035 sfp->portspeed = BFA_PORT_SPEED_UNKNOWN;
4036 sfp->is_elb = BFA_FALSE;
4038 bfa_ioc_mbox_regisr(sfp->ioc, BFI_MC_SFP, bfa_sfp_intr, sfp);
4039 bfa_q_qe_init(&sfp->ioc_notify);
4040 bfa_ioc_notify_init(&sfp->ioc_notify, bfa_sfp_notify, sfp);
4041 list_add_tail(&sfp->ioc_notify.qe, &sfp->ioc->notify_q);
4048 bfa_sfp_memclaim(struct bfa_sfp_s *sfp, u8 *dm_kva, u64 dm_pa)
4050 sfp->dbuf_kva = dm_kva;
4051 sfp->dbuf_pa = dm_pa;
4052 memset(sfp->dbuf_kva, 0, sizeof(struct sfp_mem_s));
4061 * @param[in] sfp - bfa sfp module
4063 * @param[out] sfpmem - sfp eeprom data
4067 bfa_sfp_show(struct bfa_sfp_s *sfp, struct sfp_mem_s *sfpmem,
4071 if (!bfa_ioc_is_operational(sfp->ioc)) {
4072 bfa_trc(sfp, 0);
4076 if (sfp->lock) {
4077 bfa_trc(sfp, 0);
4081 sfp->cbfn = cbfn;
4082 sfp->cbarg = cbarg;
4083 sfp->sfpmem = sfpmem;
4085 bfa_sfp_getdata(sfp, BFI_SFP_MEM_DIAGEXT);
4092 * @param[in] sfp - bfa sfp module
4098 bfa_sfp_media(struct bfa_sfp_s *sfp, enum bfa_defs_sfp_media_e *media,
4101 if (!bfa_ioc_is_operational(sfp->ioc)) {
4102 bfa_trc(sfp, 0);
4106 sfp->media = media;
4107 if (sfp->state == BFA_SFP_STATE_INIT) {
4108 if (sfp->state_query_lock) {
4109 bfa_trc(sfp, 0);
4112 sfp->state_query_cbfn = cbfn;
4113 sfp->state_query_cbarg = cbarg;
4114 bfa_sfp_state_query(sfp);
4119 bfa_sfp_media_get(sfp);
4126 * @param[in] sfp - bfa sfp module
4131 bfa_sfp_speed(struct bfa_sfp_s *sfp, enum bfa_port_speed portspeed,
4136 if (!bfa_ioc_is_operational(sfp->ioc))
4140 if (bfa_mfg_is_mezz(sfp->ioc->attr->card_type))
4144 sfp->portspeed = portspeed;
4145 if (sfp->state == BFA_SFP_STATE_INIT) {
4146 if (sfp->state_query_lock) {
4147 bfa_trc(sfp, 0);
4150 sfp->state_query_cbfn = cbfn;
4151 sfp->state_query_cbarg = cbarg;
4152 bfa_sfp_state_query(sfp);
4157 if (sfp->state == BFA_SFP_STATE_REMOVED ||
4158 sfp->state == BFA_SFP_STATE_FAILED) {
4159 bfa_trc(sfp, sfp->state);
4163 if (sfp->state == BFA_SFP_STATE_INSERTED) {
4164 bfa_trc(sfp, sfp->state);
4165 return BFA_STATUS_DEVBUSY; /* sfp is reading data */
4169 if (sfp->is_elb)
4172 return bfa_sfp_speed_valid(sfp, portspeed);