1 /*
2  * Copyright (c) 2024-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef EXT4_H
17 #define EXT4_H
18 
19 #include <linux/types.h>
20 
21 #define EXT4_SUPER_MAGIC 0xEF53
22 #define EXT4_SUPER_BLOCK_START_POSITION 0x400
23 #define BLOCK_SIZE_UNIT 4096
24 
25 typedef struct ext4_super_block {
26 __le32	s_inodes_count;
27 __le32	s_blocks_count_lo;
28 __le32	s_r_blocks_count_lo;
29 __le32	s_free_blocks_count_lo;
30 __le32	s_free_inodes_count;
31 __le32	s_first_data_block;
32 __le32	s_log_block_size;
33 __le32	s_log_cluster_size;
34 __le32	s_blocks_per_group;
35 __le32	s_clusters_per_group;
36 __le32	s_inodes_per_group;
37 __le32	s_mtime;
38 __le32	s_wtime;
39 __le16	s_mnt_count;
40 __le16	s_max_mnt_count;
41 __le16	s_magic;
42 __le16	s_state;
43 __le16	s_errors;
44 __le16	s_minor_rev_level;
45 __le32	s_lastcheck;
46 __le32	s_checkinterval;
47 __le32	s_creator_os;
48 __le32	s_rev_level;
49 __le16	s_def_resuid;
50 __le16	s_def_resgid;
51 
52 __le32	s_first_ino;
53 __le16	s_inode_size;
54 __le16	s_block_group_nr;
55 __le32	s_feature_compat;
56 __le32	s_feature_incompat;
57 __le32	s_feature_ro_compat;
58 __u8	s_uuid[16];
59 char	s_volume_name[16];
60 char	s_last_mounted[64];
61 __le32	s_algorithm_usage_bitmap;
62 
63 __u8	s_prealloc_blocks;
64 __u8	s_prealloc_dir_blocks;
65 __le16	s_reserved_gdt_blocks;
66 
67 __u8	s_journal_uuid[16];
68 __le32	s_journal_inum;
69 __le32	s_journal_dev;
70 __le32	s_last_orphan;
71 __le32	s_hash_seed[4];
72 __u8	s_def_hash_version;
73 __u8	s_jnl_backup_type;
74 __le16	s_desc_size;
75 __le32	s_default_mount_opts;
76 __le32	s_first_meta_bg;
77 __le32	s_mkfs_time;
78 __le32	s_jnl_blocks[17];
79 
80 __le32	s_blocks_count_hi;
81 __le32	s_r_blocks_count_hi;
82 __le32	s_free_blocks_count_hi;
83 __le16	s_min_extra_isize;
84 __le16	s_want_extra_isize;
85 __le32	s_flags;
86 __le16	s_raid_stride;
87 __le16	s_mmp_interval;
88 __le64	s_mmp_block;
89 __le32	s_raid_stripe_width;
90 __u8	s_log_groups_per_flex;
91 __u8	s_checksum_type;
92 __le16	s_reserved_pad;
93 __le64	s_kbytes_written;
94 __le32	s_snapshot_inum;
95 __le32	s_snapshot_id;
96 __le64	s_snapshot_r_blocks_count;
97 __le32	s_snapshot_list;
98 __le32	s_error_count;
99 __le32	s_first_error_time;
100 __le32	s_first_error_ino;
101 __le64	s_first_error_block;
102 __u8	s_first_error_func[32];
103 __le32	s_first_error_line;
104 __le32	s_last_error_time;
105 __le32	s_last_error_ino;
106 __le32	s_last_error_line;
107 __le64	s_last_error_block;
108 __u8	s_last_error_func[32];
109 __u8	s_mount_opts[64];
110 __le32	s_usr_quota_inum;
111 __le32	s_grp_quota_inum;
112 __le32	s_overhead_blocks;
113 __le32	s_backup_bgs[2];
114 __u8	s_encrypt_algos[4];
115 __u8	s_encrypt_pw_salt[16];
116 __le32	s_lpf_ino;
117 __le32	s_prj_quota_inum;
118 __le32	s_checksum_seed;
119 __le32	s_reserved[98];
120 __le32	s_checksum;
121 } ext4_super_block;  /* 1024 byte */
122 
123 #endif