15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* 25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * QEMU Module Infrastructure 35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Copyright IBM, Corp. 2009 55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Authors: 75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Anthony Liguori <aliguori@us.ibm.com> 85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * This work is licensed under the terms of the GNU GPL, version 2. See 105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * the COPYING file in the top-level directory. 115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef QEMU_MODULE_H 155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define QEMU_MODULE_H 165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* This should not be used directly. Use block_init etc. instead. */ 185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define module_init(function, type) \ 195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic void __attribute__((constructor)) do_qemu_init_ ## function(void) { \ 205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner register_module_init(function, type); \ 215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef enum { 245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner MODULE_INIT_BLOCK, 255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner MODULE_INIT_DEVICE, 265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner MODULE_INIT_MACHINE, 275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner MODULE_INIT_MAX 285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} module_init_type; 295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define block_init(function) module_init(function, MODULE_INIT_BLOCK) 315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define device_init(function) module_init(function, MODULE_INIT_DEVICE) 325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define machine_init(function) module_init(function, MODULE_INIT_MACHINE) 335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid register_module_init(void (*fn)(void), module_init_type type); 355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid module_call_init(module_init_type type); 375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 39