123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- /*
- * arch/alpha/boot/head.S
- *
- * initial bootloader stuff..
- */
- #include <asm/pal.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
|