aboutsummaryrefslogtreecommitdiffstats
path: root/include/mtd
diff options
context:
space:
mode:
Diffstat (limited to 'include/mtd')
-rw-r--r--include/mtd/inftl-user.h91
-rw-r--r--include/mtd/jffs2-user.h35
-rw-r--r--include/mtd/mtd-abi.h103
-rw-r--r--include/mtd/mtd-user.h20
-rw-r--r--include/mtd/nftl-user.h76
5 files changed, 325 insertions, 0 deletions
diff --git a/include/mtd/inftl-user.h b/include/mtd/inftl-user.h
new file mode 100644
index 000000000000..bda4f2c8f728
--- /dev/null
+++ b/include/mtd/inftl-user.h
@@ -0,0 +1,91 @@
1/*
2 * $Id: inftl-user.h,v 1.1 2004/05/05 15:17:00 dwmw2 Exp $
3 *
4 * Parts of INFTL headers shared with userspace
5 *
6 */
7
8#ifndef __MTD_INFTL_USER_H__
9#define __MTD_INFTL_USER_H__
10
11#define OSAK_VERSION 0x5120
12#define PERCENTUSED 98
13
14#define SECTORSIZE 512
15
16/* Block Control Information */
17
18struct inftl_bci {
19 uint8_t ECCsig[6];
20 uint8_t Status;
21 uint8_t Status1;
22} __attribute__((packed));
23
24struct inftl_unithead1 {
25 uint16_t virtualUnitNo;
26 uint16_t prevUnitNo;
27 uint8_t ANAC;
28 uint8_t NACs;
29 uint8_t parityPerField;
30 uint8_t discarded;
31} __attribute__((packed));
32
33struct inftl_unithead2 {
34 uint8_t parityPerField;
35 uint8_t ANAC;
36 uint16_t prevUnitNo;
37 uint16_t virtualUnitNo;
38 uint8_t NACs;
39 uint8_t discarded;
40} __attribute__((packed));
41
42struct inftl_unittail {
43 uint8_t Reserved[4];
44 uint16_t EraseMark;
45 uint16_t EraseMark1;
46} __attribute__((packed));
47
48union inftl_uci {
49 struct inftl_unithead1 a;
50 struct inftl_unithead2 b;
51 struct inftl_unittail c;
52};
53
54struct inftl_oob {
55 struct inftl_bci b;
56 union inftl_uci u;
57};
58
59
60/* INFTL Media Header */
61
62struct 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
72struct 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
diff --git a/include/mtd/jffs2-user.h b/include/mtd/jffs2-user.h
new file mode 100644
index 000000000000..d508ef0ae091
--- /dev/null
+++ b/include/mtd/jffs2-user.h
@@ -0,0 +1,35 @@
1/*
2 * $Id: jffs2-user.h,v 1.1 2004/05/05 11:57:54 dwmw2 Exp $
3 *
4 * JFFS2 definitions for use in user space only
5 */
6
7#ifndef __JFFS2_USER_H__
8#define __JFFS2_USER_H__
9
10/* This file is blessed for inclusion by userspace */
11#include <linux/jffs2.h>
12#include <endian.h>
13#include <byteswap.h>
14
15#undef cpu_to_je16
16#undef cpu_to_je32
17#undef cpu_to_jemode
18#undef je16_to_cpu
19#undef je32_to_cpu
20#undef jemode_to_cpu
21
22extern int target_endian;
23
24#define t16(x) ({ uint16_t __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_16(__b); })
25#define t32(x) ({ uint32_t __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_32(__b); })
26
27#define cpu_to_je16(x) ((jint16_t){t16(x)})
28#define cpu_to_je32(x) ((jint32_t){t32(x)})
29#define cpu_to_jemode(x) ((jmode_t){t32(x)})
30
31#define je16_to_cpu(x) (t16((x).v16))
32#define je32_to_cpu(x) (t32((x).v32))
33#define jemode_to_cpu(x) (t32((x).m))
34
35#endif /* __JFFS2_USER_H__ */
diff --git a/include/mtd/mtd-abi.h b/include/mtd/mtd-abi.h
new file mode 100644
index 000000000000..a76ab898f445
--- /dev/null
+++ b/include/mtd/mtd-abi.h
@@ -0,0 +1,103 @@
1/*
2 * $Id: mtd-abi.h,v 1.7 2004/11/23 15:37:32 gleixner Exp $
3 *
4 * Portions of MTD ABI definition which are shared by kernel and user space
5 */
6
7#ifndef __MTD_ABI_H__
8#define __MTD_ABI_H__
9
10#ifndef __KERNEL__ /* Urgh. The whole point of splitting this out into
11 separate files was to avoid #ifdef __KERNEL__ */
12#define __user
13#endif
14
15struct erase_info_user {
16 uint32_t start;
17 uint32_t length;
18};
19
20struct mtd_oob_buf {
21 uint32_t start;
22 uint32_t length;
23 unsigned char __user *ptr;
24};
25
26#define MTD_ABSENT 0
27#define MTD_RAM 1
28#define MTD_ROM 2
29#define MTD_NORFLASH 3
30#define MTD_NANDFLASH 4
31#define MTD_PEROM 5
32#define MTD_OTHER 14
33#define MTD_UNKNOWN 15
34
35#define MTD_CLEAR_BITS 1 // Bits can be cleared (flash)
36#define MTD_SET_BITS 2 // Bits can be set
37#define MTD_ERASEABLE 4 // Has an erase function
38#define MTD_WRITEB_WRITEABLE 8 // Direct IO is possible
39#define MTD_VOLATILE 16 // Set for RAMs
40#define MTD_XIP 32 // eXecute-In-Place possible
41#define MTD_OOB 64 // Out-of-band data (NAND flash)
42#define MTD_ECC 128 // Device capable of automatic ECC
43#define MTD_NO_VIRTBLOCKS 256 // Virtual blocks not allowed
44
45// Some common devices / combinations of capabilities
46#define MTD_CAP_ROM 0
47#define MTD_CAP_RAM (MTD_CLEAR_BITS|MTD_SET_BITS|MTD_WRITEB_WRITEABLE)
48#define MTD_CAP_NORFLASH (MTD_CLEAR_BITS|MTD_ERASEABLE)
49#define MTD_CAP_NANDFLASH (MTD_CLEAR_BITS|MTD_ERASEABLE|MTD_OOB)
50#define MTD_WRITEABLE (MTD_CLEAR_BITS|MTD_SET_BITS)
51
52
53// Types of automatic ECC/Checksum available
54#define MTD_ECC_NONE 0 // No automatic ECC available
55#define MTD_ECC_RS_DiskOnChip 1 // Automatic ECC on DiskOnChip
56#define MTD_ECC_SW 2 // SW ECC for Toshiba & Samsung devices
57
58/* ECC byte placement */
59#define MTD_NANDECC_OFF 0 // Switch off ECC (Not recommended)
60#define MTD_NANDECC_PLACE 1 // Use the given placement in the structure (YAFFS1 legacy mode)
61#define MTD_NANDECC_AUTOPLACE 2 // Use the default placement scheme
62#define MTD_NANDECC_PLACEONLY 3 // Use the given placement in the structure (Do not store ecc result on read)
63
64struct mtd_info_user {
65 uint8_t type;
66 uint32_t flags;
67 uint32_t size; // Total size of the MTD
68 uint32_t erasesize;
69 uint32_t oobblock; // Size of OOB blocks (e.g. 512)
70 uint32_t oobsize; // Amount of OOB data per block (e.g. 16)
71 uint32_t ecctype;
72 uint32_t eccsize;
73};
74
75struct region_info_user {
76 uint32_t offset; /* At which this region starts,
77 * from the beginning of the MTD */
78 uint32_t erasesize; /* For this region */
79 uint32_t numblocks; /* Number of blocks in this region */
80 uint32_t regionindex;
81};
82
83#define MEMGETINFO _IOR('M', 1, struct mtd_info_user)
84#define MEMERASE _IOW('M', 2, struct erase_info_user)
85#define MEMWRITEOOB _IOWR('M', 3, struct mtd_oob_buf)
86#define MEMREADOOB _IOWR('M', 4, struct mtd_oob_buf)
87#define MEMLOCK _IOW('M', 5, struct erase_info_user)
88#define MEMUNLOCK _IOW('M', 6, struct erase_info_user)
89#define MEMGETREGIONCOUNT _IOR('M', 7, int)
90#define MEMGETREGIONINFO _IOWR('M', 8, struct region_info_user)
91#define MEMSETOOBSEL _IOW('M', 9, struct nand_oobinfo)
92#define MEMGETOOBSEL _IOR('M', 10, struct nand_oobinfo)
93#define MEMGETBADBLOCK _IOW('M', 11, loff_t)
94#define MEMSETBADBLOCK _IOW('M', 12, loff_t)
95
96struct nand_oobinfo {
97 uint32_t useecc;
98 uint32_t eccbytes;
99 uint32_t oobfree[8][2];
100 uint32_t eccpos[32];
101};
102
103#endif /* __MTD_ABI_H__ */
diff --git a/include/mtd/mtd-user.h b/include/mtd/mtd-user.h
new file mode 100644
index 000000000000..1c13fc7161fe
--- /dev/null
+++ b/include/mtd/mtd-user.h
@@ -0,0 +1,20 @@
1/*
2 * $Id: mtd-user.h,v 1.2 2004/05/05 14:44:57 dwmw2 Exp $
3 *
4 * MTD ABI header for use by user space only.
5 */
6
7#ifndef __MTD_USER_H__
8#define __MTD_USER_H__
9
10#include <stdint.h>
11
12/* This file is blessed for inclusion by userspace */
13#include <mtd/mtd-abi.h>
14
15typedef struct mtd_info_user mtd_info_t;
16typedef struct erase_info_user erase_info_t;
17typedef struct region_info_user region_info_t;
18typedef struct nand_oobinfo nand_oobinfo_t;
19
20#endif /* __MTD_USER_H__ */
diff --git a/include/mtd/nftl-user.h b/include/mtd/nftl-user.h
new file mode 100644
index 000000000000..924ec0459e9c
--- /dev/null
+++ b/include/mtd/nftl-user.h
@@ -0,0 +1,76 @@
1/*
2 * $Id: nftl-user.h,v 1.1 2004/05/05 14:44:57 dwmw2 Exp $
3 *
4 * Parts of NFTL headers shared with userspace
5 *
6 */
7
8#ifndef __MTD_NFTL_USER_H__
9#define __MTD_NFTL_USER_H__
10
11/* Block Control Information */
12
13struct nftl_bci {
14 unsigned char ECCSig[6];
15 uint8_t Status;
16 uint8_t Status1;
17}__attribute__((packed));
18
19/* Unit Control Information */
20
21struct nftl_uci0 {
22 uint16_t VirtUnitNum;
23 uint16_t ReplUnitNum;
24 uint16_t SpareVirtUnitNum;
25 uint16_t SpareReplUnitNum;
26} __attribute__((packed));
27
28struct nftl_uci1 {
29 uint32_t WearInfo;
30 uint16_t EraseMark;
31 uint16_t EraseMark1;
32} __attribute__((packed));
33
34struct nftl_uci2 {
35 uint16_t FoldMark;
36 uint16_t FoldMark1;
37 uint32_t unused;
38} __attribute__((packed));
39
40union nftl_uci {
41 struct nftl_uci0 a;
42 struct nftl_uci1 b;
43 struct nftl_uci2 c;
44};
45
46struct nftl_oob {
47 struct nftl_bci b;
48 union nftl_uci u;
49};
50
51/* NFTL Media Header */
52
53struct NFTLMediaHeader {
54 char DataOrgID[6];
55 uint16_t NumEraseUnits;
56 uint16_t FirstPhysicalEUN;
57 uint32_t FormattedSize;
58 unsigned char UnitSizeFactor;
59} __attribute__((packed));
60
61#define MAX_ERASE_ZONES (8192 - 512)
62
63#define ERASE_MARK 0x3c69
64#define SECTOR_FREE 0xff
65#define SECTOR_USED 0x55
66#define SECTOR_IGNORE 0x11
67#define SECTOR_DELETED 0x00
68
69#define FOLD_MARK_IN_PROGRESS 0x5555
70
71#define ZONE_GOOD 0xff
72#define ZONE_BAD_ORIGINAL 0
73#define ZONE_BAD_MARKED 7
74
75
76#endif /* __MTD_NFTL_USER_H__ */