• Home
  • Raw
  • Download

Lines Matching refs:sfp

3644 static void bfa_sfp_getdata_send(struct bfa_sfp_s *sfp);
3645 static void bfa_sfp_media_get(struct bfa_sfp_s *sfp);
3646 static bfa_status_t bfa_sfp_speed_valid(struct bfa_sfp_s *sfp,
3650 bfa_cb_sfp_show(struct bfa_sfp_s *sfp) in bfa_cb_sfp_show() argument
3652 bfa_trc(sfp, sfp->lock); in bfa_cb_sfp_show()
3653 if (sfp->cbfn) in bfa_cb_sfp_show()
3654 sfp->cbfn(sfp->cbarg, sfp->status); in bfa_cb_sfp_show()
3655 sfp->lock = 0; in bfa_cb_sfp_show()
3656 sfp->cbfn = NULL; in bfa_cb_sfp_show()
3660 bfa_cb_sfp_state_query(struct bfa_sfp_s *sfp) in bfa_cb_sfp_state_query() argument
3662 bfa_trc(sfp, sfp->portspeed); in bfa_cb_sfp_state_query()
3663 if (sfp->media) { in bfa_cb_sfp_state_query()
3664 bfa_sfp_media_get(sfp); in bfa_cb_sfp_state_query()
3665 if (sfp->state_query_cbfn) in bfa_cb_sfp_state_query()
3666 sfp->state_query_cbfn(sfp->state_query_cbarg, in bfa_cb_sfp_state_query()
3667 sfp->status); in bfa_cb_sfp_state_query()
3668 sfp->media = NULL; in bfa_cb_sfp_state_query()
3671 if (sfp->portspeed) { in bfa_cb_sfp_state_query()
3672 sfp->status = bfa_sfp_speed_valid(sfp, sfp->portspeed); in bfa_cb_sfp_state_query()
3673 if (sfp->state_query_cbfn) in bfa_cb_sfp_state_query()
3674 sfp->state_query_cbfn(sfp->state_query_cbarg, in bfa_cb_sfp_state_query()
3675 sfp->status); in bfa_cb_sfp_state_query()
3676 sfp->portspeed = BFA_PORT_SPEED_UNKNOWN; in bfa_cb_sfp_state_query()
3679 sfp->state_query_lock = 0; in bfa_cb_sfp_state_query()
3680 sfp->state_query_cbfn = NULL; in bfa_cb_sfp_state_query()
3689 struct bfa_sfp_s *sfp = sfp_arg; in bfa_sfp_notify() local
3691 bfa_trc(sfp, event); in bfa_sfp_notify()
3692 bfa_trc(sfp, sfp->lock); in bfa_sfp_notify()
3693 bfa_trc(sfp, sfp->state_query_lock); in bfa_sfp_notify()
3698 if (sfp->lock) { in bfa_sfp_notify()
3699 sfp->status = BFA_STATUS_IOC_FAILURE; in bfa_sfp_notify()
3700 bfa_cb_sfp_show(sfp); in bfa_sfp_notify()
3703 if (sfp->state_query_lock) { in bfa_sfp_notify()
3704 sfp->status = BFA_STATUS_IOC_FAILURE; in bfa_sfp_notify()
3705 bfa_cb_sfp_state_query(sfp); in bfa_sfp_notify()
3718 bfa_sfp_scn_aen_post(struct bfa_sfp_s *sfp, struct bfi_sfp_scn_s *rsp) in bfa_sfp_scn_aen_post() argument
3720 struct bfad_s *bfad = (struct bfad_s *)sfp->ioc->bfa->bfad; in bfa_sfp_scn_aen_post()
3724 bfa_trc(sfp, (((u64)rsp->pomlvl) << 16) | (((u64)rsp->sfpid) << 8) | in bfa_sfp_scn_aen_post()
3731 aen_entry->aen_data.port.ioc_type = bfa_ioc_get_type(sfp->ioc); in bfa_sfp_scn_aen_post()
3732 aen_entry->aen_data.port.pwwn = sfp->ioc->attr->pwwn; in bfa_sfp_scn_aen_post()
3733 aen_entry->aen_data.port.mac = bfa_ioc_get_mac(sfp->ioc); in bfa_sfp_scn_aen_post()
3753 bfa_trc(sfp, rsp->event); in bfa_sfp_scn_aen_post()
3758 bfad_im_post_vendor_event(aen_entry, bfad, ++sfp->ioc->ioc_aen_seq, in bfa_sfp_scn_aen_post()
3766 bfa_sfp_getdata_send(struct bfa_sfp_s *sfp) in bfa_sfp_getdata_send() argument
3768 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg; in bfa_sfp_getdata_send()
3770 bfa_trc(sfp, req->memtype); in bfa_sfp_getdata_send()
3774 bfa_ioc_portid(sfp->ioc)); in bfa_sfp_getdata_send()
3777 bfa_ioc_mbox_queue(sfp->ioc, &sfp->mbcmd); in bfa_sfp_getdata_send()
3784 bfa_sfp_getdata(struct bfa_sfp_s *sfp, enum bfi_sfp_mem_e memtype) in bfa_sfp_getdata() argument
3786 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg; in bfa_sfp_getdata()
3788 WARN_ON(sfp->lock != 0); in bfa_sfp_getdata()
3789 bfa_trc(sfp, sfp->state); in bfa_sfp_getdata()
3791 sfp->lock = 1; in bfa_sfp_getdata()
3792 sfp->memtype = memtype; in bfa_sfp_getdata()
3796 bfa_alen_set(&req->alen, sizeof(struct sfp_mem_s), sfp->dbuf_pa); in bfa_sfp_getdata()
3798 bfa_sfp_getdata_send(sfp); in bfa_sfp_getdata()
3805 bfa_sfp_scn(struct bfa_sfp_s *sfp, struct bfi_mbmsg_s *msg) in bfa_sfp_scn() argument
3811 sfp->state = BFA_SFP_STATE_INSERTED; in bfa_sfp_scn()
3812 sfp->data_valid = 0; in bfa_sfp_scn()
3813 bfa_sfp_scn_aen_post(sfp, rsp); in bfa_sfp_scn()
3816 sfp->state = BFA_SFP_STATE_REMOVED; in bfa_sfp_scn()
3817 sfp->data_valid = 0; in bfa_sfp_scn()
3818 bfa_sfp_scn_aen_post(sfp, rsp); in bfa_sfp_scn()
3821 sfp->state = BFA_SFP_STATE_FAILED; in bfa_sfp_scn()
3822 sfp->data_valid = 0; in bfa_sfp_scn()
3823 bfa_sfp_scn_aen_post(sfp, rsp); in bfa_sfp_scn()
3826 sfp->state = BFA_SFP_STATE_UNSUPPORT; in bfa_sfp_scn()
3827 bfa_sfp_scn_aen_post(sfp, rsp); in bfa_sfp_scn()
3828 if (!sfp->lock) in bfa_sfp_scn()
3829 bfa_sfp_getdata(sfp, BFI_SFP_MEM_ALL); in bfa_sfp_scn()
3832 bfa_sfp_scn_aen_post(sfp, rsp); in bfa_sfp_scn()
3835 sfp->state = BFA_SFP_STATE_VALID; in bfa_sfp_scn()
3836 if (!sfp->lock) in bfa_sfp_scn()
3837 bfa_sfp_getdata(sfp, BFI_SFP_MEM_ALL); in bfa_sfp_scn()
3840 bfa_trc(sfp, rsp->event); in bfa_sfp_scn()
3849 bfa_sfp_show_comp(struct bfa_sfp_s *sfp, struct bfi_mbmsg_s *msg) in bfa_sfp_show_comp() argument
3853 if (!sfp->lock) { in bfa_sfp_show_comp()
3857 bfa_trc(sfp, sfp->lock); in bfa_sfp_show_comp()
3861 bfa_trc(sfp, rsp->status); in bfa_sfp_show_comp()
3863 sfp->data_valid = 1; in bfa_sfp_show_comp()
3864 if (sfp->state == BFA_SFP_STATE_VALID) in bfa_sfp_show_comp()
3865 sfp->status = BFA_STATUS_OK; in bfa_sfp_show_comp()
3866 else if (sfp->state == BFA_SFP_STATE_UNSUPPORT) in bfa_sfp_show_comp()
3867 sfp->status = BFA_STATUS_SFP_UNSUPP; in bfa_sfp_show_comp()
3869 bfa_trc(sfp, sfp->state); in bfa_sfp_show_comp()
3871 sfp->data_valid = 0; in bfa_sfp_show_comp()
3872 sfp->status = rsp->status; in bfa_sfp_show_comp()
3876 bfa_trc(sfp, sfp->memtype); in bfa_sfp_show_comp()
3877 if (sfp->memtype == BFI_SFP_MEM_DIAGEXT) { in bfa_sfp_show_comp()
3878 bfa_trc(sfp, sfp->data_valid); in bfa_sfp_show_comp()
3879 if (sfp->data_valid) { in bfa_sfp_show_comp()
3881 u8 *des = (u8 *) &(sfp->sfpmem); in bfa_sfp_show_comp()
3882 memcpy(des, sfp->dbuf_kva, size); in bfa_sfp_show_comp()
3887 bfa_cb_sfp_show(sfp); in bfa_sfp_show_comp()
3889 sfp->lock = 0; in bfa_sfp_show_comp()
3891 bfa_trc(sfp, sfp->state_query_lock); in bfa_sfp_show_comp()
3892 if (sfp->state_query_lock) { in bfa_sfp_show_comp()
3893 sfp->state = rsp->state; in bfa_sfp_show_comp()
3895 bfa_cb_sfp_state_query(sfp); in bfa_sfp_show_comp()
3903 bfa_sfp_state_query(struct bfa_sfp_s *sfp) in bfa_sfp_state_query() argument
3905 struct bfi_sfp_req_s *req = (struct bfi_sfp_req_s *)sfp->mbcmd.msg; in bfa_sfp_state_query()
3908 WARN_ON(sfp->state != BFA_SFP_STATE_INIT); in bfa_sfp_state_query()
3909 WARN_ON(sfp->state_query_lock != 0); in bfa_sfp_state_query()
3910 bfa_trc(sfp, sfp->state); in bfa_sfp_state_query()
3912 sfp->state_query_lock = 1; in bfa_sfp_state_query()
3915 if (!sfp->lock) in bfa_sfp_state_query()
3916 bfa_sfp_getdata(sfp, BFI_SFP_MEM_ALL); in bfa_sfp_state_query()
3920 bfa_sfp_media_get(struct bfa_sfp_s *sfp) in bfa_sfp_media_get() argument
3922 enum bfa_defs_sfp_media_e *media = sfp->media; in bfa_sfp_media_get()
3926 if (sfp->state == BFA_SFP_STATE_UNSUPPORT) in bfa_sfp_media_get()
3928 else if (sfp->state == BFA_SFP_STATE_VALID) { in bfa_sfp_media_get()
3930 struct sfp_mem_s *sfpmem = (struct sfp_mem_s *)sfp->dbuf_kva; in bfa_sfp_media_get()
3935 bfa_trc(sfp, e10g.b); in bfa_sfp_media_get()
3936 bfa_trc(sfp, xmtr_tech); in bfa_sfp_media_get()
3960 bfa_trc(sfp, 0); in bfa_sfp_media_get()
3962 bfa_trc(sfp, sfp->state); in bfa_sfp_media_get()
3966 bfa_sfp_speed_valid(struct bfa_sfp_s *sfp, enum bfa_port_speed portspeed) in bfa_sfp_speed_valid() argument
3968 struct sfp_mem_s *sfpmem = (struct sfp_mem_s *)sfp->dbuf_kva; in bfa_sfp_speed_valid()
3977 bfa_trc(sfp, e10g.b); in bfa_sfp_speed_valid()
3988 bfa_trc(sfp, portspeed); in bfa_sfp_speed_valid()
3989 bfa_trc(sfp, fc3.b); in bfa_sfp_speed_valid()
3990 bfa_trc(sfp, e10g.b); in bfa_sfp_speed_valid()
4001 struct bfa_sfp_s *sfp = sfparg; in bfa_sfp_intr() local
4005 bfa_sfp_show_comp(sfp, msg); in bfa_sfp_intr()
4009 bfa_sfp_scn(sfp, msg); in bfa_sfp_intr()
4013 bfa_trc(sfp, msg->mh.msg_id); in bfa_sfp_intr()
4031 bfa_sfp_attach(struct bfa_sfp_s *sfp, struct bfa_ioc_s *ioc, void *dev, in bfa_sfp_attach() argument
4034 sfp->dev = dev; in bfa_sfp_attach()
4035 sfp->ioc = ioc; in bfa_sfp_attach()
4036 sfp->trcmod = trcmod; in bfa_sfp_attach()
4038 sfp->cbfn = NULL; in bfa_sfp_attach()
4039 sfp->cbarg = NULL; in bfa_sfp_attach()
4040 sfp->sfpmem = NULL; in bfa_sfp_attach()
4041 sfp->lock = 0; in bfa_sfp_attach()
4042 sfp->data_valid = 0; in bfa_sfp_attach()
4043 sfp->state = BFA_SFP_STATE_INIT; in bfa_sfp_attach()
4044 sfp->state_query_lock = 0; in bfa_sfp_attach()
4045 sfp->state_query_cbfn = NULL; in bfa_sfp_attach()
4046 sfp->state_query_cbarg = NULL; in bfa_sfp_attach()
4047 sfp->media = NULL; in bfa_sfp_attach()
4048 sfp->portspeed = BFA_PORT_SPEED_UNKNOWN; in bfa_sfp_attach()
4049 sfp->is_elb = BFA_FALSE; in bfa_sfp_attach()
4051 bfa_ioc_mbox_regisr(sfp->ioc, BFI_MC_SFP, bfa_sfp_intr, sfp); in bfa_sfp_attach()
4052 bfa_q_qe_init(&sfp->ioc_notify); in bfa_sfp_attach()
4053 bfa_ioc_notify_init(&sfp->ioc_notify, bfa_sfp_notify, sfp); in bfa_sfp_attach()
4054 list_add_tail(&sfp->ioc_notify.qe, &sfp->ioc->notify_q); in bfa_sfp_attach()
4061 bfa_sfp_memclaim(struct bfa_sfp_s *sfp, u8 *dm_kva, u64 dm_pa) in bfa_sfp_memclaim() argument
4063 sfp->dbuf_kva = dm_kva; in bfa_sfp_memclaim()
4064 sfp->dbuf_pa = dm_pa; in bfa_sfp_memclaim()
4065 memset(sfp->dbuf_kva, 0, sizeof(struct sfp_mem_s)); in bfa_sfp_memclaim()
4080 bfa_sfp_show(struct bfa_sfp_s *sfp, struct sfp_mem_s *sfpmem, in bfa_sfp_show() argument
4084 if (!bfa_ioc_is_operational(sfp->ioc)) { in bfa_sfp_show()
4085 bfa_trc(sfp, 0); in bfa_sfp_show()
4089 if (sfp->lock) { in bfa_sfp_show()
4090 bfa_trc(sfp, 0); in bfa_sfp_show()
4094 sfp->cbfn = cbfn; in bfa_sfp_show()
4095 sfp->cbarg = cbarg; in bfa_sfp_show()
4096 sfp->sfpmem = sfpmem; in bfa_sfp_show()
4098 bfa_sfp_getdata(sfp, BFI_SFP_MEM_DIAGEXT); in bfa_sfp_show()
4111 bfa_sfp_media(struct bfa_sfp_s *sfp, enum bfa_defs_sfp_media_e *media, in bfa_sfp_media() argument
4114 if (!bfa_ioc_is_operational(sfp->ioc)) { in bfa_sfp_media()
4115 bfa_trc(sfp, 0); in bfa_sfp_media()
4119 sfp->media = media; in bfa_sfp_media()
4120 if (sfp->state == BFA_SFP_STATE_INIT) { in bfa_sfp_media()
4121 if (sfp->state_query_lock) { in bfa_sfp_media()
4122 bfa_trc(sfp, 0); in bfa_sfp_media()
4125 sfp->state_query_cbfn = cbfn; in bfa_sfp_media()
4126 sfp->state_query_cbarg = cbarg; in bfa_sfp_media()
4127 bfa_sfp_state_query(sfp); in bfa_sfp_media()
4132 bfa_sfp_media_get(sfp); in bfa_sfp_media()
4144 bfa_sfp_speed(struct bfa_sfp_s *sfp, enum bfa_port_speed portspeed, in bfa_sfp_speed() argument
4149 if (!bfa_ioc_is_operational(sfp->ioc)) in bfa_sfp_speed()
4153 if (bfa_mfg_is_mezz(sfp->ioc->attr->card_type)) in bfa_sfp_speed()
4157 sfp->portspeed = portspeed; in bfa_sfp_speed()
4158 if (sfp->state == BFA_SFP_STATE_INIT) { in bfa_sfp_speed()
4159 if (sfp->state_query_lock) { in bfa_sfp_speed()
4160 bfa_trc(sfp, 0); in bfa_sfp_speed()
4163 sfp->state_query_cbfn = cbfn; in bfa_sfp_speed()
4164 sfp->state_query_cbarg = cbarg; in bfa_sfp_speed()
4165 bfa_sfp_state_query(sfp); in bfa_sfp_speed()
4170 if (sfp->state == BFA_SFP_STATE_REMOVED || in bfa_sfp_speed()
4171 sfp->state == BFA_SFP_STATE_FAILED) { in bfa_sfp_speed()
4172 bfa_trc(sfp, sfp->state); in bfa_sfp_speed()
4176 if (sfp->state == BFA_SFP_STATE_INSERTED) { in bfa_sfp_speed()
4177 bfa_trc(sfp, sfp->state); in bfa_sfp_speed()
4182 if (sfp->is_elb) in bfa_sfp_speed()
4185 return bfa_sfp_speed_valid(sfp, portspeed); in bfa_sfp_speed()