Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
423 giacomo 1
/*
2
 *      inftl.h -- defines to support the Inverse NAND Flash Translation Layer
3
 *
4
 *      (C) Copyright 2002, Greg Ungerer (gerg@snapgear.com)
5
 *
6
 *      $Id: inftl.h,v 1.1 2004-01-28 15:30:49 giacomo Exp $
7
 */
8
 
9
#ifndef __MTD_INFTL_H__
10
#define __MTD_INFTL_H__
11
 
12
#include <linux/mtd/blktrans.h>
13
#include <linux/mtd/mtd.h>
14
#include <linux/mtd/nftl.h>
15
 
16
#define OSAK_VERSION    0x5120
17
#define PERCENTUSED     98
18
 
19
#define SECTORSIZE      512
20
 
21
#ifndef INFTL_MAJOR
22
#define INFTL_MAJOR 93 /* FIXME */
23
#endif
24
#define INFTL_PARTN_BITS 4
25
 
26
/* Block Control Information */
27
 
28
struct inftl_bci {
29
        __u8 ECCsig[6];
30
        __u8 Status;
31
        __u8 Status1;
32
} __attribute__((packed));
33
 
34
struct inftl_unithead1 {
35
        __u16 virtualUnitNo;
36
        __u16 prevUnitNo;
37
        __u8 ANAC;
38
        __u8 NACs;
39
        __u8 parityPerField;
40
        __u8 discarded;
41
} __attribute__((packed));
42
 
43
struct inftl_unithead2 {
44
        __u8 parityPerField;
45
        __u8 ANAC;
46
        __u16 prevUnitNo;
47
        __u16 virtualUnitNo;
48
        __u8 NACs;
49
        __u8 discarded;
50
} __attribute__((packed));
51
 
52
struct inftl_unittail {
53
        __u8 Reserved[4];
54
        __u16 EraseMark;
55
        __u16 EraseMark1;
56
} __attribute__((packed));
57
 
58
union inftl_uci {
59
        struct inftl_unithead1 a;
60
        struct inftl_unithead2 b;
61
        struct inftl_unittail c;
62
};
63
 
64
struct inftl_oob {
65
        struct inftl_bci b;
66
        union inftl_uci u;
67
};
68
 
69
 
70
/* INFTL Media Header */
71
 
72
struct INFTLPartition {
73
        __u32 virtualUnits;
74
        __u32 firstUnit;
75
        __u32 lastUnit;
76
        __u32 flags;
77
        __u32 spareUnits;
78
        __u32 Reserved0;
79
        __u32 Reserved1;
80
} __attribute__((packed));
81
 
82
struct INFTLMediaHeader {
83
        char bootRecordID[8];
84
        __u32 NoOfBootImageBlocks;
85
        __u32 NoOfBinaryPartitions;
86
        __u32 NoOfBDTLPartitions;
87
        __u32 BlockMultiplierBits;
88
        __u32 FormatFlags;
89
        __u32 OsakVersion;
90
        __u32 PercentUsed;
91
        struct INFTLPartition Partitions[4];
92
} __attribute__((packed));
93
 
94
/* Partition flag types */
95
#define INFTL_BINARY    0x20000000
96
#define INFTL_BDTL      0x40000000
97
#define INFTL_LAST      0x80000000
98
 
99
 
100
#ifdef __KERNEL__
101
 
102
struct INFTLrecord {
103
        struct mtd_blktrans_dev mbd;
104
        __u16 MediaUnit, SpareMediaUnit;
105
        __u32 EraseSize;
106
        struct INFTLMediaHeader MediaHdr;
107
        int usecount;
108
        unsigned char heads;
109
        unsigned char sectors;
110
        unsigned short cylinders;
111
        __u16 numvunits;
112
        __u16 firstEUN;
113
        __u16 lastEUN;
114
        __u16 numfreeEUNs;
115
        __u16 LastFreeEUN;              /* To speed up finding a free EUN */
116
        int head,sect,cyl;
117
        __u16 *PUtable;                 /* Physical Unit Table  */
118
        __u16 *VUtable;                 /* Virtual Unit Table */
119
        unsigned int nb_blocks;         /* number of physical blocks */
120
        unsigned int nb_boot_blocks;    /* number of blocks used by the bios */
121
        struct erase_info instr;
122
};
123
 
124
int INFTL_mount(struct INFTLrecord *s);
125
int INFTL_formatblock(struct INFTLrecord *s, int block);
126
 
127
#endif /* __KERNEL__ */
128
 
129
#endif /* __MTD_INFTL_H__ */