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