Fixes to Libc, Doxygen Comments and VTerm layout
[tpg/acess2.git] / Kernel / vfs / fs / fs_ext2.h
1 /**\r
2  * Acess2\r
3  * \file fs_ext2.h\r
4  * \brief EXT2 Filesystem Driver\r
5  */\r
6 \r
7 /**\r
8  \name Inode Flag Values\r
9  \{\r
10 */\r
11 #define EXT2_S_IFMT             0xF000  //!< Format Mask\r
12 #define EXT2_S_IFSOCK   0xC000  //!< Socket\r
13 #define EXT2_S_IFLNK    0xA000  //!< Symbolic Link\r
14 #define EXT2_S_IFREG    0x8000  //!< Regular File\r
15 #define EXT2_S_IFBLK    0x6000  //!< Block Device\r
16 #define EXT2_S_IFDIR    0x4000  //!< Directory\r
17 #define EXT2_S_IFCHR    0x2000  //!< Character Device\r
18 #define EXT2_S_IFIFO    0x1000  //!< FIFO\r
19 #define EXT2_S_ISUID    0x0800  //!< SUID\r
20 #define EXT2_S_ISGID    0x0400  //!< SGID\r
21 #define EXT2_S_ISVTX    0x0200  //!< sticky bit\r
22 #define EXT2_S_IRWXU    0700    //!< user access rights mask\r
23 #define EXT2_S_IRUSR    0400    //!< Owner Read\r
24 #define EXT2_S_IWUSR    0200    //!< Owner Write\r
25 #define EXT2_S_IXUSR    0100    //!< Owner Execute\r
26 #define EXT2_S_IRWXG    0070    //!< Group Access rights mask\r
27 #define EXT2_S_IRGRP    0040    //!< Group Read\r
28 #define EXT2_S_IWGRP    0020    //!< Group Write\r
29 #define EXT2_S_IXGRP    0010    //!< Group Execute\r
30 #define EXT2_S_IRWXO    0007    //!< Global Access rights mask\r
31 #define EXT2_S_IROTH    0004    //!< Global Read\r
32 #define EXT2_S_IWOTH    0002    //!< Global Write\r
33 #define EXT2_S_IXOTH    0001    //!< Global Execute\r
34 //! \}\r
35 \r
36 #define EXT2_NAME_LEN 255       //!< Maximum Name Length\r
37 \r
38 // === TYPEDEFS ===\r
39 typedef struct ext2_inode_s                     tExt2_Inode;    //!< Inode Type\r
40 typedef struct ext2_super_block_s       tExt2_SuperBlock;       //!< Superblock Type\r
41 typedef struct ext2_group_desc_s        tExt2_Group;    //!< Group Descriptor Type\r
42 typedef struct ext2_dir_entry_s         tExt2_DirEnt;   //!< Directory Entry Type\r
43 \r
44 // === STRUCTURES ===\r
45 /**\r
46  * \brief EXT2 Superblock Structure\r
47  */\r
48 struct ext2_super_block_s {\r
49         Uint32  s_inodes_count;         //!< Inodes count\r
50         Uint32  s_blocks_count;         //!< Blocks count\r
51         Uint32  s_r_blocks_count;       //!< Reserved blocks count\r
52         Uint32  s_free_blocks_count;    //!< Free blocks count\r
53         Uint32  s_free_inodes_count;    //!< Free inodes count\r
54         Uint32  s_first_data_block;     //!< First Data Block\r
55         Uint32  s_log_block_size;       //!< Block size\r
56         Sint32  s_log_frag_size;        //!< Fragment size\r
57         Uint32  s_blocks_per_group;     //!< Number Blocks per group\r
58         Uint32  s_frags_per_group;      //!< Number Fragments per group\r
59         Uint32  s_inodes_per_group;     //!< Number Inodes per group\r
60         Uint32  s_mtime;                        //!< Mount time\r
61         Uint32  s_wtime;                        //!< Write time\r
62         Uint16  s_mnt_count;            //!< Mount count\r
63         Sint16  s_max_mnt_count;        //!< Maximal mount count\r
64         Uint16  s_magic;                        //!< Magic signature\r
65         Uint16  s_state;                        //!< File system state\r
66         Uint16  s_errors;                       //!< Behaviour when detecting errors\r
67         Uint16  s_pad;                          //!< Padding\r
68         Uint32  s_lastcheck;            //!< time of last check\r
69         Uint32  s_checkinterval;        //!< max. time between checks\r
70         Uint32  s_creator_os;           //!< Formatting OS\r
71         Uint32  s_rev_level;            //!< Revision level\r
72         Uint16  s_def_resuid;           //!< Default uid for reserved blocks\r
73         Uint16  s_def_resgid;           //!< Default gid for reserved blocks\r
74         Uint32  s_reserved[235];        //!< Padding to the end of the block\r
75 };\r
76 \r
77 /**\r
78  * \struct ext2_inode_s\r
79  * \brief EXT2 Inode Definition\r
80  */\r
81 struct ext2_inode_s {\r
82         Uint16 i_mode;  //!< File mode\r
83         Uint16 i_uid;   //!< Owner Uid\r
84         Uint32 i_size;  //!< Size in bytes\r
85         Uint32 i_atime; //!< Access time\r
86         Uint32 i_ctime; //!< Creation time\r
87         Uint32 i_mtime; //!< Modification time\r
88         Uint32 i_dtime; //!< Deletion Time\r
89         Uint16 i_gid;   //!< Group Id\r
90         Uint16 i_links_count;   //!< Links count\r
91         Uint32 i_blocks;        //!< Blocks count\r
92         Uint32 i_flags; //!< File flags\r
93         union {\r
94                 Uint32 linux_reserved1; //!< Linux: Reserved\r
95                 Uint32 hurd_translator; //!< HURD: Translator\r
96                 Uint32 masix_reserved1; //!< Masix: Reserved\r
97         } osd1; //!< OS dependent 1\r
98         Uint32 i_block[15];     //!< Pointers to blocks\r
99         Uint32 i_version;       //!< File version (for NFS)\r
100         Uint32 i_file_acl;      //!< File ACL\r
101         Uint32 i_dir_acl;       //!< Directory ACL / Extended File Size\r
102         Uint32 i_faddr;         //!< Fragment address\r
103         union {\r
104                 struct {\r
105                         Uint8 l_i_frag; //!< Fragment number\r
106                         Uint8 l_i_fsize;        //!< Fragment size\r
107                         Uint16 i_pad1;  //!< Padding\r
108                         Uint32 l_i_reserved2[2];        //!< Reserved\r
109                 } linux2;\r
110                 struct {\r
111                         Uint8 h_i_frag; //!< Fragment number\r
112                         Uint8 h_i_fsize; //!< Fragment size\r
113                         Uint16 h_i_mode_high;   //!< Mode High Bits\r
114                         Uint16 h_i_uid_high;    //!< UID High Bits\r
115                         Uint16 h_i_gid_high;    //!< GID High Bits\r
116                         Uint32 h_i_author;      //!< Creator ID\r
117                 } hurd2;\r
118                 struct {\r
119                         Uint8 m_i_frag; //!< Fragment number\r
120                         Uint8 m_i_fsize;        //!< Fragment size\r
121                         Uint16 m_pad1;  //!< Padding\r
122                         Uint32 m_i_reserved2[2];        //!< reserved\r
123                 } masix2;\r
124         } osd2; //!< OS dependent 2\r
125 };\r
126 \r
127 /**\r
128  * \struct ext2_group_desc_s\r
129  * \brief EXT2 Group Descriptor\r
130  */\r
131 struct ext2_group_desc_s {\r
132         Uint32  bg_block_bitmap;        //!< Blocks bitmap block\r
133         Uint32  bg_inode_bitmap;        //!< Inodes bitmap block\r
134         Uint32  bg_inode_table; //!< Inodes table block\r
135         Uint16  bg_free_blocks_count;   //!< Free blocks count\r
136         Uint16  bg_free_inodes_count;   //!< Free inodes count\r
137         Uint16  bg_used_dirs_count;     //!< Directories count\r
138         Uint16  bg_pad; //!< Padding\r
139         Uint32  bg_reserved[3]; //!< Reserved\r
140 };\r
141 \r
142 /**\r
143  * \brief EXT2 Directory Entry\r
144  * \note The name may take up less than 255 characters\r
145  */\r
146 struct ext2_dir_entry_s {\r
147         Uint32  inode;          //!< Inode number\r
148         Uint16  rec_len;        //!< Directory entry length\r
149         Uint8   name_len;       //!< Short Name Length\r
150         Uint8   type;           //!< File Type\r
151         char    name[];         //!< File name\r
152 };\r

UCC git Repository :: git.ucc.asn.au