From: Bjorn Andersson <bjorn.andersson@linaro.org> To: Ohad Ben-Cohen <ohad@wizery.com>, Bjorn Andersson <bjorn.andersson@linaro.org> Cc: linux-remoteproc@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 10/17] rpmsg: Move helper for finding rpmsg devices to core Date: Thu, 1 Sep 2016 15:28:02 -0700 [thread overview] Message-ID: <1472768889-3906-11-git-send-email-bjorn.andersson@linaro.org> (raw) In-Reply-To: <1472768889-3906-1-git-send-email-bjorn.andersson@linaro.org> Extract and move the helper function for finding rpmsg child devices to the core. Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> --- Changes since v1: - Extracted this from the big move to rpmsg_core.c in v1 drivers/rpmsg/rpmsg_core.c | 33 +++++++++++++++++++++++++++++++++ drivers/rpmsg/rpmsg_internal.h | 31 +++++++++++++++++++++++++++++++ drivers/rpmsg/virtio_rpmsg_bus.c | 29 ++++------------------------- 3 files changed, 68 insertions(+), 25 deletions(-) create mode 100644 drivers/rpmsg/rpmsg_internal.h diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c index 3bee8e03a387..81101775fed0 100644 --- a/drivers/rpmsg/rpmsg_core.c +++ b/drivers/rpmsg/rpmsg_core.c @@ -22,6 +22,8 @@ #include <linux/kernel.h> #include <linux/rpmsg.h> +#include "rpmsg_internal.h" + /** * rpmsg_create_ept() - create a new rpmsg_endpoint * @rpdev: rpmsg channel device @@ -229,3 +231,34 @@ int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst, return ept->ops->trysend_offchannel(ept, src, dst, data, len); } EXPORT_SYMBOL(rpmsg_trysend_offchannel); + +/* + * match an rpmsg channel with a channel info struct. + * this is used to make sure we're not creating rpmsg devices for channels + * that already exist. + */ +static int rpmsg_device_match(struct device *dev, void *data) +{ + struct rpmsg_channel_info *chinfo = data; + struct rpmsg_device *rpdev = to_rpmsg_device(dev); + + if (chinfo->src != RPMSG_ADDR_ANY && chinfo->src != rpdev->src) + return 0; + + if (chinfo->dst != RPMSG_ADDR_ANY && chinfo->dst != rpdev->dst) + return 0; + + if (strncmp(chinfo->name, rpdev->id.name, RPMSG_NAME_SIZE)) + return 0; + + /* found a match ! */ + return 1; +} + +struct device *rpmsg_find_device(struct device *parent, + struct rpmsg_channel_info *chinfo) +{ + return device_find_child(parent, chinfo, rpmsg_device_match); + +} +EXPORT_SYMBOL(rpmsg_find_device); diff --git a/drivers/rpmsg/rpmsg_internal.h b/drivers/rpmsg/rpmsg_internal.h new file mode 100644 index 000000000000..205debf4ea65 --- /dev/null +++ b/drivers/rpmsg/rpmsg_internal.h @@ -0,0 +1,31 @@ +/* + * remote processor messaging bus internals + * + * Copyright (C) 2011 Texas Instruments, Inc. + * Copyright (C) 2011 Google, Inc. + * + * Ohad Ben-Cohen <ohad@wizery.com> + * Brian Swetland <swetland@google.com> + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __RPMSG_INTERNAL_H__ +#define __RPMSG_INTERNAL_H__ + +#include <linux/rpmsg.h> + +#define to_rpmsg_device(d) container_of(d, struct rpmsg_device, dev) +#define to_rpmsg_driver(d) container_of(d, struct rpmsg_driver, drv) + +struct device *rpmsg_find_device(struct device *parent, + struct rpmsg_channel_info *chinfo); + +#endif diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c index 184663276e51..488fd93a290c 100644 --- a/drivers/rpmsg/virtio_rpmsg_bus.c +++ b/drivers/rpmsg/virtio_rpmsg_bus.c @@ -35,6 +35,8 @@ #include <linux/mutex.h> #include <linux/of_device.h> +#include "rpmsg_internal.h" + /** * struct virtproc_info - virtual remote processor state * @vdev: the virtio device @@ -452,29 +454,6 @@ static void rpmsg_release_device(struct device *dev) kfree(rpdev); } -/* - * match an rpmsg channel with a channel info struct. - * this is used to make sure we're not creating rpmsg devices for channels - * that already exist. - */ -static int rpmsg_device_match(struct device *dev, void *data) -{ - struct rpmsg_channel_info *chinfo = data; - struct rpmsg_device *rpdev = to_rpmsg_device(dev); - - if (chinfo->src != RPMSG_ADDR_ANY && chinfo->src != rpdev->src) - return 0; - - if (chinfo->dst != RPMSG_ADDR_ANY && chinfo->dst != rpdev->dst) - return 0; - - if (strncmp(chinfo->name, rpdev->id.name, RPMSG_NAME_SIZE)) - return 0; - - /* found a match ! */ - return 1; -} - static const struct rpmsg_device_ops virtio_rpmsg_ops = { .create_ept = virtio_rpmsg_create_ept, .announce_create = virtio_rpmsg_announce_create, @@ -494,7 +473,7 @@ static struct rpmsg_device *rpmsg_create_channel(struct virtproc_info *vrp, int ret; /* make sure a similar channel doesn't already exist */ - tmp = device_find_child(dev, chinfo, rpmsg_device_match); + tmp = rpmsg_find_device(dev, chinfo); if (tmp) { /* decrement the matched device's refcount back */ put_device(tmp); @@ -547,7 +526,7 @@ static int rpmsg_destroy_channel(struct virtproc_info *vrp, struct virtio_device *vdev = vrp->vdev; struct device *dev; - dev = device_find_child(&vdev->dev, chinfo, rpmsg_device_match); + dev = rpmsg_find_device(&vdev->dev, chinfo); if (!dev) return -EINVAL; -- 2.5.0
WARNING: multiple messages have this Message-ID (diff)
From: bjorn.andersson@linaro.org (Bjorn Andersson) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 10/17] rpmsg: Move helper for finding rpmsg devices to core Date: Thu, 1 Sep 2016 15:28:02 -0700 [thread overview] Message-ID: <1472768889-3906-11-git-send-email-bjorn.andersson@linaro.org> (raw) In-Reply-To: <1472768889-3906-1-git-send-email-bjorn.andersson@linaro.org> Extract and move the helper function for finding rpmsg child devices to the core. Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> --- Changes since v1: - Extracted this from the big move to rpmsg_core.c in v1 drivers/rpmsg/rpmsg_core.c | 33 +++++++++++++++++++++++++++++++++ drivers/rpmsg/rpmsg_internal.h | 31 +++++++++++++++++++++++++++++++ drivers/rpmsg/virtio_rpmsg_bus.c | 29 ++++------------------------- 3 files changed, 68 insertions(+), 25 deletions(-) create mode 100644 drivers/rpmsg/rpmsg_internal.h diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c index 3bee8e03a387..81101775fed0 100644 --- a/drivers/rpmsg/rpmsg_core.c +++ b/drivers/rpmsg/rpmsg_core.c @@ -22,6 +22,8 @@ #include <linux/kernel.h> #include <linux/rpmsg.h> +#include "rpmsg_internal.h" + /** * rpmsg_create_ept() - create a new rpmsg_endpoint * @rpdev: rpmsg channel device @@ -229,3 +231,34 @@ int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst, return ept->ops->trysend_offchannel(ept, src, dst, data, len); } EXPORT_SYMBOL(rpmsg_trysend_offchannel); + +/* + * match an rpmsg channel with a channel info struct. + * this is used to make sure we're not creating rpmsg devices for channels + * that already exist. + */ +static int rpmsg_device_match(struct device *dev, void *data) +{ + struct rpmsg_channel_info *chinfo = data; + struct rpmsg_device *rpdev = to_rpmsg_device(dev); + + if (chinfo->src != RPMSG_ADDR_ANY && chinfo->src != rpdev->src) + return 0; + + if (chinfo->dst != RPMSG_ADDR_ANY && chinfo->dst != rpdev->dst) + return 0; + + if (strncmp(chinfo->name, rpdev->id.name, RPMSG_NAME_SIZE)) + return 0; + + /* found a match ! */ + return 1; +} + +struct device *rpmsg_find_device(struct device *parent, + struct rpmsg_channel_info *chinfo) +{ + return device_find_child(parent, chinfo, rpmsg_device_match); + +} +EXPORT_SYMBOL(rpmsg_find_device); diff --git a/drivers/rpmsg/rpmsg_internal.h b/drivers/rpmsg/rpmsg_internal.h new file mode 100644 index 000000000000..205debf4ea65 --- /dev/null +++ b/drivers/rpmsg/rpmsg_internal.h @@ -0,0 +1,31 @@ +/* + * remote processor messaging bus internals + * + * Copyright (C) 2011 Texas Instruments, Inc. + * Copyright (C) 2011 Google, Inc. + * + * Ohad Ben-Cohen <ohad@wizery.com> + * Brian Swetland <swetland@google.com> + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __RPMSG_INTERNAL_H__ +#define __RPMSG_INTERNAL_H__ + +#include <linux/rpmsg.h> + +#define to_rpmsg_device(d) container_of(d, struct rpmsg_device, dev) +#define to_rpmsg_driver(d) container_of(d, struct rpmsg_driver, drv) + +struct device *rpmsg_find_device(struct device *parent, + struct rpmsg_channel_info *chinfo); + +#endif diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c index 184663276e51..488fd93a290c 100644 --- a/drivers/rpmsg/virtio_rpmsg_bus.c +++ b/drivers/rpmsg/virtio_rpmsg_bus.c @@ -35,6 +35,8 @@ #include <linux/mutex.h> #include <linux/of_device.h> +#include "rpmsg_internal.h" + /** * struct virtproc_info - virtual remote processor state * @vdev: the virtio device @@ -452,29 +454,6 @@ static void rpmsg_release_device(struct device *dev) kfree(rpdev); } -/* - * match an rpmsg channel with a channel info struct. - * this is used to make sure we're not creating rpmsg devices for channels - * that already exist. - */ -static int rpmsg_device_match(struct device *dev, void *data) -{ - struct rpmsg_channel_info *chinfo = data; - struct rpmsg_device *rpdev = to_rpmsg_device(dev); - - if (chinfo->src != RPMSG_ADDR_ANY && chinfo->src != rpdev->src) - return 0; - - if (chinfo->dst != RPMSG_ADDR_ANY && chinfo->dst != rpdev->dst) - return 0; - - if (strncmp(chinfo->name, rpdev->id.name, RPMSG_NAME_SIZE)) - return 0; - - /* found a match ! */ - return 1; -} - static const struct rpmsg_device_ops virtio_rpmsg_ops = { .create_ept = virtio_rpmsg_create_ept, .announce_create = virtio_rpmsg_announce_create, @@ -494,7 +473,7 @@ static struct rpmsg_device *rpmsg_create_channel(struct virtproc_info *vrp, int ret; /* make sure a similar channel doesn't already exist */ - tmp = device_find_child(dev, chinfo, rpmsg_device_match); + tmp = rpmsg_find_device(dev, chinfo); if (tmp) { /* decrement the matched device's refcount back */ put_device(tmp); @@ -547,7 +526,7 @@ static int rpmsg_destroy_channel(struct virtproc_info *vrp, struct virtio_device *vdev = vrp->vdev; struct device *dev; - dev = device_find_child(&vdev->dev, chinfo, rpmsg_device_match); + dev = rpmsg_find_device(&vdev->dev, chinfo); if (!dev) return -EINVAL; -- 2.5.0
next prev parent reply other threads:[~2016-09-01 22:28 UTC|newest] Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-09-01 22:27 [PATCH v2 00/17] Make rpmsg a framework Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-01 22:27 ` [PATCH v2 01/17] rpmsg: Enable matching devices with drivers based on DT Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-08 1:46 ` spjoshi 2016-09-08 1:46 ` spjoshi at codeaurora.org 2016-09-09 4:30 ` Bjorn Andersson 2016-09-09 4:30 ` Bjorn Andersson 2016-09-09 22:07 ` Sarangdhar Joshi 2016-09-09 22:07 ` Sarangdhar Joshi 2016-09-01 22:27 ` [PATCH v2 02/17] rpmsg: Name rpmsg devices based on channel id Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-08 1:46 ` spjoshi 2016-09-08 1:46 ` spjoshi at codeaurora.org 2016-09-01 22:27 ` [PATCH v2 03/17] rpmsg: rpmsg_send() operations takes rpmsg_endpoint Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-01 22:27 ` [PATCH v2 04/17] rpmsg: Make rpmsg_create_ept() take channel_info struct Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-01 22:27 ` [PATCH v2 05/17] rpmsg: Clean up rpmsg device vs channel naming Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-01 22:27 ` [PATCH v2 06/17] rpmsg: Introduce indirection table for rpmsg_device operations Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-01 22:27 ` [PATCH v2 07/17] rpmsg: Move rpmsg_device API to new file Bjorn Andersson 2016-09-01 22:27 ` Bjorn Andersson 2016-09-01 22:28 ` [PATCH v2 08/17] rpmsg: Indirection table for rpmsg_endpoint operations Bjorn Andersson 2016-09-01 22:28 ` Bjorn Andersson 2016-09-01 22:28 ` [PATCH v2 09/17] rpmsg: Move endpoint related interface to rpmsg core Bjorn Andersson 2016-09-01 22:28 ` Bjorn Andersson 2016-09-01 22:28 ` Bjorn Andersson [this message] 2016-09-01 22:28 ` [PATCH v2 10/17] rpmsg: Move helper for finding rpmsg devices to core Bjorn Andersson 2016-09-01 22:28 ` [PATCH v2 11/17] rpmsg: Split off generic tail of create_channel() Bjorn Andersson 2016-09-01 22:28 ` Bjorn Andersson 2016-09-01 22:28 ` [PATCH v2 12/17] rpmsg: Split rpmsg core and virtio backend Bjorn Andersson 2016-09-01 22:28 ` Bjorn Andersson 2016-09-01 22:28 ` [PATCH v2 13/17] rpmsg: Hide rpmsg indirection tables Bjorn Andersson 2016-09-01 22:28 ` Bjorn Andersson 2016-09-01 22:28 ` [PATCH v2 14/17] rpmsg: virtio: Hide vrp pointer from the public API Bjorn Andersson 2016-09-01 22:28 ` Bjorn Andersson 2016-09-01 22:28 ` [PATCH v2 15/17] rpmsg: Move virtio specifics from public header Bjorn Andersson 2016-09-01 22:28 ` Bjorn Andersson 2016-09-01 22:28 ` [PATCH v2 16/17] rpmsg: Allow callback to return errors Bjorn Andersson 2016-09-01 22:28 ` Bjorn Andersson 2016-09-01 22:28 ` [PATCH v2 17/17] rpmsg: Introduce Qualcomm SMD backend Bjorn Andersson 2016-09-01 22:28 ` Bjorn Andersson 2016-09-12 16:52 ` [PATCH v2 00/17] Make rpmsg a framework Lina Iyer 2016-09-12 16:52 ` Lina Iyer 2016-09-12 18:00 ` Bjorn Andersson 2016-09-12 18:00 ` Bjorn Andersson 2016-09-12 18:13 ` Jeffrey Hugo 2016-09-12 18:13 ` Jeffrey Hugo 2016-09-12 18:49 ` Bjorn Andersson 2016-09-12 18:49 ` Bjorn Andersson 2016-09-12 19:21 ` Jeffrey Hugo 2016-09-12 19:21 ` Jeffrey Hugo 2016-09-12 19:58 ` Bjorn Andersson 2016-09-12 19:58 ` Bjorn Andersson 2016-09-12 21:36 ` Karthikeyan Ramasubramanian 2016-09-12 21:36 ` Karthikeyan Ramasubramanian 2016-09-12 21:53 ` Bjorn Andersson 2016-09-12 21:53 ` Bjorn Andersson 2016-09-12 22:22 ` Lina Iyer 2016-09-12 22:22 ` Lina Iyer 2016-09-12 22:58 ` Bjorn Andersson 2016-09-12 22:58 ` Bjorn Andersson
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1472768889-3906-11-git-send-email-bjorn.andersson@linaro.org \ --to=bjorn.andersson@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-remoteproc@vger.kernel.org \ --cc=ohad@wizery.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.