diff options
Diffstat (limited to 'arch/alpha/boot/head.S')
-rw-r--r-- | arch/alpha/boot/head.S | 123 |
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 | ||
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 | ||