diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-07-10 11:31:46 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-07-10 11:31:46 +0800 |
| commit | e90b72ec3082588b296956730bd2930cf8d5d671 (patch) | |
| tree | 36ff6916af9b4176ea5a9662219d11e721f0b691 /include/fs/fat32.h | |
| parent | 1767d390fbf3d0c65389de46caf0b6d43ef3b6ad (diff) | |
| download | lume-e90b72ec3082588b296956730bd2930cf8d5d671.tar.gz lume-e90b72ec3082588b296956730bd2930cf8d5d671.tar.xz | |
refactor: promote new architecture to repository root
Archive the deprecated implementation under lume-legacy, make the new kernel the default root-level build, and update repository entry points without changing kernel behavior.
Diffstat (limited to 'include/fs/fat32.h')
| -rw-r--r-- | include/fs/fat32.h | 122 |
1 files changed, 0 insertions, 122 deletions
diff --git a/include/fs/fat32.h b/include/fs/fat32.h deleted file mode 100644 index 63d62ae..0000000 --- a/include/fs/fat32.h +++ /dev/null @@ -1,122 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* - * Copyright (C) 2026 Richard QIn - */ - -#pragma once -#include "fs/fs.h" -#include "kernel/buf.h" - -// Disk Layout Structures (On-Disk) - -// FAT32 Boot Sector (BPB) -struct FAT32_BPB -{ - uint8 jmpBoot[3]; - char oemName[8]; - uint16 bytesPerSector; - uint8 secPerClus; - uint16 reservedSecCnt; - uint8 numFATs; - uint16 rootEntCnt; - uint16 totSec16; - uint8 media; - uint16 FATSz16; - uint16 secPerTrk; - uint16 numHeads; - uint32 hiddSec; - uint32 totSec32; - uint32 FATSz32; - uint16 extFlags; - uint16 FSVer; - uint32 rootClus; - uint16 FSInfo; - uint16 bkBootSec; - uint8 reserved[12]; - uint8 drvNum; - uint8 reserved1; - uint8 bootSig; - uint32 volID; - char volLab[11]; - char filSysType[8]; -} __attribute__((packed)); - -// FAT32 Directory Entry (32 bytes) -struct FAT32_DirEnt -{ - char name[11]; // 8.3 filename - uint8 attr; // File attributes - uint8 ntRes; - uint8 crtTimeTenth; - uint16 crtTime; - uint16 crtDate; - uint16 lstAccDate; - uint16 fstClusHI; // High 16 bits of first cluster - uint16 wrtTime; - uint16 wrtDate; - uint16 fstClusLO; // Low 16 bits of first cluster - uint32 fileSize; -} __attribute__((packed)); - -#define ATTR_READ_ONLY 0x01 -#define ATTR_HIDDEN 0x02 -#define ATTR_SYSTEM 0x04 -#define ATTR_VOLUME_ID 0x08 -#define ATTR_DIRECTORY 0x10 -#define ATTR_ARCHIVE 0x20 -#define ATTR_LONG_NAME 0x0F - -// In-Memory Classes - -class FAT32FileSystem; - -class FAT32Inode : public Inode -{ -public: - FAT32FileSystem *fs; - - // FAT32 Private Data - uint32 first_clus; // The starting cluster number of the file - uint32 parent_clus; // Starting cluster number of the parent directory - uint32 dir_offset; // The byte offset of this directory entry in the parent directory - uint32 ent_sec; // Sector number of the directory entry - uint32 ent_off; // Offset of the directory entry within the sector - - FAT32Inode() : fs(nullptr), first_clus(0) {} - // Implement VFS Interface - void update() override; - int read(char *dst, uint32 off, uint32 n, int isUser) override; - int write(const char *src, uint32 off, uint32 n, int isUser) override; - Inode *lookup(const char *name) override; - Inode *create(const char *name, short type, short major, short minor) override; - void truncate() override; - int unlink(const char *name) override; -}; - -class FAT32FileSystem : public FileSystem -{ -public: - uint32 fat_start_sector; - uint32 data_start_sector; - uint32 root_cluster; - uint32 sectors_per_cluster; - uint32 bytes_per_cluster; - uint32 fat_sz; // Size of the FAT table (number of sectors) - - void init() override; - Inode* root() override; - - // Helper functions - uint32 next_cluster(uint32 cluster); // Check the FAT table for the next cluster - uint32 alloc_cluster(); // Assign a new cluster - uint32 cluster_to_sector(uint32 cluster); - - // directory entry parsing - void read_dir_ent(struct FAT32_DirEnt *de, char *filename); - // Release the entire cluster chain starting from the cluster - void free_cluster_chain(uint32 cluster); -}; - -extern FAT32FileSystem fat32_fs; - -void fat32_test();
\ No newline at end of file |
