head.S revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * arch/alpha/boot/head.S 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * initial bootloader stuff.. 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/system.h> 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .set noreorder 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .globl __start 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .ent __start 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds__start: 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds br $29,2f 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds2: ldgp $29,0($29) 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jsr $26,start_kernel 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds call_pal PAL_halt 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end __start 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .align 5 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .globl wrent 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .ent wrent 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldswrent: 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .prologue 0 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds call_pal PAL_wrent 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ret ($26) 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end wrent 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .align 5 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .globl wrkgp 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .ent wrkgp 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldswrkgp: 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .prologue 0 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds call_pal PAL_wrkgp 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ret ($26) 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end wrkgp 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .align 5 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .globl switch_to_osf_pal 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .ent switch_to_osf_pal 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsswitch_to_osf_pal: 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds subq $30,128,$30 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .frame $30,128,$26 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $26,0($30) 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $1,8($30) 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $2,16($30) 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $3,24($30) 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $4,32($30) 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $5,40($30) 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $6,48($30) 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $7,56($30) 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $8,64($30) 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $9,72($30) 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $10,80($30) 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $11,88($30) 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $12,96($30) 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $13,104($30) 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $14,112($30) 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $15,120($30) 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .prologue 0 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $30,0($17) /* save KSP in PCB */ 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds bis $30,$30,$20 /* a4 = KSP */ 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds br $17,1f 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $26,0($30) 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $1,8($30) 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $2,16($30) 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $3,24($30) 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $4,32($30) 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $5,40($30) 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $6,48($30) 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $7,56($30) 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $8,64($30) 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $9,72($30) 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $10,80($30) 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $11,88($30) 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $12,96($30) 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $13,104($30) 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $14,112($30) 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ldq $15,120($30) 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addq $30,128,$30 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ret ($26) 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds1: call_pal PAL_swppal 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end switch_to_osf_pal 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .align 3 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .globl tbi 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .ent tbi 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstbi: 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .prologue 0 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds call_pal PAL_tbi 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ret ($26) 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end tbi 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .align 3 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .globl halt 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .ent halt 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldshalt: 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .prologue 0 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds call_pal PAL_halt 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end halt 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* $16 - new stack page */ 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .align 3 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .globl move_stack 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .ent move_stack 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmove_stack: 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .prologue 0 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds lda $0, 0x1fff($31) 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds and $0, $30, $1 /* Stack offset */ 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds or $1, $16, $16 /* New stack pointer */ 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds mov $30, $1 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds mov $16, $2 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds1: ldq $3, 0($1) /* Move the stack */ 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addq $1, 8, $1 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds stq $3, 0($2) 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds and $0, $1, $4 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addq $2, 8, $2 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds bne $4, 1b 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds mov $16, $30 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ret ($26) 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end move_stack 124