| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _ASM_MODULE_H | 
 | 2 | #define _ASM_MODULE_H | 
 | 3 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 4 | #include <linux/list.h> | 
| Paul Gortmaker | 4ca98d3 | 2012-02-28 19:24:47 -0500 | [diff] [blame] | 5 | #include <linux/elf.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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; | 
| Ralf Baechle | 861667d | 2012-08-08 16:59:43 +0200 | [diff] [blame] | 13 | 	struct mips_hi16 *r_mips_hi16_list; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 14 | }; | 
 | 15 |  | 
 | 16 | typedef uint8_t Elf64_Byte;		/* Type for a 8-bit quantity.  */ | 
 | 17 |  | 
| Thiemo Seufer | 4e6a05f | 2005-02-21 10:45:09 +0000 | [diff] [blame] | 18 | typedef struct { | 
 | 19 | 	Elf64_Addr r_offset;			/* Address of relocation.  */ | 
 | 20 | 	Elf64_Word r_sym;			/* Symbol index.  */ | 
 | 21 | 	Elf64_Byte r_ssym;			/* Special symbol.  */ | 
 | 22 | 	Elf64_Byte r_type3;			/* Third relocation.  */ | 
 | 23 | 	Elf64_Byte r_type2;			/* Second relocation.  */ | 
 | 24 | 	Elf64_Byte r_type;			/* First relocation.  */ | 
 | 25 | } Elf64_Mips_Rel; | 
 | 26 |  | 
 | 27 | typedef struct { | 
 | 28 | 	Elf64_Addr r_offset;			/* Address of relocation.  */ | 
 | 29 | 	Elf64_Word r_sym;			/* Symbol index.  */ | 
 | 30 | 	Elf64_Byte r_ssym;			/* Special symbol.  */ | 
 | 31 | 	Elf64_Byte r_type3;			/* Third relocation.  */ | 
 | 32 | 	Elf64_Byte r_type2;			/* Second relocation.  */ | 
 | 33 | 	Elf64_Byte r_type;			/* First relocation.  */ | 
 | 34 | 	Elf64_Sxword r_addend;			/* Addend.  */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 35 | } Elf64_Mips_Rela; | 
 | 36 |  | 
| Ralf Baechle | 875d43e | 2005-09-03 15:56:16 -0700 | [diff] [blame] | 37 | #ifdef CONFIG_32BIT | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| David Howells | 786d35d | 2012-09-28 14:31:03 +0930 | [diff] [blame] | 42 | #define Elf_Rel		Elf32_Rel | 
 | 43 | #define Elf_Rela	Elf32_Rela | 
 | 44 | #define ELF_R_TYPE(X)	ELF32_R_TYPE(X) | 
 | 45 | #define ELF_R_SYM(X)	ELF32_R_SYM(X) | 
| Thiemo Seufer | 4e6a05f | 2005-02-21 10:45:09 +0000 | [diff] [blame] | 46 |  | 
 | 47 | #define Elf_Mips_Rel	Elf32_Rel | 
 | 48 | #define Elf_Mips_Rela	Elf32_Rela | 
 | 49 |  | 
 | 50 | #define ELF_MIPS_R_SYM(rel) ELF32_R_SYM(rel.r_info) | 
 | 51 | #define ELF_MIPS_R_TYPE(rel) ELF32_R_TYPE(rel.r_info) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 52 |  | 
 | 53 | #endif | 
 | 54 |  | 
| Ralf Baechle | 875d43e | 2005-09-03 15:56:16 -0700 | [diff] [blame] | 55 | #ifdef CONFIG_64BIT | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 56 | #define Elf_Shdr	Elf64_Shdr | 
 | 57 | #define Elf_Sym		Elf64_Sym | 
 | 58 | #define Elf_Ehdr	Elf64_Ehdr | 
| Thiemo Seufer | 4e6a05f | 2005-02-21 10:45:09 +0000 | [diff] [blame] | 59 | #define Elf_Addr	Elf64_Addr | 
| David Howells | 786d35d | 2012-09-28 14:31:03 +0930 | [diff] [blame] | 60 | #define Elf_Rel		Elf64_Rel | 
 | 61 | #define Elf_Rela	Elf64_Rela | 
 | 62 | #define ELF_R_TYPE(X)	ELF64_R_TYPE(X) | 
 | 63 | #define ELF_R_SYM(X)	ELF64_R_SYM(X) | 
| Thiemo Seufer | 4e6a05f | 2005-02-21 10:45:09 +0000 | [diff] [blame] | 64 |  | 
 | 65 | #define Elf_Mips_Rel	Elf64_Mips_Rel | 
 | 66 | #define Elf_Mips_Rela	Elf64_Mips_Rela | 
 | 67 |  | 
 | 68 | #define ELF_MIPS_R_SYM(rel) (rel.r_sym) | 
 | 69 | #define ELF_MIPS_R_TYPE(rel) (rel.r_type) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 70 |  | 
 | 71 | #endif | 
 | 72 |  | 
 | 73 | #ifdef CONFIG_MODULES | 
 | 74 | /* Given an address, look for it in the exception tables. */ | 
 | 75 | const struct exception_table_entry*search_module_dbetables(unsigned long addr); | 
 | 76 | #else | 
 | 77 | /* Given an address, look for it in the exception tables. */ | 
 | 78 | static inline const struct exception_table_entry * | 
 | 79 | search_module_dbetables(unsigned long addr) | 
 | 80 | { | 
 | 81 | 	return NULL; | 
 | 82 | } | 
 | 83 | #endif | 
 | 84 |  | 
| Kevin Cernekee | 1c7c445 | 2011-11-16 01:25:40 +0000 | [diff] [blame] | 85 | #ifdef CONFIG_CPU_BMIPS | 
 | 86 | #define MODULE_PROC_FAMILY "BMIPS " | 
 | 87 | #elif defined CONFIG_CPU_MIPS32_R1 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 88 | #define MODULE_PROC_FAMILY "MIPS32_R1 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 89 | #elif defined CONFIG_CPU_MIPS32_R2 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 90 | #define MODULE_PROC_FAMILY "MIPS32_R2 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 91 | #elif defined CONFIG_CPU_MIPS64_R1 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 92 | #define MODULE_PROC_FAMILY "MIPS64_R1 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 93 | #elif defined CONFIG_CPU_MIPS64_R2 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 94 | #define MODULE_PROC_FAMILY "MIPS64_R2 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 95 | #elif defined CONFIG_CPU_R3000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 96 | #define MODULE_PROC_FAMILY "R3000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 97 | #elif defined CONFIG_CPU_TX39XX | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 98 | #define MODULE_PROC_FAMILY "TX39XX " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 99 | #elif defined CONFIG_CPU_VR41XX | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 100 | #define MODULE_PROC_FAMILY "VR41XX " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 101 | #elif defined CONFIG_CPU_R4300 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 102 | #define MODULE_PROC_FAMILY "R4300 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 103 | #elif defined CONFIG_CPU_R4X00 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 104 | #define MODULE_PROC_FAMILY "R4X00 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 105 | #elif defined CONFIG_CPU_TX49XX | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 106 | #define MODULE_PROC_FAMILY "TX49XX " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 107 | #elif defined CONFIG_CPU_R5000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 108 | #define MODULE_PROC_FAMILY "R5000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 109 | #elif defined CONFIG_CPU_R5432 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 110 | #define MODULE_PROC_FAMILY "R5432 " | 
| Shinya Kuribayashi | 542c102 | 2008-10-24 01:27:57 +0900 | [diff] [blame] | 111 | #elif defined CONFIG_CPU_R5500 | 
 | 112 | #define MODULE_PROC_FAMILY "R5500 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 113 | #elif defined CONFIG_CPU_R6000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 114 | #define MODULE_PROC_FAMILY "R6000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 115 | #elif defined CONFIG_CPU_NEVADA | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 116 | #define MODULE_PROC_FAMILY "NEVADA " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 117 | #elif defined CONFIG_CPU_R8000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 118 | #define MODULE_PROC_FAMILY "R8000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 119 | #elif defined CONFIG_CPU_R10000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 120 | #define MODULE_PROC_FAMILY "R10000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 121 | #elif defined CONFIG_CPU_RM7000 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 122 | #define MODULE_PROC_FAMILY "RM7000 " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 123 | #elif defined CONFIG_CPU_SB1 | 
| Ralf Baechle | b0c7051 | 2005-10-31 00:33:01 +0000 | [diff] [blame] | 124 | #define MODULE_PROC_FAMILY "SB1 " | 
| Kelvin Cheung | 2fa3639 | 2012-06-20 20:05:32 +0100 | [diff] [blame] | 125 | #elif defined CONFIG_CPU_LOONGSON1 | 
 | 126 | #define MODULE_PROC_FAMILY "LOONGSON1 " | 
| Fuxin Zhang | 2a21c73 | 2007-06-06 14:52:43 +0800 | [diff] [blame] | 127 | #elif defined CONFIG_CPU_LOONGSON2 | 
 | 128 | #define MODULE_PROC_FAMILY "LOONGSON2 " | 
| David Daney | 0dd4781 | 2008-12-11 15:33:26 -0800 | [diff] [blame] | 129 | #elif defined CONFIG_CPU_CAVIUM_OCTEON | 
 | 130 | #define MODULE_PROC_FAMILY "OCTEON " | 
| Jayachandran C | efa0f81 | 2011-05-07 01:36:21 +0530 | [diff] [blame] | 131 | #elif defined CONFIG_CPU_XLR | 
 | 132 | #define MODULE_PROC_FAMILY "XLR " | 
| Jayachandran C | a3d4fb2 | 2011-11-16 00:21:20 +0000 | [diff] [blame] | 133 | #elif defined CONFIG_CPU_XLP | 
 | 134 | #define MODULE_PROC_FAMILY "XLP " | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 135 | #else | 
 | 136 | #error MODULE_PROC_FAMILY undefined for your processor configuration | 
 | 137 | #endif | 
 | 138 |  | 
 | 139 | #ifdef CONFIG_32BIT | 
 | 140 | #define MODULE_KERNEL_TYPE "32BIT " | 
 | 141 | #elif defined CONFIG_64BIT | 
 | 142 | #define MODULE_KERNEL_TYPE "64BIT " | 
 | 143 | #endif | 
 | 144 |  | 
| Ralf Baechle | 2fae373 | 2007-06-20 14:25:27 +0100 | [diff] [blame] | 145 | #ifdef CONFIG_MIPS_MT_SMTC | 
 | 146 | #define MODULE_KERNEL_SMTC "MT_SMTC " | 
 | 147 | #else | 
 | 148 | #define MODULE_KERNEL_SMTC "" | 
 | 149 | #endif | 
 | 150 |  | 
 | 151 | #define MODULE_ARCH_VERMAGIC \ | 
 | 152 | 	MODULE_PROC_FAMILY MODULE_KERNEL_TYPE MODULE_KERNEL_SMTC | 
| Ralf Baechle | 097975f | 2005-09-12 20:22:07 +0000 | [diff] [blame] | 153 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 154 | #endif /* _ASM_MODULE_H */ |