mirror of https://gitee.com/openkylin/linux.git
rpmsg updates for v4.7
Refactor rpmsg module registration to follow other subsystems; by introduction of module_rpmsg_driver and hiding of THIS_MODULE from clients. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJXOmNJAAoJEAsfOT8Nma3FE3YP/igMkLVDZxHB7Ba65WwBkdGP ovHaBegBGsKlhh80pdzQsjTi4CcghyOT4BljK1nv150ltMaSE4dbs3ZfMfc5oDzt YGuh3MhmsWIrKgR9SQPTqujyhpo1ww0Z8lr7Gn24v0OFg8MQeaAbgFDyP0Gw6a0K wYJCJP+TcqfzkD2SdxNNaRb6uMs484yCPiZkvqrBxopdHThDzth90XGyXZikSRzt xjeT2z0UCMT/A9Y0u9K4w+1eqd40dNGjHXpc79mPvSA9Mvuo7Wq5nB5i3BFQ/qHu RT2A+4dajnpgdO2LB0zsA6kA4AhwExYPvwqqxjMqmIX1qua8FnQW2gPqHnwgTyH8 6fhN708px5WpyaNmSxcu970zAYclIXV78Yc8HhhOmVfGk2c7Hpd5ArxPa356opqK juHQGOcVAqc9PCo8NGfS4FZlSKIoFycdaYvl7Vb7fY/lfBFeWSKvnQG4oJq3P32o CLcH3QuQborx1smXi/6xQiVcUfqDItiZvSXGKSi29A7ii6ODtCJa1HUpuyxu5y6k TDH17oGk2F2Aiizs+c/RldQ+9wV6yrG1QaEwGz0Yn0IH1yDlXPio17Emnl9m9l4m /idoxJP+iPzzxApWfYpI/Z2xUEGzsjv3Fw3sJTlnIU0I4OoXHLBzNH7oLR4iQ3Tx FpKqXRnqlGzYUmkY5C2t =bOtz -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
676d9735cd
|
@ -249,24 +249,12 @@ MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table);
|
||||||
|
|
||||||
static struct rpmsg_driver rpmsg_sample_client = {
|
static struct rpmsg_driver rpmsg_sample_client = {
|
||||||
.drv.name = KBUILD_MODNAME,
|
.drv.name = KBUILD_MODNAME,
|
||||||
.drv.owner = THIS_MODULE,
|
|
||||||
.id_table = rpmsg_driver_sample_id_table,
|
.id_table = rpmsg_driver_sample_id_table,
|
||||||
.probe = rpmsg_sample_probe,
|
.probe = rpmsg_sample_probe,
|
||||||
.callback = rpmsg_sample_cb,
|
.callback = rpmsg_sample_cb,
|
||||||
.remove = rpmsg_sample_remove,
|
.remove = rpmsg_sample_remove,
|
||||||
};
|
};
|
||||||
|
module_rpmsg_driver(rpmsg_sample_client);
|
||||||
static int __init init(void)
|
|
||||||
{
|
|
||||||
return register_rpmsg_driver(&rpmsg_sample_client);
|
|
||||||
}
|
|
||||||
module_init(init);
|
|
||||||
|
|
||||||
static void __exit fini(void)
|
|
||||||
{
|
|
||||||
unregister_rpmsg_driver(&rpmsg_sample_client);
|
|
||||||
}
|
|
||||||
module_exit(fini);
|
|
||||||
|
|
||||||
Note: a similar sample which can be built and loaded can be found
|
Note: a similar sample which can be built and loaded can be found
|
||||||
in samples/rpmsg/.
|
in samples/rpmsg/.
|
||||||
|
|
|
@ -436,17 +436,19 @@ static struct bus_type rpmsg_bus = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* register_rpmsg_driver() - register an rpmsg driver with the rpmsg bus
|
* __register_rpmsg_driver() - register an rpmsg driver with the rpmsg bus
|
||||||
* @rpdrv: pointer to a struct rpmsg_driver
|
* @rpdrv: pointer to a struct rpmsg_driver
|
||||||
|
* @owner: owning module/driver
|
||||||
*
|
*
|
||||||
* Returns 0 on success, and an appropriate error value on failure.
|
* Returns 0 on success, and an appropriate error value on failure.
|
||||||
*/
|
*/
|
||||||
int register_rpmsg_driver(struct rpmsg_driver *rpdrv)
|
int __register_rpmsg_driver(struct rpmsg_driver *rpdrv, struct module *owner)
|
||||||
{
|
{
|
||||||
rpdrv->drv.bus = &rpmsg_bus;
|
rpdrv->drv.bus = &rpmsg_bus;
|
||||||
|
rpdrv->drv.owner = owner;
|
||||||
return driver_register(&rpdrv->drv);
|
return driver_register(&rpdrv->drv);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(register_rpmsg_driver);
|
EXPORT_SYMBOL(__register_rpmsg_driver);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* unregister_rpmsg_driver() - unregister an rpmsg driver from the rpmsg bus
|
* unregister_rpmsg_driver() - unregister an rpmsg driver from the rpmsg bus
|
||||||
|
|
|
@ -169,7 +169,7 @@ struct rpmsg_driver {
|
||||||
|
|
||||||
int register_rpmsg_device(struct rpmsg_channel *dev);
|
int register_rpmsg_device(struct rpmsg_channel *dev);
|
||||||
void unregister_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 unregister_rpmsg_driver(struct rpmsg_driver *drv);
|
||||||
void rpmsg_destroy_ept(struct rpmsg_endpoint *);
|
void rpmsg_destroy_ept(struct rpmsg_endpoint *);
|
||||||
struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,
|
struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,
|
||||||
|
@ -177,6 +177,22 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,
|
||||||
int
|
int
|
||||||
rpmsg_send_offchannel_raw(struct rpmsg_channel *, u32, u32, void *, int, bool);
|
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
|
* rpmsg_send() - send a message across to the remote processor
|
||||||
* @rpdev: the rpmsg channel
|
* @rpdev: the rpmsg channel
|
||||||
|
|
|
@ -77,24 +77,12 @@ MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table);
|
||||||
|
|
||||||
static struct rpmsg_driver rpmsg_sample_client = {
|
static struct rpmsg_driver rpmsg_sample_client = {
|
||||||
.drv.name = KBUILD_MODNAME,
|
.drv.name = KBUILD_MODNAME,
|
||||||
.drv.owner = THIS_MODULE,
|
|
||||||
.id_table = rpmsg_driver_sample_id_table,
|
.id_table = rpmsg_driver_sample_id_table,
|
||||||
.probe = rpmsg_sample_probe,
|
.probe = rpmsg_sample_probe,
|
||||||
.callback = rpmsg_sample_cb,
|
.callback = rpmsg_sample_cb,
|
||||||
.remove = rpmsg_sample_remove,
|
.remove = rpmsg_sample_remove,
|
||||||
};
|
};
|
||||||
|
module_rpmsg_driver(rpmsg_sample_client);
|
||||||
static int __init rpmsg_client_sample_init(void)
|
|
||||||
{
|
|
||||||
return register_rpmsg_driver(&rpmsg_sample_client);
|
|
||||||
}
|
|
||||||
module_init(rpmsg_client_sample_init);
|
|
||||||
|
|
||||||
static void __exit rpmsg_client_sample_fini(void)
|
|
||||||
{
|
|
||||||
unregister_rpmsg_driver(&rpmsg_sample_client);
|
|
||||||
}
|
|
||||||
module_exit(rpmsg_client_sample_fini);
|
|
||||||
|
|
||||||
MODULE_DESCRIPTION("Remote processor messaging sample client driver");
|
MODULE_DESCRIPTION("Remote processor messaging sample client driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
MODULE_LICENSE("GPL v2");
|
||||||
|
|
Loading…
Reference in New Issue