X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=lwext4%2Fext4_super.h;h=2172698e5981a1ab59465e72554f3b5f86275afe;hb=809b27e9dcf7f7120b98b03b13ceb624302e8183;hp=45eaa14549c69ad2c545f980a1e66b3b31b5f1a6;hpb=1ba0937309fac055b6c0eb5bbcdbb6f7d0947e0f;p=lwext4.git diff --git a/lwext4/ext4_super.h b/lwext4/ext4_super.h index 45eaa14..2172698 100644 --- a/lwext4/ext4_super.h +++ b/lwext4/ext4_super.h @@ -42,16 +42,29 @@ #ifndef EXT4_SUPER_H_ #define EXT4_SUPER_H_ -#include -#include +#ifdef __cplusplus +extern "C" { +#endif + +#include "ext4_config.h" +#include "ext4_types.h" /**@brief Blocks count get stored in superblock. * @param s superblock descriptor * @return count of blocks*/ static inline uint64_t ext4_sb_get_blocks_cnt(struct ext4_sblock *s) { - return ((uint64_t)to_le32(s->blocks_count_hi) << 32) | - to_le32(s->blocks_count_lo); + return ((uint64_t)to_le32(s->blocks_count_hi) << 32) | + to_le32(s->blocks_count_lo); +} + +/**@brief Blocks count set in superblock. + * @param s superblock descriptor + * @return count of blocks*/ +static inline void ext4_sb_set_blocks_cnt(struct ext4_sblock *s, uint64_t cnt) +{ + s->blocks_count_lo = to_le32((cnt << 32) >> 32); + s->blocks_count_hi = to_le32(cnt >> 32); } /**@brief Free blocks count get stored in superblock. @@ -59,18 +72,18 @@ static inline uint64_t ext4_sb_get_blocks_cnt(struct ext4_sblock *s) * @return free blocks*/ static inline uint64_t ext4_sb_get_free_blocks_cnt(struct ext4_sblock *s) { - return ((uint64_t)to_le32(s->free_blocks_count_hi) << 32) | - to_le32(s->free_blocks_count_lo); + return ((uint64_t)to_le32(s->free_blocks_count_hi) << 32) | + to_le32(s->free_blocks_count_lo); } /**@brief Free blocks count set. * @param s superblock descriptor * @param cnt new value of free blocks*/ static inline void ext4_sb_set_free_blocks_cnt(struct ext4_sblock *s, - uint64_t cnt) + uint64_t cnt) { - s->free_blocks_count_lo = to_le32((cnt << 32) >> 32); - s->free_blocks_count_hi = to_le32(cnt >> 32); + s->free_blocks_count_lo = to_le32((cnt << 32) >> 32); + s->free_blocks_count_hi = to_le32(cnt >> 32); } /**@brief Block size get from superblock. @@ -78,7 +91,7 @@ static inline void ext4_sb_set_free_blocks_cnt(struct ext4_sblock *s, * @return block size in bytes*/ static inline uint32_t ext4_sb_get_block_size(struct ext4_sblock *s) { - return 1024 << to_le32(s->log_block_size); + return 1024 << to_le32(s->log_block_size); } /**@brief Block group descriptor size. @@ -86,11 +99,11 @@ static inline uint32_t ext4_sb_get_block_size(struct ext4_sblock *s) * @return block group descriptor size in bytes*/ static inline uint16_t ext4_sb_get_desc_size(struct ext4_sblock *s) { - uint16_t size = to_le16(s->desc_size); + uint16_t size = to_le16(s->desc_size); - return size < EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE - ? EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE - : size; + return size < EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE + ? EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE + : size; } /*************************Flags and features*********************************/ @@ -101,37 +114,34 @@ static inline uint16_t ext4_sb_get_desc_size(struct ext4_sblock *s) * @return true if flag is supported*/ static inline bool ext4_sb_check_flag(struct ext4_sblock *s, uint32_t v) { - return to_le32(s->flags) & v; + return to_le32(s->flags) & v; } /**@brief Support check of feature compatible. * @param s superblock descriptor * @param v feature to check * @return true if feature is supported*/ -static inline bool ext4_sb_has_feature_compatible(struct ext4_sblock *s, - uint32_t v) +static inline bool ext4_sb_feature_com(struct ext4_sblock *s, uint32_t v) { - return to_le32(s->features_compatible) & v; + return to_le32(s->features_compatible) & v; } /**@brief Support check of feature incompatible. * @param s superblock descriptor * @param v feature to check * @return true if feature is supported*/ -static inline bool ext4_sb_has_feature_incompatible(struct ext4_sblock *s, - uint32_t v) +static inline bool ext4_sb_feature_incom(struct ext4_sblock *s, uint32_t v) { - return to_le32(s->features_incompatible) & v; + return to_le32(s->features_incompatible) & v; } /**@brief Support check of read only flag. * @param s superblock descriptor * @param v flag to check * @return true if flag is supported*/ -static inline bool ext4_sb_has_feature_read_only(struct ext4_sblock *s, - uint32_t v) +static inline bool ext4_sb_feature_ro_com(struct ext4_sblock *s, uint32_t v) { - return to_le32(s->features_read_only) & v; + return to_le32(s->features_read_only) & v; } /**@brief Block group to flex group. @@ -139,9 +149,9 @@ static inline bool ext4_sb_has_feature_read_only(struct ext4_sblock *s, * @param block_group block group * @return flex group id*/ static inline uint32_t ext4_sb_bg_to_flex(struct ext4_sblock *s, - uint32_t block_group) + uint32_t block_group) { - return block_group >> to_le32(s->log_groups_per_flex); + return block_group >> to_le32(s->log_groups_per_flex); } /**@brief Flex block group size. @@ -149,7 +159,7 @@ static inline uint32_t ext4_sb_bg_to_flex(struct ext4_sblock *s, * @return flex bg size*/ static inline uint32_t ext4_sb_flex_bg_size(struct ext4_sblock *s) { - return 1 << to_le32(s->log_groups_per_flex); + return 1 << to_le32(s->log_groups_per_flex); } /**@brief Return first meta block group id. @@ -157,7 +167,7 @@ static inline uint32_t ext4_sb_flex_bg_size(struct ext4_sblock *s) * @return first meta_bg id */ static inline uint32_t ext4_sb_first_meta_bg(struct ext4_sblock *s) { - return to_le32(s->first_meta_bg); + return to_le32(s->first_meta_bg); } /**************************More complex functions****************************/ @@ -185,33 +195,40 @@ uint32_t ext4_inodes_in_group_cnt(struct ext4_sblock *s, uint32_t bgid); /**@brief Superblock write. * @param bdev block device descriptor. - * @param s superblock descruptor + * @param s superblock descriptor * @return Standard error code */ int ext4_sb_write(struct ext4_blockdev *bdev, struct ext4_sblock *s); /**@brief Superblock read. * @param bdev block device descriptor. - * @param s superblock descruptor + * @param s superblock descriptor * @return Standard error code */ int ext4_sb_read(struct ext4_blockdev *bdev, struct ext4_sblock *s); /**@brief Superblock simple validation. - * @param s superblock dsecriptor + * @param s superblock descriptor * @return true if OK*/ bool ext4_sb_check(struct ext4_sblock *s); /**@brief Superblock presence in block group. - * @param s superblock dsecriptor + * @param s superblock descriptor * @param block_group block group id * @return true if block group has superblock*/ bool ext4_sb_is_super_in_bg(struct ext4_sblock *s, uint32_t block_group); +/**@brief TODO:*/ +bool ext4_sb_sparse(uint32_t group); + /**@brief TODO:*/ uint32_t ext4_bg_num_gdb(struct ext4_sblock *s, uint32_t group); /**@brief TODO:*/ uint32_t ext4_num_base_meta_clusters(struct ext4_sblock *s, - uint32_t block_group); + uint32_t block_group); + +#ifdef __cplusplus +} +#endif #endif /* EXT4_SUPER_H_ */