xref: /aosp_15_r20/external/kernel-headers/original/uapi/mtd/mtd-abi.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2*f80ad8b4SAndroid Build Coastguard Worker /*
3*f80ad8b4SAndroid Build Coastguard Worker  * Copyright © 1999-2010 David Woodhouse <[email protected]> et al.
4*f80ad8b4SAndroid Build Coastguard Worker  *
5*f80ad8b4SAndroid Build Coastguard Worker  * This program is free software; you can redistribute it and/or modify
6*f80ad8b4SAndroid Build Coastguard Worker  * it under the terms of the GNU General Public License as published by
7*f80ad8b4SAndroid Build Coastguard Worker  * the Free Software Foundation; either version 2 of the License, or
8*f80ad8b4SAndroid Build Coastguard Worker  * (at your option) any later version.
9*f80ad8b4SAndroid Build Coastguard Worker  *
10*f80ad8b4SAndroid Build Coastguard Worker  * This program is distributed in the hope that it will be useful,
11*f80ad8b4SAndroid Build Coastguard Worker  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*f80ad8b4SAndroid Build Coastguard Worker  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*f80ad8b4SAndroid Build Coastguard Worker  * GNU General Public License for more details.
14*f80ad8b4SAndroid Build Coastguard Worker  *
15*f80ad8b4SAndroid Build Coastguard Worker  * You should have received a copy of the GNU General Public License
16*f80ad8b4SAndroid Build Coastguard Worker  * along with this program; if not, write to the Free Software
17*f80ad8b4SAndroid Build Coastguard Worker  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18*f80ad8b4SAndroid Build Coastguard Worker  *
19*f80ad8b4SAndroid Build Coastguard Worker  */
20*f80ad8b4SAndroid Build Coastguard Worker 
21*f80ad8b4SAndroid Build Coastguard Worker #ifndef __MTD_ABI_H__
22*f80ad8b4SAndroid Build Coastguard Worker #define __MTD_ABI_H__
23*f80ad8b4SAndroid Build Coastguard Worker 
24*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h>
25*f80ad8b4SAndroid Build Coastguard Worker 
26*f80ad8b4SAndroid Build Coastguard Worker struct erase_info_user {
27*f80ad8b4SAndroid Build Coastguard Worker 	__u32 start;
28*f80ad8b4SAndroid Build Coastguard Worker 	__u32 length;
29*f80ad8b4SAndroid Build Coastguard Worker };
30*f80ad8b4SAndroid Build Coastguard Worker 
31*f80ad8b4SAndroid Build Coastguard Worker struct erase_info_user64 {
32*f80ad8b4SAndroid Build Coastguard Worker 	__u64 start;
33*f80ad8b4SAndroid Build Coastguard Worker 	__u64 length;
34*f80ad8b4SAndroid Build Coastguard Worker };
35*f80ad8b4SAndroid Build Coastguard Worker 
36*f80ad8b4SAndroid Build Coastguard Worker struct mtd_oob_buf {
37*f80ad8b4SAndroid Build Coastguard Worker 	__u32 start;
38*f80ad8b4SAndroid Build Coastguard Worker 	__u32 length;
39*f80ad8b4SAndroid Build Coastguard Worker 	unsigned char __user *ptr;
40*f80ad8b4SAndroid Build Coastguard Worker };
41*f80ad8b4SAndroid Build Coastguard Worker 
42*f80ad8b4SAndroid Build Coastguard Worker struct mtd_oob_buf64 {
43*f80ad8b4SAndroid Build Coastguard Worker 	__u64 start;
44*f80ad8b4SAndroid Build Coastguard Worker 	__u32 pad;
45*f80ad8b4SAndroid Build Coastguard Worker 	__u32 length;
46*f80ad8b4SAndroid Build Coastguard Worker 	__u64 usr_ptr;
47*f80ad8b4SAndroid Build Coastguard Worker };
48*f80ad8b4SAndroid Build Coastguard Worker 
49*f80ad8b4SAndroid Build Coastguard Worker /**
50*f80ad8b4SAndroid Build Coastguard Worker  * MTD operation modes
51*f80ad8b4SAndroid Build Coastguard Worker  *
52*f80ad8b4SAndroid Build Coastguard Worker  * @MTD_OPS_PLACE_OOB:	OOB data are placed at the given offset (default)
53*f80ad8b4SAndroid Build Coastguard Worker  * @MTD_OPS_AUTO_OOB:	OOB data are automatically placed at the free areas
54*f80ad8b4SAndroid Build Coastguard Worker  *			which are defined by the internal ecclayout
55*f80ad8b4SAndroid Build Coastguard Worker  * @MTD_OPS_RAW:	data are transferred as-is, with no error correction;
56*f80ad8b4SAndroid Build Coastguard Worker  *			this mode implies %MTD_OPS_PLACE_OOB
57*f80ad8b4SAndroid Build Coastguard Worker  *
58*f80ad8b4SAndroid Build Coastguard Worker  * These modes can be passed to ioctl(MEMWRITE) and ioctl(MEMREAD); they are
59*f80ad8b4SAndroid Build Coastguard Worker  * also used internally. See notes on "MTD file modes" for discussion on
60*f80ad8b4SAndroid Build Coastguard Worker  * %MTD_OPS_RAW vs. %MTD_FILE_MODE_RAW.
61*f80ad8b4SAndroid Build Coastguard Worker  */
62*f80ad8b4SAndroid Build Coastguard Worker enum {
63*f80ad8b4SAndroid Build Coastguard Worker 	MTD_OPS_PLACE_OOB = 0,
64*f80ad8b4SAndroid Build Coastguard Worker 	MTD_OPS_AUTO_OOB = 1,
65*f80ad8b4SAndroid Build Coastguard Worker 	MTD_OPS_RAW = 2,
66*f80ad8b4SAndroid Build Coastguard Worker };
67*f80ad8b4SAndroid Build Coastguard Worker 
68*f80ad8b4SAndroid Build Coastguard Worker /**
69*f80ad8b4SAndroid Build Coastguard Worker  * struct mtd_write_req - data structure for requesting a write operation
70*f80ad8b4SAndroid Build Coastguard Worker  *
71*f80ad8b4SAndroid Build Coastguard Worker  * @start:	start address
72*f80ad8b4SAndroid Build Coastguard Worker  * @len:	length of data buffer (only lower 32 bits are used)
73*f80ad8b4SAndroid Build Coastguard Worker  * @ooblen:	length of OOB buffer (only lower 32 bits are used)
74*f80ad8b4SAndroid Build Coastguard Worker  * @usr_data:	user-provided data buffer
75*f80ad8b4SAndroid Build Coastguard Worker  * @usr_oob:	user-provided OOB buffer
76*f80ad8b4SAndroid Build Coastguard Worker  * @mode:	MTD mode (see "MTD operation modes")
77*f80ad8b4SAndroid Build Coastguard Worker  * @padding:	reserved, must be set to 0
78*f80ad8b4SAndroid Build Coastguard Worker  *
79*f80ad8b4SAndroid Build Coastguard Worker  * This structure supports ioctl(MEMWRITE) operations, allowing data and/or OOB
80*f80ad8b4SAndroid Build Coastguard Worker  * writes in various modes. To write to OOB-only, set @usr_data == NULL, and to
81*f80ad8b4SAndroid Build Coastguard Worker  * write data-only, set @usr_oob == NULL. However, setting both @usr_data and
82*f80ad8b4SAndroid Build Coastguard Worker  * @usr_oob to NULL is not allowed.
83*f80ad8b4SAndroid Build Coastguard Worker  */
84*f80ad8b4SAndroid Build Coastguard Worker struct mtd_write_req {
85*f80ad8b4SAndroid Build Coastguard Worker 	__u64 start;
86*f80ad8b4SAndroid Build Coastguard Worker 	__u64 len;
87*f80ad8b4SAndroid Build Coastguard Worker 	__u64 ooblen;
88*f80ad8b4SAndroid Build Coastguard Worker 	__u64 usr_data;
89*f80ad8b4SAndroid Build Coastguard Worker 	__u64 usr_oob;
90*f80ad8b4SAndroid Build Coastguard Worker 	__u8 mode;
91*f80ad8b4SAndroid Build Coastguard Worker 	__u8 padding[7];
92*f80ad8b4SAndroid Build Coastguard Worker };
93*f80ad8b4SAndroid Build Coastguard Worker 
94*f80ad8b4SAndroid Build Coastguard Worker /**
95*f80ad8b4SAndroid Build Coastguard Worker  * struct mtd_read_req_ecc_stats - ECC statistics for a read operation
96*f80ad8b4SAndroid Build Coastguard Worker  *
97*f80ad8b4SAndroid Build Coastguard Worker  * @uncorrectable_errors: the number of uncorrectable errors that happened
98*f80ad8b4SAndroid Build Coastguard Worker  *			  during the read operation
99*f80ad8b4SAndroid Build Coastguard Worker  * @corrected_bitflips: the number of bitflips corrected during the read
100*f80ad8b4SAndroid Build Coastguard Worker  *			operation
101*f80ad8b4SAndroid Build Coastguard Worker  * @max_bitflips: the maximum number of bitflips detected in any single ECC
102*f80ad8b4SAndroid Build Coastguard Worker  *		  step for the data read during the operation; this information
103*f80ad8b4SAndroid Build Coastguard Worker  *		  can be used to decide whether the data stored in a specific
104*f80ad8b4SAndroid Build Coastguard Worker  *		  region of the MTD device should be moved somewhere else to
105*f80ad8b4SAndroid Build Coastguard Worker  *		  avoid data loss.
106*f80ad8b4SAndroid Build Coastguard Worker  */
107*f80ad8b4SAndroid Build Coastguard Worker struct mtd_read_req_ecc_stats {
108*f80ad8b4SAndroid Build Coastguard Worker 	__u32 uncorrectable_errors;
109*f80ad8b4SAndroid Build Coastguard Worker 	__u32 corrected_bitflips;
110*f80ad8b4SAndroid Build Coastguard Worker 	__u32 max_bitflips;
111*f80ad8b4SAndroid Build Coastguard Worker };
112*f80ad8b4SAndroid Build Coastguard Worker 
113*f80ad8b4SAndroid Build Coastguard Worker /**
114*f80ad8b4SAndroid Build Coastguard Worker  * struct mtd_read_req - data structure for requesting a read operation
115*f80ad8b4SAndroid Build Coastguard Worker  *
116*f80ad8b4SAndroid Build Coastguard Worker  * @start:	start address
117*f80ad8b4SAndroid Build Coastguard Worker  * @len:	length of data buffer (only lower 32 bits are used)
118*f80ad8b4SAndroid Build Coastguard Worker  * @ooblen:	length of OOB buffer (only lower 32 bits are used)
119*f80ad8b4SAndroid Build Coastguard Worker  * @usr_data:	user-provided data buffer
120*f80ad8b4SAndroid Build Coastguard Worker  * @usr_oob:	user-provided OOB buffer
121*f80ad8b4SAndroid Build Coastguard Worker  * @mode:	MTD mode (see "MTD operation modes")
122*f80ad8b4SAndroid Build Coastguard Worker  * @padding:	reserved, must be set to 0
123*f80ad8b4SAndroid Build Coastguard Worker  * @ecc_stats:	ECC statistics for the read operation
124*f80ad8b4SAndroid Build Coastguard Worker  *
125*f80ad8b4SAndroid Build Coastguard Worker  * This structure supports ioctl(MEMREAD) operations, allowing data and/or OOB
126*f80ad8b4SAndroid Build Coastguard Worker  * reads in various modes. To read from OOB-only, set @usr_data == NULL, and to
127*f80ad8b4SAndroid Build Coastguard Worker  * read data-only, set @usr_oob == NULL. However, setting both @usr_data and
128*f80ad8b4SAndroid Build Coastguard Worker  * @usr_oob to NULL is not allowed.
129*f80ad8b4SAndroid Build Coastguard Worker  */
130*f80ad8b4SAndroid Build Coastguard Worker struct mtd_read_req {
131*f80ad8b4SAndroid Build Coastguard Worker 	__u64 start;
132*f80ad8b4SAndroid Build Coastguard Worker 	__u64 len;
133*f80ad8b4SAndroid Build Coastguard Worker 	__u64 ooblen;
134*f80ad8b4SAndroid Build Coastguard Worker 	__u64 usr_data;
135*f80ad8b4SAndroid Build Coastguard Worker 	__u64 usr_oob;
136*f80ad8b4SAndroid Build Coastguard Worker 	__u8 mode;
137*f80ad8b4SAndroid Build Coastguard Worker 	__u8 padding[7];
138*f80ad8b4SAndroid Build Coastguard Worker 	struct mtd_read_req_ecc_stats ecc_stats;
139*f80ad8b4SAndroid Build Coastguard Worker };
140*f80ad8b4SAndroid Build Coastguard Worker 
141*f80ad8b4SAndroid Build Coastguard Worker #define MTD_ABSENT		0
142*f80ad8b4SAndroid Build Coastguard Worker #define MTD_RAM			1
143*f80ad8b4SAndroid Build Coastguard Worker #define MTD_ROM			2
144*f80ad8b4SAndroid Build Coastguard Worker #define MTD_NORFLASH		3
145*f80ad8b4SAndroid Build Coastguard Worker #define MTD_NANDFLASH		4	/* SLC NAND */
146*f80ad8b4SAndroid Build Coastguard Worker #define MTD_DATAFLASH		6
147*f80ad8b4SAndroid Build Coastguard Worker #define MTD_UBIVOLUME		7
148*f80ad8b4SAndroid Build Coastguard Worker #define MTD_MLCNANDFLASH	8	/* MLC NAND (including TLC) */
149*f80ad8b4SAndroid Build Coastguard Worker 
150*f80ad8b4SAndroid Build Coastguard Worker #define MTD_WRITEABLE		0x400	/* Device is writeable */
151*f80ad8b4SAndroid Build Coastguard Worker #define MTD_BIT_WRITEABLE	0x800	/* Single bits can be flipped */
152*f80ad8b4SAndroid Build Coastguard Worker #define MTD_NO_ERASE		0x1000	/* No erase necessary */
153*f80ad8b4SAndroid Build Coastguard Worker #define MTD_POWERUP_LOCK	0x2000	/* Always locked after reset */
154*f80ad8b4SAndroid Build Coastguard Worker #define MTD_SLC_ON_MLC_EMULATION 0x4000	/* Emulate SLC behavior on MLC NANDs */
155*f80ad8b4SAndroid Build Coastguard Worker 
156*f80ad8b4SAndroid Build Coastguard Worker /* Some common devices / combinations of capabilities */
157*f80ad8b4SAndroid Build Coastguard Worker #define MTD_CAP_ROM		0
158*f80ad8b4SAndroid Build Coastguard Worker #define MTD_CAP_RAM		(MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
159*f80ad8b4SAndroid Build Coastguard Worker #define MTD_CAP_NORFLASH	(MTD_WRITEABLE | MTD_BIT_WRITEABLE)
160*f80ad8b4SAndroid Build Coastguard Worker #define MTD_CAP_NANDFLASH	(MTD_WRITEABLE)
161*f80ad8b4SAndroid Build Coastguard Worker #define MTD_CAP_NVRAM		(MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
162*f80ad8b4SAndroid Build Coastguard Worker 
163*f80ad8b4SAndroid Build Coastguard Worker /* Obsolete ECC byte placement modes (used with obsolete MEMGETOOBSEL) */
164*f80ad8b4SAndroid Build Coastguard Worker #define MTD_NANDECC_OFF		0	/* Switch off ECC (Not recommended) */
165*f80ad8b4SAndroid Build Coastguard Worker #define MTD_NANDECC_PLACE	1	/* Use the given placement in the structure (YAFFS1 legacy mode) */
166*f80ad8b4SAndroid Build Coastguard Worker #define MTD_NANDECC_AUTOPLACE	2	/* Use the default placement scheme */
167*f80ad8b4SAndroid Build Coastguard Worker #define MTD_NANDECC_PLACEONLY	3	/* Use the given placement in the structure (Do not store ecc result on read) */
168*f80ad8b4SAndroid Build Coastguard Worker #define MTD_NANDECC_AUTOPL_USR 	4	/* Use the given autoplacement scheme rather than using the default */
169*f80ad8b4SAndroid Build Coastguard Worker 
170*f80ad8b4SAndroid Build Coastguard Worker /* OTP mode selection */
171*f80ad8b4SAndroid Build Coastguard Worker #define MTD_OTP_OFF		0
172*f80ad8b4SAndroid Build Coastguard Worker #define MTD_OTP_FACTORY		1
173*f80ad8b4SAndroid Build Coastguard Worker #define MTD_OTP_USER		2
174*f80ad8b4SAndroid Build Coastguard Worker 
175*f80ad8b4SAndroid Build Coastguard Worker struct mtd_info_user {
176*f80ad8b4SAndroid Build Coastguard Worker 	__u8 type;
177*f80ad8b4SAndroid Build Coastguard Worker 	__u32 flags;
178*f80ad8b4SAndroid Build Coastguard Worker 	__u32 size;	/* Total size of the MTD */
179*f80ad8b4SAndroid Build Coastguard Worker 	__u32 erasesize;
180*f80ad8b4SAndroid Build Coastguard Worker 	__u32 writesize;
181*f80ad8b4SAndroid Build Coastguard Worker 	__u32 oobsize;	/* Amount of OOB data per block (e.g. 16) */
182*f80ad8b4SAndroid Build Coastguard Worker 	__u64 padding;	/* Old obsolete field; do not use */
183*f80ad8b4SAndroid Build Coastguard Worker };
184*f80ad8b4SAndroid Build Coastguard Worker 
185*f80ad8b4SAndroid Build Coastguard Worker struct region_info_user {
186*f80ad8b4SAndroid Build Coastguard Worker 	__u32 offset;		/* At which this region starts,
187*f80ad8b4SAndroid Build Coastguard Worker 				 * from the beginning of the MTD */
188*f80ad8b4SAndroid Build Coastguard Worker 	__u32 erasesize;	/* For this region */
189*f80ad8b4SAndroid Build Coastguard Worker 	__u32 numblocks;	/* Number of blocks in this region */
190*f80ad8b4SAndroid Build Coastguard Worker 	__u32 regionindex;
191*f80ad8b4SAndroid Build Coastguard Worker };
192*f80ad8b4SAndroid Build Coastguard Worker 
193*f80ad8b4SAndroid Build Coastguard Worker struct otp_info {
194*f80ad8b4SAndroid Build Coastguard Worker 	__u32 start;
195*f80ad8b4SAndroid Build Coastguard Worker 	__u32 length;
196*f80ad8b4SAndroid Build Coastguard Worker 	__u32 locked;
197*f80ad8b4SAndroid Build Coastguard Worker };
198*f80ad8b4SAndroid Build Coastguard Worker 
199*f80ad8b4SAndroid Build Coastguard Worker /*
200*f80ad8b4SAndroid Build Coastguard Worker  * Note, the following ioctl existed in the past and was removed:
201*f80ad8b4SAndroid Build Coastguard Worker  * #define MEMSETOOBSEL           _IOW('M', 9, struct nand_oobinfo)
202*f80ad8b4SAndroid Build Coastguard Worker  * Try to avoid adding a new ioctl with the same ioctl number.
203*f80ad8b4SAndroid Build Coastguard Worker  */
204*f80ad8b4SAndroid Build Coastguard Worker 
205*f80ad8b4SAndroid Build Coastguard Worker /* Get basic MTD characteristics info (better to use sysfs) */
206*f80ad8b4SAndroid Build Coastguard Worker #define MEMGETINFO		_IOR('M', 1, struct mtd_info_user)
207*f80ad8b4SAndroid Build Coastguard Worker /* Erase segment of MTD */
208*f80ad8b4SAndroid Build Coastguard Worker #define MEMERASE		_IOW('M', 2, struct erase_info_user)
209*f80ad8b4SAndroid Build Coastguard Worker /* Write out-of-band data from MTD */
210*f80ad8b4SAndroid Build Coastguard Worker #define MEMWRITEOOB		_IOWR('M', 3, struct mtd_oob_buf)
211*f80ad8b4SAndroid Build Coastguard Worker /* Read out-of-band data from MTD */
212*f80ad8b4SAndroid Build Coastguard Worker #define MEMREADOOB		_IOWR('M', 4, struct mtd_oob_buf)
213*f80ad8b4SAndroid Build Coastguard Worker /* Lock a chip (for MTD that supports it) */
214*f80ad8b4SAndroid Build Coastguard Worker #define MEMLOCK			_IOW('M', 5, struct erase_info_user)
215*f80ad8b4SAndroid Build Coastguard Worker /* Unlock a chip (for MTD that supports it) */
216*f80ad8b4SAndroid Build Coastguard Worker #define MEMUNLOCK		_IOW('M', 6, struct erase_info_user)
217*f80ad8b4SAndroid Build Coastguard Worker /* Get the number of different erase regions */
218*f80ad8b4SAndroid Build Coastguard Worker #define MEMGETREGIONCOUNT	_IOR('M', 7, int)
219*f80ad8b4SAndroid Build Coastguard Worker /* Get information about the erase region for a specific index */
220*f80ad8b4SAndroid Build Coastguard Worker #define MEMGETREGIONINFO	_IOWR('M', 8, struct region_info_user)
221*f80ad8b4SAndroid Build Coastguard Worker /* Get info about OOB modes (e.g., RAW, PLACE, AUTO) - legacy interface */
222*f80ad8b4SAndroid Build Coastguard Worker #define MEMGETOOBSEL		_IOR('M', 10, struct nand_oobinfo)
223*f80ad8b4SAndroid Build Coastguard Worker /* Check if an eraseblock is bad */
224*f80ad8b4SAndroid Build Coastguard Worker #define MEMGETBADBLOCK		_IOW('M', 11, __kernel_loff_t)
225*f80ad8b4SAndroid Build Coastguard Worker /* Mark an eraseblock as bad */
226*f80ad8b4SAndroid Build Coastguard Worker #define MEMSETBADBLOCK		_IOW('M', 12, __kernel_loff_t)
227*f80ad8b4SAndroid Build Coastguard Worker /* Set OTP (One-Time Programmable) mode (factory vs. user) */
228*f80ad8b4SAndroid Build Coastguard Worker #define OTPSELECT		_IOR('M', 13, int)
229*f80ad8b4SAndroid Build Coastguard Worker /* Get number of OTP (One-Time Programmable) regions */
230*f80ad8b4SAndroid Build Coastguard Worker #define OTPGETREGIONCOUNT	_IOW('M', 14, int)
231*f80ad8b4SAndroid Build Coastguard Worker /* Get all OTP (One-Time Programmable) info about MTD */
232*f80ad8b4SAndroid Build Coastguard Worker #define OTPGETREGIONINFO	_IOW('M', 15, struct otp_info)
233*f80ad8b4SAndroid Build Coastguard Worker /* Lock a given range of user data (must be in mode %MTD_FILE_MODE_OTP_USER) */
234*f80ad8b4SAndroid Build Coastguard Worker #define OTPLOCK			_IOR('M', 16, struct otp_info)
235*f80ad8b4SAndroid Build Coastguard Worker /* Get ECC layout (deprecated) */
236*f80ad8b4SAndroid Build Coastguard Worker #define ECCGETLAYOUT		_IOR('M', 17, struct nand_ecclayout_user)
237*f80ad8b4SAndroid Build Coastguard Worker /* Get statistics about corrected/uncorrected errors */
238*f80ad8b4SAndroid Build Coastguard Worker #define ECCGETSTATS		_IOR('M', 18, struct mtd_ecc_stats)
239*f80ad8b4SAndroid Build Coastguard Worker /* Set MTD mode on a per-file-descriptor basis (see "MTD file modes") */
240*f80ad8b4SAndroid Build Coastguard Worker #define MTDFILEMODE		_IO('M', 19)
241*f80ad8b4SAndroid Build Coastguard Worker /* Erase segment of MTD (supports 64-bit address) */
242*f80ad8b4SAndroid Build Coastguard Worker #define MEMERASE64		_IOW('M', 20, struct erase_info_user64)
243*f80ad8b4SAndroid Build Coastguard Worker /* Write data to OOB (64-bit version) */
244*f80ad8b4SAndroid Build Coastguard Worker #define MEMWRITEOOB64		_IOWR('M', 21, struct mtd_oob_buf64)
245*f80ad8b4SAndroid Build Coastguard Worker /* Read data from OOB (64-bit version) */
246*f80ad8b4SAndroid Build Coastguard Worker #define MEMREADOOB64		_IOWR('M', 22, struct mtd_oob_buf64)
247*f80ad8b4SAndroid Build Coastguard Worker /* Check if chip is locked (for MTD that supports it) */
248*f80ad8b4SAndroid Build Coastguard Worker #define MEMISLOCKED		_IOR('M', 23, struct erase_info_user)
249*f80ad8b4SAndroid Build Coastguard Worker /*
250*f80ad8b4SAndroid Build Coastguard Worker  * Most generic write interface; can write in-band and/or out-of-band in various
251*f80ad8b4SAndroid Build Coastguard Worker  * modes (see "struct mtd_write_req"). This ioctl is not supported for flashes
252*f80ad8b4SAndroid Build Coastguard Worker  * without OOB, e.g., NOR flash.
253*f80ad8b4SAndroid Build Coastguard Worker  */
254*f80ad8b4SAndroid Build Coastguard Worker #define MEMWRITE		_IOWR('M', 24, struct mtd_write_req)
255*f80ad8b4SAndroid Build Coastguard Worker /* Erase a given range of user data (must be in mode %MTD_FILE_MODE_OTP_USER) */
256*f80ad8b4SAndroid Build Coastguard Worker #define OTPERASE		_IOW('M', 25, struct otp_info)
257*f80ad8b4SAndroid Build Coastguard Worker /*
258*f80ad8b4SAndroid Build Coastguard Worker  * Most generic read interface; can read in-band and/or out-of-band in various
259*f80ad8b4SAndroid Build Coastguard Worker  * modes (see "struct mtd_read_req"). This ioctl is not supported for flashes
260*f80ad8b4SAndroid Build Coastguard Worker  * without OOB, e.g., NOR flash.
261*f80ad8b4SAndroid Build Coastguard Worker  */
262*f80ad8b4SAndroid Build Coastguard Worker #define MEMREAD			_IOWR('M', 26, struct mtd_read_req)
263*f80ad8b4SAndroid Build Coastguard Worker 
264*f80ad8b4SAndroid Build Coastguard Worker /*
265*f80ad8b4SAndroid Build Coastguard Worker  * Obsolete legacy interface. Keep it in order not to break userspace
266*f80ad8b4SAndroid Build Coastguard Worker  * interfaces
267*f80ad8b4SAndroid Build Coastguard Worker  */
268*f80ad8b4SAndroid Build Coastguard Worker struct nand_oobinfo {
269*f80ad8b4SAndroid Build Coastguard Worker 	__u32 useecc;
270*f80ad8b4SAndroid Build Coastguard Worker 	__u32 eccbytes;
271*f80ad8b4SAndroid Build Coastguard Worker 	__u32 oobfree[8][2];
272*f80ad8b4SAndroid Build Coastguard Worker 	__u32 eccpos[32];
273*f80ad8b4SAndroid Build Coastguard Worker };
274*f80ad8b4SAndroid Build Coastguard Worker 
275*f80ad8b4SAndroid Build Coastguard Worker struct nand_oobfree {
276*f80ad8b4SAndroid Build Coastguard Worker 	__u32 offset;
277*f80ad8b4SAndroid Build Coastguard Worker 	__u32 length;
278*f80ad8b4SAndroid Build Coastguard Worker };
279*f80ad8b4SAndroid Build Coastguard Worker 
280*f80ad8b4SAndroid Build Coastguard Worker #define MTD_MAX_OOBFREE_ENTRIES	8
281*f80ad8b4SAndroid Build Coastguard Worker #define MTD_MAX_ECCPOS_ENTRIES	64
282*f80ad8b4SAndroid Build Coastguard Worker /*
283*f80ad8b4SAndroid Build Coastguard Worker  * OBSOLETE: ECC layout control structure. Exported to user-space via ioctl
284*f80ad8b4SAndroid Build Coastguard Worker  * ECCGETLAYOUT for backwards compatbility and should not be mistaken as a
285*f80ad8b4SAndroid Build Coastguard Worker  * complete set of ECC information. The ioctl truncates the larger internal
286*f80ad8b4SAndroid Build Coastguard Worker  * structure to retain binary compatibility with the static declaration of the
287*f80ad8b4SAndroid Build Coastguard Worker  * ioctl. Note that the "MTD_MAX_..._ENTRIES" macros represent the max size of
288*f80ad8b4SAndroid Build Coastguard Worker  * the user struct, not the MAX size of the internal OOB layout representation.
289*f80ad8b4SAndroid Build Coastguard Worker  */
290*f80ad8b4SAndroid Build Coastguard Worker struct nand_ecclayout_user {
291*f80ad8b4SAndroid Build Coastguard Worker 	__u32 eccbytes;
292*f80ad8b4SAndroid Build Coastguard Worker 	__u32 eccpos[MTD_MAX_ECCPOS_ENTRIES];
293*f80ad8b4SAndroid Build Coastguard Worker 	__u32 oobavail;
294*f80ad8b4SAndroid Build Coastguard Worker 	struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES];
295*f80ad8b4SAndroid Build Coastguard Worker };
296*f80ad8b4SAndroid Build Coastguard Worker 
297*f80ad8b4SAndroid Build Coastguard Worker /**
298*f80ad8b4SAndroid Build Coastguard Worker  * struct mtd_ecc_stats - error correction stats
299*f80ad8b4SAndroid Build Coastguard Worker  *
300*f80ad8b4SAndroid Build Coastguard Worker  * @corrected:	number of corrected bits
301*f80ad8b4SAndroid Build Coastguard Worker  * @failed:	number of uncorrectable errors
302*f80ad8b4SAndroid Build Coastguard Worker  * @badblocks:	number of bad blocks in this partition
303*f80ad8b4SAndroid Build Coastguard Worker  * @bbtblocks:	number of blocks reserved for bad block tables
304*f80ad8b4SAndroid Build Coastguard Worker  */
305*f80ad8b4SAndroid Build Coastguard Worker struct mtd_ecc_stats {
306*f80ad8b4SAndroid Build Coastguard Worker 	__u32 corrected;
307*f80ad8b4SAndroid Build Coastguard Worker 	__u32 failed;
308*f80ad8b4SAndroid Build Coastguard Worker 	__u32 badblocks;
309*f80ad8b4SAndroid Build Coastguard Worker 	__u32 bbtblocks;
310*f80ad8b4SAndroid Build Coastguard Worker };
311*f80ad8b4SAndroid Build Coastguard Worker 
312*f80ad8b4SAndroid Build Coastguard Worker /*
313*f80ad8b4SAndroid Build Coastguard Worker  * MTD file modes - for read/write access to MTD
314*f80ad8b4SAndroid Build Coastguard Worker  *
315*f80ad8b4SAndroid Build Coastguard Worker  * @MTD_FILE_MODE_NORMAL:	OTP disabled, ECC enabled
316*f80ad8b4SAndroid Build Coastguard Worker  * @MTD_FILE_MODE_OTP_FACTORY:	OTP enabled in factory mode
317*f80ad8b4SAndroid Build Coastguard Worker  * @MTD_FILE_MODE_OTP_USER:	OTP enabled in user mode
318*f80ad8b4SAndroid Build Coastguard Worker  * @MTD_FILE_MODE_RAW:		OTP disabled, ECC disabled
319*f80ad8b4SAndroid Build Coastguard Worker  *
320*f80ad8b4SAndroid Build Coastguard Worker  * These modes can be set via ioctl(MTDFILEMODE). The mode will be retained
321*f80ad8b4SAndroid Build Coastguard Worker  * separately for each open file descriptor.
322*f80ad8b4SAndroid Build Coastguard Worker  *
323*f80ad8b4SAndroid Build Coastguard Worker  * Note: %MTD_FILE_MODE_RAW provides the same functionality as %MTD_OPS_RAW -
324*f80ad8b4SAndroid Build Coastguard Worker  * raw access to the flash, without error correction or autoplacement schemes.
325*f80ad8b4SAndroid Build Coastguard Worker  * Wherever possible, the MTD_OPS_* mode will override the MTD_FILE_MODE_* mode
326*f80ad8b4SAndroid Build Coastguard Worker  * (e.g., when using ioctl(MEMWRITE) or ioctl(MEMREAD)), but in some cases, the
327*f80ad8b4SAndroid Build Coastguard Worker  * MTD_FILE_MODE is used out of necessity (e.g., `write()',
328*f80ad8b4SAndroid Build Coastguard Worker  * ioctl(MEMWRITEOOB64)).
329*f80ad8b4SAndroid Build Coastguard Worker  */
330*f80ad8b4SAndroid Build Coastguard Worker enum mtd_file_modes {
331*f80ad8b4SAndroid Build Coastguard Worker 	MTD_FILE_MODE_NORMAL = MTD_OTP_OFF,
332*f80ad8b4SAndroid Build Coastguard Worker 	MTD_FILE_MODE_OTP_FACTORY = MTD_OTP_FACTORY,
333*f80ad8b4SAndroid Build Coastguard Worker 	MTD_FILE_MODE_OTP_USER = MTD_OTP_USER,
334*f80ad8b4SAndroid Build Coastguard Worker 	MTD_FILE_MODE_RAW,
335*f80ad8b4SAndroid Build Coastguard Worker };
336*f80ad8b4SAndroid Build Coastguard Worker 
mtd_type_is_nand_user(const struct mtd_info_user * mtd)337*f80ad8b4SAndroid Build Coastguard Worker static inline int mtd_type_is_nand_user(const struct mtd_info_user *mtd)
338*f80ad8b4SAndroid Build Coastguard Worker {
339*f80ad8b4SAndroid Build Coastguard Worker 	return mtd->type == MTD_NANDFLASH || mtd->type == MTD_MLCNANDFLASH;
340*f80ad8b4SAndroid Build Coastguard Worker }
341*f80ad8b4SAndroid Build Coastguard Worker 
342*f80ad8b4SAndroid Build Coastguard Worker #endif /* __MTD_ABI_H__ */
343