Lines Matching refs:comp_ctx
281 struct efa_comp_ctx *comp_ctx) in efa_com_put_comp_ctx() argument
283 u16 cmd_id = comp_ctx->user_cqe->acq_common_descriptor.command & in efa_com_put_comp_ctx()
288 comp_ctx->occupied = 0; in efa_com_put_comp_ctx()
297 if (aq->comp_ctx[ctx_id].occupied && capture) { in efa_com_get_comp_ctx()
306 aq->comp_ctx[ctx_id].occupied = 1; in efa_com_get_comp_ctx()
311 return &aq->comp_ctx[ctx_id]; in efa_com_get_comp_ctx()
320 struct efa_comp_ctx *comp_ctx; in __efa_com_submit_admin_cmd() local
340 comp_ctx = efa_com_get_comp_ctx(aq, cmd_id, true); in __efa_com_submit_admin_cmd()
341 if (!comp_ctx) { in __efa_com_submit_admin_cmd()
346 comp_ctx->status = EFA_CMD_SUBMITTED; in __efa_com_submit_admin_cmd()
347 comp_ctx->comp_size = comp_size_in_bytes; in __efa_com_submit_admin_cmd()
348 comp_ctx->user_cqe = comp; in __efa_com_submit_admin_cmd()
349 comp_ctx->cmd_opcode = cmd->aq_common_descriptor.opcode; in __efa_com_submit_admin_cmd()
351 reinit_completion(&comp_ctx->wait_event); in __efa_com_submit_admin_cmd()
364 return comp_ctx; in __efa_com_submit_admin_cmd()
371 struct efa_comp_ctx *comp_ctx; in efa_com_init_comp_ctxt() local
374 aq->comp_ctx = devm_kzalloc(aq->dmadev, size, GFP_KERNEL); in efa_com_init_comp_ctxt()
376 if (!aq->comp_ctx || !aq->comp_ctx_pool) { in efa_com_init_comp_ctxt()
378 devm_kfree(aq->dmadev, aq->comp_ctx); in efa_com_init_comp_ctxt()
383 comp_ctx = efa_com_get_comp_ctx(aq, i, false); in efa_com_init_comp_ctxt()
384 if (comp_ctx) in efa_com_init_comp_ctxt()
385 init_completion(&comp_ctx->wait_event); in efa_com_init_comp_ctxt()
403 struct efa_comp_ctx *comp_ctx; in efa_com_submit_admin_cmd() local
412 comp_ctx = __efa_com_submit_admin_cmd(aq, cmd, cmd_size_in_bytes, comp, in efa_com_submit_admin_cmd()
415 if (IS_ERR(comp_ctx)) in efa_com_submit_admin_cmd()
418 return comp_ctx; in efa_com_submit_admin_cmd()
424 struct efa_comp_ctx *comp_ctx; in efa_com_handle_single_admin_completion() local
430 comp_ctx = efa_com_get_comp_ctx(aq, cmd_id, false); in efa_com_handle_single_admin_completion()
431 if (!comp_ctx) { in efa_com_handle_single_admin_completion()
438 comp_ctx->status = EFA_CMD_COMPLETED; in efa_com_handle_single_admin_completion()
439 comp_ctx->comp_status = cqe->acq_common_descriptor.status; in efa_com_handle_single_admin_completion()
440 if (comp_ctx->user_cqe) in efa_com_handle_single_admin_completion()
441 memcpy(comp_ctx->user_cqe, cqe, comp_ctx->comp_size); in efa_com_handle_single_admin_completion()
444 complete(&comp_ctx->wait_event); in efa_com_handle_single_admin_completion()
507 static int efa_com_wait_and_process_admin_cq_polling(struct efa_comp_ctx *comp_ctx, in efa_com_wait_and_process_admin_cq_polling() argument
521 if (comp_ctx->status != EFA_CMD_SUBMITTED) in efa_com_wait_and_process_admin_cq_polling()
539 err = efa_com_comp_status_to_errno(comp_ctx->comp_status); in efa_com_wait_and_process_admin_cq_polling()
541 efa_com_put_comp_ctx(aq, comp_ctx); in efa_com_wait_and_process_admin_cq_polling()
545 static int efa_com_wait_and_process_admin_cq_interrupts(struct efa_comp_ctx *comp_ctx, in efa_com_wait_and_process_admin_cq_interrupts() argument
551 wait_for_completion_timeout(&comp_ctx->wait_event, in efa_com_wait_and_process_admin_cq_interrupts()
560 if (comp_ctx->status == EFA_CMD_SUBMITTED) { in efa_com_wait_and_process_admin_cq_interrupts()
567 if (comp_ctx->status == EFA_CMD_COMPLETED) in efa_com_wait_and_process_admin_cq_interrupts()
571 efa_com_cmd_str(comp_ctx->cmd_opcode), in efa_com_wait_and_process_admin_cq_interrupts()
572 comp_ctx->cmd_opcode, comp_ctx->status, in efa_com_wait_and_process_admin_cq_interrupts()
573 comp_ctx, aq->sq.pc, aq->sq.cc, aq->cq.cc); in efa_com_wait_and_process_admin_cq_interrupts()
578 efa_com_cmd_str(comp_ctx->cmd_opcode), in efa_com_wait_and_process_admin_cq_interrupts()
579 comp_ctx->cmd_opcode, comp_ctx->status, in efa_com_wait_and_process_admin_cq_interrupts()
580 comp_ctx, aq->sq.pc, aq->sq.cc, aq->cq.cc); in efa_com_wait_and_process_admin_cq_interrupts()
587 err = efa_com_comp_status_to_errno(comp_ctx->comp_status); in efa_com_wait_and_process_admin_cq_interrupts()
589 efa_com_put_comp_ctx(aq, comp_ctx); in efa_com_wait_and_process_admin_cq_interrupts()
601 static int efa_com_wait_and_process_admin_cq(struct efa_comp_ctx *comp_ctx, in efa_com_wait_and_process_admin_cq() argument
605 return efa_com_wait_and_process_admin_cq_polling(comp_ctx, aq); in efa_com_wait_and_process_admin_cq()
607 return efa_com_wait_and_process_admin_cq_interrupts(comp_ctx, aq); in efa_com_wait_and_process_admin_cq()
629 struct efa_comp_ctx *comp_ctx; in efa_com_cmd_exec() local
640 comp_ctx = efa_com_submit_admin_cmd(aq, cmd, cmd_size, comp, comp_size); in efa_com_cmd_exec()
641 if (IS_ERR(comp_ctx)) { in efa_com_cmd_exec()
646 cmd->aq_common_descriptor.opcode, PTR_ERR(comp_ctx)); in efa_com_cmd_exec()
649 return PTR_ERR(comp_ctx); in efa_com_cmd_exec()
652 err = efa_com_wait_and_process_admin_cq(comp_ctx, aq); in efa_com_cmd_exec()
658 cmd->aq_common_descriptor.opcode, comp_ctx->comp_status, in efa_com_cmd_exec()
681 devm_kfree(edev->dmadev, aq->comp_ctx); in efa_com_admin_destroy()
799 devm_kfree(edev->dmadev, aq->comp_ctx); in efa_com_admin_init()