Changeset ec443d5 in mainline
- Timestamp:
- 2014-10-20T20:38:13Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d70ebffe
- Parents:
- 416ef49
- Location:
- kernel/arch/sparc64
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/include/arch/interrupt.h
r416ef49 rec443d5 40 40 #include <arch/istate.h> 41 41 42 #define IVT_ITEMS 1543 #define IVT_FIRST 142 #define IVT_ITEMS 512 43 #define IVT_FIRST 0 44 44 45 45 /* This needs to be defined for inter-architecture API portability. */ … … 51 51 }; 52 52 53 extern void exc_arch_init(void); 54 53 55 #endif 54 56 -
kernel/arch/sparc64/include/arch/trap/exception.h
r416ef49 rec443d5 71 71 extern void dump_istate(istate_t *istate); 72 72 73 extern void instruction_access_exception( int n, istate_t *istate);74 extern void instruction_access_error( int n, istate_t *istate);75 extern void illegal_instruction( int n, istate_t *istate);76 extern void privileged_opcode( int n, istate_t *istate);77 extern void unimplemented_LDD( int n, istate_t *istate);78 extern void unimplemented_STD( int n, istate_t *istate);79 extern void fp_disabled( int n, istate_t *istate);80 extern void fp_exception_ieee_754( int n, istate_t *istate);81 extern void fp_exception_other( int n, istate_t *istate);82 extern void tag_overflow( int n, istate_t *istate);83 extern void division_by_zero( int n, istate_t *istate);84 extern void data_access_exception( int n, istate_t *istate);85 extern void data_access_error( int n, istate_t *istate);86 extern void mem_address_not_aligned( int n, istate_t *istate);87 extern void LDDF_mem_address_not_aligned( int n, istate_t *istate);88 extern void STDF_mem_address_not_aligned( int n, istate_t *istate);89 extern void privileged_action( int n, istate_t *istate);90 extern void LDQF_mem_address_not_aligned( int n, istate_t *istate);91 extern void STQF_mem_address_not_aligned( int n, istate_t *istate);73 extern void instruction_access_exception(unsigned int, istate_t *); 74 extern void instruction_access_error(unsigned int, istate_t *); 75 extern void illegal_instruction(unsigned int, istate_t *); 76 extern void privileged_opcode(unsigned int, istate_t *); 77 extern void unimplemented_LDD(unsigned int, istate_t *); 78 extern void unimplemented_STD(unsigned int, istate_t *); 79 extern void fp_disabled(unsigned int, istate_t *); 80 extern void fp_exception_ieee_754(unsigned int, istate_t *); 81 extern void fp_exception_other(unsigned int, istate_t *); 82 extern void tag_overflow(unsigned int, istate_t *); 83 extern void division_by_zero(unsigned int, istate_t *); 84 extern void data_access_exception(unsigned int, istate_t *); 85 extern void data_access_error(unsigned int, istate_t *); 86 extern void mem_address_not_aligned(unsigned int, istate_t *); 87 extern void LDDF_mem_address_not_aligned(unsigned int, istate_t *); 88 extern void STDF_mem_address_not_aligned(unsigned int, istate_t *); 89 extern void privileged_action(unsigned int, istate_t *); 90 extern void LDQF_mem_address_not_aligned(unsigned int, istate_t *); 91 extern void STQF_mem_address_not_aligned(unsigned int, istate_t *); 92 92 93 93 #endif /* !__ASM__ */ -
kernel/arch/sparc64/include/arch/trap/interrupt.h
r416ef49 rec443d5 63 63 #define IGN_SHIFT 6 64 64 65 66 #ifdef __ASM__67 .macro INTERRUPT_LEVEL_N_HANDLER n68 mov \n - 1, %g269 PREEMPTIBLE_HANDLER exc_dispatch70 .endm71 #endif72 73 65 #ifndef __ASM__ 74 66 75 67 #include <arch/interrupt.h> 76 68 77 extern void interrupt(int n, istate_t *istate); 69 extern void interrupt(unsigned int n, istate_t *istate); 70 78 71 #endif /* !def __ASM__ */ 79 72 -
kernel/arch/sparc64/include/arch/trap/sun4u/interrupt.h
r416ef49 rec443d5 92 92 #define INTERRUPT_VECTOR_TRAP_HANDLER_SIZE TRAP_TABLE_ENTRY_SIZE 93 93 94 #ifdef __ASM__95 .macro INTERRUPT_VECTOR_TRAP_HANDLER96 PREEMPTIBLE_HANDLER interrupt97 .endm98 #endif /* __ASM__ */99 100 101 94 #endif 102 95 -
kernel/arch/sparc64/src/drivers/tick.c
r416ef49 rec443d5 35 35 #include <arch/drivers/tick.h> 36 36 #include <arch/interrupt.h> 37 #include <arch/trap/interrupt.h> 37 38 #include <arch/sparc64.h> 38 39 #include <arch/asm.h> … … 51 52 softint_reg_t clear; 52 53 53 interrupt_register(14, "tick_int", tick_interrupt);54 54 compare.int_dis = false; 55 55 compare.tick_cmpr = tick_counter_read() + … … 79 79 /** Process tick interrupt. 80 80 * 81 * @param n Interrupt Level (14, can be ignored)81 * @param n Trap type (0x4e, can be ignored) 82 82 * @param istate Interrupted state. 83 83 * … … 93 93 * Make sure we are servicing interrupt_level_14 94 94 */ 95 ASSERT(n == 14);95 ASSERT(n == TT_INTERRUPT_LEVEL_14); 96 96 97 97 /* -
kernel/arch/sparc64/src/sun4u/sparc64.c
r416ef49 rec443d5 86 86 void arch_pre_mm_init(void) 87 87 { 88 if (config.cpu_active == 1) 88 if (config.cpu_active == 1) { 89 89 trap_init(); 90 exc_arch_init(); 91 } 90 92 } 91 93 -
kernel/arch/sparc64/src/trap/exception.c
r416ef49 rec443d5 55 55 56 56 /** Handle instruction_access_exception. (0x8) */ 57 void instruction_access_exception( int n, istate_t *istate)57 void instruction_access_exception(unsigned int n, istate_t *istate) 58 58 { 59 59 fault_if_from_uspace(istate, "%s.", __func__); … … 62 62 63 63 /** Handle instruction_access_error. (0xa) */ 64 void instruction_access_error( int n, istate_t *istate)64 void instruction_access_error(unsigned int n, istate_t *istate) 65 65 { 66 66 fault_if_from_uspace(istate, "%s.", __func__); … … 69 69 70 70 /** Handle illegal_instruction. (0x10) */ 71 void illegal_instruction( int n, istate_t *istate)71 void illegal_instruction(unsigned int n, istate_t *istate) 72 72 { 73 73 fault_if_from_uspace(istate, "%s.", __func__); … … 76 76 77 77 /** Handle privileged_opcode. (0x11) */ 78 void privileged_opcode( int n, istate_t *istate)78 void privileged_opcode(unsigned int n, istate_t *istate) 79 79 { 80 80 fault_if_from_uspace(istate, "%s.", __func__); … … 83 83 84 84 /** Handle unimplemented_LDD. (0x12) */ 85 void unimplemented_LDD( int n, istate_t *istate)85 void unimplemented_LDD(unsigned int n, istate_t *istate) 86 86 { 87 87 fault_if_from_uspace(istate, "%s.", __func__); … … 90 90 91 91 /** Handle unimplemented_STD. (0x13) */ 92 void unimplemented_STD( int n, istate_t *istate)92 void unimplemented_STD(unsigned int n, istate_t *istate) 93 93 { 94 94 fault_if_from_uspace(istate, "%s.", __func__); … … 97 97 98 98 /** Handle fp_disabled. (0x20) */ 99 void fp_disabled( int n, istate_t *istate)99 void fp_disabled(unsigned int n, istate_t *istate) 100 100 { 101 101 fprs_reg_t fprs; … … 117 117 118 118 /** Handle fp_exception_ieee_754. (0x21) */ 119 void fp_exception_ieee_754( int n, istate_t *istate)119 void fp_exception_ieee_754(unsigned int n, istate_t *istate) 120 120 { 121 121 fault_if_from_uspace(istate, "%s.", __func__); … … 124 124 125 125 /** Handle fp_exception_other. (0x22) */ 126 void fp_exception_other( int n, istate_t *istate)126 void fp_exception_other(unsigned int n, istate_t *istate) 127 127 { 128 128 fault_if_from_uspace(istate, "%s.", __func__); … … 131 131 132 132 /** Handle tag_overflow. (0x23) */ 133 void tag_overflow( int n, istate_t *istate)133 void tag_overflow(unsigned int n, istate_t *istate) 134 134 { 135 135 fault_if_from_uspace(istate, "%s.", __func__); … … 138 138 139 139 /** Handle division_by_zero. (0x28) */ 140 void division_by_zero( int n, istate_t *istate)140 void division_by_zero(unsigned int n, istate_t *istate) 141 141 { 142 142 fault_if_from_uspace(istate, "%s.", __func__); … … 145 145 146 146 /** Handle data_access_exception. (0x30) */ 147 void data_access_exception( int n, istate_t *istate)147 void data_access_exception(unsigned int n, istate_t *istate) 148 148 { 149 149 fault_if_from_uspace(istate, "%s.", __func__); … … 152 152 153 153 /** Handle data_access_error. (0x32) */ 154 void data_access_error( int n, istate_t *istate)154 void data_access_error(unsigned int n, istate_t *istate) 155 155 { 156 156 fault_if_from_uspace(istate, "%s.", __func__); … … 159 159 160 160 /** Handle mem_address_not_aligned. (0x34) */ 161 void mem_address_not_aligned( int n, istate_t *istate)161 void mem_address_not_aligned(unsigned int n, istate_t *istate) 162 162 { 163 163 fault_if_from_uspace(istate, "%s.", __func__); … … 166 166 167 167 /** Handle LDDF_mem_address_not_aligned. (0x35) */ 168 void LDDF_mem_address_not_aligned( int n, istate_t *istate)168 void LDDF_mem_address_not_aligned(unsigned int n, istate_t *istate) 169 169 { 170 170 fault_if_from_uspace(istate, "%s.", __func__); … … 173 173 174 174 /** Handle STDF_mem_address_not_aligned. (0x36) */ 175 void STDF_mem_address_not_aligned( int n, istate_t *istate)175 void STDF_mem_address_not_aligned(unsigned int n, istate_t *istate) 176 176 { 177 177 fault_if_from_uspace(istate, "%s.", __func__); … … 180 180 181 181 /** Handle privileged_action. (0x37) */ 182 void privileged_action( int n, istate_t *istate)182 void privileged_action(unsigned int n, istate_t *istate) 183 183 { 184 184 fault_if_from_uspace(istate, "%s.", __func__); … … 187 187 188 188 /** Handle LDQF_mem_address_not_aligned. (0x38) */ 189 void LDQF_mem_address_not_aligned( int n, istate_t *istate)189 void LDQF_mem_address_not_aligned(unsigned int n, istate_t *istate) 190 190 { 191 191 fault_if_from_uspace(istate, "%s.", __func__); … … 194 194 195 195 /** Handle STQF_mem_address_not_aligned. (0x39) */ 196 void STQF_mem_address_not_aligned( int n, istate_t *istate)196 void STQF_mem_address_not_aligned(unsigned int n, istate_t *istate) 197 197 { 198 198 fault_if_from_uspace(istate, "%s.", __func__); -
kernel/arch/sparc64/src/trap/interrupt.c
r416ef49 rec443d5 36 36 #include <arch/interrupt.h> 37 37 #include <arch/trap/interrupt.h> 38 #include <arch/trap/exception.h> 38 39 #include <arch/sparc64.h> 39 40 #include <interrupt.h> … … 43 44 #include <arch/asm.h> 44 45 #include <arch/barrier.h> 46 #include <arch/drivers/tick.h> 45 47 #include <print.h> 46 48 #include <arch.h> … … 49 51 #include <synch/spinlock.h> 50 52 51 /** Register Interrupt Level Handler. 52 * 53 * @param n Interrupt Level (1 - 15). 54 * @param name Short descriptive string. 55 * @param handler Handler. 56 * 57 */ 58 void interrupt_register(unsigned int n, const char *name, iroutine_t handler) 53 void exc_arch_init(void) 59 54 { 60 ASSERT(n >= IVT_FIRST); 61 ASSERT(n <= IVT_ITEMS); 55 exc_register(TT_INSTRUCTION_ACCESS_EXCEPTION, 56 "instruction_access_exception", false, 57 instruction_access_exception); 58 exc_register(TT_INSTRUCTION_ACCESS_ERROR, 59 "instruction_access_error", false, 60 instruction_access_error); 61 exc_register(TT_ILLEGAL_INSTRUCTION, 62 "illegal_instruction", false, 63 illegal_instruction); 64 exc_register(TT_PRIVILEGED_OPCODE, 65 "privileged_opcode", false, 66 privileged_opcode); 67 exc_register(TT_UNIMPLEMENTED_LDD, 68 "unimplemented_LDD", false, 69 unimplemented_LDD); 70 exc_register(TT_UNIMPLEMENTED_STD, 71 "unimplemented_STD", false, 72 unimplemented_STD); 73 exc_register(TT_FP_DISABLED, 74 "fp_disabled", true, 75 fp_disabled); 76 exc_register(TT_FP_EXCEPTION_IEEE_754, 77 "fp_exception_ieee_754", false, 78 fp_exception_ieee_754); 79 exc_register(TT_FP_EXCEPTION_OTHER, 80 "fp_exception_other", false, 81 fp_exception_other); 82 exc_register(TT_TAG_OVERFLOW, 83 "tag_overflow", false, 84 tag_overflow); 85 exc_register(TT_DIVISION_BY_ZERO, 86 "division_by_zero", false, 87 division_by_zero); 88 exc_register(TT_DATA_ACCESS_EXCEPTION, 89 "data_access_exception", false, 90 data_access_exception); 91 exc_register(TT_DATA_ACCESS_ERROR, 92 "data_access_error", false, 93 data_access_error); 94 exc_register(TT_MEM_ADDRESS_NOT_ALIGNED, 95 "mem_address_not_aligned", false, 96 mem_address_not_aligned); 97 exc_register(TT_LDDF_MEM_ADDRESS_NOT_ALIGNED, 98 "LDDF_mem_address_not_aligned", false, 99 LDDF_mem_address_not_aligned); 100 exc_register(TT_STDF_MEM_ADDRESS_NOT_ALIGNED, 101 "STDF_mem_address_not_aligned", false, 102 STDF_mem_address_not_aligned); 103 exc_register(TT_PRIVILEGED_ACTION, 104 "privileged_action", false, 105 privileged_action); 106 exc_register(TT_LDQF_MEM_ADDRESS_NOT_ALIGNED, 107 "LDQF_mem_address_not_aligned", false, 108 LDQF_mem_address_not_aligned); 109 exc_register(TT_STQF_MEM_ADDRESS_NOT_ALIGNED, 110 "STQF_mem_address_not_aligned", false, 111 STQF_mem_address_not_aligned); 112 113 exc_register(TT_INTERRUPT_LEVEL_14, 114 "interrupt_level_14", true, 115 tick_interrupt); 116 117 #ifdef SUN4u 118 exc_register(TT_INTERRUPT_VECTOR_TRAP, 119 "interrupt_vector_trap", true, 120 interrupt); 121 #endif 62 122 63 exc_register(n - IVT_FIRST, name, true, handler);64 123 } 65 124 -
kernel/arch/sparc64/src/trap/sun4u/interrupt.c
r416ef49 rec443d5 53 53 * @param istate Ignored. 54 54 */ 55 void interrupt( int n, istate_t *istate)55 void interrupt(unsigned int n, istate_t *istate) 56 56 { 57 57 uint64_t status = asi_u64_read(ASI_INTR_DISPATCH_STATUS, 0); -
kernel/arch/sparc64/src/trap/sun4u/trap_table.S
r416ef49 rec443d5 63 63 instruction_access_exception_tl0: 64 64 wrpr %g0, PSTATE_AG_BIT | PSTATE_PRIV_BIT, %pstate 65 PREEMPTIBLE_HANDLER instruction_access_exception 65 mov TT_INSTRUCTION_ACCESS_EXCEPTION, %g2 66 PREEMPTIBLE_HANDLER exc_dispatch 66 67 67 68 /* TT = 0x0a, TL = 0, instruction_access_error */ … … 69 70 .global instruction_access_error_tl0 70 71 instruction_access_error_tl0: 71 PREEMPTIBLE_HANDLER instruction_access_error 72 mov TT_INSTRUCTION_ACCESS_ERROR, %g2 73 PREEMPTIBLE_HANDLER exc_dispatch 72 74 73 75 /* TT = 0x10, TL = 0, illegal_instruction */ … … 75 77 .global illegal_instruction_tl0 76 78 illegal_instruction_tl0: 77 PREEMPTIBLE_HANDLER illegal_instruction 79 mov TT_ILLEGAL_INSTRUCTION, %g2 80 PREEMPTIBLE_HANDLER exc_dispatch 78 81 79 82 /* TT = 0x11, TL = 0, privileged_opcode */ … … 81 84 .global privileged_opcode_tl0 82 85 privileged_opcode_tl0: 83 PREEMPTIBLE_HANDLER privileged_opcode 86 mov TT_PRIVILEGED_OPCODE, %g2 87 PREEMPTIBLE_HANDLER exc_dispatch 84 88 85 89 /* TT = 0x12, TL = 0, unimplemented_LDD */ … … 87 91 .global unimplemented_LDD_tl0 88 92 unimplemented_LDD_tl0: 89 PREEMPTIBLE_HANDLER unimplemented_LDD 93 mov TT_UNIMPLEMENTED_LDD, %g2 94 PREEMPTIBLE_HANDLER exc_dispatch 90 95 91 96 /* TT = 0x13, TL = 0, unimplemented_STD */ … … 93 98 .global unimplemented_STD_tl0 94 99 unimplemented_STD_tl0: 95 PREEMPTIBLE_HANDLER unimplemented_STD 100 mov TT_UNIMPLEMENTED_STD, %g2 101 PREEMPTIBLE_HANDLER exc_dispatch 96 102 97 103 /* TT = 0x20, TL = 0, fb_disabled handler */ … … 99 105 .global fb_disabled_tl0 100 106 fp_disabled_tl0: 101 PREEMPTIBLE_HANDLER fp_disabled 107 mov TT_FP_DISABLED, %g2 108 PREEMPTIBLE_HANDLER exc_dispatch 102 109 103 110 /* TT = 0x21, TL = 0, fb_exception_ieee_754 handler */ … … 105 112 .global fb_exception_ieee_754_tl0 106 113 fp_exception_ieee_754_tl0: 107 PREEMPTIBLE_HANDLER fp_exception_ieee_754 114 mov TT_FP_EXCEPTION_IEEE_754, %g2 115 PREEMPTIBLE_HANDLER exc_dispatch 108 116 109 117 /* TT = 0x22, TL = 0, fb_exception_other handler */ … … 111 119 .global fb_exception_other_tl0 112 120 fp_exception_other_tl0: 113 PREEMPTIBLE_HANDLER fp_exception_other 121 mov TT_FP_EXCEPTION_OTHER, %g2 122 PREEMPTIBLE_HANDLER exc_dispatch 114 123 115 124 /* TT = 0x23, TL = 0, tag_overflow */ … … 117 126 .global tag_overflow_tl0 118 127 tag_overflow_tl0: 119 PREEMPTIBLE_HANDLER tag_overflow 128 mov TT_TAG_OVERFLOW, %g2 129 PREEMPTIBLE_HANDLER exc_dispatch 120 130 121 131 /* TT = 0x24, TL = 0, clean_window handler */ … … 129 139 .global division_by_zero_tl0 130 140 division_by_zero_tl0: 131 PREEMPTIBLE_HANDLER division_by_zero 141 mov TT_DIVISION_BY_ZERO, %g2 142 PREEMPTIBLE_HANDLER exc_dispatch 132 143 133 144 /* TT = 0x30, TL = 0, data_access_exception */ … … 136 147 data_access_exception_tl0: 137 148 wrpr %g0, PSTATE_AG_BIT | PSTATE_PRIV_BIT, %pstate 138 PREEMPTIBLE_HANDLER data_access_exception 149 mov TT_DATA_ACCESS_EXCEPTION, %g2 150 PREEMPTIBLE_HANDLER exc_dispatch 139 151 140 152 /* TT = 0x32, TL = 0, data_access_error */ … … 142 154 .global data_access_error_tl0 143 155 data_access_error_tl0: 144 PREEMPTIBLE_HANDLER data_access_error 156 mov TT_DATA_ACCESS_ERROR, %g2 157 PREEMPTIBLE_HANDLER exc_dispatch 145 158 146 159 /* TT = 0x34, TL = 0, mem_address_not_aligned */ … … 148 161 .global mem_address_not_aligned_tl0 149 162 mem_address_not_aligned_tl0: 150 PREEMPTIBLE_HANDLER mem_address_not_aligned 163 mov TT_MEM_ADDRESS_NOT_ALIGNED, %g2 164 PREEMPTIBLE_HANDLER exc_dispatch 151 165 152 166 /* TT = 0x35, TL = 0, LDDF_mem_address_not_aligned */ … … 154 168 .global LDDF_mem_address_not_aligned_tl0 155 169 LDDF_mem_address_not_aligned_tl0: 156 PREEMPTIBLE_HANDLER LDDF_mem_address_not_aligned 170 mov TT_LDDF_MEM_ADDRESS_NOT_ALIGNED, %g2 171 PREEMPTIBLE_HANDLER exc_dispatch 157 172 158 173 /* TT = 0x36, TL = 0, STDF_mem_address_not_aligned */ … … 160 175 .global STDF_mem_address_not_aligned_tl0 161 176 STDF_mem_address_not_aligned_tl0: 162 PREEMPTIBLE_HANDLER STDF_mem_address_not_aligned 177 mov TT_STDF_MEM_ADDRESS_NOT_ALIGNED, %g2 178 PREEMPTIBLE_HANDLER exc_dispatch 163 179 164 180 /* TT = 0x37, TL = 0, privileged_action */ … … 166 182 .global privileged_action_tl0 167 183 privileged_action_tl0: 168 PREEMPTIBLE_HANDLER privileged_action 184 mov TT_PRIVILEGED_ACTION, %g2 185 PREEMPTIBLE_HANDLER exc_dispatch 169 186 170 187 /* TT = 0x38, TL = 0, LDQF_mem_address_not_aligned */ … … 172 189 .global LDQF_mem_address_not_aligned_tl0 173 190 LDQF_mem_address_not_aligned_tl0: 174 PREEMPTIBLE_HANDLER LDQF_mem_address_not_aligned 191 mov TT_LDQF_MEM_ADDRESS_NOT_ALIGNED, %g2 192 PREEMPTIBLE_HANDLER exc_dispatch 175 193 176 194 /* TT = 0x39, TL = 0, STQF_mem_address_not_aligned */ … … 178 196 .global STQF_mem_address_not_aligned_tl0 179 197 STQF_mem_address_not_aligned_tl0: 180 PREEMPTIBLE_HANDLER STQF_mem_address_not_aligned 198 mov TT_STQF_MEM_ADDRESS_NOT_ALIGNED, %g2 199 PREEMPTIBLE_HANDLER exc_dispatch 181 200 182 201 /* TT = 0x41, TL = 0, interrupt_level_1 handler */ … … 184 203 .global interrupt_level_1_handler_tl0 185 204 interrupt_level_1_handler_tl0: 186 INTERRUPT_LEVEL_N_HANDLER 1 205 mov TT_INTERRUPT_LEVEL_1, %g2 206 PREEMPTIBLE_HANDLER exc_dispatch 187 207 188 208 /* TT = 0x42, TL = 0, interrupt_level_2 handler */ … … 190 210 .global interrupt_level_2_handler_tl0 191 211 interrupt_level_2_handler_tl0: 192 INTERRUPT_LEVEL_N_HANDLER 2 212 mov TT_INTERRUPT_LEVEL_2, %g2 213 PREEMPTIBLE_HANDLER exc_dispatch 193 214 194 215 /* TT = 0x43, TL = 0, interrupt_level_3 handler */ … … 196 217 .global interrupt_level_3_handler_tl0 197 218 interrupt_level_3_handler_tl0: 198 INTERRUPT_LEVEL_N_HANDLER 3 219 mov TT_INTERRUPT_LEVEL_3, %g2 220 PREEMPTIBLE_HANDLER exc_dispatch 199 221 200 222 /* TT = 0x44, TL = 0, interrupt_level_4 handler */ … … 202 224 .global interrupt_level_4_handler_tl0 203 225 interrupt_level_4_handler_tl0: 204 INTERRUPT_LEVEL_N_HANDLER 4 226 mov TT_INTERRUPT_LEVEL_4, %g2 227 PREEMPTIBLE_HANDLER exc_dispatch 205 228 206 229 /* TT = 0x45, TL = 0, interrupt_level_5 handler */ … … 208 231 .global interrupt_level_5_handler_tl0 209 232 interrupt_level_5_handler_tl0: 210 INTERRUPT_LEVEL_N_HANDLER 5 233 mov TT_INTERRUPT_LEVEL_5, %g2 234 PREEMPTIBLE_HANDLER exc_dispatch 211 235 212 236 /* TT = 0x46, TL = 0, interrupt_level_6 handler */ … … 214 238 .global interrupt_level_6_handler_tl0 215 239 interrupt_level_6_handler_tl0: 216 INTERRUPT_LEVEL_N_HANDLER 6 240 mov TT_INTERRUPT_LEVEL_6, %g2 241 PREEMPTIBLE_HANDLER exc_dispatch 217 242 218 243 /* TT = 0x47, TL = 0, interrupt_level_7 handler */ … … 220 245 .global interrupt_level_7_handler_tl0 221 246 interrupt_level_7_handler_tl0: 222 INTERRUPT_LEVEL_N_HANDLER 7 247 mov TT_INTERRUPT_LEVEL_7, %g2 248 PREEMPTIBLE_HANDLER exc_dispatch 223 249 224 250 /* TT = 0x48, TL = 0, interrupt_level_8 handler */ … … 226 252 .global interrupt_level_8_handler_tl0 227 253 interrupt_level_8_handler_tl0: 228 INTERRUPT_LEVEL_N_HANDLER 8 254 mov TT_INTERRUPT_LEVEL_8, %g2 255 PREEMPTIBLE_HANDLER exc_dispatch 229 256 230 257 /* TT = 0x49, TL = 0, interrupt_level_9 handler */ … … 232 259 .global interrupt_level_9_handler_tl0 233 260 interrupt_level_9_handler_tl0: 234 INTERRUPT_LEVEL_N_HANDLER 9 261 mov TT_INTERRUPT_LEVEL_9, %g2 262 PREEMPTIBLE_HANDLER exc_dispatch 235 263 236 264 /* TT = 0x4a, TL = 0, interrupt_level_10 handler */ … … 238 266 .global interrupt_level_10_handler_tl0 239 267 interrupt_level_10_handler_tl0: 240 INTERRUPT_LEVEL_N_HANDLER 10 268 mov TT_INTERRUPT_LEVEL_10, %g2 269 PREEMPTIBLE_HANDLER exc_dispatch 241 270 242 271 /* TT = 0x4b, TL = 0, interrupt_level_11 handler */ … … 244 273 .global interrupt_level_11_handler_tl0 245 274 interrupt_level_11_handler_tl0: 246 INTERRUPT_LEVEL_N_HANDLER 11 275 mov TT_INTERRUPT_LEVEL_11, %g2 276 PREEMPTIBLE_HANDLER exc_dispatch 247 277 248 278 /* TT = 0x4c, TL = 0, interrupt_level_12 handler */ … … 250 280 .global interrupt_level_12_handler_tl0 251 281 interrupt_level_12_handler_tl0: 252 INTERRUPT_LEVEL_N_HANDLER 12 282 mov TT_INTERRUPT_LEVEL_12, %g2 283 PREEMPTIBLE_HANDLER exc_dispatch 253 284 254 285 /* TT = 0x4d, TL = 0, interrupt_level_13 handler */ … … 256 287 .global interrupt_level_13_handler_tl0 257 288 interrupt_level_13_handler_tl0: 258 INTERRUPT_LEVEL_N_HANDLER 13 289 mov TT_INTERRUPT_LEVEL_13, %g2 290 PREEMPTIBLE_HANDLER exc_dispatch 259 291 260 292 /* TT = 0x4e, TL = 0, interrupt_level_14 handler */ … … 262 294 .global interrupt_level_14_handler_tl0 263 295 interrupt_level_14_handler_tl0: 264 INTERRUPT_LEVEL_N_HANDLER 14 296 mov TT_INTERRUPT_LEVEL_14, %g2 297 PREEMPTIBLE_HANDLER exc_dispatch 265 298 266 299 /* TT = 0x4f, TL = 0, interrupt_level_15 handler */ … … 268 301 .global interrupt_level_15_handler_tl0 269 302 interrupt_level_15_handler_tl0: 270 INTERRUPT_LEVEL_N_HANDLER 15 303 mov TT_INTERRUPT_LEVEL_15, %g2 304 PREEMPTIBLE_HANDLER exc_dispatch 271 305 272 306 /* TT = 0x60, TL = 0, interrupt_vector_trap handler */ … … 274 308 .global interrupt_vector_trap_handler_tl0 275 309 interrupt_vector_trap_handler_tl0: 276 INTERRUPT_VECTOR_TRAP_HANDLER 310 mov TT_INTERRUPT_VECTOR_TRAP, %g2 311 PREEMPTIBLE_HANDLER exc_dispatch 277 312 278 313 /* TT = 0x64, TL = 0, fast_instruction_access_MMU_miss */ … … 356 391 wrpr %g0, 1, %tl 357 392 wrpr %g0, PSTATE_AG_BIT | PSTATE_PRIV_BIT, %pstate 358 PREEMPTIBLE_HANDLER instruction_access_exception 393 mov TT_INSTRUCTION_ACCESS_EXCEPTION, %g2 394 PREEMPTIBLE_HANDLER exc_dispatch 359 395 360 396 /* TT = 0x0a, TL > 0, instruction_access_error */ … … 363 399 instruction_access_error_tl1: 364 400 wrpr %g0, 1, %tl 365 PREEMPTIBLE_HANDLER instruction_access_error 401 mov TT_INSTRUCTION_ACCESS_ERROR, %g2 402 PREEMPTIBLE_HANDLER exc_dispatch 366 403 367 404 /* TT = 0x10, TL > 0, illegal_instruction */ … … 370 407 illegal_instruction_tl1: 371 408 wrpr %g0, 1, %tl 372 PREEMPTIBLE_HANDLER illegal_instruction 409 mov TT_ILLEGAL_INSTRUCTION, %g2 410 PREEMPTIBLE_HANDLER exc_dispatch 373 411 374 412 /* TT = 0x24, TL > 0, clean_window handler */ … … 383 421 division_by_zero_tl1: 384 422 wrpr %g0, 1, %tl 385 PREEMPTIBLE_HANDLER division_by_zero 423 mov TT_DIVISION_BY_ZERO, %g2 424 PREEMPTIBLE_HANDLER exc_dispatch 386 425 387 426 /* TT = 0x30, TL > 0, data_access_exception */ … … 391 430 wrpr %g0, 1, %tl 392 431 wrpr %g0, PSTATE_AG_BIT | PSTATE_PRIV_BIT, %pstate 393 PREEMPTIBLE_HANDLER data_access_exception 432 mov TT_DATA_ACCESS_EXCEPTION, %g2 433 PREEMPTIBLE_HANDLER exc_dispatch 394 434 395 435 /* TT = 0x32, TL > 0, data_access_error */ … … 398 438 data_access_error_tl1: 399 439 wrpr %g0, 1, %tl 400 PREEMPTIBLE_HANDLER data_access_error 440 mov TT_DATA_ACCESS_ERROR, %g2 441 PREEMPTIBLE_HANDLER exc_dispatch 401 442 402 443 /* TT = 0x34, TL > 0, mem_address_not_aligned */ … … 405 446 mem_address_not_aligned_tl1: 406 447 wrpr %g0, 1, %tl 407 PREEMPTIBLE_HANDLER mem_address_not_aligned 448 mov TT_MEM_ADDRESS_NOT_ALIGNED, %g2 449 PREEMPTIBLE_HANDLER exc_dispatch 408 450 409 451 /* TT = 0x68, TL > 0, fast_data_access_MMU_miss */
Note:
See TracChangeset
for help on using the changeset viewer.