8 #define MODULE_MAGIC ('A'|('M'<<8)|('D'<<16)|('\2'<<24))
10 // IA32 - Architecture 1
12 # define MODULE_ARCH_ID 1
13 // IA64 - Architecture 2
15 # define MODULE_ARCH_ID 2
17 # error "Unknown architecture when determining MODULE_ARCH_ID ('" #ARCHDIR "')"
20 #define MODULE_DEFINE(_flags,_ver,_ident,_entry,_deinit,_deps...) char *_DriverDeps_##_ident[]={_deps};\
21 tModule __attribute__ ((section ("KMODULES"),unused)) _DriverInfo_##_ident=\
22 {MODULE_MAGIC,MODULE_ARCH_ID,_flags,_ver,NULL,#_ident,_entry,_deinit,_DriverDeps_##_ident}
24 typedef struct sModule {
31 int (*Init)(char **Arguments);
33 char **Dependencies; // NULL Terminated List
34 } __attribute__((packed)) tModule;
36 #define MODULE_INIT_SUCCESS 1
37 #define MODULE_INIT_FAILURE 0
40 * \brief Module Loader definition
42 * Allows a module to extend the loader to recognise other module types
43 * E.g. EDI, UDI, Windows, Linux, ...
45 typedef struct sModuleLoader {
46 struct sModuleLoader *Next; //!< Kernel Only - Next loader in list
47 char *Name; //!< Friendly name for the loader
48 int (*Detector)(void *Base); //!< Simple detector function
49 int (*Loader)(void *Base); //!< Initialises the module
50 int (*Unloader)(void *Base); //!< Calls module's cleanup
51 } PACKED tModuleLoader;
54 * \brief Registers a tModuleLoader with the kernel
55 * \param Loader Pointer to loader structure (must be persistent)
57 extern int Module_RegisterLoader(tModuleLoader *Loader);