⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fatfs.h

📁 Next BIOS Source code : Extensible Firmware Interface
💻 H
字号:
/*++

Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
This software and associated documentation (if any) is furnished
under a license and may only be used or copied in accordance
with the terms of the license. Except as permitted by such
license, no part of this software or documentation may be
reproduced, stored in a retrieval system, or transmitted in any
form or by any means without the express written consent of
Intel Corporation.


Module Name:

  fatfs.h

Abstract:

  Definitions for on-disk FAT structures

Revision History

--*/

#ifndef _FATFS_H_
#define _FATFS_H_

#pragma pack(1)


//
// Boot Sector
//

#define FAT_BOOT_SECTOR_DIRTY            0x01

typedef struct {
  UINT8           Ia32Jump[3];
  CHAR8           OemId[8];

  UINT16          SectorSize;
  UINT8           SectorsPerCluster;
  UINT16          ReservedSectors;
  UINT8           NoFats;
  UINT16          RootEntries;            // < FAT32, root dir is fixed size
  UINT16          Sectors;
  UINT8           Media;                  // (ignored)
  UINT16          SectorsPerFat;          // < FAT32
  UINT16          SectorsPerTrack;        // (ignored)
  UINT16          Heads;                  // (ignored)
  UINT32          HiddenSectors;          // (ignored)
  UINT32          LargeSectors;           // => FAT32
  
  UINT8           PhysicalDriveNumber;    // (ignored)
  UINT8           CurrentHead;            // holds boot_sector_dirty bit
  UINT8           Signature;              // (ignored)

  CHAR8           Id[4];
  CHAR8           FatLabel[11];
  CHAR8           SystemId[8];

} FAT_BOOT_SECTOR;

typedef struct {
  UINT8           Ia32Jump[3];
  CHAR8           OemId[8];

  UINT16          SectorSize;
  UINT8           SectorsPerCluster;
  UINT16          ReservedSectors;
  UINT8           NoFats;
  UINT16          RootEntries;            // < FAT32, root dir is fixed size
  UINT16          Sectors;
  UINT8           Media;                  // (ignored)
  UINT16          SectorsPerFat;          // < FAT32
  UINT16          SectorsPerTrack;        // (ignored)
  UINT16          Heads;                  // (ignored)
  UINT32          HiddenSectors;          // (ignored)
  UINT32          LargeSectors;           // Used if Sectors==0

  UINT32          LargeSectorsPerFat;     // FAT32
  UINT16          ExtendedFlags;          // FAT32 (ignored)
  UINT16          FsVersion;              // FAT32 (ignored)
  UINT32          RootDirFirstCluster;    // FAT32
  UINT16          FsInfoSector;           // FAT32
  UINT16          BackupBootSector;       // FAT32
  UINT8           Reserved[12];           // FAT32 (ignored)

  UINT8           PhysicalDriveNumber;    // (ignored)
  UINT8           CurrentHead;            // holds boot_sector_dirty bit
  UINT8           Signature;              // (ignored)

  CHAR8           Id[4];
  CHAR8           FatLabel[11];
  CHAR8           SystemId[8];
} FAT_BOOT_SECTOR_EX;


//
// FAT Info Structure
//

typedef struct {
  UINT32          ClusterCount;       
  UINT32          NextCluster;        
} FAT_FREE_INFO;

#define FAT_INFO_SIGNATURE              0x41615252
typedef struct {
  UINT32          Signature;   
  UINT8           ExtraBootCode[480];
  UINT32          InfoBeginSignature;        
  FAT_FREE_INFO   FreeInfo;
  UINT8           Reserved[12];           
  UINT32          InfoEndSignature;     
} FAT_INFO_SECTOR;

#define FAT_INFO_BEGIN_SIGNATURE        0x61417272
#define FAT_INFO_END_SIGNATURE          0xAA550000


//
// FAT entry values
//

#define FAT_CLUSTER_SPECIAL     ((-1 & ~0xF) | 0x07)
#define FAT_CLUSTER_FREE        0
#define FAT_CLUSTER_RESERVED    (FAT_CLUSTER_SPECIAL)
#define FAT_CLUSTER_BAD         (FAT_CLUSTER_SPECIAL)
#define FAT_CLUSTER_LAST        (-1)

#define FAT_END_OF_FAT_CHAIN(Cluster) ((Cluster) > (FAT_CLUSTER_SPECIAL))


//
// Directory Entry
//

typedef struct {
  UINT16          Day:5;
  UINT16          Month:4;
  UINT16          Year:7;                 // From 1980
} FAT_DATE;

typedef struct {
  UINT16          DoubleSecond:5;
  UINT16          Minute:6;
  UINT16          Hour:5;
} FAT_TIME;

typedef struct {
  FAT_TIME        Time;
  FAT_DATE        Date;
} FAT_DATE_TIME;

typedef struct {
  CHAR8           FileName[11];           // 8.3 filename
  UINT8           Attributes;
  UINT8           CaseFlag;
  UINT8           CreateMillisecond;      // (creation milliseconds - ignored)
  FAT_DATE_TIME   FileCreateTime;
  FAT_DATE        FileLastAccess;
  UINT16          FileClusterHigh;        // >= FAT32
  FAT_DATE_TIME   FileModificationTime;
  UINT16          FileCluster;        
  UINT32          FileSize;
} FAT_DIRECTORY_ENTRY;

#define FAT_ATTRIBUTE_READ_ONLY         0x01
#define FAT_ATTRIBUTE_HIDDEN            0x02
#define FAT_ATTRIBUTE_SYSTEM            0x04
#define FAT_ATTRIBUTE_VOLUME_ID         0x08
#define FAT_ATTRIBUTE_DIRECTORY         0x10
#define FAT_ATTRIBUTE_ARCHIVE           0x20
#define FAT_ATTRIBUTE_DEVICE            0x40
#define FAT_ATTRIBUTE_LFN               0x0F

#define FAT_CASE_ONLY                   0x01    // internal flag
#define FAT_CASE_NAME_LOWER             0x08
#define FAT_CASE_EXT_LOWER              0x10

typedef struct {
  UINT8           Ordinal;
  CHAR8           Name1[10];          // (Really 5 chars, but not WCHAR aligned)
  UINT8           Attributes;
  UINT8           Type;
  UINT8           Checksum;
  CHAR16          Name2[6];
  UINT16          MustBeZero;
  CHAR16          Name3[2];
} FAT_DIRECTORY_LFN;

#define FAT_LFN_LAST                    0x40    // Ordinal field
#define MAX_LFN_ENTRIES                 20


#pragma pack()

#endif //_FATFS_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -