73 lines
1.4 KiB
C
73 lines
1.4 KiB
C
#pragma once
|
|
|
|
#include "mbr.h"
|
|
|
|
enum FatType {
|
|
FAT12,
|
|
FAT16,
|
|
FAT32,
|
|
};
|
|
|
|
struct FatBpb {
|
|
uint8_t _instrs[3];
|
|
uint8_t oem_ident[8];
|
|
uint16_t bytes_per_sector;
|
|
uint8_t sectors_per_cluster;
|
|
uint16_t reserved_sectors;
|
|
uint8_t fat_count;
|
|
uint16_t root_entries;
|
|
uint16_t total_sectors_16;
|
|
uint8_t media_descriptor;
|
|
uint16_t sectors_per_fat;
|
|
uint16_t sectors_per_track;
|
|
uint16_t heads;
|
|
uint32_t hidden_sectors;
|
|
uint32_t total_sectors_32;
|
|
} __attribute__((packed));
|
|
|
|
struct Fat16Ebpb {
|
|
uint8_t drive_number;
|
|
uint8_t _reserved;
|
|
uint8_t signature;
|
|
uint32_t volume_id;
|
|
uint8_t volume_label[11];
|
|
uint8_t sys_ident[8];
|
|
} __attribute__((packed));
|
|
|
|
struct Fat32Ebpb {
|
|
uint32_t sectors_per_fat;
|
|
uint16_t flags;
|
|
uint16_t version;
|
|
uint32_t root_cluster;
|
|
uint16_t fsinfo_sector;
|
|
uint16_t backup_boot_sector;
|
|
uint8_t _reserved0[12];
|
|
uint8_t drive_number;
|
|
uint8_t _reserved1;
|
|
uint8_t signature;
|
|
uint32_t serial_number;
|
|
uint8_t volume_label[11];
|
|
uint8_t system_ident[8];
|
|
} __attribute__((packed));
|
|
|
|
struct FatInfo {
|
|
struct MbrPartition partition;
|
|
struct AtaDevice dev;
|
|
enum FatType type;
|
|
struct FatBpb bpb;
|
|
union {
|
|
struct Fat16Ebpb f16;
|
|
struct Fat32Ebpb f32;
|
|
} ebpb;
|
|
};
|
|
|
|
struct FatFile {
|
|
uint8_t name[11];
|
|
uint8_t attributes;
|
|
uint32_t start_cluster;
|
|
uint32_t size;
|
|
};
|
|
|
|
bool fat_init(struct FatInfo *fatinfo, struct AtaDevice dev, struct MbrPartition partition);
|
|
bool fat_test(struct FatInfo *fatinfo);
|