Changeset cddc1639 in mainline for arch/sparc64/src/trap/trap.c


Ignore:
Timestamp:
2005-12-15T21:40:19Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5753fbb
Parents:
36e7ee98
Message:

sparc64 work.
Add trap_install_handler().
Use trap_install_handler() to install register window clean, spill and fill handlers.

File:
1 edited

Legend:

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

    r36e7ee98 rcddc1639  
    2929#include <arch/trap/trap.h>
    3030#include <arch/trap/trap_table.h>
     31#include <arch/trap/regwin.h>
    3132#include <arch/asm.h>
    3233#include <memstr.h>
     34#include <debug.h>
     35#include <arch/types.h>
     36#include <typedefs.h>
    3337
    3438/** Initialize trap table. */
     
    3943         */
    4044        memcpy((void *) trap_table, (void *) tba_read(), TRAP_TABLE_SIZE);
     45       
     46        /*
     47         * Install kernel-provided handlers.
     48         */
     49        trap_install_handler(TT_CLEAN_WINDOW, CLEAN_WINDOW_HANDLER_SIZE, false);
     50        trap_install_handler(TT_SPILL_0_NORMAL, SPILL_HANDLER_SIZE, false);
     51        trap_install_handler(TT_FILL_0_NORMAL, FILL_HANDLER_SIZE, false);
    4152}
     53
     54/** Copy trap handler to active trap table.
     55 *
     56 * The handler is copied from trap_table_kernel to trap_handler.
     57 *
     58 * @param tt Trap type. An index that uniquelly identifies handler code.
     59 * @param len Length of the handler in bytes. Must be multiple of TRAP_TABLE_ENTRY_SIZE (i.e. 32).
     60 * @param tlnonz If false, tt is considered from the lower half of trap table. If true, the upper half is chosen.
     61 */
     62void trap_install_handler(index_t tt, size_t len, bool tlnonz)
     63{
     64        count_t cnt;
     65        int i;
     66
     67        ASSERT(tt < TRAP_TABLE_ENTRY_COUNT/2);
     68        ASSERT(len % TRAP_TABLE_ENTRY_SIZE == 0);
     69
     70        if (tlnonz)
     71                tt += TRAP_TABLE_ENTRY_COUNT/2;
     72
     73        cnt = len/TRAP_TABLE_ENTRY_SIZE;
     74       
     75        for (i = tt; i < tt + cnt; i++) {
     76                trap_table[i] = trap_table_kernel[i];
     77        }       
     78}
Note: See TracChangeset for help on using the changeset viewer.