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