11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	inftl.h -- defines to support the Inverse NAND Flash Translation Layer
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	(C) Copyright 2002, Greg Ungerer (gerg@snapgear.com)
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __MTD_INFTL_H__
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __MTD_INFTL_H__
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __KERNEL__
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error This is a kernel header. Perhaps include nftl-user.h instead?
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/mtd/blktrans.h>
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/mtd/mtd.h>
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/mtd/nftl.h>
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <mtd/inftl-user.h>
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef INFTL_MAJOR
21bfabb98688e7089381baa0974f7ff6786ce2a2d0Sean Young#define INFTL_MAJOR 96
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INFTL_PARTN_BITS 4
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __KERNEL__
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct INFTLrecord {
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct mtd_blktrans_dev mbd;
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u16 MediaUnit;
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32 EraseSize;
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct INFTLMediaHeader MediaHdr;
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int usecount;
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char heads;
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char sectors;
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned short cylinders;
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u16 numvunits;
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u16 firstEUN;
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u16 lastEUN;
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u16 numfreeEUNs;
40f4a2da0cd522a3b805ff2386c14912945bf990c7Brian Norris	__u16 LastFreeEUN;		/* To speed up finding a free EUN */
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int head,sect,cyl;
42f4a2da0cd522a3b805ff2386c14912945bf990c7Brian Norris	__u16 *PUtable;			/* Physical Unit Table */
43f4a2da0cd522a3b805ff2386c14912945bf990c7Brian Norris	__u16 *VUtable;			/* Virtual Unit Table */
44f4a2da0cd522a3b805ff2386c14912945bf990c7Brian Norris	unsigned int nb_blocks;		/* number of physical blocks */
45f4a2da0cd522a3b805ff2386c14912945bf990c7Brian Norris	unsigned int nb_boot_blocks;	/* number of blocks used by the bios */
46f4a2da0cd522a3b805ff2386c14912945bf990c7Brian Norris	struct erase_info instr;
47f4a2da0cd522a3b805ff2386c14912945bf990c7Brian Norris	struct nand_ecclayout oobinfo;
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint INFTL_mount(struct INFTLrecord *s);
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint INFTL_formatblock(struct INFTLrecord *s, int block);
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
530500abf52109d09bf60d740dec2e41d6cf265688Adrian Bunkvoid INFTL_dumptables(struct INFTLrecord *s);
540500abf52109d09bf60d740dec2e41d6cf265688Adrian Bunkvoid INFTL_dumpVUchains(struct INFTLrecord *s);
550500abf52109d09bf60d740dec2e41d6cf265688Adrian Bunk
56a8e8aa25694f1781fafee4ee8e8f393e4b979b36Adrian Bunkint inftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
57a8e8aa25694f1781fafee4ee8e8f393e4b979b36Adrian Bunk		   size_t *retlen, uint8_t *buf);
58a8e8aa25694f1781fafee4ee8e8f393e4b979b36Adrian Bunkint inftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
59a8e8aa25694f1781fafee4ee8e8f393e4b979b36Adrian Bunk		    size_t *retlen, uint8_t *buf);
60a8e8aa25694f1781fafee4ee8e8f393e4b979b36Adrian Bunk
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __KERNEL__ */
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __MTD_INFTL_H__ */
64