diff --git a/Makefile b/Makefile index fe63e670e5a09602264622031bf6579ae78e1396..1ddea912698f9b74b76a2cb530980d01875e086e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ LINUX ?= /lib/modules/$(shell uname -r)/build zio-core-objs := zio-cdev.o zio-sys.o +zio-core-objs += buffers/zio-buf-kmalloc.o triggers/zio-trig-user.o + obj-m = zio-core.o obj-m += drivers/ obj-m += buffers/ diff --git a/buffers/Makefile b/buffers/Makefile index 9f31881c52ab7ca775eb2e1ae551bbba5f9d508b..a42d21ea9fb6d5041034e1a983a9ef19ca7ee410 100644 --- a/buffers/Makefile +++ b/buffers/Makefile @@ -2,7 +2,7 @@ LINUX ?= /lib/modules/$(shell uname -r)/build EXTRA_CFLAGS += -I$(obj)/../include/ -obj-m = zio-buf-kmalloc.o +# zio-buf-kmalloc.o is now part of zio-core all: $(MAKE) -C $(LINUX) M=$(shell /bin/pwd) modules diff --git a/buffers/zio-buf-kmalloc.c b/buffers/zio-buf-kmalloc.c index 3c3bd9b9ec96cac6e462041dc62b174719e5621e..26a74ddd7f3e8f34944660b7aca30cf34eff8a95 100644 --- a/buffers/zio-buf-kmalloc.c +++ b/buffers/zio-buf-kmalloc.c @@ -263,18 +263,17 @@ static struct zio_buffer_type zbk_buffer = { .f_op = &zbk_file_ops, }; -static int zbk_init(void) +static int __init zbk_init(void) { return zio_register_buf(&zbk_buffer, "kmalloc"); } -static void zbk_exit(void) +static void __exit zbk_exit(void) { zio_unregister_buf(&zbk_buffer); /* FIXME REMOVE all instances left */ } -module_init(zbk_init); -module_exit(zbk_exit); -MODULE_AUTHOR("Alessandro Rubini"); -MODULE_LICENSE("GPL"); +/* This is the default buffer, and is part of zio-core: no module init/exit */ +int __init __attribute__((alias("zbk_init"))) zio_default_buffer_init(void); +void __exit __attribute__((alias("zbk_exit"))) zio_default_buffer_exit(void); diff --git a/include/linux/zio.h b/include/linux/zio.h index 29eb04f8febb52a3962834b7920da6c17f318776..6ead3089afaa5a951bfb97c839dc9a316d608011 100644 --- a/include/linux/zio.h +++ b/include/linux/zio.h @@ -260,7 +260,13 @@ void __zio_unregister_cdev(void); int zio_create_chan_devices(struct zio_channel *zchan); void zio_destroy_chan_devices(struct zio_channel *zchan); -#endif /* INTERNAL */ + +int zio_default_buffer_init(void); +void zio_default_buffer_exit(void); +int zio_default_trigger_init(void); +void zio_default_trigger_exit(void); + +#endif /* __ZIO_INTERNAL__ */ #endif /* __KERNEL__ */ #endif /* __ZIO_H__ */ diff --git a/triggers/Makefile b/triggers/Makefile index 329d1ccc3a140447378ef4cf2d5c717b7cd31993..b37bc99142eefb037e8a3614bff1bf5c35cef782 100644 --- a/triggers/Makefile +++ b/triggers/Makefile @@ -2,9 +2,9 @@ LINUX ?= /lib/modules/$(shell uname -r)/build EXTRA_CFLAGS += -I$(obj)/../include/ +# zio-trig-user.o is now part of zio-core obj-m = zio-trig-timer.o obj-m += zio-trig-irq.o -obj-m += zio-trig-user.o all: $(MAKE) -C $(LINUX) M=$(shell /bin/pwd) modules diff --git a/triggers/zio-trig-user.c b/triggers/zio-trig-user.c index c0f5ac87856fddfd79c9fd02cc1822cc56c17390..b24b433b256577c537cae29958432e1913711ac1 100644 --- a/triggers/zio-trig-user.c +++ b/triggers/zio-trig-user.c @@ -123,7 +123,7 @@ static void __exit ztu_exit(void) zio_unregister_trig(&ztu_trigger); } -module_init(ztu_init); -module_exit(ztu_exit); -MODULE_AUTHOR("Alessandro Rubini"); -MODULE_LICENSE("GPL"); + +/* This is the default trigger, and is part of zio-core: no module init/exit */ +int __init __attribute__((alias("ztu_init"))) zio_default_trigger_init(void); +void __exit __attribute__((alias("ztu_exit"))) zio_default_trigger_exit(void); diff --git a/zio-sys.c b/zio-sys.c index 216f8428405ffadc8efad5915f64fc9522ba2cd0..2572e38e807bf263bcac68bce93c6931723ba249 100644 --- a/zio-sys.c +++ b/zio-sys.c @@ -1762,6 +1762,12 @@ static int __init zio_init(void) "triggers"); zlist_register(&zstat->all_buffer_types, zstat->kobj, ZBUF, "buffers"); + err = zio_default_buffer_init(); + if (err) + pr_warn("%s: cannot register default buffer\n", __func__); + err = zio_default_trigger_init(); + if (err) + pr_warn("%s: cannot register default trigger\n", __func__); pr_info("zio-core had been loaded\n"); return 0; @@ -1773,6 +1779,8 @@ out_cdev: static void __exit zio_exit(void) { + zio_default_trigger_exit(); + zio_default_buffer_exit(); /* Remove the three object lists*/ zlist_unregister(&zstat->all_devices); zlist_unregister(&zstat->all_buffer_types); @@ -1792,6 +1800,7 @@ static void __exit zio_exit(void) subsys_initcall(zio_init); module_exit(zio_exit); -MODULE_AUTHOR("Federico Vaga <federico.vaga@gmail.com>"); +MODULE_AUTHOR("Federico Vaga and Alessandro Rubini"); +/* Federico wrote the core, Alessandro wrote default trigger and buffer */ MODULE_DESCRIPTION("ZIO - ZIO Input Output"); MODULE_LICENSE("GPL");