2009-systeme-exploitation-g.../src/inclusions/module.h
Georges Dupéron ed1e0cf4c8 Initial commit.
2011-04-15 01:14:48 +02:00

63 lines
1.3 KiB
C

#ifndef MODULE_H
#define MODULE_H
#include <types.h>
typedef enum {
ETAPE_MODULE_CHARGE = 0,
ETAPE_MODULE_INITIALISE = 1,
} EtapeChargementModule;
typedef struct InfoModule {
char* nom;
void (*init) (void** etat);
void (*deinit) (void** etat);
EtapeChargementModule etapeChargementModule;
void* etat;
struct DependanceModule* dependances;
struct InfoModule* suivant;
struct InfoModule* suivantRecursionDependances;
int nbDependances;
} PACKED ALIGNED(32) InfoModule;
typedef struct DependanceModule {
InfoModule* module;
InfoModule* dependance;
} PACKED DependanceModule;
#define MODULE(nom) \
Etat ## nom _etat ## nom USED; \
Etat ## nom* etat ## nom USED = &_etat ## nom; \
\
void (init ## nom) (void** etat); \
void (deinit ## nom) (void** etat); \
InfoModule __infoModule_ ## nom \
SECTION(.modules) \
USED \
= { \
(#nom), \
(init ## nom), \
(deinit ## nom), \
ETAPE_MODULE_CHARGE, \
NULL, \
NULL, \
NULL, \
NULL, \
0 \
}
#define DEPENDANCE_MODULE(module, dependance) \
extern InfoModule __infoModule_ ## module; \
extern InfoModule __infoModule_ ## dependance; \
DependanceModule __dependanceModule ## module ## _ ## dependance \
__attribute__ ((section(".dependancesModules"))) \
USED \
= { \
& __infoModule_ ## module, \
& __infoModule_ ## dependance \
}
#endif