Changeset 7cb53f62 in mainline for arch/sparc64/src/trap/trap.c
- Timestamp:
- 2006-02-26T12:02:25Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4767721
- Parents:
- 7a255e69
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/sparc64/src/trap/trap.c
r7a255e69 r7cb53f62 43 43 void trap_init(void) 44 44 { 45 /*46 * Save kernel provided trap handlers.47 */48 memcpy((void *) trap_table_save, (void *) trap_table, TRAP_TABLE_SIZE);49 50 /*51 * Copy OFW's trap table into kernel.52 */53 memcpy((void *) trap_table, (void *) tba_read(), TRAP_TABLE_SIZE);54 55 /*56 * Install kernel-provided handlers.57 */58 trap_install_handler(TT_INSTRUCTION_ACCESS_EXCEPTION, TRAP_TABLE_ENTRY_SIZE, false);59 trap_install_handler(TT_CLEAN_WINDOW, CLEAN_WINDOW_HANDLER_SIZE, false);60 trap_install_handler(TT_MEM_ADDRESS_NOT_ALIGNED, TRAP_TABLE_ENTRY_SIZE, false);61 trap_install_handler(TT_SPILL_0_NORMAL, SPILL_HANDLER_SIZE, false);62 trap_install_handler(TT_FILL_0_NORMAL, FILL_HANDLER_SIZE, false);63 trap_install_handler(TT_INSTRUCTION_ACCESS_EXCEPTION, TRAP_TABLE_ENTRY_SIZE, true);64 trap_install_handler(TT_CLEAN_WINDOW, CLEAN_WINDOW_HANDLER_SIZE, true);65 trap_install_handler(TT_MEM_ADDRESS_NOT_ALIGNED, TRAP_TABLE_ENTRY_SIZE, true);66 trap_install_handler(TT_SPILL_0_NORMAL, SPILL_HANDLER_SIZE, true);67 trap_install_handler(TT_FILL_0_NORMAL, FILL_HANDLER_SIZE, true);68 trap_install_handler(TT_INTERRUPT_LEVEL_1, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);69 trap_install_handler(TT_INTERRUPT_LEVEL_2, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);70 trap_install_handler(TT_INTERRUPT_LEVEL_3, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);71 trap_install_handler(TT_INTERRUPT_LEVEL_4, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);72 trap_install_handler(TT_INTERRUPT_LEVEL_5, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);73 trap_install_handler(TT_INTERRUPT_LEVEL_6, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);74 trap_install_handler(TT_INTERRUPT_LEVEL_7, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);75 trap_install_handler(TT_INTERRUPT_LEVEL_8, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);76 trap_install_handler(TT_INTERRUPT_LEVEL_9, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);77 trap_install_handler(TT_INTERRUPT_LEVEL_10, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);78 trap_install_handler(TT_INTERRUPT_LEVEL_11, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);79 trap_install_handler(TT_INTERRUPT_LEVEL_12, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);80 trap_install_handler(TT_INTERRUPT_LEVEL_13, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);81 trap_install_handler(TT_INTERRUPT_LEVEL_14, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);82 trap_install_handler(TT_INTERRUPT_LEVEL_15, INTERRUPT_LEVEL_N_HANDLER_SIZE, false);83 trap_install_handler(TT_INTERRUPT_VECTOR_TRAP, INTERRUPT_VECTOR_TRAP_HANDLER_SIZE, false);84 85 /*86 * Kernel must become independent on Open Firmware calls before MMU handlers are enabled.87 */88 /*89 trap_install_handler(TT_FAST_INSTRUCTION_ACCESS_MMU_MISS, FAST_MMU_HANDLER_SIZE, false);90 trap_install_handler(TT_FAST_DATA_ACCESS_MMU_MISS, FAST_MMU_HANDLER_SIZE, false);91 trap_install_handler(TT_FAST_DATA_ACCESS_PROTECTION, FAST_MMU_HANDLER_SIZE, false);92 trap_install_handler(TT_FAST_INSTRUCTION_ACCESS_MMU_MISS, FAST_MMU_HANDLER_SIZE, true);93 trap_install_handler(TT_FAST_DATA_ACCESS_MMU_MISS, FAST_MMU_HANDLER_SIZE, true);94 trap_install_handler(TT_FAST_DATA_ACCESS_PROTECTION, FAST_MMU_HANDLER_SIZE, true);95 */96 97 45 } 98 99 /** Copy trap handler to active trap table.100 *101 * The handler is copied from trap_table_kernel to trap_handler.102 *103 * @param tt Trap type. An index that uniquelly identifies handler code.104 * @param len Length of the handler in bytes. Must be multiple of TRAP_TABLE_ENTRY_SIZE (i.e. 32).105 * @param tlnonz If false, tt is considered from the lower half of trap table. If true, the upper half is chosen.106 */107 void trap_install_handler(index_t tt, size_t len, bool tlnonz)108 {109 count_t cnt;110 int i;111 112 ASSERT(tt < TRAP_TABLE_ENTRY_COUNT/2);113 ASSERT(len % TRAP_TABLE_ENTRY_SIZE == 0);114 115 if (tlnonz)116 tt += TRAP_TABLE_ENTRY_COUNT/2;117 118 cnt = len/TRAP_TABLE_ENTRY_SIZE;119 120 for (i = tt; i < tt + cnt; i++) {121 trap_table[i] = trap_table_save[i];122 }123 }
Note:
See TracChangeset
for help on using the changeset viewer.