1655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng/****************************************************************************
2655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ****************************************************************************
3655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
4655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   This header was automatically generated from a Linux kernel header
5655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   of the same name, to make information necessary for userspace to
6655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   call into the kernel available to libc.  It contains only constants,
7655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   structures, and macros generated from the original header, and thus,
8655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   contains no copyrightable information.
9655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
10655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   To edit the content of this header, modify the corresponding
11655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   source file (e.g. under external/kernel-headers/original/) then
12655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   run bionic/libc/kernel/tools/update_all.py
13655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
14655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   Any manual change here will be lost the next time this script will
15655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   be run. You've been warned!
16655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
17655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ****************************************************************************
18655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ****************************************************************************/
19655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#ifndef __MTD_ABI_H__
20655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define __MTD_ABI_H__
21655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#include <linux/types.h>
22655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct erase_info_user {
23d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 start;
24d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 length;
25655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
26655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct erase_info_user64 {
27d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u64 start;
28d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u64 length;
29655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
30655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct mtd_oob_buf {
31d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 start;
32d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 length;
33d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned char __user * ptr;
34655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
35655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct mtd_oob_buf64 {
36d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u64 start;
37d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 pad;
38d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 length;
39d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u64 usr_ptr;
40655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
41655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengenum {
42d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  MTD_OPS_PLACE_OOB = 0,
43d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  MTD_OPS_AUTO_OOB = 1,
44d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  MTD_OPS_RAW = 2,
45655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
46655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct mtd_write_req {
47d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u64 start;
48d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u64 len;
49d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u64 ooblen;
50d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u64 usr_data;
51d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u64 usr_oob;
52d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u8 mode;
53d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u8 padding[7];
54655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
55655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_ABSENT 0
56655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_RAM 1
57655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_ROM 2
58655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_NORFLASH 3
59655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_NANDFLASH 4
60655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_DATAFLASH 6
61655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_UBIVOLUME 7
62655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_MLCNANDFLASH 8
63655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_WRITEABLE 0x400
64655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_BIT_WRITEABLE 0x800
65655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_NO_ERASE 0x1000
66655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_POWERUP_LOCK 0x2000
67655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_CAP_ROM 0
68655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_CAP_RAM (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
69655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_CAP_NORFLASH (MTD_WRITEABLE | MTD_BIT_WRITEABLE)
70655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_CAP_NANDFLASH (MTD_WRITEABLE)
71ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferris#define MTD_CAP_NVRAM (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
72655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_NANDECC_OFF 0
73655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_NANDECC_PLACE 1
74655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_NANDECC_AUTOPLACE 2
75ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferris#define MTD_NANDECC_PLACEONLY 3
76655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_NANDECC_AUTOPL_USR 4
77655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_OTP_OFF 0
78655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_OTP_FACTORY 1
79ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferris#define MTD_OTP_USER 2
80655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct mtd_info_user {
81d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u8 type;
82d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 flags;
83d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 size;
84d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 erasesize;
85d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 writesize;
86d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 oobsize;
87d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u64 padding;
88655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
89655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct region_info_user {
90d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 offset;
91d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 erasesize;
92d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 numblocks;
93d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 regionindex;
94655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
95ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferrisstruct otp_info {
96d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 start;
97d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 length;
98d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 locked;
99ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferris};
100655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMGETINFO _IOR('M', 1, struct mtd_info_user)
101655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMERASE _IOW('M', 2, struct erase_info_user)
102655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMWRITEOOB _IOWR('M', 3, struct mtd_oob_buf)
103ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferris#define MEMREADOOB _IOWR('M', 4, struct mtd_oob_buf)
104655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMLOCK _IOW('M', 5, struct erase_info_user)
105655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMUNLOCK _IOW('M', 6, struct erase_info_user)
106655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMGETREGIONCOUNT _IOR('M', 7, int)
107ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferris#define MEMGETREGIONINFO _IOWR('M', 8, struct region_info_user)
108655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMGETOOBSEL _IOR('M', 10, struct nand_oobinfo)
109655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMGETBADBLOCK _IOW('M', 11, __kernel_loff_t)
110655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMSETBADBLOCK _IOW('M', 12, __kernel_loff_t)
111ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferris#define OTPSELECT _IOR('M', 13, int)
112655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define OTPGETREGIONCOUNT _IOW('M', 14, int)
113655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define OTPGETREGIONINFO _IOW('M', 15, struct otp_info)
114655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define OTPLOCK _IOR('M', 16, struct otp_info)
115ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferris#define ECCGETLAYOUT _IOR('M', 17, struct nand_ecclayout_user)
116655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define ECCGETSTATS _IOR('M', 18, struct mtd_ecc_stats)
117655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTDFILEMODE _IO('M', 19)
118655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMERASE64 _IOW('M', 20, struct erase_info_user64)
119ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferris#define MEMWRITEOOB64 _IOWR('M', 21, struct mtd_oob_buf64)
120655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMREADOOB64 _IOWR('M', 22, struct mtd_oob_buf64)
121655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMISLOCKED _IOR('M', 23, struct erase_info_user)
122655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MEMWRITE _IOWR('M', 24, struct mtd_write_req)
123ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferrisstruct nand_oobinfo {
124d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 useecc;
125d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 eccbytes;
126d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 oobfree[8][2];
127d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 eccpos[32];
128655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
129655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct nand_oobfree {
130d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 offset;
131d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 length;
132655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
133655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_MAX_OOBFREE_ENTRIES 8
134655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define MTD_MAX_ECCPOS_ENTRIES 64
135ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferrisstruct nand_ecclayout_user {
136d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 eccbytes;
137d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 eccpos[MTD_MAX_ECCPOS_ENTRIES];
138d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 oobavail;
139d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES];
140655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
141655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct mtd_ecc_stats {
142d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 corrected;
143d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 failed;
144d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 badblocks;
145d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 bbtblocks;
146655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
147ba8d4f460b51161eb82cf1006cb34a3cc1389f47Christopher Ferrisenum mtd_file_modes {
148d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  MTD_FILE_MODE_NORMAL = MTD_OTP_OFF,
149d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  MTD_FILE_MODE_OTP_FACTORY = MTD_OTP_FACTORY,
150d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  MTD_FILE_MODE_OTP_USER = MTD_OTP_USER,
151d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  MTD_FILE_MODE_RAW,
152655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
153655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#endif
154