linux/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h
<<
>>
Prefs
   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
  15static inline bool __should_swizzle_bits(volatile void *a)
  16{
  17        extern const bool octeon_should_swizzle_table[];
  18        u64 did = ((u64)(uintptr_t)a >> 40) & 0xff;
  19
  20        return octeon_should_swizzle_table[did];
  21}
  22
  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
  30#define __should_swizzle_bits(a)        false
  31
  32static inline bool __should_swizzle_addr(u64 p)
  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
  48
  49# define ioswabb(a, x)          (x)
  50# define __mem_ioswabb(a, x)    (x)
  51# define ioswabw(a, x)          (__should_swizzle_bits(a) ?             \
  52                                 le16_to_cpu((__force __le16)(x)) :     \
  53                                 (x))
  54# define __mem_ioswabw(a, x)    (x)
  55# define ioswabl(a, x)          (__should_swizzle_bits(a) ?             \
  56                                 le32_to_cpu((__force __le32)(x)) :     \
  57                                 (x))
  58# define __mem_ioswabl(a, x)    (x)
  59# define ioswabq(a, x)          (__should_swizzle_bits(a) ?             \
  60                                 le64_to_cpu((__force __le64)(x)) :     \
  61                                 (x))
  62# define __mem_ioswabq(a, x)    (x)
  63
  64#endif /* __ASM_MACH_GENERIC_MANGLE_PORT_H */
  65