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

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