module.h (1332B)
1 #ifndef MODULE_H 2 #define MODULE_H 3 4 #include <types.h> 5 6 typedef enum { 7 ETAPE_MODULE_CHARGE = 0, 8 ETAPE_MODULE_INITIALISE = 1, 9 } EtapeChargementModule; 10 11 12 typedef struct InfoModule { 13 char* nom; 14 void (*init) (void** etat); 15 void (*deinit) (void** etat); 16 EtapeChargementModule etapeChargementModule; 17 void* etat; 18 struct DependanceModule* dependances; 19 struct InfoModule* suivant; 20 struct InfoModule* suivantRecursionDependances; 21 int nbDependances; 22 } PACKED ALIGNED(32) InfoModule; 23 24 typedef struct DependanceModule { 25 InfoModule* module; 26 InfoModule* dependance; 27 } PACKED DependanceModule; 28 29 30 #define MODULE(nom) \ 31 Etat ## nom _etat ## nom USED; \ 32 Etat ## nom* etat ## nom USED = &_etat ## nom; \ 33 \ 34 void (init ## nom) (void** etat); \ 35 void (deinit ## nom) (void** etat); \ 36 InfoModule __infoModule_ ## nom \ 37 SECTION(.modules) \ 38 USED \ 39 = { \ 40 (#nom), \ 41 (init ## nom), \ 42 (deinit ## nom), \ 43 ETAPE_MODULE_CHARGE, \ 44 NULL, \ 45 NULL, \ 46 NULL, \ 47 NULL, \ 48 0 \ 49 } 50 51 #define DEPENDANCE_MODULE(module, dependance) \ 52 extern InfoModule __infoModule_ ## module; \ 53 extern InfoModule __infoModule_ ## dependance; \ 54 DependanceModule __dependanceModule ## module ## _ ## dependance \ 55 __attribute__ ((section(".dependancesModules"))) \ 56 USED \ 57 = { \ 58 & __infoModule_ ## module, \ 59 & __infoModule_ ## dependance \ 60 } 61 62 #endif