]> nv-tegra.nvidia Code Review - linux-2.6.git/blob - arch/mips/include/asm/byteorder.h
rcu: provide RCU options on non-preempt architectures too
[linux-2.6.git] / arch / mips / include / asm / byteorder.h
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 1996, 99, 2003 by Ralf Baechle
7  */
8 #ifndef _ASM_BYTEORDER_H
9 #define _ASM_BYTEORDER_H
10
11 #include <linux/compiler.h>
12 #include <asm/types.h>
13
14 #if defined(__MIPSEB__)
15 # define __BIG_ENDIAN
16 #elif defined(__MIPSEL__)
17 # define __LITTLE_ENDIAN
18 #else
19 # error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???"
20 #endif
21
22 #define __SWAB_64_THRU_32__
23
24 #ifdef CONFIG_CPU_MIPSR2
25
26 static inline __attribute_const__ __u16 __arch_swab16(__u16 x)
27 {
28         __asm__(
29         "       wsbh    %0, %1                  \n"
30         : "=r" (x)
31         : "r" (x));
32
33         return x;
34 }
35 #define __arch_swab16 __arch_swab16
36
37 static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
38 {
39         __asm__(
40         "       wsbh    %0, %1                  \n"
41         "       rotr    %0, %0, 16              \n"
42         : "=r" (x)
43         : "r" (x));
44
45         return x;
46 }
47 #define __arch_swab32 __arch_swab32
48
49 #ifdef CONFIG_CPU_MIPS64_R2
50 static inline __attribute_const__ __u64 __arch_swab64(__u64 x)
51 {
52         __asm__(
53         "       dsbh    %0, %1                  \n"
54         "       dshd    %0, %0                  \n"
55         "       drotr   %0, %0, 32              \n"
56         : "=r" (x)
57         : "r" (x));
58
59         return x;
60 }
61 #define __arch_swab64 __arch_swab64
62 #endif /* CONFIG_CPU_MIPS64_R2 */
63
64 #endif /* CONFIG_CPU_MIPSR2 */
65
66 #include <linux/byteorder.h>
67
68 #endif /* _ASM_BYTEORDER_H */