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) \ 19static void __attribute__((constructor)) do_qemu_init_ ## function(void) { \ 20 register_module_init(function, type); \ 21} 22 23typedef 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 34void register_module_init(void (*fn)(void), module_init_type type); 35 36void module_call_init(module_init_type type); 37 38#endif 39