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, // 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 38void register_module_init(void (*fn)(void), module_init_type type); 39 40void module_call_init(module_init_type type); 41 42#endif 43