www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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