1
2
3
4
5
6
7 #ifndef _LINUX_MODULE_H
8 #define _LINUX_MODULE_H
9
10 #ifdef __GENKSYMS__
11 # define _set_ver(sym,vers) sym
12 # undef MODVERSIONS
13 # define MODVERSIONS
14 #else
15 # ifdef MODVERSIONS
16 # ifndef MODULE
17 # ifdef EXPORT_SYMTAB
18 # define _set_ver(sym,vers) sym
19 # include <linux/modversions.h>
20 # endif
21 # endif
22 # endif
23 #endif
24
25
26 #define MOD_UNINITIALIZED 0
27 #define MOD_RUNNING 1
28 #define MOD_DELETED 2
29
30
31 #define MOD_MAX_NAME 64
32
33
34 #define SYM_MAX_NAME 60
35
36 struct kernel_sym {
37 unsigned long value;
38 char name[SYM_MAX_NAME];
39 };
40
41 struct module_ref {
42 struct module *module;
43 struct module_ref *next;
44 };
45
46 struct internal_symbol {
47 void *addr;
48 const char *name;
49 };
50
51 struct symbol_table {
52 int size;
53 int n_symbols;
54 int n_refs;
55 struct internal_symbol symbol[0];
56 struct module_ref ref[0];
57 };
58
59
60
61
62 struct module {
63 struct module *next;
64 struct module_ref *ref;
65 struct symbol_table *symtab;
66 const char *name;
67 int size;
68 void* addr;
69 int state;
70 void (*cleanup)(void);
71 };
72
73 struct mod_routines {
74 int (*init)(void);
75 void (*cleanup)(void);
76 };
77
78
79 extern int rename_module_symbol(char *, char *);
80
81
82 extern int register_symtab(struct symbol_table *);
83
84
85
86
87 #define GET_USE_COUNT(module) (* (long *) (module)->addr)
88
89
90
91
92 #ifdef MODULE
93
94 extern long mod_use_count_;
95 #define MOD_INC_USE_COUNT mod_use_count_++
96 #define MOD_DEC_USE_COUNT mod_use_count_--
97 #define MOD_IN_USE (mod_use_count_ != 0)
98
99 #ifndef __NO_VERSION__
100 #include <linux/version.h>
101 char kernel_version[]=UTS_RELEASE;
102 #endif
103
104 #if defined(MODVERSIONS) && !defined(__GENKSYMS__)
105 int Using_Versions;
106 #endif
107
108 #else
109
110 #define MOD_INC_USE_COUNT do { } while (0)
111 #define MOD_DEC_USE_COUNT do { } while (0)
112 #define MOD_IN_USE 1
113
114 #endif
115
116 #endif