Commit | Line | Data |
---|---|---|
e7916357 DD |
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) 2003, 2004 Ralf Baechle | |
7 | */ | |
8 | #ifndef __ASM_MACH_GENERIC_MANGLE_PORT_H | |
9 | #define __ASM_MACH_GENERIC_MANGLE_PORT_H | |
10 | ||
11 | #include <asm/byteorder.h> | |
12 | ||
13 | #ifdef __BIG_ENDIAN | |
14 | ||
1685ddbe SH |
15 | static inline bool __should_swizzle_bits(volatile void *a) |
16 | { | |
17 | extern const bool octeon_should_swizzle_table[]; | |
3312eca5 | 18 | u64 did = ((u64)(uintptr_t)a >> 40) & 0xff; |
1685ddbe | 19 | |
1685ddbe SH |
20 | return octeon_should_swizzle_table[did]; |
21 | } | |
22 | ||
e7916357 DD |
23 | # define __swizzle_addr_b(port) (port) |
24 | # define __swizzle_addr_w(port) (port) | |
25 | # define __swizzle_addr_l(port) (port) | |
26 | # define __swizzle_addr_q(port) (port) | |
27 | ||
28 | #else /* __LITTLE_ENDIAN */ | |
29 | ||
1685ddbe SH |
30 | #define __should_swizzle_bits(a) false |
31 | ||
3312eca5 | 32 | static inline bool __should_swizzle_addr(u64 p) |
e7916357 DD |
33 | { |
34 | /* boot bus? */ | |
35 | return ((p >> 40) & 0xff) == 0; | |
36 | } | |
37 | ||
38 | # define __swizzle_addr_b(port) \ | |
39 | (__should_swizzle_addr(port) ? (port) ^ 7 : (port)) | |
40 | # define __swizzle_addr_w(port) \ | |
41 | (__should_swizzle_addr(port) ? (port) ^ 6 : (port)) | |
42 | # define __swizzle_addr_l(port) \ | |
43 | (__should_swizzle_addr(port) ? (port) ^ 4 : (port)) | |
44 | # define __swizzle_addr_q(port) (port) | |
45 | ||
46 | #endif /* __BIG_ENDIAN */ | |
47 | ||
e7916357 DD |
48 | |
49 | # define ioswabb(a, x) (x) | |
50 | # define __mem_ioswabb(a, x) (x) | |
1685ddbe | 51 | # define ioswabw(a, x) (__should_swizzle_bits(a) ? le16_to_cpu(x) : x) |
e7916357 | 52 | # define __mem_ioswabw(a, x) (x) |
1685ddbe | 53 | # define ioswabl(a, x) (__should_swizzle_bits(a) ? le32_to_cpu(x) : x) |
e7916357 | 54 | # define __mem_ioswabl(a, x) (x) |
1685ddbe | 55 | # define ioswabq(a, x) (__should_swizzle_bits(a) ? le64_to_cpu(x) : x) |
e7916357 DD |
56 | # define __mem_ioswabq(a, x) (x) |
57 | ||
e7916357 | 58 | #endif /* __ASM_MACH_GENERIC_MANGLE_PORT_H */ |