The callback sends a resume command to the DPU through
the control mechanism.

Signed-off-by: Alvaro Karsz <alvaro.ka...@solid-run.com>
---
 drivers/vdpa/solidrun/snet_ctrl.c |  6 ++++++
 drivers/vdpa/solidrun/snet_main.c | 15 +++++++++++++++
 drivers/vdpa/solidrun/snet_vdpa.h |  1 +
 3 files changed, 22 insertions(+)

diff --git a/drivers/vdpa/solidrun/snet_ctrl.c 
b/drivers/vdpa/solidrun/snet_ctrl.c
index 3858738643b..3cef2571d15 100644
--- a/drivers/vdpa/solidrun/snet_ctrl.c
+++ b/drivers/vdpa/solidrun/snet_ctrl.c
@@ -16,6 +16,7 @@ enum snet_ctrl_opcodes {
        SNET_CTRL_OP_DESTROY = 1,
        SNET_CTRL_OP_READ_VQ_STATE,
        SNET_CTRL_OP_SUSPEND,
+       SNET_CTRL_OP_RESUME,
 };
 
 #define SNET_CTRL_TIMEOUT              2000000
@@ -328,3 +329,8 @@ int snet_suspend_dev(struct snet *snet)
 {
        return snet_send_ctrl_msg(snet, SNET_CTRL_OP_SUSPEND, 0);
 }
+
+int snet_resume_dev(struct snet *snet)
+{
+       return snet_send_ctrl_msg(snet, SNET_CTRL_OP_RESUME, 0);
+}
diff --git a/drivers/vdpa/solidrun/snet_main.c 
b/drivers/vdpa/solidrun/snet_main.c
index cdcd84ce4f5..99428a04068 100644
--- a/drivers/vdpa/solidrun/snet_main.c
+++ b/drivers/vdpa/solidrun/snet_main.c
@@ -509,6 +509,20 @@ static int snet_suspend(struct vdpa_device *vdev)
        return ret;
 }
 
+static int snet_resume(struct vdpa_device *vdev)
+{
+       struct snet *snet = vdpa_to_snet(vdev);
+       int ret;
+
+       ret = snet_resume_dev(snet);
+       if (ret)
+               SNET_ERR(snet->pdev, "SNET[%u] resume failed, err: %d\n", 
snet->sid, ret);
+       else
+               SNET_DBG(snet->pdev, "Resume SNET[%u] device\n", snet->sid);
+
+       return ret;
+}
+
 static const struct vdpa_config_ops snet_config_ops = {
        .set_vq_address         = snet_set_vq_address,
        .set_vq_num             = snet_set_vq_num,
@@ -536,6 +550,7 @@ static const struct vdpa_config_ops snet_config_ops = {
        .get_config             = snet_get_config,
        .set_config             = snet_set_config,
        .suspend                = snet_suspend,
+       .resume                 = snet_resume,
 };
 
 static int psnet_open_pf_bar(struct pci_dev *pdev, struct psnet *psnet)
diff --git a/drivers/vdpa/solidrun/snet_vdpa.h 
b/drivers/vdpa/solidrun/snet_vdpa.h
index 3c78d4e7d48..36ac285835e 100644
--- a/drivers/vdpa/solidrun/snet_vdpa.h
+++ b/drivers/vdpa/solidrun/snet_vdpa.h
@@ -204,5 +204,6 @@ void snet_ctrl_clear(struct snet *snet);
 int snet_destroy_dev(struct snet *snet);
 int snet_read_vq_state(struct snet *snet, u16 idx, struct vdpa_vq_state 
*state);
 int snet_suspend_dev(struct snet *snet);
+int snet_resume_dev(struct snet *snet);
 
 #endif //_SNET_VDPA_H_
-- 
2.34.1

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to