1/* 2 * This header was generated from the Linux kernel headers by update_headers.py, 3 * to provide necessary information from kernel to userspace, such as constants, 4 * structures, and macros, and thus, contains no copyrightable information. 5 */ 6#ifndef __MTD_ABI_H__ 7#define __MTD_ABI_H__ 8#include <linux/types.h> 9struct erase_info_user { 10 __u32 start; 11 __u32 length; 12}; 13struct erase_info_user64 { 14 __u64 start; 15 __u64 length; 16}; 17struct mtd_oob_buf { 18 __u32 start; 19 __u32 length; 20 unsigned char __user *ptr; 21}; 22struct mtd_oob_buf64 { 23 __u64 start; 24 __u32 pad; 25 __u32 length; 26 __u64 usr_ptr; 27}; 28enum { 29 MTD_OPS_PLACE_OOB = 0, 30 MTD_OPS_AUTO_OOB = 1, 31 MTD_OPS_RAW = 2, 32}; 33struct mtd_write_req { 34 __u64 start; 35 __u64 len; 36 __u64 ooblen; 37 __u64 usr_data; 38 __u64 usr_oob; 39 __u8 mode; 40 __u8 padding[7]; 41}; 42#define MTD_ABSENT 0 43#define MTD_RAM 1 44#define MTD_ROM 2 45#define MTD_NORFLASH 3 46#define MTD_NANDFLASH 4 47#define MTD_DATAFLASH 6 48#define MTD_UBIVOLUME 7 49#define MTD_MLCNANDFLASH 8 50#define MTD_WRITEABLE 0x400 51#define MTD_BIT_WRITEABLE 0x800 52#define MTD_NO_ERASE 0x1000 53#define MTD_POWERUP_LOCK 0x2000 54#define MTD_CAP_ROM 0 55#define MTD_CAP_RAM (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE) 56#define MTD_CAP_NORFLASH (MTD_WRITEABLE | MTD_BIT_WRITEABLE) 57#define MTD_CAP_NANDFLASH (MTD_WRITEABLE) 58#define MTD_CAP_NVRAM (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE) 59#define MTD_NANDECC_OFF 0 60#define MTD_NANDECC_PLACE 1 61#define MTD_NANDECC_AUTOPLACE 2 62#define MTD_NANDECC_PLACEONLY 3 63#define MTD_NANDECC_AUTOPL_USR 4 64#define MTD_OTP_OFF 0 65#define MTD_OTP_FACTORY 1 66#define MTD_OTP_USER 2 67struct mtd_info_user { 68 __u8 type; 69 __u32 flags; 70 __u32 size; 71 __u32 erasesize; 72 __u32 writesize; 73 __u32 oobsize; 74 __u64 padding; 75}; 76struct region_info_user { 77 __u32 offset; 78 __u32 erasesize; 79 __u32 numblocks; 80 __u32 regionindex; 81}; 82struct otp_info { 83 __u32 start; 84 __u32 length; 85 __u32 locked; 86}; 87#define MEMGETINFO _IOR('M', 1, struct mtd_info_user) 88#define MEMERASE _IOW('M', 2, struct erase_info_user) 89#define MEMWRITEOOB _IOWR('M', 3, struct mtd_oob_buf) 90#define MEMREADOOB _IOWR('M', 4, struct mtd_oob_buf) 91#define MEMLOCK _IOW('M', 5, struct erase_info_user) 92#define MEMUNLOCK _IOW('M', 6, struct erase_info_user) 93#define MEMGETREGIONCOUNT _IOR('M', 7, int) 94#define MEMGETREGIONINFO _IOWR('M', 8, struct region_info_user) 95#define MEMGETOOBSEL _IOR('M', 10, struct nand_oobinfo) 96#define MEMGETBADBLOCK _IOW('M', 11, __kernel_loff_t) 97#define MEMSETBADBLOCK _IOW('M', 12, __kernel_loff_t) 98#define OTPSELECT _IOR('M', 13, int) 99#define OTPGETREGIONCOUNT _IOW('M', 14, int) 100#define OTPGETREGIONINFO _IOW('M', 15, struct otp_info) 101#define OTPLOCK _IOR('M', 16, struct otp_info) 102#define ECCGETLAYOUT _IOR('M', 17, struct nand_ecclayout_user) 103#define ECCGETSTATS _IOR('M', 18, struct mtd_ecc_stats) 104#define MTDFILEMODE _IO('M', 19) 105#define MEMERASE64 _IOW('M', 20, struct erase_info_user64) 106#define MEMWRITEOOB64 _IOWR('M', 21, struct mtd_oob_buf64) 107#define MEMREADOOB64 _IOWR('M', 22, struct mtd_oob_buf64) 108#define MEMISLOCKED _IOR('M', 23, struct erase_info_user) 109#define MEMWRITE _IOWR('M', 24, struct mtd_write_req) 110struct nand_oobinfo { 111 __u32 useecc; 112 __u32 eccbytes; 113 __u32 oobfree[8][2]; 114 __u32 eccpos[32]; 115}; 116struct nand_oobfree { 117 __u32 offset; 118 __u32 length; 119}; 120#define MTD_MAX_OOBFREE_ENTRIES 8 121#define MTD_MAX_ECCPOS_ENTRIES 64 122struct nand_ecclayout_user { 123 __u32 eccbytes; 124 __u32 eccpos[MTD_MAX_ECCPOS_ENTRIES]; 125 __u32 oobavail; 126 struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES]; 127}; 128struct mtd_ecc_stats { 129 __u32 corrected; 130 __u32 failed; 131 __u32 badblocks; 132 __u32 bbtblocks; 133}; 134enum mtd_file_modes { 135 MTD_FILE_MODE_NORMAL = MTD_OTP_OFF, 136 MTD_FILE_MODE_OTP_FACTORY = MTD_OTP_FACTORY, 137 MTD_FILE_MODE_OTP_USER = MTD_OTP_USER, 138 MTD_FILE_MODE_RAW, 139}; 140static inline int mtd_type_is_nand_user(const struct mtd_info_user *mtd) 141{ 142 return mtd->type == MTD_NANDFLASH || mtd->type == MTD_MLCNANDFLASH; 143} 144#endif 145