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