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 129a6ab769SHarvey Harrison #include <asm/byteorder.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 71a9721f31SAl Viro fsrun_to_cpu(const struct super_block *sb, befs_disk_block_run n) 721da177e4SLinus Torvalds { 731da177e4SLinus Torvalds befs_block_run run; 741da177e4SLinus Torvalds 751da177e4SLinus Torvalds if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) { 76a9721f31SAl Viro run.allocation_group = le32_to_cpu((__force __le32)n.allocation_group); 77a9721f31SAl Viro run.start = le16_to_cpu((__force __le16)n.start); 78a9721f31SAl Viro run.len = le16_to_cpu((__force __le16)n.len); 791da177e4SLinus Torvalds } else { 80a9721f31SAl Viro run.allocation_group = be32_to_cpu((__force __be32)n.allocation_group); 81a9721f31SAl Viro run.start = be16_to_cpu((__force __be16)n.start); 82a9721f31SAl Viro run.len = be16_to_cpu((__force __be16)n.len); 831da177e4SLinus Torvalds } 841da177e4SLinus Torvalds return run; 851da177e4SLinus Torvalds } 861da177e4SLinus Torvalds 87a9721f31SAl Viro static inline befs_disk_block_run 881da177e4SLinus Torvalds cpu_to_fsrun(const struct super_block *sb, befs_block_run n) 891da177e4SLinus Torvalds { 90a9721f31SAl Viro befs_disk_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 105a9721f31SAl Viro fsds_to_cpu(const struct super_block *sb, befs_disk_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