/* * arch/alpha/boot/head.S * * initial bootloader stuff.. */ #include <asm/system.h> .set noreorder .globl __start .ent __start __start: br $29,2f 2: ldgp $29,0($29) jsr $26,start_kernel call_pal PAL_halt .end __start .align 5 .globl wrent .ent wrent wrent: .prologue 0 call_pal PAL_wrent ret ($26) .end wrent .align 5 .globl wrkgp .ent wrkgp wrkgp: .prologue 0 call_pal PAL_wrkgp ret ($26) .end wrkgp .align 5 .globl switch_to_osf_pal .ent switch_to_osf_pal switch_to_osf_pal: subq $30,128,$30 .frame $30,128,$26 stq $26,0($30) stq $1,8($30) stq $2,16($30) stq $3,24($30) stq $4,32($30) stq $5,40($30) stq $6,48($30) stq $7,56($30) stq $8,64($30) stq $9,72($30) stq $10,80($30) stq $11,88($30) stq $12,96($30) stq $13,104($30) stq $14,112($30) stq $15,120($30) .prologue 0 stq $30,0($17) /* save KSP in PCB */ bis $30,$30,$20 /* a4 = KSP */ br $17,1f ldq $26,0($30) ldq $1,8($30) ldq $2,16($30) ldq $3,24($30) ldq $4,32($30) ldq $5,40($30) ldq $6,48($30) ldq $7,56($30) ldq $8,64($30) ldq $9,72($30) ldq $10,80($30) ldq $11,88($30) ldq $12,96($30) ldq $13,104($30) ldq $14,112($30) ldq $15,120($30) addq $30,128,$30 ret ($26) 1: call_pal PAL_swppal .end switch_to_osf_pal .align 3 .globl tbi .ent tbi tbi: .prologue 0 call_pal PAL_tbi ret ($26) .end tbi .align 3 .globl halt .ent halt halt: .prologue 0 call_pal PAL_halt .end halt /* $16 - new stack page */ .align 3 .globl move_stack .ent move_stack move_stack: .prologue 0 lda $0, 0x1fff($31) and $0, $30, $1 /* Stack offset */ or $1, $16, $16 /* New stack pointer */ mov $30, $1 mov $16, $2 1: ldq $3, 0($1) /* Move the stack */ addq $1, 8, $1 stq $3, 0($2) and $0, $1, $4 addq $2, 8, $2 bne $4, 1b mov $16, $30 ret ($26) .end move_stack