branch Attitude Adjustment
[12.09/openwrt.git] / target / linux / ubicom32 / files / arch / ubicom32 / include / asm / range-protect.h
1 /*
2  * arch/ubicom32/include/asm/range-protect.h
3  *   Assembly macros declared in C for enabling memory protection.
4  *
5  * (C) Copyright 2009, Ubicom, Inc.
6  *
7  * This file is part of the Ubicom32 Linux Kernel Port.
8  *
9  * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10  * it and/or modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation, either version 2 of the
12  * License, or (at your option) any later version.
13  *
14  * The Ubicom32 Linux Kernel Port is distributed in the hope that it
15  * will be useful, but WITHOUT ANY WARRANTY; without even the implied
16  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
17  * the GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with the Ubicom32 Linux Kernel Port.  If not,
21  * see <http://www.gnu.org/licenses/>.
22  *
23  * Ubicom32 implementation derived from (with many thanks):
24  *   arch/m68knommu
25  *   arch/blackfin
26  *   arch/parisc
27  */
28
29 #ifndef _ASM_UBICOM32_RANGE_PROTECT_H
30 #define _ASM_UBICOM32_RANGE_PROTECT_H
31
32 #if !defined(__ASSEMBLY__)
33 #include <asm/thread.h>
34 /*
35  * The following macros should be the identical to the ones in
36  * range-protect-asm.h
37  *
38  * You should only use the enable/disable ranges when you have the atomic lock,
39  * if you do not there will be problems.
40  */
41
42 /*
43  * enable_kernel_ranges
44  *      Enable the kernel ranges (disabling protection) for thread,
45  *      where thread == (1 << thread number)
46  */
47 asm (
48         ".macro enable_kernel_ranges thread                     \n\t"
49 #ifdef CONFIG_PROTECT_KERNEL
50         "       or.4    I_RANGE0_EN, I_RANGE0_EN, \\thread      \n\t" /* Enable Range Register */
51         "       or.4    D_RANGE0_EN, D_RANGE0_EN, \\thread      \n\t"
52         "       or.4    D_RANGE1_EN, D_RANGE1_EN, \\thread      \n\t"
53 #endif
54         ".endm                                                  \n\t"
55 );
56
57 #else /* __ASSEMBLY__ */
58
59 #include <asm/range-protect-asm.h>
60
61 #endif
62 #endif  /* _ASM_UBICOM32_RANGE_PROTECT_H */