1,4 → 1,4 |
# |
|
# Copyright (C) 2001-2004 Jakub Jermar |
# All rights reserved. |
# |
26,10 → 26,13 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
|
#include <arch/asm/macro.h> |
|
#define STACK_SPACE 128 |
|
#define __ASM__ |
|
#include <arch/asm/regname.h> |
#include <arch/mm/page.h> |
#include <arch/asm/boot.h> |
#include <arch/context.h> |
|
.text |
|
.set noat |
41,8 → 44,79 |
.global cache_error_entry |
.global exception_entry |
|
.macro REGISTERS_STORE r |
sw $at,EOFFSET_AT(\r) |
sw $v0,EOFFSET_V0(\r) |
sw $v1,EOFFSET_V1(\r) |
sw $a0,EOFFSET_A0(\r) |
sw $a1,EOFFSET_A1(\r) |
sw $a2,EOFFSET_A2(\r) |
sw $a3,EOFFSET_A3(\r) |
sw $t0,EOFFSET_A4(\r) |
sw $t1,EOFFSET_T1(\r) |
sw $t2,EOFFSET_T2(\r) |
sw $t3,EOFFSET_T3(\r) |
sw $t4,EOFFSET_T4(\r) |
sw $t5,EOFFSET_T5(\r) |
sw $t6,EOFFSET_T6(\r) |
sw $t7,EOFFSET_T7(\r) |
sw $t8,EOFFSET_T8(\r) |
sw $t9,EOFFSET_T9(\r) |
sw $s0,EOFFSET_S0(\r) |
sw $s1,EOFFSET_S1(\r) |
sw $s2,EOFFSET_S2(\r) |
sw $s3,EOFFSET_S3(\r) |
sw $s4,EOFFSET_S4(\r) |
sw $s5,EOFFSET_S5(\r) |
sw $s6,EOFFSET_S6(\r) |
sw $s7,EOFFSET_S7(\r) |
sw $s8,EOFFSET_S8(\r) |
sw $gp,EOFFSET_GP(\r) |
sw $ra,EOFFSET_RA(\r) |
mflo $k0 |
mfhi $k1 |
sw $k0,EOFFSET_LO(\r) |
sw $k1,EOFFSET_HI(\r) |
.endm |
|
.macro REGISTERS_LOAD r |
lw $at,EOFFSET_AT(\r) |
lw $v0,EOFFSET_V0(\r) |
lw $v1,EOFFSET_V1(\r) |
lw $a0,EOFFSET_A0(\r) |
lw $a1,EOFFSET_A1(\r) |
lw $a2,EOFFSET_A2(\r) |
lw $a3,EOFFSET_A3(\r) |
lw $t0,EOFFSET_A4(\r) |
lw $t1,EOFFSET_T1(\r) |
lw $t2,EOFFSET_T2(\r) |
lw $t3,EOFFSET_T3(\r) |
lw $t4,EOFFSET_T4(\r) |
lw $t5,EOFFSET_T5(\r) |
lw $t6,EOFFSET_T6(\r) |
lw $t7,EOFFSET_T7(\r) |
lw $t8,EOFFSET_T8(\r) |
lw $t9,EOFFSET_T9(\r) |
lw $s0,EOFFSET_S0(\r) |
lw $s1,EOFFSET_S1(\r) |
lw $s2,EOFFSET_S2(\r) |
lw $s3,EOFFSET_S3(\r) |
lw $s4,EOFFSET_S4(\r) |
lw $s5,EOFFSET_S5(\r) |
lw $s6,EOFFSET_S6(\r) |
lw $s7,EOFFSET_S7(\r) |
lw $s8,EOFFSET_S8(\r) |
lw $gp,EOFFSET_GP(\r) |
lw $ra,EOFFSET_RA(\r) |
|
lw $k0,EOFFSET_LO(\r) |
lw $k1,EOFFSET_HI(\r) |
mtlo $k0 |
mthi $k1 |
.endm |
|
|
.org 0x0 |
kernel_image_start: |
tlb_refill_entry: |
j tlb_refill_handler |
nop |
55,37 → 129,55 |
.org 0x180 |
exception_entry: |
exception_handler: |
sub $29, STACK_SPACE |
REGISTERS_STORE $29 |
sub $sp, REGISTER_SPACE |
REGISTERS_STORE $sp |
|
jal exception |
nop |
|
REGISTERS_LOAD $29 |
add $29, STACK_SPACE |
REGISTERS_LOAD $sp |
add $sp, REGISTER_SPACE |
|
eret |
nop |
|
.org KA2PA(0x80000300) |
kernel_image_start: |
/* Load temporary stack */ |
lui $sp, (TEMP_STACK_START + TEMP_STACK_SIZE) >> 16 |
ori $sp, (TEMP_STACK_START + TEMP_STACK_SIZE) & 0xffff |
|
/* Not sure about this, but might be needed for PIC code???? */ |
lui $gp, 0x8000 |
|
jal main_bsp |
nop |
|
.org KA2PA(TEMP_STACK_START) |
.space TEMP_STACK_SIZE |
|
tlb_refill_handler: |
sub $29, STACK_SPACE |
REGISTERS_STORE $29 |
sub $sp, REGISTER_SPACE |
REGISTERS_STORE $sp |
|
jal tlb_refill |
nop |
|
REGISTERS_LOAD $29 |
add $29, STACK_SPACE |
REGISTERS_LOAD $sp |
add $sp, REGISTER_SPACE |
|
eret |
nop |
|
cache_error_handler: |
sub $29, STACK_SPACE |
REGISTERS_STORE $29 |
sub $sp, REGISTER_SPACE |
REGISTERS_STORE $sp |
|
jal cache_error |
nop |
|
REGISTERS_LOAD $29 |
add $29, STACK_SPACE |
REGISTERS_LOAD $sp |
add $sp, REGISTER_SPACE |
|
eret |
nop |