Skip to content

Commit

Permalink
rpmsg: char: Export eptdev create and destroy functions
Browse files Browse the repository at this point in the history
To prepare the split of the code related to the control (ctrldev)
and the endpoint (eptdev) devices in 2 separate files:

- Rename and export the functions in rpmsg_char.h.

- Suppress the dependency with the rpmsg_ctrldev struct in the
  rpmsg_eptdev_create function.

Suggested-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Link: https://lore.kernel.org/r/20220124102524.295783-2-arnaud.pouliquen@foss.st.com
  • Loading branch information
Arnaud Pouliquen authored and Bjorn Andersson committed Mar 13, 2022
1 parent cbf5825 commit 69265bc
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 7 deletions.
18 changes: 11 additions & 7 deletions drivers/rpmsg/rpmsg_char.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2022, STMicroelectronics
* Copyright (c) 2016, Linaro Ltd.
* Copyright (c) 2012, Michal Simek <monstr@monstr.eu>
* Copyright (c) 2012, PetaLogix
Expand All @@ -25,6 +26,8 @@
#include <linux/uaccess.h>
#include <uapi/linux/rpmsg.h>

#include "rpmsg_char.h"

#define RPMSG_DEV_MAX (MINORMASK + 1)

static dev_t rpmsg_major;
Expand Down Expand Up @@ -79,7 +82,7 @@ struct rpmsg_eptdev {
wait_queue_head_t readq;
};

static int rpmsg_eptdev_destroy(struct device *dev, void *data)
int rpmsg_chrdev_eptdev_destroy(struct device *dev, void *data)
{
struct rpmsg_eptdev *eptdev = dev_to_eptdev(dev);

Expand All @@ -98,6 +101,7 @@ static int rpmsg_eptdev_destroy(struct device *dev, void *data)

return 0;
}
EXPORT_SYMBOL(rpmsg_chrdev_eptdev_destroy);

static int rpmsg_ept_cb(struct rpmsg_device *rpdev, void *buf, int len,
void *priv, u32 addr)
Expand Down Expand Up @@ -284,7 +288,7 @@ static long rpmsg_eptdev_ioctl(struct file *fp, unsigned int cmd,
if (cmd != RPMSG_DESTROY_EPT_IOCTL)
return -EINVAL;

return rpmsg_eptdev_destroy(&eptdev->dev, NULL);
return rpmsg_chrdev_eptdev_destroy(&eptdev->dev, NULL);
}

static const struct file_operations rpmsg_eptdev_fops = {
Expand Down Expand Up @@ -342,10 +346,9 @@ static void rpmsg_eptdev_release_device(struct device *dev)
kfree(eptdev);
}

static int rpmsg_eptdev_create(struct rpmsg_ctrldev *ctrldev,
int rpmsg_chrdev_eptdev_create(struct rpmsg_device *rpdev, struct device *parent,
struct rpmsg_channel_info chinfo)
{
struct rpmsg_device *rpdev = ctrldev->rpdev;
struct rpmsg_eptdev *eptdev;
struct device *dev;
int ret;
Expand All @@ -365,7 +368,7 @@ static int rpmsg_eptdev_create(struct rpmsg_ctrldev *ctrldev,

device_initialize(dev);
dev->class = rpmsg_class;
dev->parent = &ctrldev->dev;
dev->parent = parent;
dev->groups = rpmsg_eptdev_groups;
dev_set_drvdata(dev, eptdev);

Expand Down Expand Up @@ -402,6 +405,7 @@ static int rpmsg_eptdev_create(struct rpmsg_ctrldev *ctrldev,

return ret;
}
EXPORT_SYMBOL(rpmsg_chrdev_eptdev_create);

static int rpmsg_ctrldev_open(struct inode *inode, struct file *filp)
{
Expand Down Expand Up @@ -441,7 +445,7 @@ static long rpmsg_ctrldev_ioctl(struct file *fp, unsigned int cmd,
chinfo.src = eptinfo.src;
chinfo.dst = eptinfo.dst;

return rpmsg_eptdev_create(ctrldev, chinfo);
return rpmsg_chrdev_eptdev_create(ctrldev->rpdev, &ctrldev->dev, chinfo);
};

static const struct file_operations rpmsg_ctrldev_fops = {
Expand Down Expand Up @@ -520,7 +524,7 @@ static void rpmsg_chrdev_remove(struct rpmsg_device *rpdev)
int ret;

/* Destroy all endpoints */
ret = device_for_each_child(&ctrldev->dev, NULL, rpmsg_eptdev_destroy);
ret = device_for_each_child(&ctrldev->dev, NULL, rpmsg_chrdev_eptdev_destroy);
if (ret)
dev_warn(&rpdev->dev, "failed to nuke endpoints: %d\n", ret);

Expand Down
46 changes: 46 additions & 0 deletions drivers/rpmsg/rpmsg_char.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2022, STMicroelectronics
*/

#ifndef __RPMSG_CHRDEV_H__
#define __RPMSG_CHRDEV_H__

#if IS_ENABLED(CONFIG_RPMSG_CHAR)
/**
* rpmsg_chrdev_eptdev_create() - register char device based on an endpoint
* @rpdev: prepared rpdev to be used for creating endpoints
* @parent: parent device
* @chinfo: associated endpoint channel information.
*
* This function create a new rpmsg char endpoint device to instantiate a new
* endpoint based on chinfo information.
*/
int rpmsg_chrdev_eptdev_create(struct rpmsg_device *rpdev, struct device *parent,
struct rpmsg_channel_info chinfo);

/**
* rpmsg_chrdev_eptdev_destroy() - destroy created char device endpoint.
* @data: private data associated to the endpoint device
*
* This function destroys a rpmsg char endpoint device created by the RPMSG_DESTROY_EPT_IOCTL
* control.
*/
int rpmsg_chrdev_eptdev_destroy(struct device *dev, void *data);

#else /*IS_ENABLED(CONFIG_RPMSG_CHAR) */

static inline int rpmsg_chrdev_eptdev_create(struct rpmsg_device *rpdev, struct device *parent,
struct rpmsg_channel_info chinfo)
{
return -ENXIO;
}

static inline int rpmsg_chrdev_eptdev_destroy(struct device *dev, void *data)
{
return -ENXIO;
}

#endif /*IS_ENABLED(CONFIG_RPMSG_CHAR) */

#endif /*__RPMSG_CHRDEV_H__ */

0 comments on commit 69265bc

Please sign in to comment.