net/bnxt: fix enable/disable VLAN filtering
[dpdk.git] / drivers / crypto / octeontx2 / otx2_cryptodev_mbox.c
index 9b0117a..b54e407 100644 (file)
@@ -8,6 +8,8 @@
 #include "otx2_dev.h"
 #include "otx2_mbox.h"
 
+#include "cpt_pmd_logs.h"
+
 int
 otx2_cpt_available_queues_get(const struct rte_cryptodev *dev,
                              uint16_t *nb_queues)
@@ -90,3 +92,84 @@ otx2_cpt_msix_offsets_get(const struct rte_cryptodev *dev)
 
        return 0;
 }
+
+static int
+otx2_cpt_send_mbox_msg(struct otx2_cpt_vf *vf)
+{
+       struct otx2_mbox *mbox = vf->otx2_dev.mbox;
+       int ret;
+
+       otx2_mbox_msg_send(mbox, 0);
+
+       ret = otx2_mbox_wait_for_rsp(mbox, 0);
+       if (ret < 0) {
+               CPT_LOG_ERR("Could not get mailbox response");
+               return ret;
+       }
+
+       return 0;
+}
+
+int
+otx2_cpt_af_reg_read(const struct rte_cryptodev *dev, uint64_t reg,
+                    uint64_t *val)
+{
+       struct otx2_cpt_vf *vf = dev->data->dev_private;
+       struct otx2_mbox *mbox = vf->otx2_dev.mbox;
+       struct otx2_mbox_dev *mdev = &mbox->dev[0];
+       struct cpt_rd_wr_reg_msg *msg;
+       int ret, off;
+
+       msg = (struct cpt_rd_wr_reg_msg *)
+                       otx2_mbox_alloc_msg_rsp(mbox, 0, sizeof(*msg),
+                                               sizeof(*msg));
+       if (msg == NULL) {
+               CPT_LOG_ERR("Could not allocate mailbox message");
+               return -EFAULT;
+       }
+
+       msg->hdr.id = MBOX_MSG_CPT_RD_WR_REGISTER;
+       msg->hdr.sig = OTX2_MBOX_REQ_SIG;
+       msg->hdr.pcifunc = vf->otx2_dev.pf_func;
+       msg->is_write = 0;
+       msg->reg_offset = reg;
+       msg->ret_val = val;
+
+       ret = otx2_cpt_send_mbox_msg(vf);
+       if (ret < 0)
+               return ret;
+
+       off = mbox->rx_start +
+                       RTE_ALIGN(sizeof(struct mbox_hdr), MBOX_MSG_ALIGN);
+       msg = (struct cpt_rd_wr_reg_msg *) ((uintptr_t)mdev->mbase + off);
+
+       *val = msg->val;
+
+       return 0;
+}
+
+int
+otx2_cpt_af_reg_write(const struct rte_cryptodev *dev, uint64_t reg,
+                     uint64_t val)
+{
+       struct otx2_cpt_vf *vf = dev->data->dev_private;
+       struct otx2_mbox *mbox = vf->otx2_dev.mbox;
+       struct cpt_rd_wr_reg_msg *msg;
+
+       msg = (struct cpt_rd_wr_reg_msg *)
+                       otx2_mbox_alloc_msg_rsp(mbox, 0, sizeof(*msg),
+                                               sizeof(*msg));
+       if (msg == NULL) {
+               CPT_LOG_ERR("Could not allocate mailbox message");
+               return -EFAULT;
+       }
+
+       msg->hdr.id = MBOX_MSG_CPT_RD_WR_REGISTER;
+       msg->hdr.sig = OTX2_MBOX_REQ_SIG;
+       msg->hdr.pcifunc = vf->otx2_dev.pf_func;
+       msg->is_write = 1;
+       msg->reg_offset = reg;
+       msg->val = val;
+
+       return otx2_cpt_send_mbox_msg(vf);
+}