Lines Matching +full:sig +full:- +full:dir

1 // SPDX-License-Identifier: GPL-2.0-only
35 mutex_lock(&cptpf->lock); in forward_to_af()
36 msg = otx2_mbox_alloc_msg(&cptpf->afpf_mbox, 0, size); in forward_to_af()
38 mutex_unlock(&cptpf->lock); in forward_to_af()
39 return -ENOMEM; in forward_to_af()
44 msg->id = req->id; in forward_to_af()
45 msg->pcifunc = req->pcifunc; in forward_to_af()
46 msg->sig = req->sig; in forward_to_af()
47 msg->ver = req->ver; in forward_to_af()
49 ret = otx2_cpt_sync_mbox_msg(&cptpf->afpf_mbox); in forward_to_af()
50 /* Error code -EIO indicate there is a communication failure in forward_to_af()
55 if (ret == -EIO) { in forward_to_af()
56 dev_warn(&cptpf->pdev->dev, in forward_to_af()
57 "AF not responding to VF%d messages\n", vf->vf_id); in forward_to_af()
58 mutex_unlock(&cptpf->lock); in forward_to_af()
61 mutex_unlock(&cptpf->lock); in forward_to_af()
72 otx2_mbox_alloc_msg(&cptpf->vfpf_mbox, vf->vf_id, in handle_msg_get_caps()
75 return -ENOMEM; in handle_msg_get_caps()
77 rsp->hdr.id = MBOX_MSG_GET_CAPS; in handle_msg_get_caps()
78 rsp->hdr.sig = OTX2_MBOX_RSP_SIG; in handle_msg_get_caps()
79 rsp->hdr.pcifunc = req->pcifunc; in handle_msg_get_caps()
80 rsp->cpt_pf_drv_version = OTX2_CPT_PF_DRV_VERSION; in handle_msg_get_caps()
81 rsp->cpt_revision = cptpf->eng_grps.rid; in handle_msg_get_caps()
82 memcpy(&rsp->eng_caps, &cptpf->eng_caps, sizeof(rsp->eng_caps)); in handle_msg_get_caps()
96 otx2_mbox_alloc_msg(&cptpf->vfpf_mbox, vf->vf_id, sizeof(*rsp)); in handle_msg_get_eng_grp_num()
98 return -ENOMEM; in handle_msg_get_eng_grp_num()
100 rsp->hdr.id = MBOX_MSG_GET_ENG_GRP_NUM; in handle_msg_get_eng_grp_num()
101 rsp->hdr.sig = OTX2_MBOX_RSP_SIG; in handle_msg_get_eng_grp_num()
102 rsp->hdr.pcifunc = req->pcifunc; in handle_msg_get_eng_grp_num()
103 rsp->eng_type = grp_req->eng_type; in handle_msg_get_eng_grp_num()
104 rsp->eng_grp_num = otx2_cpt_get_eng_grp(&cptpf->eng_grps, in handle_msg_get_eng_grp_num()
105 grp_req->eng_type); in handle_msg_get_eng_grp_num()
117 otx2_mbox_alloc_msg(&cptpf->vfpf_mbox, vf->vf_id, sizeof(*rsp)); in handle_msg_kvf_limits()
119 return -ENOMEM; in handle_msg_kvf_limits()
121 rsp->hdr.id = MBOX_MSG_GET_KVF_LIMITS; in handle_msg_kvf_limits()
122 rsp->hdr.sig = OTX2_MBOX_RSP_SIG; in handle_msg_kvf_limits()
123 rsp->hdr.pcifunc = req->pcifunc; in handle_msg_kvf_limits()
124 rsp->kvf_limits = cptpf->kvf_limits; in handle_msg_kvf_limits()
133 struct pci_dev *pdev = cptpf->pdev; in send_inline_ipsec_inbound_msg()
136 otx2_mbox_alloc_msg_rsp(&cptpf->afpf_mbox, 0, in send_inline_ipsec_inbound_msg()
139 dev_err(&pdev->dev, "RVU MBOX failed to get message.\n"); in send_inline_ipsec_inbound_msg()
140 return -EFAULT; in send_inline_ipsec_inbound_msg()
143 req->hdr.id = MBOX_MSG_CPT_INLINE_IPSEC_CFG; in send_inline_ipsec_inbound_msg()
144 req->hdr.sig = OTX2_MBOX_REQ_SIG; in send_inline_ipsec_inbound_msg()
145 req->hdr.pcifunc = OTX2_CPT_RVU_PFFUNC(cptpf->pf_id, 0); in send_inline_ipsec_inbound_msg()
146 req->dir = CPT_INLINE_INBOUND; in send_inline_ipsec_inbound_msg()
147 req->slot = slot; in send_inline_ipsec_inbound_msg()
148 req->sso_pf_func_ovrd = cptpf->sso_pf_func_ovrd; in send_inline_ipsec_inbound_msg()
149 req->sso_pf_func = sso_pf_func; in send_inline_ipsec_inbound_msg()
150 req->enable = 1; in send_inline_ipsec_inbound_msg()
152 return otx2_cpt_send_mbox_msg(&cptpf->afpf_mbox, pdev); in send_inline_ipsec_inbound_msg()
159 struct pci_dev *pdev = cptpf->pdev; in rx_inline_ipsec_lf_cfg()
163 otx2_mbox_alloc_msg_rsp(&cptpf->afpf_mbox, 0, in rx_inline_ipsec_lf_cfg()
167 dev_err(&pdev->dev, "RVU MBOX failed to get message.\n"); in rx_inline_ipsec_lf_cfg()
168 return -EFAULT; in rx_inline_ipsec_lf_cfg()
171 nix_req->hdr.id = MBOX_MSG_NIX_INLINE_IPSEC_CFG; in rx_inline_ipsec_lf_cfg()
172 nix_req->hdr.sig = OTX2_MBOX_REQ_SIG; in rx_inline_ipsec_lf_cfg()
173 nix_req->enable = 1; in rx_inline_ipsec_lf_cfg()
174 nix_req->credit_th = req->credit_th; in rx_inline_ipsec_lf_cfg()
175 nix_req->bpid = req->bpid; in rx_inline_ipsec_lf_cfg()
176 if (!req->credit || req->credit > OTX2_CPT_INST_QLEN_MSGS) in rx_inline_ipsec_lf_cfg()
177 nix_req->cpt_credit = OTX2_CPT_INST_QLEN_MSGS - 1; in rx_inline_ipsec_lf_cfg()
179 nix_req->cpt_credit = req->credit - 1; in rx_inline_ipsec_lf_cfg()
180 nix_req->gen_cfg.egrp = egrp; in rx_inline_ipsec_lf_cfg()
181 if (req->opcode) in rx_inline_ipsec_lf_cfg()
182 nix_req->gen_cfg.opcode = req->opcode; in rx_inline_ipsec_lf_cfg()
184 nix_req->gen_cfg.opcode = cpt_inline_rx_opcode(pdev); in rx_inline_ipsec_lf_cfg()
185 nix_req->gen_cfg.param1 = req->param1; in rx_inline_ipsec_lf_cfg()
186 nix_req->gen_cfg.param2 = req->param2; in rx_inline_ipsec_lf_cfg()
187 nix_req->inst_qsel.cpt_pf_func = OTX2_CPT_RVU_PFFUNC(cptpf->pf_id, 0); in rx_inline_ipsec_lf_cfg()
188 nix_req->inst_qsel.cpt_slot = 0; in rx_inline_ipsec_lf_cfg()
189 ret = otx2_cpt_send_mbox_msg(&cptpf->afpf_mbox, pdev); in rx_inline_ipsec_lf_cfg()
193 if (cptpf->has_cpt1) { in rx_inline_ipsec_lf_cfg()
194 ret = send_inline_ipsec_inbound_msg(cptpf, req->sso_pf_func, 1); in rx_inline_ipsec_lf_cfg()
199 return send_inline_ipsec_inbound_msg(cptpf, req->sso_pf_func, 0); in rx_inline_ipsec_lf_cfg()
210 dev_err(&cptpf->pdev->dev, in otx2_inline_cptlf_setup()
251 if (cptpf->lfs.lfs_num) { in handle_msg_rx_inline_ipsec_lf_cfg()
252 dev_err(&cptpf->pdev->dev, in handle_msg_rx_inline_ipsec_lf_cfg()
254 return -EEXIST; in handle_msg_rx_inline_ipsec_lf_cfg()
260 egrp = otx2_cpt_get_eng_grp(&cptpf->eng_grps, OTX2_CPT_IE_TYPES); in handle_msg_rx_inline_ipsec_lf_cfg()
262 dev_err(&cptpf->pdev->dev, in handle_msg_rx_inline_ipsec_lf_cfg()
264 return -ENOENT; in handle_msg_rx_inline_ipsec_lf_cfg()
267 otx2_cptlf_set_dev_info(&cptpf->lfs, cptpf->pdev, cptpf->reg_base, in handle_msg_rx_inline_ipsec_lf_cfg()
268 &cptpf->afpf_mbox, BLKADDR_CPT0); in handle_msg_rx_inline_ipsec_lf_cfg()
269 cptpf->lfs.global_slot = 0; in handle_msg_rx_inline_ipsec_lf_cfg()
270 cptpf->lfs.ctx_ilen_ovrd = cfg_req->ctx_ilen_valid; in handle_msg_rx_inline_ipsec_lf_cfg()
271 cptpf->lfs.ctx_ilen = cfg_req->ctx_ilen; in handle_msg_rx_inline_ipsec_lf_cfg()
273 ret = otx2_inline_cptlf_setup(cptpf, &cptpf->lfs, egrp, num_lfs); in handle_msg_rx_inline_ipsec_lf_cfg()
275 dev_err(&cptpf->pdev->dev, "Inline-Ipsec CPT0 LF setup failed.\n"); in handle_msg_rx_inline_ipsec_lf_cfg()
279 if (cptpf->has_cpt1) { in handle_msg_rx_inline_ipsec_lf_cfg()
280 cptpf->rsrc_req_blkaddr = BLKADDR_CPT1; in handle_msg_rx_inline_ipsec_lf_cfg()
281 otx2_cptlf_set_dev_info(&cptpf->cpt1_lfs, cptpf->pdev, in handle_msg_rx_inline_ipsec_lf_cfg()
282 cptpf->reg_base, &cptpf->afpf_mbox, in handle_msg_rx_inline_ipsec_lf_cfg()
284 cptpf->cpt1_lfs.global_slot = num_lfs; in handle_msg_rx_inline_ipsec_lf_cfg()
285 cptpf->cpt1_lfs.ctx_ilen_ovrd = cfg_req->ctx_ilen_valid; in handle_msg_rx_inline_ipsec_lf_cfg()
286 cptpf->cpt1_lfs.ctx_ilen = cfg_req->ctx_ilen; in handle_msg_rx_inline_ipsec_lf_cfg()
287 ret = otx2_inline_cptlf_setup(cptpf, &cptpf->cpt1_lfs, egrp, in handle_msg_rx_inline_ipsec_lf_cfg()
290 dev_err(&cptpf->pdev->dev, "Inline CPT1 LF setup failed.\n"); in handle_msg_rx_inline_ipsec_lf_cfg()
293 cptpf->rsrc_req_blkaddr = 0; in handle_msg_rx_inline_ipsec_lf_cfg()
303 otx2_inline_cptlf_cleanup(&cptpf->cpt1_lfs); in handle_msg_rx_inline_ipsec_lf_cfg()
305 otx2_inline_cptlf_cleanup(&cptpf->lfs); in handle_msg_rx_inline_ipsec_lf_cfg()
316 if (req->sig != OTX2_MBOX_REQ_SIG) in cptpf_handle_vf_req()
319 switch (req->id) { in cptpf_handle_vf_req()
340 otx2_reply_invalid_msg(&cptpf->vfpf_mbox, vf->vf_id, 0, req->id); in cptpf_handle_vf_req()
341 otx2_mbox_msg_send(&cptpf->vfpf_mbox, vf->vf_id); in cptpf_handle_vf_req()
358 intr = otx2_cpt_read64(cptpf->reg_base, BLKADDR_RVUM, 0, in otx2_cptpf_vfpf_mbox_intr()
361 for (vf_idx = i * 64; vf_idx < cptpf->enabled_vfs; vf_idx++) { in otx2_cptpf_vfpf_mbox_intr()
362 vf = &cptpf->vf[vf_idx]; in otx2_cptpf_vfpf_mbox_intr()
363 if (intr & (1ULL << vf->intr_idx)) { in otx2_cptpf_vfpf_mbox_intr()
364 queue_work(cptpf->vfpf_mbox_wq, in otx2_cptpf_vfpf_mbox_intr()
365 &vf->vfpf_mbox_work); in otx2_cptpf_vfpf_mbox_intr()
367 otx2_cpt_write64(cptpf->reg_base, BLKADDR_RVUM, in otx2_cptpf_vfpf_mbox_intr()
369 BIT_ULL(vf->intr_idx)); in otx2_cptpf_vfpf_mbox_intr()
387 cptpf = vf->cptpf; in otx2_cptpf_vfpf_mbox_handler()
388 mbox = &cptpf->vfpf_mbox; in otx2_cptpf_vfpf_mbox_handler()
391 mdev = &mbox->dev[vf->vf_id]; in otx2_cptpf_vfpf_mbox_handler()
393 req_hdr = (struct mbox_hdr *)(mdev->mbase + mbox->rx_start); in otx2_cptpf_vfpf_mbox_handler()
394 offset = mbox->rx_start + ALIGN(sizeof(*req_hdr), MBOX_MSG_ALIGN); in otx2_cptpf_vfpf_mbox_handler()
396 for (i = 0; i < req_hdr->num_msgs; i++) { in otx2_cptpf_vfpf_mbox_handler()
397 msg = (struct mbox_msghdr *)(mdev->mbase + offset); in otx2_cptpf_vfpf_mbox_handler()
400 msg->pcifunc = ((u16)cptpf->pf_id << RVU_PFVF_PF_SHIFT) | in otx2_cptpf_vfpf_mbox_handler()
401 ((vf->vf_id + 1) & RVU_PFVF_FUNC_MASK); in otx2_cptpf_vfpf_mbox_handler()
404 msg->next_msgoff - offset); in otx2_cptpf_vfpf_mbox_handler()
409 if (err == -ENOMEM || err == -EIO) in otx2_cptpf_vfpf_mbox_handler()
411 offset = msg->next_msgoff; in otx2_cptpf_vfpf_mbox_handler()
418 if (mdev->num_msgs) in otx2_cptpf_vfpf_mbox_handler()
419 otx2_mbox_msg_send(mbox, vf->vf_id); in otx2_cptpf_vfpf_mbox_handler()
431 intr = otx2_cpt_read64(cptpf->reg_base, BLKADDR_RVUM, 0, RVU_PF_INT); in otx2_cptpf_afpf_mbox_intr()
434 mbox = &cptpf->afpf_mbox; in otx2_cptpf_afpf_mbox_intr()
435 mdev = &mbox->dev[0]; in otx2_cptpf_afpf_mbox_intr()
436 hdr = mdev->mbase + mbox->rx_start; in otx2_cptpf_afpf_mbox_intr()
437 if (hdr->num_msgs) in otx2_cptpf_afpf_mbox_intr()
439 queue_work(cptpf->afpf_mbox_wq, &cptpf->afpf_mbox_work); in otx2_cptpf_afpf_mbox_intr()
441 mbox = &cptpf->afpf_mbox_up; in otx2_cptpf_afpf_mbox_intr()
442 mdev = &mbox->dev[0]; in otx2_cptpf_afpf_mbox_intr()
443 hdr = mdev->mbase + mbox->rx_start; in otx2_cptpf_afpf_mbox_intr()
444 if (hdr->num_msgs) in otx2_cptpf_afpf_mbox_intr()
446 queue_work(cptpf->afpf_mbox_wq, &cptpf->afpf_mbox_up_work); in otx2_cptpf_afpf_mbox_intr()
448 otx2_cpt_write64(cptpf->reg_base, BLKADDR_RVUM, 0, RVU_PF_INT, in otx2_cptpf_afpf_mbox_intr()
457 struct otx2_cptlfs_info *lfs = &cptpf->lfs; in process_afpf_mbox_msg()
458 struct device *dev = &cptpf->pdev->dev; in process_afpf_mbox_msg()
463 if (msg->id >= MBOX_MSG_MAX) { in process_afpf_mbox_msg()
464 dev_err(dev, "MBOX msg with unknown ID %d\n", msg->id); in process_afpf_mbox_msg()
467 if (msg->sig != OTX2_MBOX_RSP_SIG) { in process_afpf_mbox_msg()
469 msg->sig, msg->id); in process_afpf_mbox_msg()
472 if (cptpf->rsrc_req_blkaddr == BLKADDR_CPT1) in process_afpf_mbox_msg()
473 lfs = &cptpf->cpt1_lfs; in process_afpf_mbox_msg()
475 switch (msg->id) { in process_afpf_mbox_msg()
477 cptpf->pf_id = (msg->pcifunc >> RVU_PFVF_PF_SHIFT) & in process_afpf_mbox_msg()
482 for (i = 0; i < rsp_msix->cptlfs; i++) in process_afpf_mbox_msg()
483 lfs->lf[i].msix_offset = rsp_msix->cptlf_msixoff[i]; in process_afpf_mbox_msg()
485 for (i = 0; i < rsp_msix->cpt1_lfs; i++) in process_afpf_mbox_msg()
486 lfs->lf[i].msix_offset = rsp_msix->cpt1_lf_msixoff[i]; in process_afpf_mbox_msg()
490 if (msg->rc) { in process_afpf_mbox_msg()
492 rsp_rd_wr->reg_offset, rsp_rd_wr->is_write, in process_afpf_mbox_msg()
493 msg->rc); in process_afpf_mbox_msg()
496 if (!rsp_rd_wr->is_write) in process_afpf_mbox_msg()
497 *rsp_rd_wr->ret_val = rsp_rd_wr->val; in process_afpf_mbox_msg()
500 if (!msg->rc) in process_afpf_mbox_msg()
501 lfs->are_lfs_attached = 1; in process_afpf_mbox_msg()
504 if (!msg->rc) in process_afpf_mbox_msg()
505 lfs->are_lfs_attached = 0; in process_afpf_mbox_msg()
514 "Unsupported msg %d received.\n", msg->id); in process_afpf_mbox_msg()
525 if (msg->id >= MBOX_MSG_MAX) { in forward_to_vf()
526 dev_err(&cptpf->pdev->dev, in forward_to_vf()
527 "MBOX msg with unknown ID %d\n", msg->id); in forward_to_vf()
530 if (msg->sig != OTX2_MBOX_RSP_SIG) { in forward_to_vf()
531 dev_err(&cptpf->pdev->dev, in forward_to_vf()
533 msg->sig, msg->id); in forward_to_vf()
536 vfpf_mbox = &cptpf->vfpf_mbox; in forward_to_vf()
537 vf_id--; in forward_to_vf()
538 if (vf_id >= cptpf->enabled_vfs) { in forward_to_vf()
539 dev_err(&cptpf->pdev->dev, in forward_to_vf()
541 vf_id, cptpf->enabled_vfs); in forward_to_vf()
544 if (msg->id == MBOX_MSG_VF_FLR) in forward_to_vf()
549 dev_err(&cptpf->pdev->dev, in forward_to_vf()
555 fwd->id = msg->id; in forward_to_vf()
556 fwd->pcifunc = msg->pcifunc; in forward_to_vf()
557 fwd->sig = msg->sig; in forward_to_vf()
558 fwd->ver = msg->ver; in forward_to_vf()
559 fwd->rc = msg->rc; in forward_to_vf()
573 afpf_mbox = &cptpf->afpf_mbox; in otx2_cptpf_afpf_mbox_handler()
574 mdev = &afpf_mbox->dev[0]; in otx2_cptpf_afpf_mbox_handler()
578 rsp_hdr = (struct mbox_hdr *)(mdev->mbase + afpf_mbox->rx_start); in otx2_cptpf_afpf_mbox_handler()
581 for (i = 0; i < rsp_hdr->num_msgs; i++) { in otx2_cptpf_afpf_mbox_handler()
582 msg = (struct mbox_msghdr *)(mdev->mbase + afpf_mbox->rx_start + in otx2_cptpf_afpf_mbox_handler()
584 vf_id = (msg->pcifunc >> RVU_PFVF_FUNC_SHIFT) & in otx2_cptpf_afpf_mbox_handler()
588 msg->next_msgoff - offset); in otx2_cptpf_afpf_mbox_handler()
592 offset = msg->next_msgoff; in otx2_cptpf_afpf_mbox_handler()
595 mdev->msgs_acked++; in otx2_cptpf_afpf_mbox_handler()
604 struct otx2_cptlfs_info *lfs = &cptpf->lfs; in handle_msg_cpt_inst_lmtst()
607 if (cptpf->lfs.lfs_num) in handle_msg_cpt_inst_lmtst()
608 lfs->ops->send_cmd((union otx2_cpt_inst_s *)req->inst, 1, in handle_msg_cpt_inst_lmtst()
609 &lfs->lf[0]); in handle_msg_cpt_inst_lmtst()
611 rsp = (struct msg_rsp *)otx2_mbox_alloc_msg(&cptpf->afpf_mbox_up, 0, in handle_msg_cpt_inst_lmtst()
616 rsp->hdr.id = msg->id; in handle_msg_cpt_inst_lmtst()
617 rsp->hdr.sig = OTX2_MBOX_RSP_SIG; in handle_msg_cpt_inst_lmtst()
618 rsp->hdr.pcifunc = 0; in handle_msg_cpt_inst_lmtst()
619 rsp->hdr.rc = 0; in handle_msg_cpt_inst_lmtst()
625 if (msg->id >= MBOX_MSG_MAX) { in process_afpf_mbox_up_msg()
626 dev_err(&cptpf->pdev->dev, in process_afpf_mbox_up_msg()
627 "MBOX msg with unknown ID %d\n", msg->id); in process_afpf_mbox_up_msg()
631 switch (msg->id) { in process_afpf_mbox_up_msg()
636 otx2_reply_invalid_msg(&cptpf->afpf_mbox_up, 0, 0, msg->id); in process_afpf_mbox_up_msg()
650 mbox = &cptpf->afpf_mbox_up; in otx2_cptpf_afpf_mbox_up_handler()
651 mdev = &mbox->dev[0]; in otx2_cptpf_afpf_mbox_up_handler()
655 rsp_hdr = (struct mbox_hdr *)(mdev->mbase + mbox->rx_start); in otx2_cptpf_afpf_mbox_up_handler()
656 offset = mbox->rx_start + ALIGN(sizeof(*rsp_hdr), MBOX_MSG_ALIGN); in otx2_cptpf_afpf_mbox_up_handler()
658 for (i = 0; i < rsp_hdr->num_msgs; i++) { in otx2_cptpf_afpf_mbox_up_handler()
659 msg = (struct mbox_msghdr *)(mdev->mbase + offset); in otx2_cptpf_afpf_mbox_up_handler()
663 offset = mbox->rx_start + msg->next_msgoff; in otx2_cptpf_afpf_mbox_up_handler()