hdd_info.h
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:6k
源码类别:

DVD

开发平台:

C/C++

  1. /*=================================================================
  2. hdd_info.h: Header for Some FileSystem Info Function for HDD
  3. 2002-04-28 10:00AM Created  by Verdure
  4. 2002-06-12 08:42AM Modified by cyue
  5. Copyright(c)2000-2002 by Worldplus Technology (ShenZhen) Co., Ltd.
  6.                    ALL RIGHTS RESERVED
  7. =================================================================*/
  8. #ifndef __HDD_INFO_H
  9. #define __HDD_INFO_H
  10. #define   HD_NO         0
  11. #define   HD_IDLE       1
  12. #define   HD_READ       2
  13. #define   HD_WRITE      3
  14. #define   PI_USE_MATRIX    1
  15. #define   MAX_PART_INFO   10
  16. /* these assume sizeof(short)==2 and sizeof(long)==4*/
  17. #define read_le16(X) *(UINT16 *)(X)
  18. #define read_le32(X) *(UINT32 *)(X)
  19. // MBR test
  20. typedef struct _partitionentry{
  21. UINT8 act,starthead;
  22. UINT16 startcs;
  23. UINT8 type,endhead;
  24. UINT16 endcs;
  25. UINT16 secfrommbr_lo,secfrommbr_hi;
  26. UINT16 seccnt_lo,seccnt_hi;
  27. }PARTITION_ENTRY;
  28. typedef struct _PARTITION_INFO{
  29. UINT32 startlba,seccnt;
  30. UINT8 type,act;
  31. struct _PARTITION_INFO *next;
  32. }PARTITION_INFO;
  33. typedef struct _HDD_INFO{
  34. UINT32 seccnt;
  35. UINT16 cyl;
  36. UINT8 sec,head;
  37. #ifdef PI_USE_MATRIX
  38. PARTITION_INFO part[MAX_PART_INFO];
  39. #else
  40. *partition_list;
  41. #endif
  42. }HDD_INFO;
  43. /*
  44. ** FAT32 Boot Sector (BR32) located at sector 0 of a FAT32 volume
  45. ** (partition).
  46. **
  47. ** FAT32 BSs are stored in 3 sectors -- 1536 bytes
  48. */
  49. typedef struct _BPB_INFO{
  50. // Items in ExtBPB or by cyue
  51. UINT32  Data_Area_Start; // Start LBA of Data Area 
  52. UINT32   FAT1_Start,FAT2_Start;
  53. UINT32 FATSize32;
  54.     UINT32 RootClus;        //first cluster of root directory,usually 2
  55.     UINT32 CurrDirClus;     //first cluster of current directory
  56. UINT32 curr_fdb_lba;
  57. UINT32 curr_fdb_offset;
  58. // Items in Current BPB
  59. //  UINT32   HiddenSecCnt;   //offset from MBR to first Boot Sector
  60. //  UINT32   TolSec32;       //must non-0 on FAT32,same as in partition table
  61.     UINT16   BytesPerSec;    //usually 512
  62.     UINT16   ReserSecCnt;    //typically 32 for FAT32
  63. //  UINT16   RootEntries;    //must 0 on FAT32
  64. //  UINT16   TolSec16;       //must 0 on FAT32
  65. //  UINT16   FATSize16;      //must 0 on FAT32
  66. //  UINT16   SecPerTrack;
  67. //  UINT16   NumHeads;
  68.     UINT8    NumFATs;        //number of FAT copies (usually 2)
  69.     UINT8    SecPerClus;     //must be a power of 2
  70. UINT8    SecPerClusPwr;
  71.     UINT8    BytesPerSecPwr;
  72. //  UINT8    MediaDescriptor;//F8h for hard disks
  73. }BPB_INFO;
  74. #if 0 // cyue make BPB info  in the same structor 2002-06-14 08:37AM
  75. typedef struct _FAT32_ExtBPB{
  76.     UINT32   FATSize32;
  77.     UINT16   ExtFlags;        //FAT mirroring flags
  78.     UINT16   FSVersion;
  79.     UINT32   RootClus;        //first cluster of root directory,usually 2
  80.     UINT16   FSInfo;
  81.     UINT16   BootSecBakupSec; //sector containing backup of boot sector
  82.     UINT8    Reserved2[12];   //RESERVED,set 0
  83.     UINT8    DriveNum;        //0x80 for hard disk,0x00 for floppy disk
  84.     UINT8    Reserved3;       //-- RESERVED -- set this byte to 0
  85.     UINT8    ExtBootSig;      //extended boot sector signature (29h)
  86.     UINT32   VolumeID;
  87.     UINT8    VolumeLabel [11];
  88.     UINT8    FileSysType [8];     //"FAT32   "
  89. }FAT32_ExtBPB;
  90. extern FAT32_ExtBPB  ExtBPB;
  91. #endif
  92. typedef struct _FAT32_BOOT_SECTOR{
  93.     /* SECTOR 1 OF 3 */
  94. //    UINT8     OEMName[8];            //OEM Name and version ("MSWIN4.1")
  95.     struct    _BPB_INFO  *BPB;
  96. //    UINT16    Signature1;            //boot sector signature (AA55h)
  97.     //UINT32   FirstSignature;     //always 41615252h
  98.     //UINT32   FSInfoSignature;    //61417272h
  99.     UINT32   FreeClusters;       //number of free clusters
  100.     UINT32   NextCluster;        //next free cluster??
  101.     //UINT16   Signature2;         //boot sector signature (AA55h)
  102. }FAT32_BOOT_RECORD;
  103. #define FAT_ATTR_R 0x01
  104. #define FAT_ATTR_H 0x02
  105. #define FAT_ATTR_S 0x04
  106. #define FAT_ATTR_V 0x08
  107. #define FAT_ATTR_D 0x010
  108. #define FAT_ATTR_A 0x020
  109. //Long Name ATTR:
  110. #define FAT_ATTR_L (FAT_ATTR_R|FAT_ATTR_H|FAT_ATTR_S|FAT_ATTR_V)
  111. #if 0
  112. typedef struct _FAT32_FDB{
  113.     UINT8   fname[8], fext[3];
  114.     UINT8   attrib;
  115.     UINT8   LNFcase;
  116.     UINT8   creat_time_ms;  
  117.     UINT16  creat_time;
  118.     UINT16  creat_date;
  119.     UINT16  access_date;
  120.     UINT16  start_hi;
  121.     UINT16  edit_time;
  122.     UINT16  edit_date;
  123.     UINT16  start_lo;
  124.     UINT32  fsize;
  125.     
  126. }FAT32_FDB;
  127. #else
  128. typedef struct _FAT32_FDB{
  129.     UINT8   fname[8], fext[3];
  130.     UINT8   attrib;
  131.     UINT8   unused[8];
  132.     UINT16  start_hi;
  133.     UINT16  edit_time;
  134.     UINT16  edit_date;
  135.     UINT16  start_lo;
  136.     UINT32  fsize;
  137. }FAT32_FDB;
  138. #endif
  139. typedef struct _FILE_INFO{
  140. UINT32 start_lba;
  141. UINT32 start_clus;
  142. UINT32 fsize;
  143. UINT32 fdb_lba,fdb_offset; // prepare to write info back
  144. //UINT8  name[12];
  145. UINT8  attrib;
  146. UINT8   l_time[4];  //jichuan_add 2003.4.21
  147. UINT16   time[2];   //jichuan_add 2003.4.15
  148. #ifdef MIKEY_PTR
  149. #else
  150. UINT32 read_ptr;
  151. UINT32 read_lba;
  152. UINT32 read_clus;
  153. UINT32 write_ptr;
  154. UINT32 write_lba;
  155. UINT32 write_clus;
  156. UINT32 f_need_new_clus;
  157. #endif
  158. }FILE_INFO;
  159. typedef struct _file_link_item{
  160. UINT32 lba,len;
  161. }FILE_LINK_ITEM;
  162. #define MAX_FILE_LINK_ITEM 60
  163. typedef struct _play_block{
  164. FILE_LINK_ITEM block[MAX_FILE_LINK_ITEM];
  165. UINT32 curr_blk,curr_lba;
  166. }PLAY_BLOCK;
  167. typedef struct  _Long_Name{        //jichuan_add  2002.10.10
  168. UINT16   name[50];
  169. UINT8   checksum;
  170. }Long_Name;
  171. #define LBA_COUNT(size) (((size)-1+BPB.BytesPerSec)>>BPB.BytesPerSecPwr)
  172. #define FS_Clus2LBA(st) ((((st)-2)<<BPB.SecPerClusPwr)+BPB.Data_Area_Start)
  173. extern UINT32  FS_Get_NextClus(UINT32 currClus);
  174. extern UINT8  HD_EXIST;
  175. #ifdef MIKEY
  176. #define MAX_INFO_BUFF 512*64   //jichuan_modify   MAX_INFO_BUFF (512*2)   2002.9.29
  177. extern UINT8  Info_buff[MAX_INFO_BUFF]; //reserved 4.5k?
  178. #else
  179. #define MAX_INFO_BUFF 512*64   //jichuan_modify   MAX_INFO_BUFF (512*2)   2002.9.29
  180. extern UINT8  *Info_buff; //reserved 4.5k?
  181. #endif
  182. extern HDD_INFO HDD_Info;
  183. extern BPB_INFO BPB;
  184. //extern FAT32_FDB* FDB;
  185. extern UINT32 Start_LBA;
  186. extern UINT32 Data_Start_Clus;
  187. extern UINT32 File_FDB_Lba;
  188. extern UINT32 Data_Curr_Clus;
  189. extern UINT32 Data_Next_Clus;
  190. #endif/*__HDD_INFO_H*/