meta_bg feature helper functions
[lwext4.git] / lwext4 / ext4_super.h
index 6c221069e48db8bd154bd9eba672812a4effdef9..9f6bce298b666500e8a95ff9d1ebaee1968f2101 100644 (file)
@@ -47,7 +47,6 @@
 #include <ext4_types.h>
 
 
-/****************************Unstandard access to superblock*****************/
 
 /**@brief   Blocks count get stored in superblock.
  * @param   s superblock descriptor
@@ -111,7 +110,7 @@ static inline bool ext4_sb_check_flag(struct ext4_sblock *s, uint32_t v)
  * @param   s superblock descriptor
  * @param   v feature to check
  * @return  true if feature is supported*/
-static inline bool ext4_sb_check_feature_compatible(struct ext4_sblock *s,
+static inline bool ext4_sb_has_feature_compatible(struct ext4_sblock *s,
     uint32_t v)
 {
     return to_le32(s->features_compatible) & v;
@@ -122,7 +121,7 @@ static inline bool ext4_sb_check_feature_compatible(struct ext4_sblock *s,
  * @param   s superblock descriptor
  * @param   v feature to check
  * @return  true if feature is supported*/
-static inline bool ext4_sb_check_feature_incompatible(struct ext4_sblock *s,
+static inline bool ext4_sb_has_feature_incompatible(struct ext4_sblock *s,
     uint32_t v)
 {
     return to_le32(s->features_incompatible) & v;
@@ -133,11 +132,38 @@ static inline bool ext4_sb_check_feature_incompatible(struct ext4_sblock *s,
  * @param   s superblock descriptor
  * @param   v flag to check
  * @return  true if flag is supported*/
-static inline bool ext4_sb_check_read_only(struct ext4_sblock *s, uint32_t v)
+static inline bool ext4_sb_has_feature_read_only(struct ext4_sblock *s,
+        uint32_t v)
 {
     return to_le32(s->features_read_only) & v;
 }
 
+/**@brief   Block group to flex group.
+ * @param   s superblock descriptor
+ * @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)
+{
+    return block_group >> to_le32(s->log_groups_per_flex);
+}
+
+/**@brief   Flex block group size.
+ * @param   s superblock descriptor
+ * @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);
+}
+
+/**@brief   Return first meta block group id.
+ * @param   s superblock descriptor
+ * @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);
+}
+
 /**************************More complex functions****************************/
 
 /**@brief   Returns a block group count.
@@ -178,6 +204,19 @@ int ext4_sb_read(struct ext4_blockdev *bdev, struct ext4_sblock *s);
  * @return  true if OK*/
 bool ext4_sb_check(struct ext4_sblock *s);
 
+/**@brief   Superblock presence in block group.
+ * @param   s superblock dsecriptor
+ * @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:*/
+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);
 
 #endif /* EXT4_SUPER_H_ */