63 lines
1.3 KiB
C
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
|