xref: /openbmc/linux/fs/befs/endian.h (revision 1da177e4)
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 #include "befs.h"
141da177e4SLinus Torvalds 
151da177e4SLinus Torvalds static inline u64
161da177e4SLinus Torvalds fs64_to_cpu(const struct super_block *sb, u64 n)
171da177e4SLinus Torvalds {
181da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
191da177e4SLinus Torvalds 		return le64_to_cpu(n);
201da177e4SLinus Torvalds 	else
211da177e4SLinus Torvalds 		return be64_to_cpu(n);
221da177e4SLinus Torvalds }
231da177e4SLinus Torvalds 
241da177e4SLinus Torvalds static inline u64
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)
281da177e4SLinus Torvalds 		return cpu_to_le64(n);
291da177e4SLinus Torvalds 	else
301da177e4SLinus Torvalds 		return cpu_to_be64(n);
311da177e4SLinus Torvalds }
321da177e4SLinus Torvalds 
331da177e4SLinus Torvalds static inline u32
341da177e4SLinus Torvalds fs32_to_cpu(const struct super_block *sb, u32 n)
351da177e4SLinus Torvalds {
361da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
371da177e4SLinus Torvalds 		return le32_to_cpu(n);
381da177e4SLinus Torvalds 	else
391da177e4SLinus Torvalds 		return be32_to_cpu(n);
401da177e4SLinus Torvalds }
411da177e4SLinus Torvalds 
421da177e4SLinus Torvalds static inline u32
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)
461da177e4SLinus Torvalds 		return cpu_to_le32(n);
471da177e4SLinus Torvalds 	else
481da177e4SLinus Torvalds 		return cpu_to_be32(n);
491da177e4SLinus Torvalds }
501da177e4SLinus Torvalds 
511da177e4SLinus Torvalds static inline u16
521da177e4SLinus Torvalds fs16_to_cpu(const struct super_block *sb, u16 n)
531da177e4SLinus Torvalds {
541da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
551da177e4SLinus Torvalds 		return le16_to_cpu(n);
561da177e4SLinus Torvalds 	else
571da177e4SLinus Torvalds 		return be16_to_cpu(n);
581da177e4SLinus Torvalds }
591da177e4SLinus Torvalds 
601da177e4SLinus Torvalds static inline u16
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)
641da177e4SLinus Torvalds 		return cpu_to_le16(n);
651da177e4SLinus Torvalds 	else
661da177e4SLinus Torvalds 		return cpu_to_be16(n);
671da177e4SLinus Torvalds }
681da177e4SLinus Torvalds 
691da177e4SLinus Torvalds /* Composite types below here */
701da177e4SLinus Torvalds 
711da177e4SLinus Torvalds static inline befs_block_run
721da177e4SLinus Torvalds fsrun_to_cpu(const struct super_block *sb, befs_block_run n)
731da177e4SLinus Torvalds {
741da177e4SLinus Torvalds 	befs_block_run run;
751da177e4SLinus Torvalds 
761da177e4SLinus Torvalds 	if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) {
771da177e4SLinus Torvalds 		run.allocation_group = le32_to_cpu(n.allocation_group);
781da177e4SLinus Torvalds 		run.start = le16_to_cpu(n.start);
791da177e4SLinus Torvalds 		run.len = le16_to_cpu(n.len);
801da177e4SLinus Torvalds 	} else {
811da177e4SLinus Torvalds 		run.allocation_group = be32_to_cpu(n.allocation_group);
821da177e4SLinus Torvalds 		run.start = be16_to_cpu(n.start);
831da177e4SLinus Torvalds 		run.len = be16_to_cpu(n.len);
841da177e4SLinus Torvalds 	}
851da177e4SLinus Torvalds 	return run;
861da177e4SLinus Torvalds }
871da177e4SLinus Torvalds 
881da177e4SLinus Torvalds static inline befs_block_run
891da177e4SLinus Torvalds cpu_to_fsrun(const struct super_block *sb, befs_block_run n)
901da177e4SLinus Torvalds {
911da177e4SLinus Torvalds 	befs_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
1061da177e4SLinus Torvalds fsds_to_cpu(const struct super_block *sb, befs_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)
1121da177e4SLinus Torvalds 		data.direct[i] = fsrun_to_cpu(sb, n.direct[i]);
1131da177e4SLinus Torvalds 
1141da177e4SLinus Torvalds 	data.max_direct_range = fs64_to_cpu(sb, n.max_direct_range);
1151da177e4SLinus Torvalds 	data.indirect = fsrun_to_cpu(sb, n.indirect);
1161da177e4SLinus Torvalds 	data.max_indirect_range = fs64_to_cpu(sb, n.max_indirect_range);
1171da177e4SLinus Torvalds 	data.double_indirect = fsrun_to_cpu(sb, n.double_indirect);
1181da177e4SLinus Torvalds 	data.max_double_indirect_range = fs64_to_cpu(sb,
1191da177e4SLinus Torvalds 						     n.
1201da177e4SLinus Torvalds 						     max_double_indirect_range);
1211da177e4SLinus Torvalds 	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