Lines Matching defs:fcxp
98 static void hal_fcxp_rx_plog(struct bfa_s *bfa, struct bfa_fcxp_s *fcxp,
101 struct bfa_fcxp_s *fcxp, struct fchs_s *fchs);
103 static void bfa_fcxp_queue(struct bfa_fcxp_s *fcxp,
417 struct bfa_fcxp_s *fcxp;
419 fcxp = (struct bfa_fcxp_s *) bfa_mem_kva_curp(mod);
420 memset(fcxp, 0, sizeof(struct bfa_fcxp_s) * mod->num_fcxps);
428 mod->fcxp_list = fcxp;
431 fcxp->fcxp_mod = mod;
432 fcxp->fcxp_tag = i;
435 list_add_tail(&fcxp->qe, &mod->fcxp_req_free_q);
436 fcxp->req_rsp = BFA_TRUE;
438 list_add_tail(&fcxp->qe, &mod->fcxp_rsp_free_q);
439 fcxp->req_rsp = BFA_FALSE;
442 bfa_reqq_winit(&fcxp->reqq_wqe, bfa_fcxp_qresume, fcxp);
443 fcxp->reqq_waiting = BFA_FALSE;
445 fcxp = fcxp + 1;
448 bfa_mem_kva_curp(mod) = (void *)fcxp;
515 struct bfa_fcxp_s *fcxp;
518 /* Enqueue unused fcxp resources to free_q */
523 fcxp = (struct bfa_fcxp_s *) qe;
524 if (fcxp->caller == NULL) {
525 fcxp->send_cbfn(fcxp->caller, fcxp, fcxp->send_cbarg,
527 bfa_fcxp_free(fcxp);
529 fcxp->rsp_status = BFA_STATUS_IOC_FAILURE;
530 bfa_cb_queue(bfa, &fcxp->hcb_qe,
531 __bfa_fcxp_send_cbfn, fcxp);
539 struct bfa_fcxp_s *fcxp;
542 bfa_q_deq(&fm->fcxp_req_free_q, &fcxp);
544 bfa_q_deq(&fm->fcxp_rsp_free_q, &fcxp);
546 if (fcxp)
547 list_add_tail(&fcxp->qe, &fm->fcxp_active_q);
549 return fcxp;
553 bfa_fcxp_init_reqrsp(struct bfa_fcxp_s *fcxp,
567 bfa_trc(bfa, fcxp->fcxp_tag);
591 bfa_fcxp_init(struct bfa_fcxp_s *fcxp,
601 bfa_trc(bfa, fcxp->fcxp_tag);
603 fcxp->caller = caller;
605 bfa_fcxp_init_reqrsp(fcxp, bfa,
606 &fcxp->use_ireqbuf, &fcxp->nreq_sgles, &fcxp->req_sga_cbfn,
607 &fcxp->req_sglen_cbfn, &fcxp->req_sgpg_q,
610 bfa_fcxp_init_reqrsp(fcxp, bfa,
611 &fcxp->use_irspbuf, &fcxp->nrsp_sgles, &fcxp->rsp_sga_cbfn,
612 &fcxp->rsp_sglen_cbfn, &fcxp->rsp_sgpg_q,
618 bfa_fcxp_put(struct bfa_fcxp_s *fcxp)
620 struct bfa_fcxp_mod_s *mod = fcxp->fcxp_mod;
623 if (fcxp->req_rsp)
629 bfa_trc(mod->bfa, fcxp->fcxp_tag);
631 bfa_fcxp_init(fcxp, wqe->caller, wqe->bfa, wqe->nreq_sgles,
636 wqe->alloc_cbfn(wqe->alloc_cbarg, fcxp);
640 WARN_ON(!bfa_q_is_on_q(&mod->fcxp_active_q, fcxp));
641 list_del(&fcxp->qe);
643 if (fcxp->req_rsp)
644 list_add_tail(&fcxp->qe, &mod->fcxp_req_free_q);
646 list_add_tail(&fcxp->qe, &mod->fcxp_rsp_free_q);
650 bfa_fcxp_null_comp(void *bfad_fcxp, struct bfa_fcxp_s *fcxp, void *cbarg,
654 /* discarded fcxp completion */
660 struct bfa_fcxp_s *fcxp = cbarg;
663 fcxp->send_cbfn(fcxp->caller, fcxp, fcxp->send_cbarg,
664 fcxp->rsp_status, fcxp->rsp_len,
665 fcxp->residue_len, &fcxp->rsp_fchs);
667 bfa_fcxp_free(fcxp);
675 struct bfa_fcxp_s *fcxp;
691 fcxp = BFA_FCXP_FROM_TAG(mod, fcxp_tag);
693 WARN_ON(fcxp->send_cbfn == NULL);
695 hal_fcxp_rx_plog(mod->bfa, fcxp, fcxp_rsp);
697 if (fcxp->send_cbfn != NULL) {
698 bfa_trc(mod->bfa, (NULL == fcxp->caller));
699 if (fcxp->caller == NULL) {
700 fcxp->send_cbfn(fcxp->caller, fcxp, fcxp->send_cbarg,
704 * fcxp automatically freed on return from the callback
706 bfa_fcxp_free(fcxp);
708 fcxp->rsp_status = fcxp_rsp->req_status;
709 fcxp->rsp_len = fcxp_rsp->rsp_len;
710 fcxp->residue_len = fcxp_rsp->residue_len;
711 fcxp->rsp_fchs = fcxp_rsp->fchs;
713 bfa_cb_queue(bfa, &fcxp->hcb_qe,
714 __bfa_fcxp_send_cbfn, fcxp);
717 bfa_trc(bfa, (NULL == fcxp->send_cbfn));
722 hal_fcxp_tx_plog(struct bfa_s *bfa, u32 reqlen, struct bfa_fcxp_s *fcxp,
729 if (fcxp->use_ireqbuf) {
731 *((u32 *) BFA_FCXP_REQ_PLD(fcxp));
750 hal_fcxp_rx_plog(struct bfa_s *bfa, struct bfa_fcxp_s *fcxp,
754 if (fcxp->use_irspbuf) {
756 *((u32 *) BFA_FCXP_RSP_PLD(fcxp));
775 * Handler to resume sending fcxp when space in available in cpe queue.
780 struct bfa_fcxp_s *fcxp = cbarg;
781 struct bfa_s *bfa = fcxp->fcxp_mod->bfa;
784 fcxp->reqq_waiting = BFA_FALSE;
786 bfa_fcxp_queue(fcxp, send_req);
790 * Queue fcxp send request to foimrware.
793 bfa_fcxp_queue(struct bfa_fcxp_s *fcxp, struct bfi_fcxp_send_req_s *send_req)
795 struct bfa_s *bfa = fcxp->fcxp_mod->bfa;
796 struct bfa_fcxp_req_info_s *reqi = &fcxp->req_info;
797 struct bfa_fcxp_rsp_info_s *rspi = &fcxp->rsp_info;
803 send_req->fcxp_tag = cpu_to_be16(fcxp->fcxp_tag);
827 if (fcxp->use_ireqbuf == 1) {
829 BFA_FCXP_REQ_PLD_PA(fcxp));
831 if (fcxp->nreq_sgles > 0) {
832 WARN_ON(fcxp->nreq_sgles != 1);
834 fcxp->req_sga_cbfn(fcxp->caller, 0));
844 if (fcxp->use_irspbuf == 1) {
848 BFA_FCXP_RSP_PLD_PA(fcxp));
850 if (fcxp->nrsp_sgles > 0) {
851 WARN_ON(fcxp->nrsp_sgles != 1);
853 fcxp->rsp_sga_cbfn(fcxp->caller, 0));
861 hal_fcxp_tx_plog(bfa, reqi->req_tot_len, fcxp, &reqi->fchs);
875 * buffer. 0, if fcxp internal buffers are used.
901 struct bfa_fcxp_s *fcxp = NULL;
905 fcxp = bfa_fcxp_get(BFA_FCXP_MOD(bfa), req);
906 if (fcxp == NULL)
909 bfa_trc(bfa, fcxp->fcxp_tag);
911 bfa_fcxp_init(fcxp, caller, bfa, nreq_sgles, nrsp_sgles, req_sga_cbfn,
914 return fcxp;
920 * @param[in] fcxp BFA fcxp pointer
925 bfa_fcxp_get_reqbuf(struct bfa_fcxp_s *fcxp)
927 struct bfa_fcxp_mod_s *mod = fcxp->fcxp_mod;
930 WARN_ON(fcxp->use_ireqbuf != 1);
931 reqbuf = bfa_mem_get_dmabuf_kva(mod, fcxp->fcxp_tag,
937 bfa_fcxp_get_reqbufsz(struct bfa_fcxp_s *fcxp)
939 struct bfa_fcxp_mod_s *mod = fcxp->fcxp_mod;
947 * @param[in] fcxp BFA fcxp pointer
952 bfa_fcxp_get_rspbuf(struct bfa_fcxp_s *fcxp)
954 struct bfa_fcxp_mod_s *mod = fcxp->fcxp_mod;
957 WARN_ON(fcxp->use_irspbuf != 1);
959 fcxp_buf = bfa_mem_get_dmabuf_kva(mod, fcxp->fcxp_tag,
969 * @param[in] fcxp BFA fcxp pointer
974 bfa_fcxp_free(struct bfa_fcxp_s *fcxp)
976 struct bfa_fcxp_mod_s *mod = fcxp->fcxp_mod;
978 WARN_ON(fcxp == NULL);
979 bfa_trc(mod->bfa, fcxp->fcxp_tag);
980 bfa_fcxp_put(fcxp);
986 * @param[in] fcxp BFA fcxp pointer
1005 bfa_fcxp_send(struct bfa_fcxp_s *fcxp, struct bfa_rport_s *rport,
1010 struct bfa_s *bfa = fcxp->fcxp_mod->bfa;
1011 struct bfa_fcxp_req_info_s *reqi = &fcxp->req_info;
1012 struct bfa_fcxp_rsp_info_s *rspi = &fcxp->rsp_info;
1015 bfa_trc(bfa, fcxp->fcxp_tag);
1029 fcxp->send_cbfn = cbfn ? cbfn : bfa_fcxp_null_comp;
1030 fcxp->send_cbarg = cbarg;
1037 bfa_trc(bfa, fcxp->fcxp_tag);
1038 fcxp->reqq_waiting = BFA_TRUE;
1039 bfa_reqq_wait(bfa, BFA_REQQ_FCXP, &fcxp->reqq_wqe);
1043 bfa_fcxp_queue(fcxp, send_req);
1049 * @param[in] fcxp BFA fcxp pointer
1054 bfa_fcxp_abort(struct bfa_fcxp_s *fcxp)
1056 bfa_trc(fcxp->fcxp_mod->bfa, fcxp->fcxp_tag);
1105 bfa_fcxp_discard(struct bfa_fcxp_s *fcxp)
1109 * and free fcxp.
1111 if (fcxp->reqq_waiting) {
1112 fcxp->reqq_waiting = BFA_FALSE;
1113 bfa_reqq_wcancel(&fcxp->reqq_wqe);
1114 bfa_fcxp_free(fcxp);
1118 fcxp->send_cbfn = bfa_fcxp_null_comp;