mirror of
https://github.com/torvalds/linux
synced 2024-09-06 09:51:23 +00:00
vdpa/snet: support the suspend vDPA callback
When suspend is called, the driver sends a suspend command to the DPU through the control mechanism. Signed-off-by: Alvaro Karsz <alvaro.karsz@solid-run.com> Message-Id: <20230413073337.31367-3-alvaro.karsz@solid-run.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
3f3a1675b7
commit
3616bf377a
|
@ -15,6 +15,7 @@
|
|||
enum snet_ctrl_opcodes {
|
||||
SNET_CTRL_OP_DESTROY = 1,
|
||||
SNET_CTRL_OP_READ_VQ_STATE,
|
||||
SNET_CTRL_OP_SUSPEND,
|
||||
};
|
||||
|
||||
#define SNET_CTRL_TIMEOUT 2000000
|
||||
|
@ -322,3 +323,8 @@ int snet_read_vq_state(struct snet *snet, u16 idx, struct vdpa_vq_state *state)
|
|||
return snet_ctrl_read_from_dpu(snet, SNET_CTRL_OP_READ_VQ_STATE, idx, state,
|
||||
sizeof(*state));
|
||||
}
|
||||
|
||||
int snet_suspend_dev(struct snet *snet)
|
||||
{
|
||||
return snet_send_ctrl_msg(snet, SNET_CTRL_OP_SUSPEND, 0);
|
||||
}
|
||||
|
|
|
@ -483,6 +483,20 @@ static void snet_set_config(struct vdpa_device *vdev, unsigned int offset,
|
|||
iowrite8(*buf_ptr++, cfg_ptr + i);
|
||||
}
|
||||
|
||||
static int snet_suspend(struct vdpa_device *vdev)
|
||||
{
|
||||
struct snet *snet = vdpa_to_snet(vdev);
|
||||
int ret;
|
||||
|
||||
ret = snet_suspend_dev(snet);
|
||||
if (ret)
|
||||
SNET_ERR(snet->pdev, "SNET[%u] suspend failed, err: %d\n", snet->sid, ret);
|
||||
else
|
||||
SNET_DBG(snet->pdev, "Suspend 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,
|
||||
|
@ -508,6 +522,7 @@ static const struct vdpa_config_ops snet_config_ops = {
|
|||
.set_status = snet_set_status,
|
||||
.get_config = snet_get_config,
|
||||
.set_config = snet_set_config,
|
||||
.suspend = snet_suspend,
|
||||
};
|
||||
|
||||
static int psnet_open_pf_bar(struct pci_dev *pdev, struct psnet *psnet)
|
||||
|
|
|
@ -203,5 +203,6 @@ void psnet_create_hwmon(struct pci_dev *pdev);
|
|||
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);
|
||||
|
||||
#endif //_SNET_VDPA_H_
|
||||
|
|
Loading…
Reference in a new issue