Annotation of qemu/module.c, revision 1.1.1.4

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:  *
1.1.1.4 ! root       12:  * Contributions after 2012-01-13 are licensed under the terms of the
        !            13:  * GNU GPL, version 2 or (at your option) any later version.
1.1       root       14:  */
                     15: 
                     16: #include "qemu-common.h"
1.1.1.2   root       17: #include "qemu-queue.h"
1.1       root       18: #include "module.h"
                     19: 
                     20: typedef struct ModuleEntry
                     21: {
                     22:     void (*init)(void);
1.1.1.2   root       23:     QTAILQ_ENTRY(ModuleEntry) node;
1.1       root       24: } ModuleEntry;
                     25: 
1.1.1.2   root       26: typedef QTAILQ_HEAD(, ModuleEntry) ModuleTypeList;
1.1       root       27: 
                     28: static ModuleTypeList init_type_list[MODULE_INIT_MAX];
                     29: 
                     30: static void init_types(void)
                     31: {
                     32:     static int inited;
                     33:     int i;
                     34: 
                     35:     if (inited) {
                     36:         return;
                     37:     }
                     38: 
                     39:     for (i = 0; i < MODULE_INIT_MAX; i++) {
1.1.1.2   root       40:         QTAILQ_INIT(&init_type_list[i]);
1.1       root       41:     }
                     42: 
                     43:     inited = 1;
                     44: }
                     45: 
                     46: 
                     47: static ModuleTypeList *find_type(module_init_type type)
                     48: {
                     49:     ModuleTypeList *l;
                     50: 
                     51:     init_types();
                     52: 
                     53:     l = &init_type_list[type];
                     54: 
                     55:     return l;
                     56: }
                     57: 
                     58: void register_module_init(void (*fn)(void), module_init_type type)
                     59: {
                     60:     ModuleEntry *e;
                     61:     ModuleTypeList *l;
                     62: 
1.1.1.3   root       63:     e = g_malloc0(sizeof(*e));
1.1       root       64:     e->init = fn;
                     65: 
                     66:     l = find_type(type);
                     67: 
1.1.1.2   root       68:     QTAILQ_INSERT_TAIL(l, e, node);
1.1       root       69: }
                     70: 
                     71: void module_call_init(module_init_type type)
                     72: {
                     73:     ModuleTypeList *l;
                     74:     ModuleEntry *e;
                     75: 
                     76:     l = find_type(type);
                     77: 
1.1.1.2   root       78:     QTAILQ_FOREACH(e, l, node) {
1.1       root       79:         e->init();
                     80:     }
                     81: }

unix.superglobalmegacorp.com