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
124