home *** CD-ROM | disk | FTP | other *** search
- /* Definitions for the Linux module syscall interface.
- Copyright 1996, 1997 Linux International.
-
- Contributed by Richard Henderson <rth@tamu.edu>
-
- This file is part of the Linux modutils.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2 of the License, or (at your
- option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
- #ifndef MODUTILS_MODULE_H
- #define MODUTILS_MODULE_H 1
-
- #ident "$Id: module.h,v 1.1.1.1 1998/01/06 20:51:07 ewt Exp $"
-
- /* This file contains the structures used by the 2.0 and 2.1 kernels.
- We do not use the kernel headers directly because we do not wish
- to be dependant on a particular kernel version to compile insmod. */
-
-
- /*======================================================================*/
- /* The structures used by Linux 2.0. */
-
- /* The symbol format used by get_kernel_syms(2). */
- struct old_kernel_sym
- {
- unsigned long value;
- char name[60];
- };
-
- struct old_module_ref
- {
- unsigned long module; /* kernel addresses */
- unsigned long next;
- };
-
- struct old_module_symbol
- {
- unsigned long addr;
- unsigned long name;
- };
-
- struct old_symbol_table
- {
- int size; /* total, including string table!!! */
- int n_symbols;
- int n_refs;
- struct old_module_symbol symbol[0]; /* actual size defined by n_symbols */
- struct old_module_ref ref[0]; /* actual size defined by n_refs */
- };
-
- struct old_mod_routines
- {
- unsigned long init;
- unsigned long cleanup;
- };
-
- struct old_module
- {
- unsigned long next;
- unsigned long ref; /* the list of modules that refer to me */
- unsigned long symtab;
- unsigned long name;
- int size; /* size of module in pages */
- unsigned long addr; /* address of module */
- int state;
- unsigned long cleanup; /* cleanup routine */
- };
-
- /* Sent to init_module(2) or'ed into the code size parameter. */
- #define OLD_MOD_AUTOCLEAN 0x40000000 /* big enough, but no sign problems... */
-
- int get_kernel_syms(struct old_kernel_sym *);
- int old_sys_init_module(const char *name, char *code, unsigned codesize,
- struct old_mod_routines *, struct old_symbol_table *);
-
- /*======================================================================*/
- /* For sizeof() which are related to the module platform and not to the
- environment isnmod is running in, use sizeof_xx instead of sizeof(xx). */
-
- #define tgt_sizeof_char sizeof(char)
- #define tgt_sizeof_short sizeof(short)
- #define tgt_sizeof_int sizeof(int)
- #define tgt_sizeof_long sizeof(long)
- #define tgt_sizeof_char_p sizeof(char *)
- #define tgt_sizeof_void_p sizeof(void *)
- #define tgt_long long
-
- #if defined(__sparc__) && !defined(__sparc_v9__) && defined(ARCH_sparc64)
- #undef tgt_sizeof_long
- #undef tgt_sizeof_char_p
- #undef tgt_sizeof_void_p
- #undef tgt_long
- #define tgt_sizeof_long 8
- #define tgt_sizeof_char_p 8
- #define tgt_sizeof_void_p 8
- #define tgt_long long long
- #endif
-
- /*======================================================================*/
- /* The structures used in Linux 2.1. */
-
- struct new_module_symbol
- {
- unsigned tgt_long value;
- unsigned tgt_long name;
- };
-
- struct new_module_persist;
-
- struct new_module_ref
- {
- unsigned tgt_long dep; /* kernel addresses */
- unsigned tgt_long ref;
- unsigned tgt_long next_ref;
- };
-
- struct new_module
- {
- unsigned tgt_long size_of_struct; /* == sizeof(module) */
- unsigned tgt_long next;
- unsigned tgt_long name;
- unsigned tgt_long size;
-
- tgt_long usecount;
- unsigned tgt_long flags; /* AUTOCLEAN et al */
-
- unsigned nsyms;
- unsigned ndeps;
-
- unsigned tgt_long syms;
- unsigned tgt_long deps;
- unsigned tgt_long refs;
- unsigned tgt_long init;
- unsigned tgt_long cleanup;
- unsigned tgt_long ex_table_start;
- unsigned tgt_long ex_table_end;
- #ifdef __alpha__
- unsigned tgt_long gp;
- #endif
- /* Everything after here is extension. */
- unsigned tgt_long persist_start;
- unsigned tgt_long persist_end;
- unsigned tgt_long can_unload;
- };
-
- struct new_module_info
- {
- unsigned tgt_long addr;
- unsigned tgt_long size;
- unsigned tgt_long flags;
- tgt_long usecount;
- };
-
- /* Bits of module.flags. */
- #define NEW_MOD_RUNNING 1
- #define NEW_MOD_DELETED 2
- #define NEW_MOD_AUTOCLEAN 4
- #define NEW_MOD_VISITED 8
- #define NEW_MOD_USED_ONCE 16
-
- int new_sys_init_module(const char *name, const struct new_module *);
- int query_module(const char *name, int which, void *buf, size_t bufsize,
- size_t *ret);
-
- /* Values for query_module's which. */
-
- #define QM_MODULES 1
- #define QM_DEPS 2
- #define QM_REFS 3
- #define QM_SYMBOLS 4
- #define QM_INFO 5
-
- /*======================================================================*/
- /* The system calls unchanged between 2.0 and 2.1. */
-
- unsigned long create_module(const char *, size_t);
- int delete_module(const char *);
-
-
- #endif /* module.h */
-