| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _ASM_MODULE_H | 
 | 2 | #define _ASM_MODULE_H | 
 | 3 |  | 
 | 4 | #include <linux/config.h> | 
 | 5 | #include <linux/list.h> | 
 | 6 | #include <asm/uaccess.h> | 
 | 7 |  | 
 | 8 | struct mod_arch_specific { | 
 | 9 | 	/* Data Bus Error exception tables */ | 
 | 10 | 	struct list_head dbe_list; | 
 | 11 | 	const struct exception_table_entry *dbe_start; | 
 | 12 | 	const struct exception_table_entry *dbe_end; | 
 | 13 | }; | 
 | 14 |  | 
 | 15 | typedef uint8_t Elf64_Byte;		/* Type for a 8-bit quantity.  */ | 
 | 16 |  | 
| Thiemo Seufer | 4e6a05f | 2005-02-21 10:45:09 +0000 | [diff] [blame] | 17 | typedef struct { | 
 | 18 | 	Elf64_Addr r_offset;			/* Address of relocation.  */ | 
 | 19 | 	Elf64_Word r_sym;			/* Symbol index.  */ | 
 | 20 | 	Elf64_Byte r_ssym;			/* Special symbol.  */ | 
 | 21 | 	Elf64_Byte r_type3;			/* Third relocation.  */ | 
 | 22 | 	Elf64_Byte r_type2;			/* Second relocation.  */ | 
 | 23 | 	Elf64_Byte r_type;			/* First relocation.  */ | 
 | 24 | } Elf64_Mips_Rel; | 
 | 25 |  | 
 | 26 | typedef struct { | 
 | 27 | 	Elf64_Addr r_offset;			/* Address of relocation.  */ | 
 | 28 | 	Elf64_Word r_sym;			/* Symbol index.  */ | 
 | 29 | 	Elf64_Byte r_ssym;			/* Special symbol.  */ | 
 | 30 | 	Elf64_Byte r_type3;			/* Third relocation.  */ | 
 | 31 | 	Elf64_Byte r_type2;			/* Second relocation.  */ | 
 | 32 | 	Elf64_Byte r_type;			/* First relocation.  */ | 
 | 33 | 	Elf64_Sxword r_addend;			/* Addend.  */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 34 | } Elf64_Mips_Rela; | 
 | 35 |  | 
| Ralf Baechle | 875d43e | 2005-09-03 15:56:16 -0700 | [diff] [blame] | 36 | #ifdef CONFIG_32BIT | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 37 |  | 
 | 38 | #define Elf_Shdr	Elf32_Shdr | 
 | 39 | #define Elf_Sym		Elf32_Sym | 
 | 40 | #define Elf_Ehdr	Elf32_Ehdr | 
| Thiemo Seufer | 4e6a05f | 2005-02-21 10:45:09 +0000 | [diff] [blame] | 41 | #define Elf_Addr	Elf32_Addr | 
 | 42 |  | 
 | 43 | #define Elf_Mips_Rel	Elf32_Rel | 
 | 44 | #define Elf_Mips_Rela	Elf32_Rela | 
 | 45 |  | 
 | 46 | #define ELF_MIPS_R_SYM(rel) ELF32_R_SYM(rel.r_info) | 
 | 47 | #define ELF_MIPS_R_TYPE(rel) ELF32_R_TYPE(rel.r_info) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 48 |  | 
 | 49 | #endif | 
 | 50 |  | 
| Ralf Baechle | 875d43e | 2005-09-03 15:56:16 -0700 | [diff] [blame] | 51 | #ifdef CONFIG_64BIT | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 52 |  | 
 | 53 | #define Elf_Shdr	Elf64_Shdr | 
 | 54 | #define Elf_Sym		Elf64_Sym | 
 | 55 | #define Elf_Ehdr	Elf64_Ehdr | 
| Thiemo Seufer | 4e6a05f | 2005-02-21 10:45:09 +0000 | [diff] [blame] | 56 | #define Elf_Addr	Elf64_Addr | 
 | 57 |  | 
 | 58 | #define Elf_Mips_Rel	Elf64_Mips_Rel | 
 | 59 | #define Elf_Mips_Rela	Elf64_Mips_Rela | 
 | 60 |  | 
 | 61 | #define ELF_MIPS_R_SYM(rel) (rel.r_sym) | 
 | 62 | #define ELF_MIPS_R_TYPE(rel) (rel.r_type) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 63 |  | 
 | 64 | #endif | 
 | 65 |  | 
 | 66 | #ifdef CONFIG_MODULES | 
 | 67 | /* Given an address, look for it in the exception tables. */ | 
 | 68 | const struct exception_table_entry*search_module_dbetables(unsigned long addr); | 
 | 69 | #else | 
 | 70 | /* Given an address, look for it in the exception tables. */ | 
 | 71 | static inline const struct exception_table_entry * | 
 | 72 | search_module_dbetables(unsigned long addr) | 
 | 73 | { | 
 | 74 | 	return NULL; | 
 | 75 | } | 
 | 76 | #endif | 
 | 77 |  | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 78 | #ifdef CONFIG_CPU_MIPS32_R1 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 79 | #define MODULE_PROC_FAMILY "MIPS32_R1 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 80 | #elif defined CONFIG_CPU_MIPS32_R2 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 81 | #define MODULE_PROC_FAMILY "MIPS32_R2 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 82 | #elif defined CONFIG_CPU_MIPS64_R1 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 83 | #define MODULE_PROC_FAMILY "MIPS64_R1 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 84 | #elif defined CONFIG_CPU_MIPS64_R2 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 85 | #define MODULE_PROC_FAMILY "MIPS64_R2 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 86 | #elif defined CONFIG_CPU_R3000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 87 | #define MODULE_PROC_FAMILY "R3000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 88 | #elif defined CONFIG_CPU_TX39XX | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 89 | #define MODULE_PROC_FAMILY "TX39XX " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 90 | #elif defined CONFIG_CPU_VR41XX | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 91 | #define MODULE_PROC_FAMILY "VR41XX " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 92 | #elif defined CONFIG_CPU_R4300 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 93 | #define MODULE_PROC_FAMILY "R4300 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 94 | #elif defined CONFIG_CPU_R4X00 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 95 | #define MODULE_PROC_FAMILY "R4X00 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 96 | #elif defined CONFIG_CPU_TX49XX | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 97 | #define MODULE_PROC_FAMILY "TX49XX " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 98 | #elif defined CONFIG_CPU_R5000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 99 | #define MODULE_PROC_FAMILY "R5000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 100 | #elif defined CONFIG_CPU_R5432 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 101 | #define MODULE_PROC_FAMILY "R5432 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 102 | #elif defined CONFIG_CPU_R6000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 103 | #define MODULE_PROC_FAMILY "R6000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 104 | #elif defined CONFIG_CPU_NEVADA | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 105 | #define MODULE_PROC_FAMILY "NEVADA " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 106 | #elif defined CONFIG_CPU_R8000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 107 | #define MODULE_PROC_FAMILY "R8000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 108 | #elif defined CONFIG_CPU_R10000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 109 | #define MODULE_PROC_FAMILY "R10000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 110 | #elif defined CONFIG_CPU_RM7000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 111 | #define MODULE_PROC_FAMILY "RM7000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 112 | #elif defined CONFIG_CPU_RM9000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 113 | #define MODULE_PROC_FAMILY "RM9000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 114 | #elif defined CONFIG_CPU_SB1 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 115 | #define MODULE_PROC_FAMILY "SB1 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 116 | #else | 
 | 117 | #error MODULE_PROC_FAMILY undefined for your processor configuration | 
 | 118 | #endif | 
 | 119 |  | 
 | 120 | #ifdef CONFIG_32BIT | 
 | 121 | #define MODULE_KERNEL_TYPE "32BIT " | 
 | 122 | #elif defined CONFIG_64BIT | 
 | 123 | #define MODULE_KERNEL_TYPE "64BIT " | 
 | 124 | #endif | 
 | 125 |  | 
 | 126 | #define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY MODULE_KERNEL_TYPE | 
 | 127 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 128 | #endif /* _ASM_MODULE_H */ |