186d7f5d3SJohn Marino /* $NetBSD: xlate.h,v 1.1.1.1 2008/12/22 00:18:44 haad Exp $ */ 286d7f5d3SJohn Marino 386d7f5d3SJohn Marino /* 486d7f5d3SJohn Marino * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. 586d7f5d3SJohn Marino * Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved. 686d7f5d3SJohn Marino * 786d7f5d3SJohn Marino * This file is part of LVM2. 886d7f5d3SJohn Marino * 986d7f5d3SJohn Marino * This copyrighted material is made available to anyone wishing to use, 1086d7f5d3SJohn Marino * modify, copy, or redistribute it subject to the terms and conditions 1186d7f5d3SJohn Marino * of the GNU Lesser General Public License v.2.1. 1286d7f5d3SJohn Marino * 1386d7f5d3SJohn Marino * You should have received a copy of the GNU Lesser General Public License 1486d7f5d3SJohn Marino * along with this program; if not, write to the Free Software Foundation, 1586d7f5d3SJohn Marino * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1686d7f5d3SJohn Marino */ 1786d7f5d3SJohn Marino 1886d7f5d3SJohn Marino #ifndef _LVM_XLATE_H 1986d7f5d3SJohn Marino #define _LVM_XLATE_H 2086d7f5d3SJohn Marino 2186d7f5d3SJohn Marino #ifdef linux 2286d7f5d3SJohn Marino # include <endian.h> 2386d7f5d3SJohn Marino # include <byteswap.h> 2486d7f5d3SJohn Marino #else 2586d7f5d3SJohn Marino # include <machine/endian.h> 2686d7f5d3SJohn Marino # define bswap_16(x) (((x) & 0x00ffU) << 8 | \ 2786d7f5d3SJohn Marino ((x) & 0xff00U) >> 8) 2886d7f5d3SJohn Marino # define bswap_32(x) (((x) & 0x000000ffU) << 24 | \ 2986d7f5d3SJohn Marino ((x) & 0xff000000U) >> 24 | \ 3086d7f5d3SJohn Marino ((x) & 0x0000ff00U) << 8 | \ 3186d7f5d3SJohn Marino ((x) & 0x00ff0000U) >> 8) 3286d7f5d3SJohn Marino # define bswap_64(x) (((x) & 0x00000000000000ffULL) << 56 | \ 3386d7f5d3SJohn Marino ((x) & 0xff00000000000000ULL) >> 56 | \ 3486d7f5d3SJohn Marino ((x) & 0x000000000000ff00ULL) << 40 | \ 3586d7f5d3SJohn Marino ((x) & 0x00ff000000000000ULL) >> 40 | \ 3686d7f5d3SJohn Marino ((x) & 0x0000000000ff0000ULL) << 24 | \ 3786d7f5d3SJohn Marino ((x) & 0x0000ff0000000000ULL) >> 24 | \ 3886d7f5d3SJohn Marino ((x) & 0x00000000ff000000ULL) << 8 | \ 3986d7f5d3SJohn Marino ((x) & 0x000000ff00000000ULL) >> 8) 4086d7f5d3SJohn Marino #endif 4186d7f5d3SJohn Marino 4286d7f5d3SJohn Marino #if BYTE_ORDER == LITTLE_ENDIAN 4386d7f5d3SJohn Marino # define xlate16(x) (x) 4486d7f5d3SJohn Marino # define xlate32(x) (x) 4586d7f5d3SJohn Marino # define xlate64(x) (x) 4686d7f5d3SJohn Marino # define xlate16_be(x) bswap_16(x) 4786d7f5d3SJohn Marino # define xlate32_be(x) bswap_32(x) 4886d7f5d3SJohn Marino # define xlate64_be(x) bswap_64(x) 4986d7f5d3SJohn Marino #elif BYTE_ORDER == BIG_ENDIAN 5086d7f5d3SJohn Marino # define xlate16(x) bswap_16(x) 5186d7f5d3SJohn Marino # define xlate32(x) bswap_32(x) 5286d7f5d3SJohn Marino # define xlate64(x) bswap_64(x) 5386d7f5d3SJohn Marino # define xlate16_be(x) (x) 5486d7f5d3SJohn Marino # define xlate32_be(x) (x) 5586d7f5d3SJohn Marino # define xlate64_be(x) (x) 5686d7f5d3SJohn Marino #else 5786d7f5d3SJohn Marino # include <asm/byteorder.h> 5886d7f5d3SJohn Marino # define xlate16(x) __cpu_to_le16((x)) 5986d7f5d3SJohn Marino # define xlate32(x) __cpu_to_le32((x)) 6086d7f5d3SJohn Marino # define xlate64(x) __cpu_to_le64((x)) 6186d7f5d3SJohn Marino # define xlate16_be(x) __cpu_to_be16((x)) 6286d7f5d3SJohn Marino # define xlate32_be(x) __cpu_to_be32((x)) 6386d7f5d3SJohn Marino # define xlate64_be(x) __cpu_to_be64((x)) 6486d7f5d3SJohn Marino #endif 6586d7f5d3SJohn Marino 6686d7f5d3SJohn Marino #endif 67