Annotation of qemu/module.c, revision 1.1.1.1

1.1       root        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: #include "qemu-common.h"
                     15: #include "sys-queue.h"
                     16: #include "module.h"
                     17: 
                     18: typedef struct ModuleEntry
                     19: {
                     20:     module_init_type type;
                     21:     void (*init)(void);
                     22:     TAILQ_ENTRY(ModuleEntry) node;
                     23: } ModuleEntry;
                     24: 
                     25: typedef TAILQ_HEAD(, ModuleEntry) ModuleTypeList;
                     26: 
                     27: static ModuleTypeList init_type_list[MODULE_INIT_MAX];
                     28: 
                     29: static void init_types(void)
                     30: {
                     31:     static int inited;
                     32:     int i;
                     33: 
                     34:     if (inited) {
                     35:         return;
                     36:     }
                     37: 
                     38:     for (i = 0; i < MODULE_INIT_MAX; i++) {
                     39:         TAILQ_INIT(&init_type_list[i]);
                     40:     }
                     41: 
                     42:     inited = 1;
                     43: }
                     44: 
                     45: 
                     46: static ModuleTypeList *find_type(module_init_type type)
                     47: {
                     48:     ModuleTypeList *l;
                     49: 
                     50:     init_types();
                     51: 
                     52:     l = &init_type_list[type];
                     53: 
                     54:     return l;
                     55: }
                     56: 
                     57: void register_module_init(void (*fn)(void), module_init_type type)
                     58: {
                     59:     ModuleEntry *e;
                     60:     ModuleTypeList *l;
                     61: 
                     62:     e = qemu_mallocz(sizeof(*e));
                     63:     e->init = fn;
                     64: 
                     65:     l = find_type(type);
                     66: 
                     67:     TAILQ_INSERT_TAIL(l, e, node);
                     68: }
                     69: 
                     70: void module_call_init(module_init_type type)
                     71: {
                     72:     ModuleTypeList *l;
                     73:     ModuleEntry *e;
                     74: 
                     75:     l = find_type(type);
                     76: 
                     77:     TAILQ_FOREACH(e, l, node) {
                     78:         e->init();
                     79:     }
                     80: }

unix.superglobalmegacorp.com