2005-04-17 02:20:36 +04:00
/*
* linux / fs / befs / endian . h
*
* Copyright ( C ) 2001 Will Dyson < will_dyson @ pobox . com >
*
* Partially based on similar funtions in the sysv driver .
*/
# ifndef LINUX_BEFS_ENDIAN
# define LINUX_BEFS_ENDIAN
# include <linux/byteorder/generic.h>
static inline u64
2005-12-24 09:32:03 +03:00
fs64_to_cpu ( const struct super_block * sb , fs64 n )
2005-04-17 02:20:36 +04:00
{
if ( BEFS_SB ( sb ) - > byte_order = = BEFS_BYTESEX_LE )
2005-12-24 09:32:03 +03:00
return le64_to_cpu ( ( __force __le64 ) n ) ;
2005-04-17 02:20:36 +04:00
else
2005-12-24 09:32:03 +03:00
return be64_to_cpu ( ( __force __be64 ) n ) ;
2005-04-17 02:20:36 +04:00
}
2005-12-24 09:32:03 +03:00
static inline fs64
2005-04-17 02:20:36 +04:00
cpu_to_fs64 ( const struct super_block * sb , u64 n )
{
if ( BEFS_SB ( sb ) - > byte_order = = BEFS_BYTESEX_LE )
2005-12-24 09:32:03 +03:00
return ( __force fs64 ) cpu_to_le64 ( n ) ;
2005-04-17 02:20:36 +04:00
else
2005-12-24 09:32:03 +03:00
return ( __force fs64 ) cpu_to_be64 ( n ) ;
2005-04-17 02:20:36 +04:00
}
static inline u32
2005-12-24 09:32:03 +03:00
fs32_to_cpu ( const struct super_block * sb , fs32 n )
2005-04-17 02:20:36 +04:00
{
if ( BEFS_SB ( sb ) - > byte_order = = BEFS_BYTESEX_LE )
2005-12-24 09:32:03 +03:00
return le32_to_cpu ( ( __force __le32 ) n ) ;
2005-04-17 02:20:36 +04:00
else
2005-12-24 09:32:03 +03:00
return be32_to_cpu ( ( __force __be32 ) n ) ;
2005-04-17 02:20:36 +04:00
}
2005-12-24 09:32:03 +03:00
static inline fs32
2005-04-17 02:20:36 +04:00
cpu_to_fs32 ( const struct super_block * sb , u32 n )
{
if ( BEFS_SB ( sb ) - > byte_order = = BEFS_BYTESEX_LE )
2005-12-24 09:32:03 +03:00
return ( __force fs32 ) cpu_to_le32 ( n ) ;
2005-04-17 02:20:36 +04:00
else
2005-12-24 09:32:03 +03:00
return ( __force fs32 ) cpu_to_be32 ( n ) ;
2005-04-17 02:20:36 +04:00
}
static inline u16
2005-12-24 09:32:03 +03:00
fs16_to_cpu ( const struct super_block * sb , fs16 n )
2005-04-17 02:20:36 +04:00
{
if ( BEFS_SB ( sb ) - > byte_order = = BEFS_BYTESEX_LE )
2005-12-24 09:32:03 +03:00
return le16_to_cpu ( ( __force __le16 ) n ) ;
2005-04-17 02:20:36 +04:00
else
2005-12-24 09:32:03 +03:00
return be16_to_cpu ( ( __force __be16 ) n ) ;
2005-04-17 02:20:36 +04:00
}
2005-12-24 09:32:03 +03:00
static inline fs16
2005-04-17 02:20:36 +04:00
cpu_to_fs16 ( const struct super_block * sb , u16 n )
{
if ( BEFS_SB ( sb ) - > byte_order = = BEFS_BYTESEX_LE )
2005-12-24 09:32:03 +03:00
return ( __force fs16 ) cpu_to_le16 ( n ) ;
2005-04-17 02:20:36 +04:00
else
2005-12-24 09:32:03 +03:00
return ( __force fs16 ) cpu_to_be16 ( n ) ;
2005-04-17 02:20:36 +04:00
}
/* Composite types below here */
static inline befs_block_run
fsrun_to_cpu ( const struct super_block * sb , befs_block_run n )
{
befs_block_run run ;
if ( BEFS_SB ( sb ) - > byte_order = = BEFS_BYTESEX_LE ) {
run . allocation_group = le32_to_cpu ( n . allocation_group ) ;
run . start = le16_to_cpu ( n . start ) ;
run . len = le16_to_cpu ( n . len ) ;
} else {
run . allocation_group = be32_to_cpu ( n . allocation_group ) ;
run . start = be16_to_cpu ( n . start ) ;
run . len = be16_to_cpu ( n . len ) ;
}
return run ;
}
static inline befs_block_run
cpu_to_fsrun ( const struct super_block * sb , befs_block_run n )
{
befs_block_run run ;
if ( BEFS_SB ( sb ) - > byte_order = = BEFS_BYTESEX_LE ) {
run . allocation_group = cpu_to_le32 ( n . allocation_group ) ;
run . start = cpu_to_le16 ( n . start ) ;
run . len = cpu_to_le16 ( n . len ) ;
} else {
run . allocation_group = cpu_to_be32 ( n . allocation_group ) ;
run . start = cpu_to_be16 ( n . start ) ;
run . len = cpu_to_be16 ( n . len ) ;
}
return run ;
}
static inline befs_data_stream
fsds_to_cpu ( const struct super_block * sb , befs_data_stream n )
{
befs_data_stream data ;
int i ;
for ( i = 0 ; i < BEFS_NUM_DIRECT_BLOCKS ; + + i )
data . direct [ i ] = fsrun_to_cpu ( sb , n . direct [ i ] ) ;
data . max_direct_range = fs64_to_cpu ( sb , n . max_direct_range ) ;
data . indirect = fsrun_to_cpu ( sb , n . indirect ) ;
data . max_indirect_range = fs64_to_cpu ( sb , n . max_indirect_range ) ;
data . double_indirect = fsrun_to_cpu ( sb , n . double_indirect ) ;
data . max_double_indirect_range = fs64_to_cpu ( sb ,
n .
max_double_indirect_range ) ;
data . size = fs64_to_cpu ( sb , n . size ) ;
return data ;
}
# endif //LINUX_BEFS_ENDIAN