1951a39d68df598db08dfced8b4707755864a0492Ying Wang/**************************************************************************** 2951a39d68df598db08dfced8b4707755864a0492Ying Wang **************************************************************************** 3951a39d68df598db08dfced8b4707755864a0492Ying Wang *** 4951a39d68df598db08dfced8b4707755864a0492Ying Wang *** This header was automatically generated from a Linux kernel header 5951a39d68df598db08dfced8b4707755864a0492Ying Wang *** of the same name, to make information necessary for userspace to 6951a39d68df598db08dfced8b4707755864a0492Ying Wang *** call into the kernel available to libc. It contains only constants, 7951a39d68df598db08dfced8b4707755864a0492Ying Wang *** structures, and macros generated from the original header, and thus, 8951a39d68df598db08dfced8b4707755864a0492Ying Wang *** contains no copyrightable information. 9951a39d68df598db08dfced8b4707755864a0492Ying Wang *** 10951a39d68df598db08dfced8b4707755864a0492Ying Wang **************************************************************************** 11951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************/ 12951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef __MTD_MTD_H__ 13951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __MTD_MTD_H__ 14951a39d68df598db08dfced8b4707755864a0492Ying Wang 15951a39d68df598db08dfced8b4707755864a0492Ying Wang#error This is a kernel header. Perhaps include mtd-user.h instead? 16951a39d68df598db08dfced8b4707755864a0492Ying Wang 17951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/types.h> 18951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/module.h> 19951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/uio.h> 20951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/notifier.h> 21951a39d68df598db08dfced8b4707755864a0492Ying Wang 22951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/mtd/compatmac.h> 23951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <mtd/mtd-abi.h> 24951a39d68df598db08dfced8b4707755864a0492Ying Wang 25951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_CHAR_MAJOR 90 26951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_BLOCK_MAJOR 31 27951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MAX_MTD_DEVICES 16 28951a39d68df598db08dfced8b4707755864a0492Ying Wang 29951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_ERASE_PENDING 0x01 30951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_ERASING 0x02 31951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_ERASE_SUSPEND 0x04 32951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_ERASE_DONE 0x08 33951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_ERASE_FAILED 0x10 34951a39d68df598db08dfced8b4707755864a0492Ying Wang 35951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct erase_info { 36951a39d68df598db08dfced8b4707755864a0492Ying Wang struct mtd_info *mtd; 37951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t addr; 38951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t len; 39951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t fail_addr; 40951a39d68df598db08dfced8b4707755864a0492Ying Wang u_long time; 41951a39d68df598db08dfced8b4707755864a0492Ying Wang u_long retries; 42951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int dev; 43951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int cell; 44951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*callback) (struct erase_info *self); 45951a39d68df598db08dfced8b4707755864a0492Ying Wang u_long priv; 46951a39d68df598db08dfced8b4707755864a0492Ying Wang u_char state; 47951a39d68df598db08dfced8b4707755864a0492Ying Wang struct erase_info *next; 48951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 49951a39d68df598db08dfced8b4707755864a0492Ying Wang 50951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct mtd_erase_region_info { 51951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t offset; 52951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t erasesize; 53951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t numblocks; 54951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 55951a39d68df598db08dfced8b4707755864a0492Ying Wang 56951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef enum { 57951a39d68df598db08dfced8b4707755864a0492Ying Wang MTD_OOB_PLACE, 58951a39d68df598db08dfced8b4707755864a0492Ying Wang MTD_OOB_AUTO, 59951a39d68df598db08dfced8b4707755864a0492Ying Wang MTD_OOB_RAW, 60951a39d68df598db08dfced8b4707755864a0492Ying Wang} mtd_oob_mode_t; 61951a39d68df598db08dfced8b4707755864a0492Ying Wang 62951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct mtd_oob_ops { 63951a39d68df598db08dfced8b4707755864a0492Ying Wang mtd_oob_mode_t mode; 64951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t len; 65951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t retlen; 66951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t ooblen; 67951a39d68df598db08dfced8b4707755864a0492Ying Wang uint32_t ooboffs; 68951a39d68df598db08dfced8b4707755864a0492Ying Wang uint8_t *datbuf; 69951a39d68df598db08dfced8b4707755864a0492Ying Wang uint8_t *oobbuf; 70951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 71951a39d68df598db08dfced8b4707755864a0492Ying Wang 72951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct mtd_info { 73951a39d68df598db08dfced8b4707755864a0492Ying Wang u_char type; 74951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t flags; 75951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t size; 76951a39d68df598db08dfced8b4707755864a0492Ying Wang 77951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t erasesize; 78951a39d68df598db08dfced8b4707755864a0492Ying Wang 79951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t writesize; 80951a39d68df598db08dfced8b4707755864a0492Ying Wang 81951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t oobsize; 82951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t ecctype; 83951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t eccsize; 84951a39d68df598db08dfced8b4707755864a0492Ying Wang 85951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_PROGREGION_CTRLMODE_VALID(mtd) (mtd)->oobsize 86951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_PROGREGION_CTRLMODE_INVALID(mtd) (mtd)->ecctype 87951a39d68df598db08dfced8b4707755864a0492Ying Wang 88951a39d68df598db08dfced8b4707755864a0492Ying Wang char *name; 89951a39d68df598db08dfced8b4707755864a0492Ying Wang int index; 90951a39d68df598db08dfced8b4707755864a0492Ying Wang 91951a39d68df598db08dfced8b4707755864a0492Ying Wang struct nand_ecclayout *ecclayout; 92951a39d68df598db08dfced8b4707755864a0492Ying Wang 93951a39d68df598db08dfced8b4707755864a0492Ying Wang int numeraseregions; 94951a39d68df598db08dfced8b4707755864a0492Ying Wang struct mtd_erase_region_info *eraseregions; 95951a39d68df598db08dfced8b4707755864a0492Ying Wang 96951a39d68df598db08dfced8b4707755864a0492Ying Wang u_int32_t bank_size; 97951a39d68df598db08dfced8b4707755864a0492Ying Wang 98951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*erase) (struct mtd_info *mtd, struct erase_info *instr); 99951a39d68df598db08dfced8b4707755864a0492Ying Wang 100951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*point) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char **mtdbuf); 101951a39d68df598db08dfced8b4707755864a0492Ying Wang 102951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*unpoint) (struct mtd_info *mtd, u_char * addr, loff_t from, size_t len); 103951a39d68df598db08dfced8b4707755864a0492Ying Wang 104951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); 105951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); 106951a39d68df598db08dfced8b4707755864a0492Ying Wang 107951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*read_oob) (struct mtd_info *mtd, loff_t from, 108951a39d68df598db08dfced8b4707755864a0492Ying Wang struct mtd_oob_ops *ops); 109951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*write_oob) (struct mtd_info *mtd, loff_t to, 110951a39d68df598db08dfced8b4707755864a0492Ying Wang struct mtd_oob_ops *ops); 111951a39d68df598db08dfced8b4707755864a0492Ying Wang 112951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len); 113951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); 114951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*get_user_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len); 115951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*read_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); 116951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*write_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); 117951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*lock_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len); 118951a39d68df598db08dfced8b4707755864a0492Ying Wang 119951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*writev) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, size_t *retlen); 120951a39d68df598db08dfced8b4707755864a0492Ying Wang 121951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*sync) (struct mtd_info *mtd); 122951a39d68df598db08dfced8b4707755864a0492Ying Wang 123951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*lock) (struct mtd_info *mtd, loff_t ofs, size_t len); 124951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*unlock) (struct mtd_info *mtd, loff_t ofs, size_t len); 125951a39d68df598db08dfced8b4707755864a0492Ying Wang 126951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*suspend) (struct mtd_info *mtd); 127951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*resume) (struct mtd_info *mtd); 128951a39d68df598db08dfced8b4707755864a0492Ying Wang 129951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*block_isbad) (struct mtd_info *mtd, loff_t ofs); 130951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*block_markbad) (struct mtd_info *mtd, loff_t ofs); 131951a39d68df598db08dfced8b4707755864a0492Ying Wang 132951a39d68df598db08dfced8b4707755864a0492Ying Wang struct notifier_block reboot_notifier; 133951a39d68df598db08dfced8b4707755864a0492Ying Wang 134951a39d68df598db08dfced8b4707755864a0492Ying Wang struct mtd_ecc_stats ecc_stats; 135951a39d68df598db08dfced8b4707755864a0492Ying Wang 136951a39d68df598db08dfced8b4707755864a0492Ying Wang void *priv; 137951a39d68df598db08dfced8b4707755864a0492Ying Wang 138951a39d68df598db08dfced8b4707755864a0492Ying Wang struct module *owner; 139951a39d68df598db08dfced8b4707755864a0492Ying Wang int usecount; 140951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 141951a39d68df598db08dfced8b4707755864a0492Ying Wang 142951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct mtd_notifier { 143951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*add)(struct mtd_info *mtd); 144951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*remove)(struct mtd_info *mtd); 145951a39d68df598db08dfced8b4707755864a0492Ying Wang struct list_head list; 146951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 147951a39d68df598db08dfced8b4707755864a0492Ying Wang 148951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_DEBUG_LEVEL0 (0) 149951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_DEBUG_LEVEL1 (1) 150951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_DEBUG_LEVEL2 (2) 151951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MTD_DEBUG_LEVEL3 (3) 152951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DEBUG(n, args...) do { } while(0) 153951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 154