| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | /** | 
 |  * Author: Coly Li | 
 |  * | 
 |  * Cherry-picked from include/uapi/linux/swab.h of | 
 |  * Linux kernel v5.3 source code. | 
 |  */ | 
 |  | 
 | #include <linux/types.h> | 
 | #include <asm/swab.h> | 
 |  | 
 | #ifndef __BCH_BITWISE_H | 
 | #define __BCH_BITWISE_H | 
 |  | 
 | #if __BYTE_ORDER == __LITTLE_ENDIAN | 
 | #define BCH_LITTLE_ENDIAN_LOCAL 1 | 
 | #else | 
 | #undef BCH_LITTLE_ENDIAN_LOCAL | 
 | #endif | 
 |  | 
 |  | 
 | #define __swab16(x) ((__u16)(			\ | 
 | 	(((__u16)(x) & (__u16)0x00ffU) << 8) |	\ | 
 | 	(((__u16)(x) & (__u16)0xff00U) >> 8))) | 
 |  | 
 | #define __swab32(x) ((__u32)(				\ | 
 | 	(((__u32)(x) & (__u32)0x000000ffUL) << 24) |	\ | 
 | 	(((__u32)(x) & (__u32)0x0000ff00UL) <<  8) |	\ | 
 | 	(((__u32)(x) & (__u32)0x00ff0000UL) >>  8) |	\ | 
 | 	(((__u32)(x) & (__u32)0xff000000UL) >> 24))) | 
 |  | 
 | #define __swab64(x) ((__u64)(					\ | 
 | 	(((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) |	\ | 
 | 	(((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) |	\ | 
 | 	(((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) |	\ | 
 | 	(((__u64)(x) & (__u64)0x00000000ff000000ULL) <<  8) |	\ | 
 | 	(((__u64)(x) & (__u64)0x000000ff00000000ULL) >>  8) |	\ | 
 | 	(((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) |	\ | 
 | 	(((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) |	\ | 
 | 	(((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56))) | 
 |  | 
 |  | 
 | #ifdef BCH_LITTLE_ENDIAN_LOCAL | 
 | /* For little endian*/ | 
 | #define cpu_to_le16(val)	((__le16)(val)) | 
 | #define cpu_to_le32(val)	((__le32)(val)) | 
 | #define cpu_to_le64(val)	((__le64)(val)) | 
 | #else | 
 | /* For big endian */ | 
 | #define cpu_to_le16(val)	((__be16)__swab16((__u16)(val))) | 
 | #define cpu_to_le32(val)	((__be32)__swab32((__u32)(val))) | 
 | #define cpu_to_le64(val)	((__be64)__swab64((__u64)(val))) | 
 | #endif | 
 |  | 
 | #endif |