• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/avr32/include/asm/
1/*
2 * Copyright (C) 2004-2006 Atmel Corporation
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8#ifndef __ASM_AVR32_ASM_H__
9#define __ASM_AVR32_ASM_H__
10
11#include <asm/sysreg.h>
12#include <asm/asm-offsets.h>
13#include <asm/thread_info.h>
14
15#define mask_interrupts		ssrf	SYSREG_GM_OFFSET
16#define mask_exceptions		ssrf	SYSREG_EM_OFFSET
17#define unmask_interrupts	csrf	SYSREG_GM_OFFSET
18#define unmask_exceptions	csrf	SYSREG_EM_OFFSET
19
20#ifdef CONFIG_FRAME_POINTER
21	.macro	save_fp
22	st.w	--sp, r7
23	.endm
24	.macro	restore_fp
25	ld.w	r7, sp++
26	.endm
27	.macro	zero_fp
28	mov	r7, 0
29	.endm
30#else
31	.macro	save_fp
32	.endm
33	.macro	restore_fp
34	.endm
35	.macro	zero_fp
36	.endm
37#endif
38	.macro	get_thread_info reg
39	mov	\reg, sp
40	andl	\reg, ~(THREAD_SIZE - 1) & 0xffff
41	.endm
42
43	/* Save and restore registers */
44	.macro	save_min sr, tmp=lr
45	pushm	lr
46	mfsr	\tmp, \sr
47	zero_fp
48	st.w	--sp, \tmp
49	.endm
50
51	.macro	restore_min sr, tmp=lr
52	ld.w	\tmp, sp++
53	mtsr	\sr, \tmp
54	popm	lr
55	.endm
56
57	.macro	save_half sr, tmp=lr
58	save_fp
59	pushm	r8-r9,r10,r11,r12,lr
60	zero_fp
61	mfsr	\tmp, \sr
62	st.w	--sp, \tmp
63	.endm
64
65	.macro	restore_half sr, tmp=lr
66	ld.w	\tmp, sp++
67	mtsr	\sr, \tmp
68	popm	r8-r9,r10,r11,r12,lr
69	restore_fp
70	.endm
71
72	.macro	save_full_user sr, tmp=lr
73	stmts	--sp, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr
74	st.w	--sp, lr
75	zero_fp
76	mfsr	\tmp, \sr
77	st.w	--sp, \tmp
78	.endm
79
80	.macro	restore_full_user sr, tmp=lr
81	ld.w	\tmp, sp++
82	mtsr	\sr, \tmp
83	ld.w	lr, sp++
84	ldmts	sp++, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr
85	.endm
86
87	/* uaccess macros */
88	.macro branch_if_kernel scratch, label
89	get_thread_info \scratch
90	ld.w	\scratch, \scratch[TI_flags]
91	bld	\scratch, TIF_USERSPACE
92	brcc	\label
93	.endm
94
95	.macro ret_if_privileged scratch, addr, size, ret
96	sub	\scratch, \size, 1
97	add	\scratch, \addr
98	retcs	\ret
99	retmi	\ret
100	.endm
101
102#endif /* __ASM_AVR32_ASM_H__ */
103