18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * linux/fs/ufs/swab.h 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 1997, 1998 Francois-Rene Rideau <fare@tunes.org> 68c2ecf20Sopenharmony_ci * Copyright (C) 1998 Jakub Jelinek <jj@ultra.linux.cz> 78c2ecf20Sopenharmony_ci * Copyright (C) 2001 Christoph Hellwig <hch@infradead.org> 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#ifndef _UFS_SWAB_H 118c2ecf20Sopenharmony_ci#define _UFS_SWAB_H 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci/* 148c2ecf20Sopenharmony_ci * Notes: 158c2ecf20Sopenharmony_ci * HERE WE ASSUME EITHER BIG OR LITTLE ENDIAN UFSes 168c2ecf20Sopenharmony_ci * in case there are ufs implementations that have strange bytesexes, 178c2ecf20Sopenharmony_ci * you'll need to modify code here as well as in ufs_super.c and ufs_fs.h 188c2ecf20Sopenharmony_ci * to support them. 198c2ecf20Sopenharmony_ci */ 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_cienum { 228c2ecf20Sopenharmony_ci BYTESEX_LE, 238c2ecf20Sopenharmony_ci BYTESEX_BE 248c2ecf20Sopenharmony_ci}; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistatic inline u64 278c2ecf20Sopenharmony_cifs64_to_cpu(struct super_block *sbp, __fs64 n) 288c2ecf20Sopenharmony_ci{ 298c2ecf20Sopenharmony_ci if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE) 308c2ecf20Sopenharmony_ci return le64_to_cpu((__force __le64)n); 318c2ecf20Sopenharmony_ci else 328c2ecf20Sopenharmony_ci return be64_to_cpu((__force __be64)n); 338c2ecf20Sopenharmony_ci} 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_cistatic inline __fs64 368c2ecf20Sopenharmony_cicpu_to_fs64(struct super_block *sbp, u64 n) 378c2ecf20Sopenharmony_ci{ 388c2ecf20Sopenharmony_ci if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE) 398c2ecf20Sopenharmony_ci return (__force __fs64)cpu_to_le64(n); 408c2ecf20Sopenharmony_ci else 418c2ecf20Sopenharmony_ci return (__force __fs64)cpu_to_be64(n); 428c2ecf20Sopenharmony_ci} 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_cistatic inline u32 458c2ecf20Sopenharmony_cifs32_to_cpu(struct super_block *sbp, __fs32 n) 468c2ecf20Sopenharmony_ci{ 478c2ecf20Sopenharmony_ci if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE) 488c2ecf20Sopenharmony_ci return le32_to_cpu((__force __le32)n); 498c2ecf20Sopenharmony_ci else 508c2ecf20Sopenharmony_ci return be32_to_cpu((__force __be32)n); 518c2ecf20Sopenharmony_ci} 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_cistatic inline __fs32 548c2ecf20Sopenharmony_cicpu_to_fs32(struct super_block *sbp, u32 n) 558c2ecf20Sopenharmony_ci{ 568c2ecf20Sopenharmony_ci if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE) 578c2ecf20Sopenharmony_ci return (__force __fs32)cpu_to_le32(n); 588c2ecf20Sopenharmony_ci else 598c2ecf20Sopenharmony_ci return (__force __fs32)cpu_to_be32(n); 608c2ecf20Sopenharmony_ci} 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_cistatic inline void 638c2ecf20Sopenharmony_cifs32_add(struct super_block *sbp, __fs32 *n, int d) 648c2ecf20Sopenharmony_ci{ 658c2ecf20Sopenharmony_ci if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE) 668c2ecf20Sopenharmony_ci le32_add_cpu((__le32 *)n, d); 678c2ecf20Sopenharmony_ci else 688c2ecf20Sopenharmony_ci be32_add_cpu((__be32 *)n, d); 698c2ecf20Sopenharmony_ci} 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_cistatic inline void 728c2ecf20Sopenharmony_cifs32_sub(struct super_block *sbp, __fs32 *n, int d) 738c2ecf20Sopenharmony_ci{ 748c2ecf20Sopenharmony_ci if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE) 758c2ecf20Sopenharmony_ci le32_add_cpu((__le32 *)n, -d); 768c2ecf20Sopenharmony_ci else 778c2ecf20Sopenharmony_ci be32_add_cpu((__be32 *)n, -d); 788c2ecf20Sopenharmony_ci} 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_cistatic inline u16 818c2ecf20Sopenharmony_cifs16_to_cpu(struct super_block *sbp, __fs16 n) 828c2ecf20Sopenharmony_ci{ 838c2ecf20Sopenharmony_ci if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE) 848c2ecf20Sopenharmony_ci return le16_to_cpu((__force __le16)n); 858c2ecf20Sopenharmony_ci else 868c2ecf20Sopenharmony_ci return be16_to_cpu((__force __be16)n); 878c2ecf20Sopenharmony_ci} 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_cistatic inline __fs16 908c2ecf20Sopenharmony_cicpu_to_fs16(struct super_block *sbp, u16 n) 918c2ecf20Sopenharmony_ci{ 928c2ecf20Sopenharmony_ci if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE) 938c2ecf20Sopenharmony_ci return (__force __fs16)cpu_to_le16(n); 948c2ecf20Sopenharmony_ci else 958c2ecf20Sopenharmony_ci return (__force __fs16)cpu_to_be16(n); 968c2ecf20Sopenharmony_ci} 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_cistatic inline void 998c2ecf20Sopenharmony_cifs16_add(struct super_block *sbp, __fs16 *n, int d) 1008c2ecf20Sopenharmony_ci{ 1018c2ecf20Sopenharmony_ci if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE) 1028c2ecf20Sopenharmony_ci le16_add_cpu((__le16 *)n, d); 1038c2ecf20Sopenharmony_ci else 1048c2ecf20Sopenharmony_ci be16_add_cpu((__be16 *)n, d); 1058c2ecf20Sopenharmony_ci} 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_cistatic inline void 1088c2ecf20Sopenharmony_cifs16_sub(struct super_block *sbp, __fs16 *n, int d) 1098c2ecf20Sopenharmony_ci{ 1108c2ecf20Sopenharmony_ci if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE) 1118c2ecf20Sopenharmony_ci le16_add_cpu((__le16 *)n, -d); 1128c2ecf20Sopenharmony_ci else 1138c2ecf20Sopenharmony_ci be16_add_cpu((__be16 *)n, -d); 1148c2ecf20Sopenharmony_ci} 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci#endif /* _UFS_SWAB_H */ 117