1/*
2 * Copyright (c) 2006 Andriy Skulysh <askulsyh@gmail.com>
3 *
4 * This file is subject to the terms and conditions of the GNU General Public
5 * License.  See the file "COPYING" in the main directory of this archive
6 * for more details.
7 *
8 */
9
10#include <linux/linkage.h>
11#include <asm/cpu/mmu_context.h>
12
13#define k0	r0
14#define k1	r1
15#define k2	r2
16#define k3	r3
17#define k4	r4
18
19/*
20 * Kernel mode register usage:
21 *	k0	scratch
22 *	k1	scratch
23 *	k2	scratch (Exception code)
24 *	k3	scratch (Return address)
25 *	k4	scratch
26 *	k5	reserved
27 *	k6	Global Interrupt Mask (0--15 << 4)
28 *	k7	CURRENT_THREAD_INFO (pointer to current thread info)
29 */
30
31ENTRY(wakeup_start)
32! clear STBY bit
33	mov	#-126, k2
34   	and	#127, k0
35	mov.b	k0, @k2
36! enable refresh
37	mov.l	5f, k1
38	mov.w	6f, k0
39  	mov.w	k0, @k1
40! jump to handler
41	mov.l	2f, k2
42	mov.l	3f, k3
43	mov.l	@k2, k2
44
45	mov.l	4f, k1
46	jmp	@k1
47	nop
48
49	.align	2
501:	.long	EXPEVT
512:	.long	INTEVT
523:	.long	ret_from_irq
534:	.long	handle_exception
545:	.long	0xffffff68
556:	.word	0x0524
56
57ENTRY(wakeup_end)
58	nop
59