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 39