From 9a0c19824dd7b754c5178fd1eb26c13eaca78146 Mon Sep 17 00:00:00 2001 From: Dominik Brodowski Date: Sat, 22 Mar 2003 04:34:41 -0800 Subject: [PATCH] [PATCH] pcmcia: add bus_type pcmcia_bus_type Register a bus_type pcmcia_bus_type. This means the initialization of the ds module needs to be done in two levels: one quite early (subsys_initcall) so that drivers may use the bus_type; the other one must stay that late (late_initcall). As only one initcall can be specified within one module, some tweaking is needed. --- drivers/pcmcia/ds.c | 35 ++++++++++++++++++++++++++++++----- include/pcmcia/ds.h | 3 +++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index bee8f552a6b22..df3f8286f91e3 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c @@ -881,7 +881,18 @@ EXPORT_SYMBOL(unregister_pccard_driver); /*====================================================================*/ -int __init init_pcmcia_ds(void) +struct bus_type pcmcia_bus_type = { + .name = "pcmcia", +}; +EXPORT_SYMBOL(pcmcia_bus_type); + +static int __init init_pcmcia_bus(void) +{ + bus_register(&pcmcia_bus_type); + return 0; +} + +static int __init init_pcmcia_ds(void) { client_reg_t client_reg; servinfo_t serv; @@ -967,11 +978,8 @@ int __init init_pcmcia_ds(void) return 0; } -late_initcall(init_pcmcia_ds); -#ifdef MODULE - -void __exit cleanup_module(void) +static void __exit exit_pcmcia_ds(void) { int i; #ifdef CONFIG_PROC_FS @@ -984,6 +992,23 @@ void __exit cleanup_module(void) pcmcia_deregister_client(socket_table[i].handle); sockets = 0; kfree(socket_table); + bus_unregister(&pcmcia_bus_type); } +#ifdef MODULE + +/* init_pcmcia_bus must be done early, init_pcmcia_ds late. If we load this + * as a module, we can only specify one initcall, though... + */ +static int __init init_pcmcia_module(void) { + init_pcmcia_bus(); + return init_pcmcia_ds(); +} +module_init(init_pcmcia_module); + +#else /* !MODULE */ +subsys_initcall(init_pcmcia_bus); +late_initcall(init_pcmcia_ds); #endif + +module_exit(exit_pcmcia_ds); diff --git a/include/pcmcia/ds.h b/include/pcmcia/ds.h index 65a5d07a38725..1a4a6dfafecff 100644 --- a/include/pcmcia/ds.h +++ b/include/pcmcia/ds.h @@ -32,6 +32,7 @@ #include #include +#include typedef struct tuple_parse_t { tuple_t tuple; @@ -143,6 +144,8 @@ int unregister_pccard_driver(dev_info_t *dev_info); #define register_pcmcia_driver register_pccard_driver #define unregister_pcmcia_driver unregister_pccard_driver +extern struct bus_type pcmcia_bus_type; + #endif /* __KERNEL__ */ #endif /* _LINUX_DS_H */ -- 2.53.0