aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-05-18 17:17:20 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2016-05-18 17:17:20 -0700
commit676d9735cd010fc439566e2b6e9b6adc3e1179ef (patch)
tree069b84dda1a4cfa92a9d2e4b2b20ca507f589f49 /include
parentMerge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input (diff)
parentrpmsg: use module_rpmsg_driver in existing drivers and examples (diff)
downloadlinux-dev-676d9735cd010fc439566e2b6e9b6adc3e1179ef.tar.xz
linux-dev-676d9735cd010fc439566e2b6e9b6adc3e1179ef.zip
Merge tag 'rpmsg-v4.7' of git://github.com/andersson/remoteproc
Pull rpmsg updates from Bjorn Andersson: "Refactor rpmsg module registration to follow other subsystems; by introduction of module_rpmsg_driver and hiding of THIS_MODULE from clients" * tag 'rpmsg-v4.7' of git://github.com/andersson/remoteproc: rpmsg: use module_rpmsg_driver in existing drivers and examples rpmsg: add helper macro module_rpmsg_driver rpmsg: drop owner assignment from rpmsg_drivers rpmsg: add THIS_MODULE to rpmsg_driver in rpmsg core
Diffstat (limited to 'include')
-rw-r--r--include/linux/rpmsg.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/include/linux/rpmsg.h b/include/linux/rpmsg.h
index 82a673905edb..ada50ff36da0 100644
--- a/include/linux/rpmsg.h
+++ b/include/linux/rpmsg.h
@@ -169,7 +169,7 @@ struct rpmsg_driver {
int register_rpmsg_device(struct rpmsg_channel *dev);
void unregister_rpmsg_device(struct rpmsg_channel *dev);
-int register_rpmsg_driver(struct rpmsg_driver *drv);
+int __register_rpmsg_driver(struct rpmsg_driver *drv, struct module *owner);
void unregister_rpmsg_driver(struct rpmsg_driver *drv);
void rpmsg_destroy_ept(struct rpmsg_endpoint *);
struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,
@@ -177,6 +177,22 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,
int
rpmsg_send_offchannel_raw(struct rpmsg_channel *, u32, u32, void *, int, bool);
+/* use a macro to avoid include chaining to get THIS_MODULE */
+#define register_rpmsg_driver(drv) \
+ __register_rpmsg_driver(drv, THIS_MODULE)
+
+/**
+ * module_rpmsg_driver() - Helper macro for registering an rpmsg driver
+ * @__rpmsg_driver: rpmsg_driver struct
+ *
+ * Helper macro for rpmsg drivers which do not do anything special in module
+ * init/exit. This eliminates a lot of boilerplate. Each module may only
+ * use this macro once, and calling it replaces module_init() and module_exit()
+ */
+#define module_rpmsg_driver(__rpmsg_driver) \
+ module_driver(__rpmsg_driver, register_rpmsg_driver, \
+ unregister_rpmsg_driver)
+
/**
* rpmsg_send() - send a message across to the remote processor
* @rpdev: the rpmsg channel