xref: /linux-6.15/include/linux/mtd/ftl.h (revision 1da177e4)
1*1da177e4SLinus Torvalds /*
2*1da177e4SLinus Torvalds  * $Id: ftl.h,v 1.6 2003/01/24 13:20:04 dwmw2 Exp $
3*1da177e4SLinus Torvalds  *
4*1da177e4SLinus Torvalds  * Derived from (and probably identical to):
5*1da177e4SLinus Torvalds  * ftl.h 1.7 1999/10/25 20:23:17
6*1da177e4SLinus Torvalds  *
7*1da177e4SLinus Torvalds  * The contents of this file are subject to the Mozilla Public License
8*1da177e4SLinus Torvalds  * Version 1.1 (the "License"); you may not use this file except in
9*1da177e4SLinus Torvalds  * compliance with the License. You may obtain a copy of the License
10*1da177e4SLinus Torvalds  * at http://www.mozilla.org/MPL/
11*1da177e4SLinus Torvalds  *
12*1da177e4SLinus Torvalds  * Software distributed under the License is distributed on an "AS IS"
13*1da177e4SLinus Torvalds  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
14*1da177e4SLinus Torvalds  * the License for the specific language governing rights and
15*1da177e4SLinus Torvalds  * limitations under the License.
16*1da177e4SLinus Torvalds  *
17*1da177e4SLinus Torvalds  * The initial developer of the original code is David A. Hinds
18*1da177e4SLinus Torvalds  * <[email protected]>.  Portions created by David A. Hinds
19*1da177e4SLinus Torvalds  * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
20*1da177e4SLinus Torvalds  *
21*1da177e4SLinus Torvalds  * Alternatively, the contents of this file may be used under the
22*1da177e4SLinus Torvalds  * terms of the GNU General Public License version 2 (the "GPL"), in
23*1da177e4SLinus Torvalds  * which case the provisions of the GPL are applicable instead of the
24*1da177e4SLinus Torvalds  * above.  If you wish to allow the use of your version of this file
25*1da177e4SLinus Torvalds  * only under the terms of the GPL and not to allow others to use
26*1da177e4SLinus Torvalds  * your version of this file under the MPL, indicate your decision by
27*1da177e4SLinus Torvalds  * deleting the provisions above and replace them with the notice and
28*1da177e4SLinus Torvalds  * other provisions required by the GPL.  If you do not delete the
29*1da177e4SLinus Torvalds  * provisions above, a recipient may use your version of this file
30*1da177e4SLinus Torvalds  * under either the MPL or the GPL.
31*1da177e4SLinus Torvalds  */
32*1da177e4SLinus Torvalds 
33*1da177e4SLinus Torvalds #ifndef _LINUX_FTL_H
34*1da177e4SLinus Torvalds #define _LINUX_FTL_H
35*1da177e4SLinus Torvalds 
36*1da177e4SLinus Torvalds typedef struct erase_unit_header_t {
37*1da177e4SLinus Torvalds     u_int8_t	LinkTargetTuple[5];
38*1da177e4SLinus Torvalds     u_int8_t	DataOrgTuple[10];
39*1da177e4SLinus Torvalds     u_int8_t	NumTransferUnits;
40*1da177e4SLinus Torvalds     u_int32_t	EraseCount;
41*1da177e4SLinus Torvalds     u_int16_t	LogicalEUN;
42*1da177e4SLinus Torvalds     u_int8_t	BlockSize;
43*1da177e4SLinus Torvalds     u_int8_t	EraseUnitSize;
44*1da177e4SLinus Torvalds     u_int16_t	FirstPhysicalEUN;
45*1da177e4SLinus Torvalds     u_int16_t	NumEraseUnits;
46*1da177e4SLinus Torvalds     u_int32_t	FormattedSize;
47*1da177e4SLinus Torvalds     u_int32_t	FirstVMAddress;
48*1da177e4SLinus Torvalds     u_int16_t	NumVMPages;
49*1da177e4SLinus Torvalds     u_int8_t	Flags;
50*1da177e4SLinus Torvalds     u_int8_t	Code;
51*1da177e4SLinus Torvalds     u_int32_t	SerialNumber;
52*1da177e4SLinus Torvalds     u_int32_t	AltEUHOffset;
53*1da177e4SLinus Torvalds     u_int32_t	BAMOffset;
54*1da177e4SLinus Torvalds     u_int8_t	Reserved[12];
55*1da177e4SLinus Torvalds     u_int8_t	EndTuple[2];
56*1da177e4SLinus Torvalds } erase_unit_header_t;
57*1da177e4SLinus Torvalds 
58*1da177e4SLinus Torvalds /* Flags in erase_unit_header_t */
59*1da177e4SLinus Torvalds #define HIDDEN_AREA		0x01
60*1da177e4SLinus Torvalds #define REVERSE_POLARITY	0x02
61*1da177e4SLinus Torvalds #define DOUBLE_BAI		0x04
62*1da177e4SLinus Torvalds 
63*1da177e4SLinus Torvalds /* Definitions for block allocation information */
64*1da177e4SLinus Torvalds 
65*1da177e4SLinus Torvalds #define BLOCK_FREE(b)		((b) == 0xffffffff)
66*1da177e4SLinus Torvalds #define BLOCK_DELETED(b)	(((b) == 0) || ((b) == 0xfffffffe))
67*1da177e4SLinus Torvalds 
68*1da177e4SLinus Torvalds #define BLOCK_TYPE(b)		((b) & 0x7f)
69*1da177e4SLinus Torvalds #define BLOCK_ADDRESS(b)	((b) & ~0x7f)
70*1da177e4SLinus Torvalds #define BLOCK_NUMBER(b)		((b) >> 9)
71*1da177e4SLinus Torvalds #define BLOCK_CONTROL		0x30
72*1da177e4SLinus Torvalds #define BLOCK_DATA		0x40
73*1da177e4SLinus Torvalds #define BLOCK_REPLACEMENT	0x60
74*1da177e4SLinus Torvalds #define BLOCK_BAD		0x70
75*1da177e4SLinus Torvalds 
76*1da177e4SLinus Torvalds #endif /* _LINUX_FTL_H */
77