Commit a9aa3381 authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Mark Brown

ASoC: SOF: ipc-msg-injector: Separate the message sending

Move out the code for sending the IPC message into a separate helper
function in preparation for support for handling IPC4 communication.
Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20220506132647.18690-7-peter.ujfalusi@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 100c9374
...@@ -67,22 +67,11 @@ static ssize_t sof_msg_inject_dfs_read(struct file *file, char __user *buffer, ...@@ -67,22 +67,11 @@ static ssize_t sof_msg_inject_dfs_read(struct file *file, char __user *buffer,
return count; return count;
} }
static ssize_t sof_msg_inject_dfs_write(struct file *file, const char __user *buffer, static int sof_msg_inject_send_message(struct sof_client_dev *cdev)
size_t count, loff_t *ppos)
{ {
struct sof_client_dev *cdev = file->private_data;
struct sof_msg_inject_priv *priv = cdev->data; struct sof_msg_inject_priv *priv = cdev->data;
struct device *dev = &cdev->auxdev.dev; struct device *dev = &cdev->auxdev.dev;
int ret, err; int ret, err;
size_t size;
if (*ppos)
return 0;
size = simple_write_to_buffer(priv->tx_buffer, priv->max_msg_size,
ppos, buffer, count);
if (size != count)
return size > 0 ? -EFAULT : size;
ret = pm_runtime_resume_and_get(dev); ret = pm_runtime_resume_and_get(dev);
if (ret < 0 && ret != -EACCES) { if (ret < 0 && ret != -EACCES) {
...@@ -91,19 +80,44 @@ static ssize_t sof_msg_inject_dfs_write(struct file *file, const char __user *bu ...@@ -91,19 +80,44 @@ static ssize_t sof_msg_inject_dfs_write(struct file *file, const char __user *bu
} }
/* send the message */ /* send the message */
memset(priv->rx_buffer, 0, priv->max_msg_size);
ret = sof_client_ipc_tx_message(cdev, priv->tx_buffer, priv->rx_buffer, ret = sof_client_ipc_tx_message(cdev, priv->tx_buffer, priv->rx_buffer,
priv->max_msg_size); priv->max_msg_size);
if (ret)
dev_err(dev, "IPC message send failed: %d\n", ret);
pm_runtime_mark_last_busy(dev); pm_runtime_mark_last_busy(dev);
err = pm_runtime_put_autosuspend(dev); err = pm_runtime_put_autosuspend(dev);
if (err < 0) if (err < 0)
dev_err_ratelimited(dev, "debugfs write failed to idle %d\n", err); dev_err_ratelimited(dev, "debugfs write failed to idle %d\n", err);
/* return size if test is successful */
if (ret >= 0)
ret = size;
return ret; return ret;
}
static ssize_t sof_msg_inject_dfs_write(struct file *file, const char __user *buffer,
size_t count, loff_t *ppos)
{
struct sof_client_dev *cdev = file->private_data;
struct sof_msg_inject_priv *priv = cdev->data;
size_t size;
int ret;
if (*ppos)
return 0;
size = simple_write_to_buffer(priv->tx_buffer, priv->max_msg_size,
ppos, buffer, count);
if (size != count)
return size > 0 ? -EFAULT : size;
memset(priv->rx_buffer, 0, priv->max_msg_size);
ret = sof_msg_inject_send_message(cdev);
/* return the error code if test failed */
if (ret < 0)
size = ret;
return size;
}; };
static int sof_msg_inject_dfs_release(struct inode *inode, struct file *file) static int sof_msg_inject_dfs_release(struct inode *inode, struct file *file)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment