1 #ifndef _ASM_MODULE_H 2 #define _ASM_MODULE_H 3 4 #include <linux/list.h> 5 #include <linux/elf.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 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. */ 34 } Elf64_Mips_Rela; 35 36 #ifdef CONFIG_32BIT 37 38 #define Elf_Shdr Elf32_Shdr 39 #define Elf_Sym Elf32_Sym 40 #define Elf_Ehdr Elf32_Ehdr 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) 48 49 #endif 50 51 #ifdef CONFIG_64BIT 52 53 #define Elf_Shdr Elf64_Shdr 54 #define Elf_Sym Elf64_Sym 55 #define Elf_Ehdr Elf64_Ehdr 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) 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 78 #ifdef CONFIG_CPU_BMIPS 79 #define MODULE_PROC_FAMILY "BMIPS " 80 #elif defined CONFIG_CPU_MIPS32_R1 81 #define MODULE_PROC_FAMILY "MIPS32_R1 " 82 #elif defined CONFIG_CPU_MIPS32_R2 83 #define MODULE_PROC_FAMILY "MIPS32_R2 " 84 #elif defined CONFIG_CPU_MIPS64_R1 85 #define MODULE_PROC_FAMILY "MIPS64_R1 " 86 #elif defined CONFIG_CPU_MIPS64_R2 87 #define MODULE_PROC_FAMILY "MIPS64_R2 " 88 #elif defined CONFIG_CPU_R3000 89 #define MODULE_PROC_FAMILY "R3000 " 90 #elif defined CONFIG_CPU_TX39XX 91 #define MODULE_PROC_FAMILY "TX39XX " 92 #elif defined CONFIG_CPU_VR41XX 93 #define MODULE_PROC_FAMILY "VR41XX " 94 #elif defined CONFIG_CPU_R4300 95 #define MODULE_PROC_FAMILY "R4300 " 96 #elif defined CONFIG_CPU_R4X00 97 #define MODULE_PROC_FAMILY "R4X00 " 98 #elif defined CONFIG_CPU_TX49XX 99 #define MODULE_PROC_FAMILY "TX49XX " 100 #elif defined CONFIG_CPU_R5000 101 #define MODULE_PROC_FAMILY "R5000 " 102 #elif defined CONFIG_CPU_R5432 103 #define MODULE_PROC_FAMILY "R5432 " 104 #elif defined CONFIG_CPU_R5500 105 #define MODULE_PROC_FAMILY "R5500 " 106 #elif defined CONFIG_CPU_R6000 107 #define MODULE_PROC_FAMILY "R6000 " 108 #elif defined CONFIG_CPU_NEVADA 109 #define MODULE_PROC_FAMILY "NEVADA " 110 #elif defined CONFIG_CPU_R8000 111 #define MODULE_PROC_FAMILY "R8000 " 112 #elif defined CONFIG_CPU_R10000 113 #define MODULE_PROC_FAMILY "R10000 " 114 #elif defined CONFIG_CPU_RM7000 115 #define MODULE_PROC_FAMILY "RM7000 " 116 #elif defined CONFIG_CPU_RM9000 117 #define MODULE_PROC_FAMILY "RM9000 " 118 #elif defined CONFIG_CPU_SB1 119 #define MODULE_PROC_FAMILY "SB1 " 120 #elif defined CONFIG_CPU_LOONGSON2 121 #define MODULE_PROC_FAMILY "LOONGSON2 " 122 #elif defined CONFIG_CPU_CAVIUM_OCTEON 123 #define MODULE_PROC_FAMILY "OCTEON " 124 #elif defined CONFIG_CPU_XLR 125 #define MODULE_PROC_FAMILY "XLR " 126 #elif defined CONFIG_CPU_XLP 127 #define MODULE_PROC_FAMILY "XLP " 128 #else 129 #error MODULE_PROC_FAMILY undefined for your processor configuration 130 #endif 131 132 #ifdef CONFIG_32BIT 133 #define MODULE_KERNEL_TYPE "32BIT " 134 #elif defined CONFIG_64BIT 135 #define MODULE_KERNEL_TYPE "64BIT " 136 #endif 137 138 #ifdef CONFIG_MIPS_MT_SMTC 139 #define MODULE_KERNEL_SMTC "MT_SMTC " 140 #else 141 #define MODULE_KERNEL_SMTC "" 142 #endif 143 144 #define MODULE_ARCH_VERMAGIC \ 145 MODULE_PROC_FAMILY MODULE_KERNEL_TYPE MODULE_KERNEL_SMTC 146 147 #endif /* _ASM_MODULE_H */ 148