David 'Digit' Turner | 5d8f37a | 2009-09-14 14:32:27 -0700 | [diff] [blame] | 1 | /* |
| 2 | * QEMU Module Infrastructure |
| 3 | * |
| 4 | * Copyright IBM, Corp. 2009 |
| 5 | * |
| 6 | * Authors: |
| 7 | * Anthony Liguori <aliguori@us.ibm.com> |
| 8 | * |
| 9 | * This work is licensed under the terms of the GNU GPL, version 2. See |
| 10 | * the COPYING file in the top-level directory. |
| 11 | * |
| 12 | */ |
| 13 | |
| 14 | #ifndef QEMU_MODULE_H |
| 15 | #define QEMU_MODULE_H |
| 16 | |
| 17 | /* This should not be used directly. Use block_init etc. instead. */ |
| 18 | #define module_init(function, type) \ |
| 19 | static void __attribute__((constructor)) do_qemu_init_ ## function(void) { \ |
| 20 | register_module_init(function, type); \ |
| 21 | } |
| 22 | |
| 23 | typedef enum { |
| 24 | MODULE_INIT_BLOCK, |
| 25 | MODULE_INIT_DEVICE, |
| 26 | MODULE_INIT_MACHINE, |
| 27 | MODULE_INIT_MAX |
| 28 | } module_init_type; |
| 29 | |
| 30 | #define block_init(function) module_init(function, MODULE_INIT_BLOCK) |
| 31 | #define device_init(function) module_init(function, MODULE_INIT_DEVICE) |
| 32 | #define machine_init(function) module_init(function, MODULE_INIT_MACHINE) |
| 33 | |
| 34 | void register_module_init(void (*fn)(void), module_init_type type); |
| 35 | |
| 36 | void module_call_init(module_init_type type); |
| 37 | |
| 38 | #endif |