NAND: sync with 2.6.27
[platform/kernel/u-boot.git] / include / linux / mtd / nftl.h
index 5023a9f..fe22e0d 100644 (file)
@@ -1,84 +1,23 @@
-
-/* Defines for NAND Flash Translation Layer  */
-/* (c) 1999 Machine Vision Holdings, Inc.    */
-/* Author: David Woodhouse <dwmw2@mvhi.com>  */
-/* $Id: nftl.h,v 1.10 2000/12/29 00:25:38 dwmw2 Exp $ */
+/*
+ * (C) 1999-2003 David Woodhouse <dwmw2@infradead.org>
+ */
 
 #ifndef __MTD_NFTL_H__
 #define __MTD_NFTL_H__
 
-/* Block Control Information */
-
-struct nftl_bci {
-       unsigned char ECCSig[6];
-       __u8 Status;
-       __u8 Status1;
-}__attribute__((packed));
-
-/* Unit Control Information */
-
-struct nftl_uci0 {
-       __u16 VirtUnitNum;
-       __u16 ReplUnitNum;
-       __u16 SpareVirtUnitNum;
-       __u16 SpareReplUnitNum;
-} __attribute__((packed));
-
-struct nftl_uci1 {
-       __u32 WearInfo;
-       __u16 EraseMark;
-       __u16 EraseMark1;
-} __attribute__((packed));
-
-struct nftl_uci2 {
-        __u16 FoldMark;
-        __u16 FoldMark1;
-       __u32 unused;
-} __attribute__((packed));
-
-union nftl_uci {
-       struct nftl_uci0 a;
-       struct nftl_uci1 b;
-       struct nftl_uci2 c;
-};
-
-struct nftl_oob {
-       struct nftl_bci b;
-       union nftl_uci u;
-};
-
-/* NFTL Media Header */
-
-struct NFTLMediaHeader {
-       char DataOrgID[6];
-       __u16 NumEraseUnits;
-       __u16 FirstPhysicalEUN;
-       __u32 FormattedSize;
-       unsigned char UnitSizeFactor;
-} __attribute__((packed));
-
-#define MAX_ERASE_ZONES (8192 - 512)
-
-#define ERASE_MARK 0x3c69
-#define SECTOR_FREE 0xff
-#define SECTOR_USED 0x55
-#define SECTOR_IGNORE 0x11
-#define SECTOR_DELETED 0x00
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/blktrans.h>
 
-#define FOLD_MARK_IN_PROGRESS 0x5555
-
-#define ZONE_GOOD 0xff
-#define ZONE_BAD_ORIGINAL 0
-#define ZONE_BAD_MARKED 7
+#include <linux/mtd/nftl-user.h>
 
 /* these info are used in ReplUnitTable */
-#define BLOCK_NIL          0xffff /* last block of a chain */
-#define BLOCK_FREE         0xfffe /* free block */
+#define BLOCK_NIL         0xffff /* last block of a chain */
+#define BLOCK_FREE        0xfffe /* free block */
 #define BLOCK_NOTEXPLORED  0xfffd /* non explored block, only used during mounting */
-#define BLOCK_RESERVED     0xfffc /* bios block or bad block */
+#define BLOCK_RESERVED    0xfffc /* bios block or bad block */
 
 struct NFTLrecord {
-       struct DiskOnChip *mtd;
+       struct mtd_blktrans_dev mbd;
        __u16 MediaUnit, SpareMediaUnit;
        __u32 EraseSize;
        struct NFTLMediaHeader MediaHdr;
@@ -87,19 +26,32 @@ struct NFTLrecord {
        unsigned char sectors;
        unsigned short cylinders;
        __u16 numvunits;
-       __u16 lastEUN;                  /* should be suppressed */
+       __u16 lastEUN;                  /* should be suppressed */
        __u16 numfreeEUNs;
-       __u16 LastFreeEUN;              /* To speed up finding a free EUN */
-       __u32 long nr_sects;
+       __u16 LastFreeEUN;              /* To speed up finding a free EUN */
        int head,sect,cyl;
-       __u16 *EUNtable;                /* [numvunits]: First EUN for each virtual unit  */
-       __u16 *ReplUnitTable;           /* [numEUNs]: ReplUnitNumber for each */
-        unsigned int nb_blocks;                /* number of physical blocks */
-        unsigned int nb_boot_blocks;   /* number of blocks used by the bios */
+       __u16 *EUNtable;                /* [numvunits]: First EUN for each virtual unit  */
+       __u16 *ReplUnitTable;           /* [numEUNs]: ReplUnitNumber for each */
+       unsigned int nb_blocks;         /* number of physical blocks */
+       unsigned int nb_boot_blocks;    /* number of blocks used by the bios */
+       struct erase_info instr;
+       struct nand_ecclayout oobinfo;
 };
 
+int NFTL_mount(struct NFTLrecord *s);
+int NFTL_formatblock(struct NFTLrecord *s, int block);
+
+int nftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
+                 size_t *retlen, uint8_t *buf);
+int nftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
+                  size_t *retlen, uint8_t *buf);
+
+#ifndef NFTL_MAJOR
+#define NFTL_MAJOR 93
+#endif
+
 #define MAX_NFTLS 16
-#define MAX_SECTORS_PER_UNIT 32
+#define MAX_SECTORS_PER_UNIT 64
 #define NFTL_PARTN_BITS 4
 
 #endif /* __MTD_NFTL_H__ */