module.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _ASM_MIPS_MODULE_H
  2. #define _ASM_MIPS_MODULE_H
  3. /*
  4.  * This file contains the mips architecture specific module code.
  5.  */
  6. #include <linux/module.h>
  7. #include <asm/uaccess.h>
  8. #define module_map(x) vmalloc(x)
  9. #define module_unmap(x) vfree(x)
  10. #define module_arch_init(x) mips_module_init(x)
  11. #define arch_init_modules(x) mips_init_modules(x)
  12. /*
  13.  * This must match in size and layout the data created by
  14.  * modutils/obj/obj-mips.c
  15.  */
  16. struct archdata {
  17. const struct exception_table_entry *dbe_table_start;
  18. const struct exception_table_entry *dbe_table_end;
  19. };
  20. static inline int
  21. mips_module_init(struct module *mod)
  22. {
  23. struct archdata *archdata;
  24. if (!mod_member_present(mod, archdata_end))
  25. return 0;
  26. archdata = (struct archdata *)(mod->archdata_start);
  27. if (!mod_archdata_member_present(mod, struct archdata, dbe_table_end))
  28. return 0;
  29. if (archdata->dbe_table_start > archdata->dbe_table_end ||
  30.     (archdata->dbe_table_start &&
  31.      !((unsigned long)archdata->dbe_table_start >=
  32.        ((unsigned long)mod + mod->size_of_struct) &&
  33.        ((unsigned long)archdata->dbe_table_end <
  34.         (unsigned long)mod + mod->size))) ||
  35.             (((unsigned long)archdata->dbe_table_start -
  36.       (unsigned long)archdata->dbe_table_end) %
  37.      sizeof(struct exception_table_entry))) {
  38. printk(KERN_ERR
  39. "module_arch_init: archdata->dbe_table_* invalid.n");
  40. return 1;
  41. }
  42. return 0;
  43. }
  44. static inline void
  45. mips_init_modules(struct module *mod)
  46. {
  47. extern const struct exception_table_entry __start___dbe_table[];
  48. extern const struct exception_table_entry __stop___dbe_table[];
  49. static struct archdata archdata = {
  50. dbe_table_start: __start___dbe_table,
  51. dbe_table_end: __stop___dbe_table,
  52. };
  53. mod->archdata_start = (char *)&archdata;
  54. mod->archdata_end = mod->archdata_start + sizeof(archdata);
  55. }
  56. #endif /* _ASM_MIPS_MODULE_H */