xref: /openbmc/linux/fs/ufs/swab.h (revision b2441318)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  *  linux/fs/ufs/swab.h
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  * Copyright (C) 1997, 1998 Francois-Rene Rideau <fare@tunes.org>
61da177e4SLinus Torvalds  * Copyright (C) 1998 Jakub Jelinek <jj@ultra.linux.cz>
71da177e4SLinus Torvalds  * Copyright (C) 2001 Christoph Hellwig <hch@infradead.org>
81da177e4SLinus Torvalds  */
91da177e4SLinus Torvalds 
101da177e4SLinus Torvalds #ifndef _UFS_SWAB_H
111da177e4SLinus Torvalds #define _UFS_SWAB_H
121da177e4SLinus Torvalds 
131da177e4SLinus Torvalds /*
141da177e4SLinus Torvalds  * Notes:
151da177e4SLinus Torvalds  *    HERE WE ASSUME EITHER BIG OR LITTLE ENDIAN UFSes
161da177e4SLinus Torvalds  *    in case there are ufs implementations that have strange bytesexes,
171da177e4SLinus Torvalds  *    you'll need to modify code here as well as in ufs_super.c and ufs_fs.h
181da177e4SLinus Torvalds  *    to support them.
191da177e4SLinus Torvalds  */
201da177e4SLinus Torvalds 
211da177e4SLinus Torvalds enum {
221da177e4SLinus Torvalds 	BYTESEX_LE,
231da177e4SLinus Torvalds 	BYTESEX_BE
241da177e4SLinus Torvalds };
251da177e4SLinus Torvalds 
261da177e4SLinus Torvalds static inline u64
fs64_to_cpu(struct super_block * sbp,__fs64 n)271da177e4SLinus Torvalds fs64_to_cpu(struct super_block *sbp, __fs64 n)
281da177e4SLinus Torvalds {
291da177e4SLinus Torvalds 	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
301da177e4SLinus Torvalds 		return le64_to_cpu((__force __le64)n);
311da177e4SLinus Torvalds 	else
321da177e4SLinus Torvalds 		return be64_to_cpu((__force __be64)n);
331da177e4SLinus Torvalds }
341da177e4SLinus Torvalds 
351da177e4SLinus Torvalds static inline __fs64
cpu_to_fs64(struct super_block * sbp,u64 n)361da177e4SLinus Torvalds cpu_to_fs64(struct super_block *sbp, u64 n)
371da177e4SLinus Torvalds {
381da177e4SLinus Torvalds 	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
391da177e4SLinus Torvalds 		return (__force __fs64)cpu_to_le64(n);
401da177e4SLinus Torvalds 	else
411da177e4SLinus Torvalds 		return (__force __fs64)cpu_to_be64(n);
421da177e4SLinus Torvalds }
431da177e4SLinus Torvalds 
4436a53ddfSHarvey Harrison static inline u32
fs32_to_cpu(struct super_block * sbp,__fs32 n)451da177e4SLinus Torvalds fs32_to_cpu(struct super_block *sbp, __fs32 n)
461da177e4SLinus Torvalds {
471da177e4SLinus Torvalds 	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
481da177e4SLinus Torvalds 		return le32_to_cpu((__force __le32)n);
491da177e4SLinus Torvalds 	else
501da177e4SLinus Torvalds 		return be32_to_cpu((__force __be32)n);
511da177e4SLinus Torvalds }
521da177e4SLinus Torvalds 
531da177e4SLinus Torvalds static inline __fs32
cpu_to_fs32(struct super_block * sbp,u32 n)541da177e4SLinus Torvalds cpu_to_fs32(struct super_block *sbp, u32 n)
551da177e4SLinus Torvalds {
561da177e4SLinus Torvalds 	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
571da177e4SLinus Torvalds 		return (__force __fs32)cpu_to_le32(n);
581da177e4SLinus Torvalds 	else
591da177e4SLinus Torvalds 		return (__force __fs32)cpu_to_be32(n);
601da177e4SLinus Torvalds }
611da177e4SLinus Torvalds 
621da177e4SLinus Torvalds static inline void
fs32_add(struct super_block * sbp,__fs32 * n,int d)631da177e4SLinus Torvalds fs32_add(struct super_block *sbp, __fs32 *n, int d)
641da177e4SLinus Torvalds {
651da177e4SLinus Torvalds 	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
663c5afae2SMarcin Slusarz 		le32_add_cpu((__le32 *)n, d);
671da177e4SLinus Torvalds 	else
683c5afae2SMarcin Slusarz 		be32_add_cpu((__be32 *)n, d);
691da177e4SLinus Torvalds }
701da177e4SLinus Torvalds 
711da177e4SLinus Torvalds static inline void
fs32_sub(struct super_block * sbp,__fs32 * n,int d)721da177e4SLinus Torvalds fs32_sub(struct super_block *sbp, __fs32 *n, int d)
731da177e4SLinus Torvalds {
741da177e4SLinus Torvalds 	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
753c5afae2SMarcin Slusarz 		le32_add_cpu((__le32 *)n, -d);
761da177e4SLinus Torvalds 	else
773c5afae2SMarcin Slusarz 		be32_add_cpu((__be32 *)n, -d);
781da177e4SLinus Torvalds }
791da177e4SLinus Torvalds 
801da177e4SLinus Torvalds static inline u16
fs16_to_cpu(struct super_block * sbp,__fs16 n)811da177e4SLinus Torvalds fs16_to_cpu(struct super_block *sbp, __fs16 n)
821da177e4SLinus Torvalds {
831da177e4SLinus Torvalds 	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
841da177e4SLinus Torvalds 		return le16_to_cpu((__force __le16)n);
851da177e4SLinus Torvalds 	else
861da177e4SLinus Torvalds 		return be16_to_cpu((__force __be16)n);
871da177e4SLinus Torvalds }
881da177e4SLinus Torvalds 
891da177e4SLinus Torvalds static inline __fs16
cpu_to_fs16(struct super_block * sbp,u16 n)901da177e4SLinus Torvalds cpu_to_fs16(struct super_block *sbp, u16 n)
911da177e4SLinus Torvalds {
921da177e4SLinus Torvalds 	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
931da177e4SLinus Torvalds 		return (__force __fs16)cpu_to_le16(n);
941da177e4SLinus Torvalds 	else
951da177e4SLinus Torvalds 		return (__force __fs16)cpu_to_be16(n);
961da177e4SLinus Torvalds }
971da177e4SLinus Torvalds 
981da177e4SLinus Torvalds static inline void
fs16_add(struct super_block * sbp,__fs16 * n,int d)991da177e4SLinus Torvalds fs16_add(struct super_block *sbp, __fs16 *n, int d)
1001da177e4SLinus Torvalds {
1011da177e4SLinus Torvalds 	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
1023c5afae2SMarcin Slusarz 		le16_add_cpu((__le16 *)n, d);
1031da177e4SLinus Torvalds 	else
1043c5afae2SMarcin Slusarz 		be16_add_cpu((__be16 *)n, d);
1051da177e4SLinus Torvalds }
1061da177e4SLinus Torvalds 
1071da177e4SLinus Torvalds static inline void
fs16_sub(struct super_block * sbp,__fs16 * n,int d)1081da177e4SLinus Torvalds fs16_sub(struct super_block *sbp, __fs16 *n, int d)
1091da177e4SLinus Torvalds {
1101da177e4SLinus Torvalds 	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
1113c5afae2SMarcin Slusarz 		le16_add_cpu((__le16 *)n, -d);
1121da177e4SLinus Torvalds 	else
1133c5afae2SMarcin Slusarz 		be16_add_cpu((__be16 *)n, -d);
1141da177e4SLinus Torvalds }
1151da177e4SLinus Torvalds 
1161da177e4SLinus Torvalds #endif /* _UFS_SWAB_H */
117