^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * arch/alpha/boot/head.S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * initial bootloader stuff..
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <asm/pal.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) .set noreorder
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) .globl __start
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) .ent __start
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) __start:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) br $29,2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 2: ldgp $29,0($29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) jsr $26,start_kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) call_pal PAL_halt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) .end __start
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) .align 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) .globl wrent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) .ent wrent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) wrent:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) .prologue 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) call_pal PAL_wrent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) ret ($26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) .end wrent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) .align 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) .globl wrkgp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) .ent wrkgp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) wrkgp:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) .prologue 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) call_pal PAL_wrkgp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) ret ($26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) .end wrkgp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) .align 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) .globl switch_to_osf_pal
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) .ent switch_to_osf_pal
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) switch_to_osf_pal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) subq $30,128,$30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) .frame $30,128,$26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) stq $26,0($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) stq $1,8($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) stq $2,16($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) stq $3,24($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) stq $4,32($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) stq $5,40($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) stq $6,48($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) stq $7,56($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) stq $8,64($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) stq $9,72($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) stq $10,80($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) stq $11,88($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) stq $12,96($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) stq $13,104($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) stq $14,112($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) stq $15,120($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) .prologue 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) stq $30,0($17) /* save KSP in PCB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) bis $30,$30,$20 /* a4 = KSP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) br $17,1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) ldq $26,0($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) ldq $1,8($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) ldq $2,16($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) ldq $3,24($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) ldq $4,32($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) ldq $5,40($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) ldq $6,48($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) ldq $7,56($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) ldq $8,64($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) ldq $9,72($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) ldq $10,80($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) ldq $11,88($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) ldq $12,96($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) ldq $13,104($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) ldq $14,112($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) ldq $15,120($30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) addq $30,128,$30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) ret ($26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) 1: call_pal PAL_swppal
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) .end switch_to_osf_pal
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) .align 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) .globl tbi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) .ent tbi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) tbi:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) .prologue 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) call_pal PAL_tbi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) ret ($26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) .end tbi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) .align 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) .globl halt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) .ent halt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) halt:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) .prologue 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) call_pal PAL_halt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) .end halt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) /* $16 - new stack page */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) .align 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) .globl move_stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) .ent move_stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) move_stack:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) .prologue 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) lda $0, 0x1fff($31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) and $0, $30, $1 /* Stack offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) or $1, $16, $16 /* New stack pointer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) mov $30, $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) mov $16, $2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 1: ldq $3, 0($1) /* Move the stack */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) addq $1, 8, $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) stq $3, 0($2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) and $0, $1, $4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) addq $2, 8, $2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) bne $4, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) mov $16, $30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) ret ($26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) .end move_stack