aboutsummaryrefslogtreecommitdiffstats
path: root/arch/alpha/boot/head.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/alpha/boot/head.S')
-rw-r--r--arch/alpha/boot/head.S123
1 files changed, 123 insertions, 0 deletions
diff --git a/arch/alpha/boot/head.S b/arch/alpha/boot/head.S
new file mode 100644
index 000000000000..f3d98089b3dc
--- /dev/null
+++ b/arch/alpha/boot/head.S
@@ -0,0 +1,123 @@
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
142: 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
22wrent:
23 .prologue 0
24 call_pal PAL_wrent
25 ret ($26)
26 .end wrent
27
28 .align 5
29 .globl wrkgp
30 .ent wrkgp
31wrkgp:
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
40switch_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)
841: call_pal PAL_swppal
85 .end switch_to_osf_pal
86
87 .align 3
88 .globl tbi
89 .ent tbi
90tbi:
91 .prologue 0
92 call_pal PAL_tbi
93 ret ($26)
94 .end tbi
95
96 .align 3
97 .globl halt
98 .ent halt
99halt:
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
108move_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
1151: 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