~ubuntu-branches/ubuntu/maverick/u-boot-omap3/maverick

« back to all changes in this revision

Viewing changes to include/linux/mtd/mtd-abi.h

  • Committer: Bazaar Package Importer
  • Author(s): Oliver Grawert
  • Date: 2010-03-22 15:06:23 UTC
  • Revision ID: james.westby@ubuntu.com-20100322150623-i21g8rgiyl5dohag
Tags: upstream-2010.3git20100315
ImportĀ upstreamĀ versionĀ 2010.3git20100315

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * $Id: mtd-abi.h,v 1.13 2005/11/07 11:14:56 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
#if 1
 
11
#include <linux/mtd/compat.h>
 
12
#endif
 
13
 
 
14
struct erase_info_user {
 
15
        uint32_t start;
 
16
        uint32_t length;
 
17
};
 
18
 
 
19
struct mtd_oob_buf {
 
20
        uint32_t start;
 
21
        uint32_t length;
 
22
        unsigned char __user *ptr;
 
23
};
 
24
 
 
25
#define MTD_ABSENT              0
 
26
#define MTD_RAM                 1
 
27
#define MTD_ROM                 2
 
28
#define MTD_NORFLASH            3
 
29
#define MTD_NANDFLASH           4
 
30
#define MTD_DATAFLASH           6
 
31
#define MTD_UBIVOLUME           7
 
32
 
 
33
#define MTD_WRITEABLE           0x400   /* Device is writeable */
 
34
#define MTD_BIT_WRITEABLE       0x800   /* Single bits can be flipped */
 
35
#define MTD_NO_ERASE            0x1000  /* No erase necessary */
 
36
#define MTD_STUPID_LOCK         0x2000  /* Always locked after reset */
 
37
 
 
38
/* Some common devices / combinations of capabilities */
 
39
#define MTD_CAP_ROM             0
 
40
#define MTD_CAP_RAM             (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
 
41
#define MTD_CAP_NORFLASH        (MTD_WRITEABLE | MTD_BIT_WRITEABLE)
 
42
#define MTD_CAP_NANDFLASH       (MTD_WRITEABLE)
 
43
 
 
44
/* ECC byte placement */
 
45
#define MTD_NANDECC_OFF         0       /* Switch off ECC (Not recommended) */
 
46
#define MTD_NANDECC_PLACE       1       /* Use the given placement in the structure (YAFFS1 legacy mode) */
 
47
#define MTD_NANDECC_AUTOPLACE   2       /* Use the default placement scheme */
 
48
#define MTD_NANDECC_PLACEONLY   3       /* Use the given placement in the structure (Do not store ecc result on read) */
 
49
#define MTD_NANDECC_AUTOPL_USR  4       /* Use the given autoplacement scheme rather than using the default */
 
50
 
 
51
/* OTP mode selection */
 
52
#define MTD_OTP_OFF             0
 
53
#define MTD_OTP_FACTORY         1
 
54
#define MTD_OTP_USER            2
 
55
 
 
56
struct mtd_info_user {
 
57
        uint8_t type;
 
58
        uint32_t flags;
 
59
        uint32_t size;                  /* Total size of the MTD */
 
60
        uint32_t erasesize;
 
61
        uint32_t writesize;
 
62
        uint32_t oobsize;               /* Amount of OOB data per block (e.g. 16) */
 
63
        /* The below two fields are obsolete and broken, do not use them
 
64
         * (TODO: remove at some point) */
 
65
        uint32_t ecctype;
 
66
        uint32_t eccsize;
 
67
};
 
68
 
 
69
struct region_info_user {
 
70
        uint32_t offset;                /* At which this region starts,
 
71
                                         * from the beginning of the MTD */
 
72
        uint32_t erasesize;             /* For this region */
 
73
        uint32_t numblocks;             /* Number of blocks in this region */
 
74
        uint32_t regionindex;
 
75
};
 
76
 
 
77
struct otp_info {
 
78
        uint32_t start;
 
79
        uint32_t length;
 
80
        uint32_t locked;
 
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
#define OTPSELECT               _IOR('M', 13, int)
 
96
#define OTPGETREGIONCOUNT       _IOW('M', 14, int)
 
97
#define OTPGETREGIONINFO        _IOW('M', 15, struct otp_info)
 
98
#define OTPLOCK                 _IOR('M', 16, struct otp_info)
 
99
#define ECCGETLAYOUT            _IOR('M', 17, struct nand_ecclayout)
 
100
#define ECCGETSTATS             _IOR('M', 18, struct mtd_ecc_stats)
 
101
#define MTDFILEMODE             _IO('M', 19)
 
102
 
 
103
/*
 
104
 * Obsolete legacy interface. Keep it in order not to break userspace
 
105
 * interfaces
 
106
 */
 
107
struct nand_oobinfo {
 
108
        uint32_t useecc;
 
109
        uint32_t eccbytes;
 
110
        uint32_t oobfree[8][2];
 
111
        uint32_t eccpos[48];
 
112
};
 
113
 
 
114
struct nand_oobfree {
 
115
        uint32_t offset;
 
116
        uint32_t length;
 
117
};
 
118
 
 
119
#define MTD_MAX_OOBFREE_ENTRIES 8
 
120
/*
 
121
 * ECC layout control structure. Exported to userspace for
 
122
 * diagnosis and to allow creation of raw images
 
123
 */
 
124
struct nand_ecclayout {
 
125
        uint32_t eccbytes;
 
126
        uint32_t eccpos[128];
 
127
        uint32_t oobavail;
 
128
        struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES];
 
129
};
 
130
 
 
131
/**
 
132
 * struct mtd_ecc_stats - error correction stats
 
133
 *
 
134
 * @corrected:  number of corrected bits
 
135
 * @failed:     number of uncorrectable errors
 
136
 * @badblocks:  number of bad blocks in this partition
 
137
 * @bbtblocks:  number of blocks reserved for bad block tables
 
138
 */
 
139
struct mtd_ecc_stats {
 
140
        uint32_t corrected;
 
141
        uint32_t failed;
 
142
        uint32_t badblocks;
 
143
        uint32_t bbtblocks;
 
144
};
 
145
 
 
146
/*
 
147
 * Read/write file modes for access to MTD
 
148
 */
 
149
enum mtd_file_modes {
 
150
        MTD_MODE_NORMAL = MTD_OTP_OFF,
 
151
        MTD_MODE_OTP_FACTORY = MTD_OTP_FACTORY,
 
152
        MTD_MODE_OTP_USER = MTD_OTP_USER,
 
153
        MTD_MODE_RAW,
 
154
};
 
155
 
 
156
#endif /* __MTD_ABI_H__ */