Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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