Cleanup
[tpg/acess2.git] / Kernel / vfs / fs / fs_ext2.h
1 /**\r
2  Acess Version 1\r
3  \file fs_ext2_int.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 //STRUCTURES\r
39 /**\r
40  \struct ext2_super_block_s\r
41  \brief EXT2 Superblock Structure\r
42 */\r
43 struct ext2_super_block_s {\r
44         Uint32  s_inodes_count;         //!< Inodes count\r
45         Uint32  s_blocks_count;         //!< Blocks count\r
46         Uint32  s_r_blocks_count;       //!< Reserved blocks count\r
47         Uint32  s_free_blocks_count;    //!< Free blocks count\r
48         Uint32  s_free_inodes_count;    //!< Free inodes count\r
49         Uint32  s_first_data_block;     //!< First Data Block\r
50         Uint32  s_log_block_size;       //!< Block size\r
51         Sint32  s_log_frag_size;        //!< Fragment size\r
52         Uint32  s_blocks_per_group;     //!< Number Blocks per group\r
53         Uint32  s_frags_per_group;      //!< Number Fragments per group\r
54         Uint32  s_inodes_per_group;     //!< Number Inodes per group\r
55         Uint32  s_mtime;                        //!< Mount time\r
56         Uint32  s_wtime;                        //!< Write time\r
57         Uint16  s_mnt_count;            //!< Mount count\r
58         Sint16  s_max_mnt_count;        //!< Maximal mount count\r
59         Uint16  s_magic;                        //!< Magic signature\r
60         Uint16  s_state;                        //!< File system state\r
61         Uint16  s_errors;                       //!< Behaviour when detecting errors\r
62         Uint16  s_pad;                          //!< Padding\r
63         Uint32  s_lastcheck;            //!< time of last check\r
64         Uint32  s_checkinterval;        //!< max. time between checks\r
65         Uint32  s_creator_os;           //!< Formatting OS\r
66         Uint32  s_rev_level;            //!< Revision level\r
67         Uint16  s_def_resuid;           //!< Default uid for reserved blocks\r
68         Uint16  s_def_resgid;           //!< Default gid for reserved blocks\r
69         Uint32  s_reserved[235];        //!< Padding to the end of the block\r
70 };\r
71 \r
72 /**\r
73  \struct ext2_inode_s\r
74  \brief EXT2 Inode Definition\r
75 */\r
76 struct ext2_inode_s {\r
77         Uint16 i_mode;  //!< File mode\r
78         Uint16 i_uid;   //!< Owner Uid\r
79         Uint32 i_size;  //!< Size in bytes\r
80         Uint32 i_atime; //!< Access time\r
81         Uint32 i_ctime; //!< Creation time\r
82         Uint32 i_mtime; //!< Modification time\r
83         Uint32 i_dtime; //!< Deletion Time\r
84         Uint16 i_gid;   //!< Group Id\r
85         Uint16 i_links_count;   //!< Links count\r
86         Uint32 i_blocks;        //!< Blocks count\r
87         Uint32 i_flags; //!< File flags\r
88         union {\r
89                 Uint32 linux_reserved1; //!< Linux: Reserved\r
90                 Uint32 hurd_translator; //!< HURD: Translator\r
91                 Uint32 masix_reserved1; //!< Masix: Reserved\r
92         } osd1; //!< OS dependent 1\r
93         Uint32 i_block[15];     //!< Pointers to blocks\r
94         Uint32 i_version;       //!< File version (for NFS)\r
95         Uint32 i_file_acl;      //!< File ACL\r
96         Uint32 i_dir_acl;       //!< Directory ACL\r
97         Uint32 i_faddr;         //!< Fragment address\r
98         union {\r
99                 struct {\r
100                         Uint8 l_i_frag; //!< Fragment number\r
101                         Uint8 l_i_fsize;        //!< Fragment size\r
102                         Uint16 i_pad1;  //!< Padding\r
103                         Uint32 l_i_reserved2[2];        //!< Reserved\r
104                 } linux2;\r
105                 struct {\r
106                         Uint8 h_i_frag; //!< Fragment number\r
107                         Uint8 h_i_fsize; //!< Fragment size\r
108                         Uint16 h_i_mode_high;   //!< Mode High Bits\r
109                         Uint16 h_i_uid_high;    //!< UID High Bits\r
110                         Uint16 h_i_gid_high;    //!< GID High Bits\r
111                         Uint32 h_i_author;      //!< Creator ID\r
112                 } hurd2;\r
113                 struct {\r
114                         Uint8 m_i_frag; //!< Fragment number\r
115                         Uint8 m_i_fsize;        //!< Fragment size\r
116                         Uint16 m_pad1;  //!< Padding\r
117                         Uint32 m_i_reserved2[2];        //!< reserved\r
118                 } masix2;\r
119         } osd2; //!< OS dependent 2\r
120 };\r
121 \r
122 /**\r
123  \struct ext2_group_desc_s\r
124  \brief EXT2 Group Descriptor\r
125 */\r
126 struct ext2_group_desc_s {\r
127         Uint32  bg_block_bitmap;        //!< Blocks bitmap block\r
128         Uint32  bg_inode_bitmap;        //!< Inodes bitmap block\r
129         Uint32  bg_inode_table; //!< Inodes table block\r
130         Uint16  bg_free_blocks_count;   //!< Free blocks count\r
131         Uint16  bg_free_inodes_count;   //!< Free inodes count\r
132         Uint16  bg_used_dirs_count;     //!< Directories count\r
133         Uint16  bg_pad; //!< Padding\r
134         Uint32  bg_reserved[3]; //!< Reserved\r
135 };\r
136 \r
137 /**\r
138  \struct ext2_dir_entry\r
139  \brief EXT2 Directory Entry\r
140  \note The name may take up less than 255 characters\r
141 */\r
142 struct ext2_dir_entry_s {\r
143         Uint32  inode;          //!< Inode number\r
144         Uint16  rec_len;        //!< Directory entry length\r
145         Uint8   name_len;       //!< Short Name Length\r
146         Uint8   type;           //!< File Type\r
147         char    name[];         //!< File name\r
148 };\r
149 \r
150 //TYPEDEFS\r
151 typedef struct ext2_inode_s                     tExt2_Inode;    //!< Inode Type\r
152 typedef struct ext2_super_block_s       tExt2_SuperBlock;       //!< Superblock Type\r
153 typedef struct ext2_group_desc_s        tExt2_Group;    //!< Group Descriptor Type\r
154 typedef struct ext2_dir_entry_s         tExt2_DirEnt;   //!< Directory Entry Type\r

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