Changeset 7cb53f62 in mainline for arch/sparc64/src/trap/trap.c


Ignore:
Timestamp:
2006-02-26T12:02:25Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4767721
Parents:
7a255e69
Message:

sparc64 work.
Switch console to framebuffer (needs proper detection and initialization).
No native keyboard support, so far.
Memory management trap handler fixes.
Do not use OpenFirmware trap table anymore.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/sparc64/src/trap/trap.c

    r7a255e69 r7cb53f62  
    4343void trap_init(void)
    4444{
    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 
    9745}
    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.