xref: /openbmc/linux/fs/befs/endian.h (revision b2441318)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  * linux/fs/befs/endian.h
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  * Copyright (C) 2001 Will Dyson <will_dyson@pobox.com>
61da177e4SLinus Torvalds  *
71da177e4SLinus Torvalds  * Partially based on similar funtions in the sysv driver.
81da177e4SLinus Torvalds  */
91da177e4SLinus Torvalds 
101da177e4SLinus Torvalds #ifndef LINUX_BEFS_ENDIAN
111da177e4SLinus Torvalds #define LINUX_BEFS_ENDIAN
121da177e4SLinus Torvalds 
139a6ab769SHarvey Harrison #include <asm/byteorder.h>
141da177e4SLinus Torvalds 
151da177e4SLinus Torvalds static inline u64
fs64_to_cpu(const struct super_block * sb,fs64 n)161151895fSAl Viro fs64_to_cpu(const struct super_block *sb, fs64 n)
171da177e4SLinus Torvalds {
181da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
191151895fSAl Viro 		return le64_to_cpu((__force __le64)n);
201da177e4SLinus Torvalds 	else
211151895fSAl Viro 		return be64_to_cpu((__force __be64)n);
221da177e4SLinus Torvalds }
231da177e4SLinus Torvalds 
241151895fSAl Viro static inline fs64
cpu_to_fs64(const struct super_block * sb,u64 n)251da177e4SLinus Torvalds cpu_to_fs64(const struct super_block *sb, u64 n)
261da177e4SLinus Torvalds {
271da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
281151895fSAl Viro 		return (__force fs64)cpu_to_le64(n);
291da177e4SLinus Torvalds 	else
301151895fSAl Viro 		return (__force fs64)cpu_to_be64(n);
311da177e4SLinus Torvalds }
321da177e4SLinus Torvalds 
331da177e4SLinus Torvalds static inline u32
fs32_to_cpu(const struct super_block * sb,fs32 n)341151895fSAl Viro fs32_to_cpu(const struct super_block *sb, fs32 n)
351da177e4SLinus Torvalds {
361da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
371151895fSAl Viro 		return le32_to_cpu((__force __le32)n);
381da177e4SLinus Torvalds 	else
391151895fSAl Viro 		return be32_to_cpu((__force __be32)n);
401da177e4SLinus Torvalds }
411da177e4SLinus Torvalds 
421151895fSAl Viro static inline fs32
cpu_to_fs32(const struct super_block * sb,u32 n)431da177e4SLinus Torvalds cpu_to_fs32(const struct super_block *sb, u32 n)
441da177e4SLinus Torvalds {
451da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
461151895fSAl Viro 		return (__force fs32)cpu_to_le32(n);
471da177e4SLinus Torvalds 	else
481151895fSAl Viro 		return (__force fs32)cpu_to_be32(n);
491da177e4SLinus Torvalds }
501da177e4SLinus Torvalds 
511da177e4SLinus Torvalds static inline u16
fs16_to_cpu(const struct super_block * sb,fs16 n)521151895fSAl Viro fs16_to_cpu(const struct super_block *sb, fs16 n)
531da177e4SLinus Torvalds {
541da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
551151895fSAl Viro 		return le16_to_cpu((__force __le16)n);
561da177e4SLinus Torvalds 	else
571151895fSAl Viro 		return be16_to_cpu((__force __be16)n);
581da177e4SLinus Torvalds }
591da177e4SLinus Torvalds 
601151895fSAl Viro static inline fs16
cpu_to_fs16(const struct super_block * sb,u16 n)611da177e4SLinus Torvalds cpu_to_fs16(const struct super_block *sb, u16 n)
621da177e4SLinus Torvalds {
631da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
641151895fSAl Viro 		return (__force fs16)cpu_to_le16(n);
651da177e4SLinus Torvalds 	else
661151895fSAl Viro 		return (__force fs16)cpu_to_be16(n);
671da177e4SLinus Torvalds }
681da177e4SLinus Torvalds 
691da177e4SLinus Torvalds /* Composite types below here */
701da177e4SLinus Torvalds 
711da177e4SLinus Torvalds static inline befs_block_run
fsrun_to_cpu(const struct super_block * sb,befs_disk_block_run n)72a9721f31SAl Viro fsrun_to_cpu(const struct super_block *sb, befs_disk_block_run n)
731da177e4SLinus Torvalds {
741da177e4SLinus Torvalds 	befs_block_run run;
751da177e4SLinus Torvalds 
761da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) {
77a9721f31SAl Viro 		run.allocation_group = le32_to_cpu((__force __le32)n.allocation_group);
78a9721f31SAl Viro 		run.start = le16_to_cpu((__force __le16)n.start);
79a9721f31SAl Viro 		run.len = le16_to_cpu((__force __le16)n.len);
801da177e4SLinus Torvalds 	} else {
81a9721f31SAl Viro 		run.allocation_group = be32_to_cpu((__force __be32)n.allocation_group);
82a9721f31SAl Viro 		run.start = be16_to_cpu((__force __be16)n.start);
83a9721f31SAl Viro 		run.len = be16_to_cpu((__force __be16)n.len);
841da177e4SLinus Torvalds 	}
851da177e4SLinus Torvalds 	return run;
861da177e4SLinus Torvalds }
871da177e4SLinus Torvalds 
88a9721f31SAl Viro static inline befs_disk_block_run
cpu_to_fsrun(const struct super_block * sb,befs_block_run n)891da177e4SLinus Torvalds cpu_to_fsrun(const struct super_block *sb, befs_block_run n)
901da177e4SLinus Torvalds {
91a9721f31SAl Viro 	befs_disk_block_run run;
921da177e4SLinus Torvalds 
931da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) {
941da177e4SLinus Torvalds 		run.allocation_group = cpu_to_le32(n.allocation_group);
951da177e4SLinus Torvalds 		run.start = cpu_to_le16(n.start);
961da177e4SLinus Torvalds 		run.len = cpu_to_le16(n.len);
971da177e4SLinus Torvalds 	} else {
981da177e4SLinus Torvalds 		run.allocation_group = cpu_to_be32(n.allocation_group);
991da177e4SLinus Torvalds 		run.start = cpu_to_be16(n.start);
1001da177e4SLinus Torvalds 		run.len = cpu_to_be16(n.len);
1011da177e4SLinus Torvalds 	}
1021da177e4SLinus Torvalds 	return run;
1031da177e4SLinus Torvalds }
1041da177e4SLinus Torvalds 
1051da177e4SLinus Torvalds static inline befs_data_stream
fsds_to_cpu(const struct super_block * sb,const befs_disk_data_stream * n)106e0e3d32bSJesper Juhl fsds_to_cpu(const struct super_block *sb, const befs_disk_data_stream *n)
1071da177e4SLinus Torvalds {
1081da177e4SLinus Torvalds 	befs_data_stream data;
1091da177e4SLinus Torvalds 	int i;
1101da177e4SLinus Torvalds 
1111da177e4SLinus Torvalds 	for (i = 0; i < BEFS_NUM_DIRECT_BLOCKS; ++i)
112e0e3d32bSJesper Juhl 		data.direct[i] = fsrun_to_cpu(sb, n->direct[i]);
1131da177e4SLinus Torvalds 
114e0e3d32bSJesper Juhl 	data.max_direct_range = fs64_to_cpu(sb, n->max_direct_range);
115e0e3d32bSJesper Juhl 	data.indirect = fsrun_to_cpu(sb, n->indirect);
116e0e3d32bSJesper Juhl 	data.max_indirect_range = fs64_to_cpu(sb, n->max_indirect_range);
117e0e3d32bSJesper Juhl 	data.double_indirect = fsrun_to_cpu(sb, n->double_indirect);
1181da177e4SLinus Torvalds 	data.max_double_indirect_range = fs64_to_cpu(sb,
119e0e3d32bSJesper Juhl 						     n->
1201da177e4SLinus Torvalds 						     max_double_indirect_range);
121e0e3d32bSJesper Juhl 	data.size = fs64_to_cpu(sb, n->size);
1221da177e4SLinus Torvalds 
1231da177e4SLinus Torvalds 	return data;
1241da177e4SLinus Torvalds }
1251da177e4SLinus Torvalds 
1261da177e4SLinus Torvalds #endif				//LINUX_BEFS_ENDIAN
127