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