123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- #pragma once
- #include <filesystem/MBR.h>
- #include <filesystem/VFS/VFS.h>
- #define FAT32_MAX_PARTITION_NUM 128
- struct fat32_BootSector_t
- {
- uint8_t BS_jmpBoot[3];
- uint8_t BS_OEMName[8];
- uint16_t BPB_BytesPerSec;
- uint8_t BPB_SecPerClus;
- uint16_t BPB_RsvdSecCnt;
- uint8_t BPB_NumFATs;
- uint16_t BPB_RootEntCnt;
- uint16_t BPB_TotSec16;
- uint8_t BPB_Media;
- uint16_t BPB_FATSz16;
- uint16_t BPB_SecPerTrk;
- uint16_t BPB_NumHeads;
- uint32_t BPB_HiddSec;
- uint32_t BPB_TotSec32;
- uint32_t BPB_FATSz32;
- uint16_t BPB_ExtFlags;
- uint16_t BPB_FSVer;
- uint32_t BPB_RootClus;
- uint16_t BPB_FSInfo;
- uint16_t BPB_BkBootSec;
- uint8_t BPB_Reserved0[12];
- uint8_t BS_DrvNum;
- uint8_t BS_Reserved1;
- uint8_t BS_BootSig;
- uint32_t BS_VolID;
- uint8_t BS_VolLab[11];
- uint8_t BS_FilSysType[8];
- uint8_t BootCode[420];
- uint16_t BS_TrailSig;
- } __attribute__((packed));
- struct fat32_FSInfo_t
- {
- uint32_t FSI_LeadSig;
- uint8_t FSI_Reserved1[480];
- uint32_t FSI_StrucSig;
- uint32_t FSI_Free_Count;
- uint32_t FSI_Nxt_Free;
- uint8_t FSI_Reserved2[12];
- uint32_t FSI_TrailSig;
- } __attribute__((packed));
- #define ATTR_READ_ONLY (1 << 0)
- #define ATTR_HIDDEN (1 << 1)
- #define ATTR_SYSTEM (1 << 2)
- #define ATTR_VOLUME_ID (1 << 3)
- #define ATTR_DIRECTORY (1 << 4)
- #define ATTR_ARCHIVE (1 << 5)
- #define ATTR_LONG_NAME (ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID)
- struct fat32_Directory_t
- {
- unsigned char DIR_Name[11];
- unsigned char DIR_Attr;
- unsigned char DIR_NTRes;
-
-
- unsigned char DIR_CrtTimeTenth;
- unsigned short DIR_CrtTime;
- unsigned short DIR_CrtDate;
- unsigned short DIR_LastAccDate;
- unsigned short DIR_FstClusHI;
- unsigned short DIR_WrtTime;
- unsigned short DIR_WrtDate;
- unsigned short DIR_FstClusLO;
- unsigned int DIR_FileSize;
- } __attribute__((packed));
- #define LOWERCASE_BASE (8)
- #define LOWERCASE_EXT (16)
- struct fat32_LongDirectory_t
- {
- unsigned char LDIR_Ord;
- unsigned short LDIR_Name1[5];
- unsigned char LDIR_Attr;
- unsigned char LDIR_Type;
- unsigned char LDIR_Chksum;
- unsigned short LDIR_Name2[6];
- unsigned short LDIR_FstClusLO;
- unsigned short LDIR_Name3[2];
- } __attribute__((packed));
- struct fat32_partition_info_t
- {
- uint16_t partition_id;
- uint8_t ahci_ctrl_num;
- uint8_t ahci_port_num;
- uint8_t part_num;
- struct fat32_BootSector_t bootsector;
- struct fat32_FSInfo_t fsinfo;
- uint64_t fsinfo_sector_addr_infat;
- uint64_t bootsector_bak_sector_addr_infat;
- uint64_t starting_sector;
- uint64_t sector_count;
- uint64_t sec_per_clus;
- uint64_t bytes_per_sec;
- uint64_t bytes_per_clus;
- uint64_t first_data_sector;
- uint64_t FAT1_base_sector;
- uint64_t FAT2_base_sector;
- uint64_t sec_per_FAT;
- uint64_t NumFATs;
- };
- typedef struct fat32_partition_info_t fat32_sb_info_t;
- struct fat32_inode_info_t
- {
- uint32_t first_clus;
- uint64_t dEntry_location_clus;
- uint64_t dEntry_location_clus_offset;
- uint16_t create_date;
- uint16_t create_time;
- uint16_t write_time;
- uint16_t write_date;
- };
- typedef struct fat32_inode_info_t fat32_inode_info_t;
- struct vfs_superblock_t *fat32_register_partition(uint8_t ahci_ctrl_num, uint8_t ahci_port_num, uint8_t part_num);
- struct vfs_superblock_t *fat32_read_superblock(void *DPTE, uint8_t DPT_type, void *buf, int8_t ahci_ctrl_num, int8_t ahci_port_num, int8_t part_num);
- long fat32_create(struct vfs_index_node_t *parent_inode, struct vfs_dir_entry_t *dest_dEntry, int mode);
- void fat32_init();
- int64_t fat32_readdir(struct vfs_file_t *file_ptr, void *dirent, vfs_filldir_t filler);
|