diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1994-11-28 11:59:19 +0000 |
---|---|---|
committer | <ralf@linux-mips.org> | 1994-11-28 11:59:19 +0000 |
commit | 1513ff9b7899ab588401c89db0e99903dbf5f886 (patch) | |
tree | f69cc81a940a502ea23d664c3ffb2d215a479667 /include/linux/module.h |
Import of Linus's Linux 1.1.68
Diffstat (limited to 'include/linux/module.h')
-rw-r--r-- | include/linux/module.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/include/linux/module.h b/include/linux/module.h new file mode 100644 index 000000000..b82fa281b --- /dev/null +++ b/include/linux/module.h @@ -0,0 +1,81 @@ +/* + * Dynamic loading of modules into the kernel. + * + * Modified by Bjorn Ekwall <bj0rn@blox.se> + */ + +#ifndef _LINUX_MODULE_H +#define _LINUX_MODULE_H + +/* values of module.state */ +#define MOD_UNINITIALIZED 0 +#define MOD_RUNNING 1 +#define MOD_DELETED 2 + +/* maximum length of module name */ +#define MOD_MAX_NAME 64 + +/* maximum length of symbol name */ +#define SYM_MAX_NAME 60 + +struct kernel_sym { /* sent to "insmod" */ + unsigned long value; /* value of symbol */ + char name[SYM_MAX_NAME]; /* name of symbol */ +}; + +struct module_ref { + struct module *module; + struct module_ref *next; +}; + +struct internal_symbol { + void *addr; + char *name; + }; + +struct symbol_table { /* received from "insmod" */ + int size; /* total, including string table!!! */ + int n_symbols; + int n_refs; + struct internal_symbol symbol[0]; /* actual size defined by n_symbols */ + struct module_ref ref[0]; /* actual size defined by n_refs */ +}; +/* + * Note: The string table follows immediately after the symbol table in memory! + */ + +struct module { + struct module *next; + struct module_ref *ref; /* the list of modules that refer to me */ + struct symbol_table *symtab; + char *name; + int size; /* size of module in pages */ + void* addr; /* address of module */ + int state; + void (*cleanup)(void); /* cleanup routine */ +}; + +struct mod_routines { + int (*init)(void); /* initialization routine */ + void (*cleanup)(void); /* cleanup routine */ +}; + +/* rename_module_symbol(old_name, new_name) WOW! */ +extern int rename_module_symbol(char *, char *); + + +/* + * The first word of the module contains the use count. + */ +#define GET_USE_COUNT(module) (* (int *) (module)->addr) +/* + * define the count variable, and usage macros. + */ + +extern int mod_use_count_; + +#define MOD_INC_USE_COUNT mod_use_count_++ +#define MOD_DEC_USE_COUNT mod_use_count_-- +#define MOD_IN_USE (mod_use_count_ != 0) + +#endif |