xref: /openbmc/linux/fs/befs/endian.h (revision 1151895f)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * linux/fs/befs/endian.h
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * Copyright (C) 2001 Will Dyson <will_dyson@pobox.com>
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  * Partially based on similar funtions in the sysv driver.
71da177e4SLinus Torvalds  */
81da177e4SLinus Torvalds 
91da177e4SLinus Torvalds #ifndef LINUX_BEFS_ENDIAN
101da177e4SLinus Torvalds #define LINUX_BEFS_ENDIAN
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #include <linux/byteorder/generic.h>
131da177e4SLinus Torvalds 
141da177e4SLinus Torvalds static inline u64
151151895fSAl Viro fs64_to_cpu(const struct super_block *sb, fs64 n)
161da177e4SLinus Torvalds {
171da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
181151895fSAl Viro 		return le64_to_cpu((__force __le64)n);
191da177e4SLinus Torvalds 	else
201151895fSAl Viro 		return be64_to_cpu((__force __be64)n);
211da177e4SLinus Torvalds }
221da177e4SLinus Torvalds 
231151895fSAl Viro static inline fs64
241da177e4SLinus Torvalds cpu_to_fs64(const struct super_block *sb, u64 n)
251da177e4SLinus Torvalds {
261da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
271151895fSAl Viro 		return (__force fs64)cpu_to_le64(n);
281da177e4SLinus Torvalds 	else
291151895fSAl Viro 		return (__force fs64)cpu_to_be64(n);
301da177e4SLinus Torvalds }
311da177e4SLinus Torvalds 
321da177e4SLinus Torvalds static inline u32
331151895fSAl Viro fs32_to_cpu(const struct super_block *sb, fs32 n)
341da177e4SLinus Torvalds {
351da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
361151895fSAl Viro 		return le32_to_cpu((__force __le32)n);
371da177e4SLinus Torvalds 	else
381151895fSAl Viro 		return be32_to_cpu((__force __be32)n);
391da177e4SLinus Torvalds }
401da177e4SLinus Torvalds 
411151895fSAl Viro static inline fs32
421da177e4SLinus Torvalds cpu_to_fs32(const struct super_block *sb, u32 n)
431da177e4SLinus Torvalds {
441da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
451151895fSAl Viro 		return (__force fs32)cpu_to_le32(n);
461da177e4SLinus Torvalds 	else
471151895fSAl Viro 		return (__force fs32)cpu_to_be32(n);
481da177e4SLinus Torvalds }
491da177e4SLinus Torvalds 
501da177e4SLinus Torvalds static inline u16
511151895fSAl Viro fs16_to_cpu(const struct super_block *sb, fs16 n)
521da177e4SLinus Torvalds {
531da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
541151895fSAl Viro 		return le16_to_cpu((__force __le16)n);
551da177e4SLinus Torvalds 	else
561151895fSAl Viro 		return be16_to_cpu((__force __be16)n);
571da177e4SLinus Torvalds }
581da177e4SLinus Torvalds 
591151895fSAl Viro static inline fs16
601da177e4SLinus Torvalds cpu_to_fs16(const struct super_block *sb, u16 n)
611da177e4SLinus Torvalds {
621da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
631151895fSAl Viro 		return (__force fs16)cpu_to_le16(n);
641da177e4SLinus Torvalds 	else
651151895fSAl Viro 		return (__force fs16)cpu_to_be16(n);
661da177e4SLinus Torvalds }
671da177e4SLinus Torvalds 
681da177e4SLinus Torvalds /* Composite types below here */
691da177e4SLinus Torvalds 
701da177e4SLinus Torvalds static inline befs_block_run
711da177e4SLinus Torvalds fsrun_to_cpu(const struct super_block *sb, befs_block_run n)
721da177e4SLinus Torvalds {
731da177e4SLinus Torvalds 	befs_block_run run;
741da177e4SLinus Torvalds 
751da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) {
761da177e4SLinus Torvalds 		run.allocation_group = le32_to_cpu(n.allocation_group);
771da177e4SLinus Torvalds 		run.start = le16_to_cpu(n.start);
781da177e4SLinus Torvalds 		run.len = le16_to_cpu(n.len);
791da177e4SLinus Torvalds 	} else {
801da177e4SLinus Torvalds 		run.allocation_group = be32_to_cpu(n.allocation_group);
811da177e4SLinus Torvalds 		run.start = be16_to_cpu(n.start);
821da177e4SLinus Torvalds 		run.len = be16_to_cpu(n.len);
831da177e4SLinus Torvalds 	}
841da177e4SLinus Torvalds 	return run;
851da177e4SLinus Torvalds }
861da177e4SLinus Torvalds 
871da177e4SLinus Torvalds static inline befs_block_run
881da177e4SLinus Torvalds cpu_to_fsrun(const struct super_block *sb, befs_block_run n)
891da177e4SLinus Torvalds {
901da177e4SLinus Torvalds 	befs_block_run run;
911da177e4SLinus Torvalds 
921da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) {
931da177e4SLinus Torvalds 		run.allocation_group = cpu_to_le32(n.allocation_group);
941da177e4SLinus Torvalds 		run.start = cpu_to_le16(n.start);
951da177e4SLinus Torvalds 		run.len = cpu_to_le16(n.len);
961da177e4SLinus Torvalds 	} else {
971da177e4SLinus Torvalds 		run.allocation_group = cpu_to_be32(n.allocation_group);
981da177e4SLinus Torvalds 		run.start = cpu_to_be16(n.start);
991da177e4SLinus Torvalds 		run.len = cpu_to_be16(n.len);
1001da177e4SLinus Torvalds 	}
1011da177e4SLinus Torvalds 	return run;
1021da177e4SLinus Torvalds }
1031da177e4SLinus Torvalds 
1041da177e4SLinus Torvalds static inline befs_data_stream
1051da177e4SLinus Torvalds fsds_to_cpu(const struct super_block *sb, befs_data_stream n)
1061da177e4SLinus Torvalds {
1071da177e4SLinus Torvalds 	befs_data_stream data;
1081da177e4SLinus Torvalds 	int i;
1091da177e4SLinus Torvalds 
1101da177e4SLinus Torvalds 	for (i = 0; i < BEFS_NUM_DIRECT_BLOCKS; ++i)
1111da177e4SLinus Torvalds 		data.direct[i] = fsrun_to_cpu(sb, n.direct[i]);
1121da177e4SLinus Torvalds 
1131da177e4SLinus Torvalds 	data.max_direct_range = fs64_to_cpu(sb, n.max_direct_range);
1141da177e4SLinus Torvalds 	data.indirect = fsrun_to_cpu(sb, n.indirect);
1151da177e4SLinus Torvalds 	data.max_indirect_range = fs64_to_cpu(sb, n.max_indirect_range);
1161da177e4SLinus Torvalds 	data.double_indirect = fsrun_to_cpu(sb, n.double_indirect);
1171da177e4SLinus Torvalds 	data.max_double_indirect_range = fs64_to_cpu(sb,
1181da177e4SLinus Torvalds 						     n.
1191da177e4SLinus Torvalds 						     max_double_indirect_range);
1201da177e4SLinus Torvalds 	data.size = fs64_to_cpu(sb, n.size);
1211da177e4SLinus Torvalds 
1221da177e4SLinus Torvalds 	return data;
1231da177e4SLinus Torvalds }
1241da177e4SLinus Torvalds 
1251da177e4SLinus Torvalds #endif				//LINUX_BEFS_ENDIAN
126