nftl.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* Defines for NAND Flash Translation Layer  */
  2. /* (c) 1999 Machine Vision Holdings, Inc.    */
  3. /* Author: David Woodhouse <dwmw2@mvhi.com>  */
  4. /* $Id: nftl.h,v 1.10 2000/12/29 00:25:38 dwmw2 Exp $ */
  5. #ifndef __MTD_NFTL_H__
  6. #define __MTD_NFTL_H__
  7. #ifndef __BOOT__
  8. #include <linux/mtd/mtd.h>
  9. #endif
  10. /* Block Control Information */
  11. struct nftl_bci {
  12. unsigned char ECCSig[6];
  13. __u8 Status;
  14. __u8 Status1;
  15. }__attribute__((packed));
  16. /* Unit Control Information */
  17. struct nftl_uci0 {
  18. __u16 VirtUnitNum;
  19. __u16 ReplUnitNum;
  20. __u16 SpareVirtUnitNum;
  21. __u16 SpareReplUnitNum;
  22. } __attribute__((packed));
  23. struct nftl_uci1 {
  24. __u32 WearInfo;
  25. __u16 EraseMark;
  26. __u16 EraseMark1;
  27. } __attribute__((packed));
  28. struct nftl_uci2 {
  29.         __u16 FoldMark;
  30.         __u16 FoldMark1;
  31. __u32 unused;
  32. } __attribute__((packed));
  33. union nftl_uci {
  34. struct nftl_uci0 a;
  35. struct nftl_uci1 b;
  36. struct nftl_uci2 c;
  37. };
  38. struct nftl_oob {
  39. struct nftl_bci b;
  40. union nftl_uci u;
  41. };
  42. /* NFTL Media Header */
  43. struct NFTLMediaHeader {
  44. char DataOrgID[6];
  45. __u16 NumEraseUnits;
  46. __u16 FirstPhysicalEUN;
  47. __u32 FormattedSize;
  48. unsigned char UnitSizeFactor;
  49. } __attribute__((packed));
  50. #define MAX_ERASE_ZONES (8192 - 512)
  51. #define ERASE_MARK 0x3c69
  52. #define SECTOR_FREE 0xff
  53. #define SECTOR_USED 0x55
  54. #define SECTOR_IGNORE 0x11
  55. #define SECTOR_DELETED 0x00
  56. #define FOLD_MARK_IN_PROGRESS 0x5555
  57. #define ZONE_GOOD 0xff
  58. #define ZONE_BAD_ORIGINAL 0
  59. #define ZONE_BAD_MARKED 7
  60. #ifdef __KERNEL__
  61. /* these info are used in ReplUnitTable */
  62. #define BLOCK_NIL          0xffff /* last block of a chain */
  63. #define BLOCK_FREE         0xfffe /* free block */
  64. #define BLOCK_NOTEXPLORED  0xfffd /* non explored block, only used during mounting */
  65. #define BLOCK_RESERVED     0xfffc /* bios block or bad block */
  66. struct NFTLrecord {
  67. struct mtd_info *mtd;
  68. struct semaphore mutex;
  69. __u16 MediaUnit, SpareMediaUnit;
  70. __u32 EraseSize;
  71. struct NFTLMediaHeader MediaHdr;
  72. int usecount;
  73. unsigned char heads;
  74. unsigned char sectors;
  75. unsigned short cylinders;
  76. __u16 numvunits;
  77. __u16 lastEUN;                  /* should be suppressed */
  78. __u16 numfreeEUNs;
  79. __u16 LastFreeEUN;  /* To speed up finding a free EUN */
  80. __u32 nr_sects;
  81. int head,sect,cyl;
  82. __u16 *EUNtable;  /* [numvunits]: First EUN for each virtual unit  */
  83. __u16 *ReplUnitTable;  /* [numEUNs]: ReplUnitNumber for each */
  84.         unsigned int nb_blocks; /* number of physical blocks */
  85.         unsigned int nb_boot_blocks; /* number of blocks used by the bios */
  86.         struct erase_info instr;
  87. };
  88. int NFTL_mount(struct NFTLrecord *s);
  89. int NFTL_formatblock(struct NFTLrecord *s, int block);
  90. #ifndef NFTL_MAJOR
  91. #define NFTL_MAJOR 93
  92. #endif
  93. #define MAX_NFTLS 16
  94. #define MAX_SECTORS_PER_UNIT 32
  95. #define NFTL_PARTN_BITS 4
  96. #endif /* __KERNEL__ */
  97. #endif /* __MTD_NFTL_H__ */