dosformt.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:8k
源码类别:

VxWorks

开发平台:

C/C++

  1. /*
  2.  * $Log:   V:/dosformt.h_v  $
  3.    
  4.       Rev 1.11   21 Aug 1997 14:06:32   unknown
  5.    Unaligned4
  6.    
  7.       Rev 1.10   24 Jul 1997 17:58:48   amirban
  8.    UNALIGNED -> Unaligned
  9.    
  10.       Rev 1.9   20 Jul 1997 17:16:12   amirban
  11.    Get rid of warnings
  12.    
  13.       Rev 1.8   07 Jul 1997 15:23:20   amirban
  14.    Ver 2.0
  15.    
  16.       Rev 1.6   09 Apr 1997 17:35:20   amirban
  17.    Partition table redefined
  18.    
  19.       Rev 1.5   31 Mar 1997 18:02:32   amirban
  20.    BPB redefined
  21.    
  22.       Rev 1.4   03 Oct 1996 14:37:20   amirban
  23.    New Big-Endian
  24.    
  25.       Rev 1.4   03 Oct 1996 11:56:02   amirban
  26.    New Big-Endian
  27.    
  28.       Rev 1.3   09 Sep 1996 11:39:34   amirban
  29.    Embedded CIS parameter
  30.    
  31.       Rev 1.2   18 Aug 1996 13:47:38   amirban
  32.    Comments
  33.    
  34.       Rev 1.1   14 Jul 1996 16:49:12   amirban
  35.    Format params
  36.    
  37.       Rev 1.0   20 Mar 1996 13:33:20   amirban
  38.    Initial revision.
  39.  */
  40. /************************************************************************/
  41. /*                                                                      */
  42. /* FAT-FTL Lite Software Development Kit */
  43. /* Copyright (C) M-Systems Ltd. 1995-1996 */
  44. /* */
  45. /************************************************************************/
  46. #ifndef DOSFORMT_H
  47. #define DOSFORMT_H
  48. #ifdef __cplusplus
  49. extern "C" {
  50. #endif
  51. #include "flbase.h"
  52. /* The BIOS parameter block (a part of the boot sector) */
  53. /* Note that this is NOT the customary definition of the BPB    */
  54. /* (customary is to start it on 'bytesPerSector'). To avoid the */
  55. /* nuisance of a structure that starts at an odd offset, we add */
  56. /* the first 11 bytes of the boot sector here. */
  57. typedef struct {
  58.   unsigned char jumpInstruction[3];
  59.   char OEMname[8];
  60.   Unaligned bytesPerSector;
  61.   unsigned char sectorsPerCluster;
  62.   LEushort reservedSectors;
  63.   unsigned char noOfFATS;
  64.   Unaligned rootDirectoryEntries;
  65.   Unaligned totalSectorsInVolumeDOS3;
  66.   unsigned char mediaDescriptor;
  67.   LEushort sectorsPerFAT;
  68.   LEushort sectorsPerTrack;
  69.   LEushort noOfHeads;
  70.   LEulong noOfHiddenSectors;
  71.   LEulong totalSectorsInVolume;
  72. } BPB;
  73. typedef struct {
  74.   BPB bpb;
  75.   unsigned char physicalDriveNo;
  76.   char reserved0;
  77.   char extendedBootSignature;
  78.   char volumeId[4];
  79.   char volumeLabel[11];
  80.   char systemId[8];
  81.   char bootstrap[448];
  82.   LEushort signature;
  83. } DOSBootSector;
  84. typedef struct {
  85.   char name[11];
  86.   unsigned char attributes; /* mapped below */
  87.   unsigned char reserved[10];
  88.   LEushort updateTime;
  89. /* The date field is encoded as follows:        */
  90. /*  bit 0-4: Day of month (1-31) */
  91. /*  bit 5-8: Month (1-12) */
  92. /* bit 9-15: Year relative to 1980 */
  93.   LEushort updateDate;
  94. /* The DOS time field is encoded as follows: */
  95. /* bit 0-4: seconds divided by 2 (0-29) */
  96. /*      bit 5-10: minutes (0-59) */
  97. /* bit 11-15: hours (0-23) */
  98.   LEushort startingCluster;
  99.   LEulong fileSize;
  100. } DirectoryEntry;
  101. /* Directory entry attribute bits */
  102. #define ATTR_READ_ONLY 1
  103. #define ATTR_HIDDEN 2
  104. #define ATTR_SYSTEM 4
  105. #define ATTR_VOL_LABEL 8
  106. #define ATTR_DIRECTORY 0x10
  107. #define ATTR_ARCHIVE 0x20
  108. #define DIRECTORY_ENTRY_SIZE sizeof(DirectoryEntry)
  109. #define DIRECTORY_ENTRIES_PER_SECTOR (SECTOR_SIZE / DIRECTORY_ENTRY_SIZE)
  110. #define NEVER_USED_DIR_ENTRY 0
  111. #define DELETED_DIR_ENTRY ((char) 0xe5)
  112. /* FAT definitions */
  113. #define FAT_FREE  0
  114. #define FAT_BAD_CLUSTER  0xfff7
  115. #define FAT_LAST_CLUSTER 0xffff /* actually any of 0xfff8-0xffff */
  116. /* Partition table definitions */
  117. #define PARTITION_SIGNATURE 0xaa55
  118. #define CYLINDER_SECTOR(cylinder,sector)
  119. ((sector) + ((cylinder & 0xff) << 8) + ((cylinder & 0x300) >> 2))
  120. typedef struct {
  121.   char reserved[0x1be];
  122.   /* First partition entry starts here. We do not map it as a */
  123.   /* separate structure because it is not longword aligned */
  124.   unsigned char activeFlag; /* 80h = bootable */
  125.   unsigned char startingHead;
  126.   LEushort startingCylinderSector;
  127.   char type;
  128.   unsigned char endingHead;
  129.   LEushort endingCylinderSector;
  130.   Unaligned4 startingSectorOfPartition;
  131.   Unaligned4 sectorsInPartition;
  132.   /* Partition entries 2,3 and 4 are structured as the 1st partition */
  133.   char partition23and4[0x30];
  134.   LEushort signature; /* = PARTITION_SIGNATURE */
  135. } PartitionTable;
  136. #ifdef FORMAT_VOLUME
  137. /* Formatting parameter structure definition */
  138. typedef struct {
  139.   /* FTL formatting section */
  140.   long int bootImageLen;
  141. /* Space to reserve for a boot-image at the start of the
  142.    medium. The FLite volume will begin at the next higher
  143.    erase unit boundary */
  144.   unsigned percentUse;
  145. /* FTL performance depends on how full the Flash media is,
  146.    getting slower when the media is close to 100%. It is
  147.    possible to avoid the worst consequences of this effect by
  148.    formatting the media to less than 100% capacity, so
  149.    guaranteeing some free space at all times. This of course
  150.    sacrifices some capcity.
  151.    The standard value to use is 99 */
  152.   unsigned noOfSpareUnits;
  153. /* FTL needs at least one spare erase unit to function as a
  154.    read/write media (it is possible to specify 0 to achieve
  155.    WORM functionality). It is possible to specify more than
  156.    one spare unit, which costs more media space.
  157.    The advantage to doing this is in case one of the Flash
  158.    erase units becomes bad and unerasable in the future, one
  159.    of the spare units will need to replace it. A second spare
  160.    unit will then enable to continue read/write functionality
  161.    (in its absence, the media will go into read-only mode).
  162.    The standard value to use is 1 */
  163.   unsigned long vmAddressingLimit;
  164. /* A part of the FTL Virtual Map always resides in RAM. The
  165.    RAM part is the one that is used to address the part of
  166.    the media below the VM addressing limit. Reading and
  167.    writing to this part is usually faster to some degree.
  168.    The downside is that the bigger the limit, the more RAM
  169.    size is required.
  170.    To get the extra RAM requirement in bytes, divide the
  171.    limit by 128 or by 256, depending on whether you
  172.    specified in #2.9 more than 32 or not, respectively.
  173.    The minimum VM limit is 0.
  174.    The standard value to use is 0x10000 (first 64 KBytes) */
  175.   FLStatus (*progressCallback)(int totalUnitsToFormat,
  176.     int totalUnitsFormattedSoFar);
  177. /* Progress callback routine, will be called if not NULL.
  178.    The callback routine is called after erasing each unit,
  179.    and its parameters are the total number of erase units
  180.    to format and the number erased so far.
  181.    The callback routine returns a Status value. A value of
  182.    OK (0) allows formatting to continue. Any other value
  183.    will abort the formatting with the returned status code. */
  184.   /* DOS formatting section */
  185.   char volumeId[4];
  186. /* Volume identification number */
  187.   char FAR1 * volumeLabel;
  188. /* Volume label string. If NULL, no label */
  189.   unsigned  noOfFATcopies;
  190. /* It is customary to format DOS media with 2 FAT copies.
  191.    The first copy is always used, but more copies make it
  192.    possible to recover if the FAT becomes corrupted (a
  193.    rare occurrence). On the other hand, this slows down
  194.    performance and uses media space.
  195.    The standard value to use is 2 */
  196.   unsigned embeddedCISlength;
  197. /* Length in bytes of CIS to embed after the unit header */
  198.   char FAR1 * embeddedCIS;
  199. /* The unit header is structured as a beginning of a PCMCIA
  200.    'tuple' chain (a CIS). The unit header contains a
  201.    data-organization tuple, which points past the end of the
  202.    unit header to a location which usually just contains
  203.    hex FF's which mark an 'end-of-tuple-chain'. Optionally,
  204.    it is possible to embed an entire CIS chain at this
  205.    location. If so, 'embeddedCISlength' marks the length in
  206.    bytes */
  207. } FormatParams;
  208. /* Standard initializer for FormatParams structure */
  209. #define STD_FORMAT_PARAMS {0, 99, 1, 0x10000l, NULL, {0,0,0,0}, NULL, 2, 0, NULL}
  210. #include "fltl.h"
  211. extern FLStatus flDosFormat(TL *, FormatParams FAR1 *formatParams);
  212. #endif
  213. #ifdef __cplusplus
  214. }
  215. #endif
  216. #endif