Orion
Barry Importing existing Orion kernel d41a53c (2 years, 4 months ago)diff --git a/vfs/ext2fs/fs.h b/vfs/ext2fs/fs.h new file mode 100644 index 0000000..0e5cadb --- /dev/null +++ b/vfs/ext2fs/fs.h @@ -0,0 +1,116 @@ +#ifndef KERNEL_VFS_EXT2FS_H +#define KERNEL_VFS_EXT2FS_H + +#include "../vfs.h" + +typedef struct Ext2Super Ext2Super; +typedef struct Ext2BlockGroupDesc Ext2BlockGroupDesc; +typedef struct Ext2Inode Ext2Inode; +typedef struct Ext2DirEntry Ext2DirEntry; + +/* Structure of the Ext2 SuperBlock */ +struct Ext2Super { + uint32_t numInodes; + uint32_t numBlocks; + uint32_t reservedBlocks; + uint32_t unallocBlocks; + uint32_t unallocInodes; + uint32_t superBlock; + uint32_t blockSize; + uint32_t fragSize; + uint32_t blocksPerGroup; + uint32_t fragsPerGroup; + uint32_t inodesPerGroup; + uint32_t lastMountTime; + uint32_t lastWriteTime; + uint16_t lastCheck; + uint16_t mustCheck; + uint16_t signature; + uint16_t state; + uint16_t error; + uint16_t verMinor; + uint32_t lastCheckTime; + uint32_t checkInterval; + uint32_t creator; + uint32_t verMajor; + uint16_t uid, gid; + /* Extended fields */ + uint32_t firstAvailInode; + uint16_t inodeSize; + uint16_t blockGroup; + uint32_t optionalFeatures; + uint32_t requiredFeatures; + uint32_t writableFeatures; + char fsId[16]; + char volumeName[16]; + char lastPath[64]; + uint32_t compression; + uint8_t preallocFileBlocks; + uint8_t preallocDirBlocks; + uint16_t unused; + char journalId[16]; + uint32_t journalInode; + uint32_t journalDev; + uint32_t orphanHead; +} __attribute__((packed)); + +/* Structure of the Ext2 Block Group Descriptor */ +struct Ext2BlockGroupDesc { + uint32_t blockUsage; + uint32_t inodeUsage; + uint32_t inodeTable; + uint16_t unallocBlocks; + uint16_t unallocInodes; + uint16_t numDirs; +} __attribute__((packed)); + +/* Structure of the Ext2 Inode */ +struct Ext2Inode { + uint16_t type; + uint16_t uid; + uint32_t lsize; + uint32_t lastAccessTime; + uint32_t creationTime; + uint32_t lastWriteTime; + uint32_t deletionTime; + uint16_t gid; + uint16_t numHardLinks; + uint32_t numSectors; + uint32_t flags; + uint32_t osA; + uint32_t directBlock[12]; + uint32_t singleBlock; + uint32_t doubleBlock; + uint32_t tripleBlock; + uint32_t gen; + uint32_t attr; + union { + uint32_t usize; + uint32_t dirACL; + }; + uint32_t fragment; + uint32_t osB[3]; +} __attribute__((packed)); + +/* Structure of the Ext2 Directory Entry */ +struct Ext2DirEntry { + uint32_t ino; + uint16_t size; + uint8_t nameLen; + uint8_t type; + char name[]; +} __attribute__((packed)); + +/* Operations */ +extern SuperOps ext2fsSuperOps; +extern InodeOps ext2fsInodeOps; +extern FileOps ext2fsFileOps; + +extern FileSystemType ext2fsType; + +void ext2_read_vnode(SuperBlock *super, uint32_t index, Inode *res); +void ext2_read_inode(SuperBlock *super, uint32_t index, Ext2Inode *res); +void ext2_read_block(SuperBlock *super, uint32_t index, char *buf); +uint32_t ext2_get_data_addr(SuperBlock *super, Ext2Inode *node, uint32_t index); + +#endif