linux-old/include/linux/mtd/nftl.h
<<
>>
Prefs
   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
  16struct nftl_bci {
  17        unsigned char ECCSig[6];
  18        __u8 Status;
  19        __u8 Status1;
  20}__attribute__((packed));
  21
  22/* Unit Control Information */
  23
  24struct nftl_uci0 {
  25        __u16 VirtUnitNum;
  26        __u16 ReplUnitNum;
  27        __u16 SpareVirtUnitNum;
  28        __u16 SpareReplUnitNum;
  29} __attribute__((packed));
  30
  31struct nftl_uci1 {
  32        __u32 WearInfo;
  33        __u16 EraseMark;
  34        __u16 EraseMark1;
  35} __attribute__((packed));
  36
  37struct nftl_uci2 {
  38        __u16 FoldMark;
  39        __u16 FoldMark1;
  40        __u32 unused;
  41} __attribute__((packed));
  42
  43union nftl_uci {
  44        struct nftl_uci0 a;
  45        struct nftl_uci1 b;
  46        struct nftl_uci2 c;
  47};
  48
  49struct nftl_oob {
  50        struct nftl_bci b;
  51        union nftl_uci u;
  52};
  53
  54/* NFTL Media Header */
  55
  56struct 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
  86struct 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
 109int NFTL_mount(struct NFTLrecord *s);
 110int 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
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.