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,
411 struct bfa_fcxp_s *fcxp;
413 fcxp = (struct bfa_fcxp_s *) bfa_mem_kva_curp(mod);
414 memset(fcxp, 0, sizeof(struct bfa_fcxp_s) * mod->num_fcxps);
422 mod->fcxp_list = fcxp;
425 fcxp->fcxp_mod = mod;
426 fcxp->fcxp_tag = i;
429 list_add_tail(&fcxp->qe, &mod->fcxp_req_free_q);
430 fcxp->req_rsp = BFA_TRUE;
432 list_add_tail(&fcxp->qe, &mod->fcxp_rsp_free_q);
433 fcxp->req_rsp = BFA_FALSE;
436 bfa_reqq_winit(&fcxp->reqq_wqe, bfa_fcxp_qresume, fcxp);
437 fcxp->reqq_waiting = BFA_FALSE;
439 fcxp = fcxp + 1;
442 bfa_mem_kva_curp(mod) = (void *)fcxp;
509 struct bfa_fcxp_s *fcxp;
512 /* Enqueue unused fcxp resources to free_q */
517 fcxp = (struct bfa_fcxp_s *) qe;
518 if (fcxp->caller == NULL) {
519 fcxp->send_cbfn(fcxp->caller, fcxp, fcxp->send_cbarg,
521 bfa_fcxp_free(fcxp);
523 fcxp->rsp_status = BFA_STATUS_IOC_FAILURE;
524 bfa_cb_queue(bfa, &fcxp->hcb_qe,
525 __bfa_fcxp_send_cbfn, fcxp);
533 struct bfa_fcxp_s *fcxp;
536 bfa_q_deq(&fm->fcxp_req_free_q, &fcxp);
538 bfa_q_deq(&fm->fcxp_rsp_free_q, &fcxp);
540 if (fcxp)
541 list_add_tail(&fcxp->qe, &fm->fcxp_active_q);
543 return fcxp;
547 bfa_fcxp_init_reqrsp(struct bfa_fcxp_s *fcxp,
561 bfa_trc(bfa, fcxp->fcxp_tag);
585 bfa_fcxp_init(struct bfa_fcxp_s *fcxp,
595 bfa_trc(bfa, fcxp->fcxp_tag);
597 fcxp->caller = caller;
599 bfa_fcxp_init_reqrsp(fcxp, bfa,
600 &fcxp->use_ireqbuf, &fcxp->nreq_sgles, &fcxp->req_sga_cbfn,
601 &fcxp->req_sglen_cbfn, &fcxp->req_sgpg_q,
604 bfa_fcxp_init_reqrsp(fcxp, bfa,
605 &fcxp->use_irspbuf, &fcxp->nrsp_sgles, &fcxp->rsp_sga_cbfn,
606 &fcxp->rsp_sglen_cbfn, &fcxp->rsp_sgpg_q,
612 bfa_fcxp_put(struct bfa_fcxp_s *fcxp)
614 struct bfa_fcxp_mod_s *mod = fcxp->fcxp_mod;
617 if (fcxp->req_rsp)
623 bfa_trc(mod->bfa, fcxp->fcxp_tag);
625 bfa_fcxp_init(fcxp, wqe->caller, wqe->bfa, wqe->nreq_sgles,
630 wqe->alloc_cbfn(wqe->alloc_cbarg, fcxp);
634 WARN_ON(!bfa_q_is_on_q(&mod->fcxp_active_q, fcxp));
635 list_del(&fcxp->qe);
637 if (fcxp->req_rsp)
638 list_add_tail(&fcxp->qe, &mod->fcxp_req_free_q);
640 list_add_tail(&fcxp->qe, &mod->fcxp_rsp_free_q);
644 bfa_fcxp_null_comp(void *bfad_fcxp, struct bfa_fcxp_s *fcxp, void *cbarg,
648 /* discarded fcxp completion */
654 struct bfa_fcxp_s *fcxp = cbarg;
657 fcxp->send_cbfn(fcxp->caller, fcxp, fcxp->send_cbarg,
658 fcxp->rsp_status, fcxp->rsp_len,
659 fcxp->residue_len, &fcxp->rsp_fchs);
661 bfa_fcxp_free(fcxp);
669 struct bfa_fcxp_s *fcxp;
685 fcxp = BFA_FCXP_FROM_TAG(mod, fcxp_tag);
687 WARN_ON(fcxp->send_cbfn == NULL);
689 hal_fcxp_rx_plog(mod->bfa, fcxp, fcxp_rsp);
691 if (fcxp->send_cbfn != NULL) {
692 bfa_trc(mod->bfa, (NULL == fcxp->caller));
693 if (fcxp->caller == NULL) {
694 fcxp->send_cbfn(fcxp->caller, fcxp, fcxp->send_cbarg,
698 * fcxp automatically freed on return from the callback
700 bfa_fcxp_free(fcxp);
702 fcxp->rsp_status = fcxp_rsp->req_status;
703 fcxp->rsp_len = fcxp_rsp->rsp_len;
704 fcxp->residue_len = fcxp_rsp->residue_len;
705 fcxp->rsp_fchs = fcxp_rsp->fchs;
707 bfa_cb_queue(bfa, &fcxp->hcb_qe,
708 __bfa_fcxp_send_cbfn, fcxp);
711 bfa_trc(bfa, (NULL == fcxp->send_cbfn));
716 hal_fcxp_tx_plog(struct bfa_s *bfa, u32 reqlen, struct bfa_fcxp_s *fcxp,
723 if (fcxp->use_ireqbuf) {
725 *((u32 *) BFA_FCXP_REQ_PLD(fcxp));
744 hal_fcxp_rx_plog(struct bfa_s *bfa, struct bfa_fcxp_s *fcxp,
748 if (fcxp->use_irspbuf) {
750 *((u32 *) BFA_FCXP_RSP_PLD(fcxp));
769 * Handler to resume sending fcxp when space in available in cpe queue.
774 struct bfa_fcxp_s *fcxp = cbarg;
775 struct bfa_s *bfa = fcxp->fcxp_mod->bfa;
778 fcxp->reqq_waiting = BFA_FALSE;
780 bfa_fcxp_queue(fcxp, send_req);
784 * Queue fcxp send request to foimrware.
787 bfa_fcxp_queue(struct bfa_fcxp_s *fcxp, struct bfi_fcxp_send_req_s *send_req)
789 struct bfa_s *bfa = fcxp->fcxp_mod->bfa;
790 struct bfa_fcxp_req_info_s *reqi = &fcxp->req_info;
791 struct bfa_fcxp_rsp_info_s *rspi = &fcxp->rsp_info;
797 send_req->fcxp_tag = cpu_to_be16(fcxp->fcxp_tag);
821 if (fcxp->use_ireqbuf == 1) {
823 BFA_FCXP_REQ_PLD_PA(fcxp));
825 if (fcxp->nreq_sgles > 0) {
826 WARN_ON(fcxp->nreq_sgles != 1);
828 fcxp->req_sga_cbfn(fcxp->caller, 0));
838 if (fcxp->use_irspbuf == 1) {
842 BFA_FCXP_RSP_PLD_PA(fcxp));
844 if (fcxp->nrsp_sgles > 0) {
845 WARN_ON(fcxp->nrsp_sgles != 1);
847 fcxp->rsp_sga_cbfn(fcxp->caller, 0));
855 hal_fcxp_tx_plog(bfa, reqi->req_tot_len, fcxp, &reqi->fchs);
869 * buffer. 0, if fcxp internal buffers are used.
895 struct bfa_fcxp_s *fcxp = NULL;
899 fcxp = bfa_fcxp_get(BFA_FCXP_MOD(bfa), req);
900 if (fcxp == NULL)
903 bfa_trc(bfa, fcxp->fcxp_tag);
905 bfa_fcxp_init(fcxp, caller, bfa, nreq_sgles, nrsp_sgles, req_sga_cbfn,
908 return fcxp;
914 * @param[in] fcxp BFA fcxp pointer
919 bfa_fcxp_get_reqbuf(struct bfa_fcxp_s *fcxp)
921 struct bfa_fcxp_mod_s *mod = fcxp->fcxp_mod;
924 WARN_ON(fcxp->use_ireqbuf != 1);
925 reqbuf = bfa_mem_get_dmabuf_kva(mod, fcxp->fcxp_tag,
931 bfa_fcxp_get_reqbufsz(struct bfa_fcxp_s *fcxp)
933 struct bfa_fcxp_mod_s *mod = fcxp->fcxp_mod;
941 * @param[in] fcxp BFA fcxp pointer
946 bfa_fcxp_get_rspbuf(struct bfa_fcxp_s *fcxp)
948 struct bfa_fcxp_mod_s *mod = fcxp->fcxp_mod;
951 WARN_ON(fcxp->use_irspbuf != 1);
953 fcxp_buf = bfa_mem_get_dmabuf_kva(mod, fcxp->fcxp_tag,
963 * @param[in] fcxp BFA fcxp pointer
968 bfa_fcxp_free(struct bfa_fcxp_s *fcxp)
970 struct bfa_fcxp_mod_s *mod = fcxp->fcxp_mod;
972 WARN_ON(fcxp == NULL);
973 bfa_trc(mod->bfa, fcxp->fcxp_tag);
974 bfa_fcxp_put(fcxp);
980 * @param[in] fcxp BFA fcxp pointer
999 bfa_fcxp_send(struct bfa_fcxp_s *fcxp, struct bfa_rport_s *rport,
1004 struct bfa_s *bfa = fcxp->fcxp_mod->bfa;
1005 struct bfa_fcxp_req_info_s *reqi = &fcxp->req_info;
1006 struct bfa_fcxp_rsp_info_s *rspi = &fcxp->rsp_info;
1009 bfa_trc(bfa, fcxp->fcxp_tag);
1023 fcxp->send_cbfn = cbfn ? cbfn : bfa_fcxp_null_comp;
1024 fcxp->send_cbarg = cbarg;
1031 bfa_trc(bfa, fcxp->fcxp_tag);
1032 fcxp->reqq_waiting = BFA_TRUE;
1033 bfa_reqq_wait(bfa, BFA_REQQ_FCXP, &fcxp->reqq_wqe);
1037 bfa_fcxp_queue(fcxp, send_req);
1043 * @param[in] fcxp BFA fcxp pointer
1048 bfa_fcxp_abort(struct bfa_fcxp_s *fcxp)
1050 bfa_trc(fcxp->fcxp_mod->bfa, fcxp->fcxp_tag);
1099 bfa_fcxp_discard(struct bfa_fcxp_s *fcxp)
1103 * and free fcxp.
1105 if (fcxp->reqq_waiting) {
1106 fcxp->reqq_waiting = BFA_FALSE;
1107 bfa_reqq_wcancel(&fcxp->reqq_wqe);
1108 bfa_fcxp_free(fcxp);
1112 fcxp->send_cbfn = bfa_fcxp_null_comp;