From 0bfe3ca51ebddbf2cc099fa34f359bd1ac4f65e6 Mon Sep 17 00:00:00 2001 From: Anthony Liguori Date: Thu, 14 May 2009 19:29:53 +0100 Subject: Constructor support Allow devices/drivers to register themselves via constructors. Destructors are not needed (can be registered from a constructor) and "priority" has been renamed and changed to an enum for clarity. Signed-off-by: Paul Brook Signed-off-by: Anthony Liguori --- module.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 module.h (limited to 'module.h') diff --git a/module.h b/module.h new file mode 100644 index 000000000..cd368b1a9 --- /dev/null +++ b/module.h @@ -0,0 +1,35 @@ +/* + * QEMU Module Infrastructure + * + * Copyright IBM, Corp. 2009 + * + * Authors: + * Anthony Liguori + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + * + */ + +#ifndef QEMU_MODULE_H +#define QEMU_MODULE_H + +/* This should not be used directly. Use block_init etc. instead. */ +#define module_init(function, type) \ +static void __attribute__((constructor)) do_qemu_init_ ## function(void) { \ + register_module_init(function, type); \ +} + +typedef enum { + MODULE_INIT_BLOCK, + MODULE_INIT_DEVICE +} module_init_type; + +#define block_init(function) module_init(function, MODULE_INIT_BLOCK) +#define device_init(function) module_init(function, MODULE_INIT_DEVICE) + +void register_module_init(void (*fn)(void), module_init_type type); + +void module_call_init(module_init_type type); + +#endif -- cgit v1.2.3