| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * 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 |