[XTENSA] Add kernel module support
[deliverable/linux.git] / arch / xtensa / mm / misc.S
CommitLineData
3f65ce4d
CZ
1/*
2 * arch/xtensa/mm/misc.S
3 *
4 * Miscellaneous assembly functions.
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 *
10 * Copyright (C) 2001 - 2005 Tensilica Inc.
11 *
12 * Chris Zankel <chris@zankel.net>
13 */
14
15/* Note: we might want to implement some of the loops as zero-overhead-loops,
16 * where applicable and if supported by the processor.
17 */
18
19#include <linux/linkage.h>
20#include <asm/page.h>
21#include <asm/pgtable.h>
173d6681
CZ
22#include <asm/asmmacro.h>
23#include <asm/cacheasm.h>
3f65ce4d
CZ
24
25/* clear_page (page) */
26
27ENTRY(clear_page)
28 entry a1, 16
29 addi a4, a2, PAGE_SIZE
30 movi a3, 0
31
321: s32i a3, a2, 0
33 s32i a3, a2, 4
34 s32i a3, a2, 8
35 s32i a3, a2, 12
36 s32i a3, a2, 16
37 s32i a3, a2, 20
38 s32i a3, a2, 24
39 s32i a3, a2, 28
40 addi a2, a2, 32
41 blt a2, a4, 1b
42
43 retw
44
45/*
46 * copy_page (void *to, void *from)
47 * a2 a3
48 */
49
50ENTRY(copy_page)
51 entry a1, 16
52 addi a4, a2, PAGE_SIZE
53
541: l32i a5, a3, 0
55 l32i a6, a3, 4
56 l32i a7, a3, 8
57 s32i a5, a2, 0
58 s32i a6, a2, 4
59 s32i a7, a2, 8
60 l32i a5, a3, 12
61 l32i a6, a3, 16
62 l32i a7, a3, 20
63 s32i a5, a2, 12
64 s32i a6, a2, 16
65 s32i a7, a2, 20
66 l32i a5, a3, 24
67 l32i a6, a3, 28
68 s32i a5, a2, 24
69 s32i a6, a2, 28
70 addi a2, a2, 32
71 addi a3, a3, 32
72 blt a2, a4, 1b
73
74 retw
75
3f65ce4d 76/*
173d6681 77 * void __invalidate_icache_page(ulong start)
3f65ce4d
CZ
78 */
79
173d6681 80ENTRY(__invalidate_icache_page)
3f65ce4d 81 entry sp, 16
3f65ce4d 82
173d6681
CZ
83 ___invalidate_icache_page a2 a3
84 isync
3f65ce4d 85
3f65ce4d
CZ
86 retw
87
88/*
173d6681 89 * void __invalidate_dcache_page(ulong start)
3f65ce4d
CZ
90 */
91
173d6681 92ENTRY(__invalidate_dcache_page)
3f65ce4d 93 entry sp, 16
3f65ce4d 94
173d6681
CZ
95 ___invalidate_dcache_page a2 a3
96 dsync
3f65ce4d 97
3f65ce4d
CZ
98 retw
99
100/*
173d6681 101 * void __flush_invalidate_dcache_page(ulong start)
3f65ce4d
CZ
102 */
103
173d6681 104ENTRY(__flush_invalidate_dcache_page)
3f65ce4d 105 entry sp, 16
3f65ce4d 106
173d6681 107 ___flush_invalidate_dcache_page a2 a3
3f65ce4d 108
173d6681 109 dsync
3f65ce4d
CZ
110 retw
111
112/*
173d6681 113 * void __flush_dcache_page(ulong start)
3f65ce4d
CZ
114 */
115
173d6681 116ENTRY(__flush_dcache_page)
3f65ce4d 117 entry sp, 16
3f65ce4d 118
173d6681 119 ___flush_dcache_page a2 a3
3f65ce4d 120
173d6681 121 dsync
3f65ce4d
CZ
122 retw
123
3f65ce4d 124
3f65ce4d
CZ
125
126/*
173d6681 127 * void __invalidate_icache_range(ulong start, ulong size)
3f65ce4d
CZ
128 */
129
173d6681 130ENTRY(__invalidate_icache_range)
3f65ce4d 131 entry sp, 16
173d6681
CZ
132
133 ___invalidate_icache_range a2 a3 a4
134 isync
135
3f65ce4d
CZ
136 retw
137
138/*
139 * void __flush_invalidate_dcache_range(ulong start, ulong size)
140 */
141
142ENTRY(__flush_invalidate_dcache_range)
143 entry sp, 16
3f65ce4d 144
173d6681
CZ
145 ___flush_invalidate_dcache_range a2 a3 a4
146 dsync
3f65ce4d 147
3f65ce4d
CZ
148 retw
149
150/*
173d6681 151 * void _flush_dcache_range(ulong start, ulong size)
3f65ce4d
CZ
152 */
153
173d6681 154ENTRY(__flush_dcache_range)
3f65ce4d
CZ
155 entry sp, 16
156
173d6681 157 ___flush_dcache_range a2 a3 a4
3f65ce4d 158 dsync
3f65ce4d 159
3f65ce4d
CZ
160 retw
161
173d6681
CZ
162/*
163 * void _invalidate_dcache_range(ulong start, ulong size)
164 */
3f65ce4d 165
173d6681 166ENTRY(__invalidate_dcache_range)
3f65ce4d
CZ
167 entry sp, 16
168
173d6681 169 ___invalidate_dcache_range a2 a3 a4
3f65ce4d 170
3f65ce4d 171
3f65ce4d
CZ
172 retw
173
173d6681
CZ
174/*
175 * void _invalidate_icache_all(void)
176 */
3f65ce4d 177
173d6681 178ENTRY(__invalidate_icache_all)
3f65ce4d
CZ
179 entry sp, 16
180
173d6681
CZ
181 ___invalidate_icache_all a2 a3
182 isync
3f65ce4d 183
3f65ce4d
CZ
184 retw
185
3f65ce4d 186/*
173d6681 187 * void _flush_invalidate_dcache_all(void)
3f65ce4d
CZ
188 */
189
173d6681 190ENTRY(__flush_invalidate_dcache_all)
3f65ce4d
CZ
191 entry sp, 16
192
173d6681
CZ
193 ___flush_invalidate_dcache_all a2 a3
194 dsync
3f65ce4d 195
3f65ce4d
CZ
196 retw
197
173d6681
CZ
198/*
199 * void _invalidate_dcache_all(void)
200 */
3f65ce4d 201
173d6681 202ENTRY(__invalidate_dcache_all)
3f65ce4d
CZ
203 entry sp, 16
204
173d6681
CZ
205 ___invalidate_dcache_all a2 a3
206 dsync
3f65ce4d
CZ
207
208 retw
209
This page took 0.3061 seconds and 5 git commands to generate.