root / include / qemu / module.h @ e26110cf
History | View | Annotate | Download (2 kB)
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 |
#include "qemu/osdep.h" |
18 |
|
19 |
#define DSO_STAMP_FUN glue(qemu_stamp, CONFIG_STAMP)
|
20 |
#define DSO_STAMP_FUN_STR stringify(DSO_STAMP_FUN)
|
21 |
|
22 |
#ifdef BUILD_DSO
|
23 |
void DSO_STAMP_FUN(void); |
24 |
/* This is a dummy symbol to identify a loaded DSO as a QEMU module, so we can
|
25 |
* distinguish "version mismatch" from "not a QEMU module", when the stamp
|
26 |
* check fails during module loading */
|
27 |
void qemu_module_dummy(void); |
28 |
|
29 |
#define module_init(function, type) \
|
30 |
static void __attribute__((constructor)) do_qemu_init_ ## function(void) \ |
31 |
{ \ |
32 |
register_dso_module_init(function, type); \ |
33 |
} |
34 |
#else
|
35 |
/* This should not be used directly. Use block_init etc. instead. */
|
36 |
#define module_init(function, type) \
|
37 |
static void __attribute__((constructor)) do_qemu_init_ ## function(void) \ |
38 |
{ \ |
39 |
register_module_init(function, type); \ |
40 |
} |
41 |
#endif
|
42 |
|
43 |
typedef enum { |
44 |
MODULE_INIT_BLOCK, |
45 |
MODULE_INIT_MACHINE, |
46 |
MODULE_INIT_QAPI, |
47 |
MODULE_INIT_QOM, |
48 |
MODULE_INIT_MAX |
49 |
} module_init_type; |
50 |
|
51 |
#define block_init(function) module_init(function, MODULE_INIT_BLOCK)
|
52 |
#define machine_init(function) module_init(function, MODULE_INIT_MACHINE)
|
53 |
#define qapi_init(function) module_init(function, MODULE_INIT_QAPI)
|
54 |
#define type_init(function) module_init(function, MODULE_INIT_QOM)
|
55 |
|
56 |
void register_module_init(void (*fn)(void), module_init_type type); |
57 |
void register_dso_module_init(void (*fn)(void), module_init_type type); |
58 |
|
59 |
void module_call_init(module_init_type type);
|
60 |
|
61 |
#endif
|