diff options
author | Anthony Liguori <aliguori@us.ibm.com> | 2009-05-14 19:29:53 +0100 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2009-05-14 19:29:53 +0100 |
commit | 0bfe3ca51ebddbf2cc099fa34f359bd1ac4f65e6 (patch) | |
tree | 55e9fe69186e0c403be34ed30bbcb60416ec617f /module.h | |
parent | 70ec5dc0afa5cb4cc0c1fafc844c01973fcde8c3 (diff) |
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 <paul@codesourcery.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'module.h')
-rw-r--r-- | module.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/module.h b/module.h new file mode 100644 index 0000000000..cd368b1a91 --- /dev/null +++ b/module.h @@ -0,0 +1,35 @@ +/* + * QEMU Module Infrastructure + * + * Copyright IBM, Corp. 2009 + * + * Authors: + * Anthony Liguori <aliguori@us.ibm.com> + * + * 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 |