1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2007 - 2017 Realtek Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as 7*4882a593Smuzhiyun * published by the Free Software Foundation. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT 10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*4882a593Smuzhiyun * more details. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun *****************************************************************************/ 15*4882a593Smuzhiyun #ifndef _LINUX_BYTEORDER_SWAB_H 16*4882a593Smuzhiyun #define _LINUX_BYTEORDER_SWAB_H 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #if !defined(CONFIG_PLATFORM_MSTAR) 19*4882a593Smuzhiyun #ifndef __u16 20*4882a593Smuzhiyun typedef unsigned short __u16; 21*4882a593Smuzhiyun #endif 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #ifndef __u32 24*4882a593Smuzhiyun typedef unsigned int __u32; 25*4882a593Smuzhiyun #endif 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #ifndef __u8 28*4882a593Smuzhiyun typedef unsigned char __u8; 29*4882a593Smuzhiyun #endif 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #ifndef __u64 32*4882a593Smuzhiyun typedef unsigned long long __u64; 33*4882a593Smuzhiyun #endif 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun ___swab16(__u16 x)36*4882a593Smuzhiyun__inline static __u16 ___swab16(__u16 x) 37*4882a593Smuzhiyun { 38*4882a593Smuzhiyun __u16 __x = x; 39*4882a593Smuzhiyun return 40*4882a593Smuzhiyun (__u16)( 41*4882a593Smuzhiyun (((__u16)(__x)&(__u16)0x00ffU) << 8) | 42*4882a593Smuzhiyun (((__u16)(__x)&(__u16)0xff00U) >> 8)); 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun } 45*4882a593Smuzhiyun ___swab32(__u32 x)46*4882a593Smuzhiyun__inline static __u32 ___swab32(__u32 x) 47*4882a593Smuzhiyun { 48*4882a593Smuzhiyun __u32 __x = (x); 49*4882a593Smuzhiyun return (__u32)( 50*4882a593Smuzhiyun (((__u32)(__x)&(__u32)0x000000ffUL) << 24) | 51*4882a593Smuzhiyun (((__u32)(__x)&(__u32)0x0000ff00UL) << 8) | 52*4882a593Smuzhiyun (((__u32)(__x)&(__u32)0x00ff0000UL) >> 8) | 53*4882a593Smuzhiyun (((__u32)(__x)&(__u32)0xff000000UL) >> 24)); 54*4882a593Smuzhiyun } 55*4882a593Smuzhiyun ___swab64(__u64 x)56*4882a593Smuzhiyun__inline static __u64 ___swab64(__u64 x) 57*4882a593Smuzhiyun { 58*4882a593Smuzhiyun __u64 __x = (x); 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun return 61*4882a593Smuzhiyun (__u64)(\ 62*4882a593Smuzhiyun (__u64)(((__u64)(__x)&(__u64)0x00000000000000ffULL) << 56) | \ 63*4882a593Smuzhiyun (__u64)(((__u64)(__x)&(__u64)0x000000000000ff00ULL) << 40) | \ 64*4882a593Smuzhiyun (__u64)(((__u64)(__x)&(__u64)0x0000000000ff0000ULL) << 24) | \ 65*4882a593Smuzhiyun (__u64)(((__u64)(__x)&(__u64)0x00000000ff000000ULL) << 8) | \ 66*4882a593Smuzhiyun (__u64)(((__u64)(__x)&(__u64)0x000000ff00000000ULL) >> 8) | \ 67*4882a593Smuzhiyun (__u64)(((__u64)(__x)&(__u64)0x0000ff0000000000ULL) >> 24) | \ 68*4882a593Smuzhiyun (__u64)(((__u64)(__x)&(__u64)0x00ff000000000000ULL) >> 40) | \ 69*4882a593Smuzhiyun (__u64)(((__u64)(__x)&(__u64)0xff00000000000000ULL) >> 56)); 70*4882a593Smuzhiyun \ 71*4882a593Smuzhiyun } 72*4882a593Smuzhiyun #endif /* CONFIG_PLATFORM_MSTAR */ 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun #ifndef __arch__swab16 __arch__swab16(__u16 x)75*4882a593Smuzhiyun__inline static __u16 __arch__swab16(__u16 x) 76*4882a593Smuzhiyun { 77*4882a593Smuzhiyun return ___swab16(x); 78*4882a593Smuzhiyun } 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #endif 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #ifndef __arch__swab32 __arch__swab32(__u32 x)83*4882a593Smuzhiyun__inline static __u32 __arch__swab32(__u32 x) 84*4882a593Smuzhiyun { 85*4882a593Smuzhiyun __u32 __tmp = (x) ; 86*4882a593Smuzhiyun return ___swab32(__tmp); 87*4882a593Smuzhiyun } 88*4882a593Smuzhiyun #endif 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #ifndef __arch__swab64 91*4882a593Smuzhiyun __arch__swab64(__u64 x)92*4882a593Smuzhiyun__inline static __u64 __arch__swab64(__u64 x) 93*4882a593Smuzhiyun { 94*4882a593Smuzhiyun __u64 __tmp = (x) ; 95*4882a593Smuzhiyun return ___swab64(__tmp); 96*4882a593Smuzhiyun } 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun #endif 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #ifndef __swab16 102*4882a593Smuzhiyun #define __swab16(x) __fswab16(x) 103*4882a593Smuzhiyun #define __swab32(x) __fswab32(x) 104*4882a593Smuzhiyun #define __swab64(x) __fswab64(x) 105*4882a593Smuzhiyun #endif /* __swab16 */ 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun #ifdef PLATFORM_FREEBSD __fswab16(__u16 x)108*4882a593Smuzhiyun __inline static __u16 __fswab16(__u16 x) 109*4882a593Smuzhiyun #else 110*4882a593Smuzhiyun __inline static const __u16 __fswab16(__u16 x) 111*4882a593Smuzhiyun #endif /* PLATFORM_FREEBSD */ 112*4882a593Smuzhiyun { 113*4882a593Smuzhiyun return __arch__swab16(x); 114*4882a593Smuzhiyun } 115*4882a593Smuzhiyun #ifdef PLATFORM_FREEBSD __fswab32(__u32 x)116*4882a593Smuzhiyun __inline static __u32 __fswab32(__u32 x) 117*4882a593Smuzhiyun #else 118*4882a593Smuzhiyun __inline static const __u32 __fswab32(__u32 x) 119*4882a593Smuzhiyun #endif /* PLATFORM_FREEBSD */ 120*4882a593Smuzhiyun { 121*4882a593Smuzhiyun return __arch__swab32(x); 122*4882a593Smuzhiyun } 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun #if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS) 125*4882a593Smuzhiyun #define swab16 __swab16 126*4882a593Smuzhiyun #define swab32 __swab32 127*4882a593Smuzhiyun #define swab64 __swab64 128*4882a593Smuzhiyun #define swab16p __swab16p 129*4882a593Smuzhiyun #define swab32p __swab32p 130*4882a593Smuzhiyun #define swab64p __swab64p 131*4882a593Smuzhiyun #define swab16s __swab16s 132*4882a593Smuzhiyun #define swab32s __swab32s 133*4882a593Smuzhiyun #define swab64s __swab64s 134*4882a593Smuzhiyun #endif 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun #endif /* _LINUX_BYTEORDER_SWAB_H */ 137