Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
[linux-2.6] / include / asm-sparc / byteorder.h
1 #ifndef _SPARC_BYTEORDER_H
2 #define _SPARC_BYTEORDER_H
3
4 #include <asm/types.h>
5 #include <asm/asi.h>
6
7 #ifdef __GNUC__
8
9 #ifdef CONFIG_SPARC32
10 #define __SWAB_64_THRU_32__
11 #endif
12
13 #ifdef CONFIG_SPARC64
14
15 static inline __u16 ___arch__swab16p(const __u16 *addr)
16 {
17         __u16 ret;
18
19         __asm__ __volatile__ ("lduha [%1] %2, %0"
20                               : "=r" (ret)
21                               : "r" (addr), "i" (ASI_PL));
22         return ret;
23 }
24
25 static inline __u32 ___arch__swab32p(const __u32 *addr)
26 {
27         __u32 ret;
28
29         __asm__ __volatile__ ("lduwa [%1] %2, %0"
30                               : "=r" (ret)
31                               : "r" (addr), "i" (ASI_PL));
32         return ret;
33 }
34
35 static inline __u64 ___arch__swab64p(const __u64 *addr)
36 {
37         __u64 ret;
38
39         __asm__ __volatile__ ("ldxa [%1] %2, %0"
40                               : "=r" (ret)
41                               : "r" (addr), "i" (ASI_PL));
42         return ret;
43 }
44
45 #define __arch__swab16p(x) ___arch__swab16p(x)
46 #define __arch__swab32p(x) ___arch__swab32p(x)
47 #define __arch__swab64p(x) ___arch__swab64p(x)
48
49 #endif /* CONFIG_SPARC64 */
50
51 #define __BYTEORDER_HAS_U64__
52
53 #endif
54
55 #include <linux/byteorder/big_endian.h>
56
57 #endif /* _SPARC_BYTEORDER_H */