1 /*
2  * Parts of INFTL headers shared with userspace
3  *
4  */
5 
6 #ifndef __MTD_INFTL_USER_H__
7 #define __MTD_INFTL_USER_H__
8 
9 #include <linux/types.h>
10 
11 #define	OSAK_VERSION	0x5120
12 #define	PERCENTUSED	98
13 
14 #define	SECTORSIZE	512
15 
16 /* Block Control Information */
17 
18 struct inftl_bci {
19 	__u8 ECCsig[6];
20 	__u8 Status;
21 	__u8 Status1;
22 } __attribute__((packed));
23 
24 struct inftl_unithead1 {
25 	__u16 virtualUnitNo;
26 	__u16 prevUnitNo;
27 	__u8 ANAC;
28 	__u8 NACs;
29 	__u8 parityPerField;
30 	__u8 discarded;
31 } __attribute__((packed));
32 
33 struct inftl_unithead2 {
34 	__u8 parityPerField;
35 	__u8 ANAC;
36 	__u16 prevUnitNo;
37 	__u16 virtualUnitNo;
38 	__u8 NACs;
39 	__u8 discarded;
40 } __attribute__((packed));
41 
42 struct inftl_unittail {
43 	__u8 Reserved[4];
44 	__u16 EraseMark;
45 	__u16 EraseMark1;
46 } __attribute__((packed));
47 
48 union inftl_uci {
49 	struct inftl_unithead1 a;
50 	struct inftl_unithead2 b;
51 	struct inftl_unittail c;
52 };
53 
54 struct inftl_oob {
55 	struct inftl_bci b;
56 	union inftl_uci u;
57 };
58 
59 
60 /* INFTL Media Header */
61 
62 struct INFTLPartition {
63 	__u32 virtualUnits;
64 	__u32 firstUnit;
65 	__u32 lastUnit;
66 	__u32 flags;
67 	__u32 spareUnits;
68 	__u32 Reserved0;
69 	__u32 Reserved1;
70 } __attribute__((packed));
71 
72 struct INFTLMediaHeader {
73 	char bootRecordID[8];
74 	__u32 NoOfBootImageBlocks;
75 	__u32 NoOfBinaryPartitions;
76 	__u32 NoOfBDTLPartitions;
77 	__u32 BlockMultiplierBits;
78 	__u32 FormatFlags;
79 	__u32 OsakVersion;
80 	__u32 PercentUsed;
81 	struct INFTLPartition Partitions[4];
82 } __attribute__((packed));
83 
84 /* Partition flag types */
85 #define	INFTL_BINARY	0x20000000
86 #define	INFTL_BDTL	0x40000000
87 #define	INFTL_LAST	0x80000000
88 
89 #endif /* __MTD_INFTL_USER_H__ */
90 
91 
92