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, // TODO(digit): Remove this. 26 MODULE_INIT_MACHINE, 27 MODULE_INIT_QAPI, 28 MODULE_INIT_QOM, 29 MODULE_INIT_MAX 30 } module_init_type; 31 32 #define block_init(function) module_init(function, MODULE_INIT_BLOCK) 33 #define device_init(function) module_init(function, MODULE_INIT_DEVICE) // TODO(digit): Remove this. 34 #define machine_init(function) module_init(function, MODULE_INIT_MACHINE) 35 #define qapi_init(function) module_init(function, MODULE_INIT_QAPI) 36 #define type_init(function) module_init(function, MODULE_INIT_QOM) 37 38 void register_module_init(void (*fn)(void), module_init_type type); 39 40 void module_call_init(module_init_type type); 41 42 #endif 43