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