111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************************
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   This header was automatically generated from a Linux kernel header
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   of the same name, to make information necessary for userspace to
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   call into the kernel available to libc.  It contains only constants,
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   structures, and macros generated from the original header, and thus,
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   contains no copyrightable information.
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef __MTD_MTD_H__
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __MTD_MTD_H__
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#error This is a kernel header. Perhaps include mtd-user.h instead?
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/types.h>
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/module.h>
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/uio.h>
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/notifier.h>
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/mtd/compatmac.h>
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <mtd/mtd-abi.h>
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_CHAR_MAJOR 90
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_BLOCK_MAJOR 31
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MAX_MTD_DEVICES 16
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_ERASE_PENDING 0x01
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_ERASING 0x02
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_ERASE_SUSPEND 0x04
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_ERASE_DONE 0x08
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_ERASE_FAILED 0x10
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct erase_info {
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct mtd_info *mtd;
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t addr;
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t len;
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t fail_addr;
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_long time;
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_long retries;
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int dev;
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int cell;
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*callback) (struct erase_info *self);
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_long priv;
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_char state;
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct erase_info *next;
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mtd_erase_region_info {
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t offset;
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t erasesize;
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t numblocks;
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef enum {
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert MTD_OOB_PLACE,
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert MTD_OOB_AUTO,
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert MTD_OOB_RAW,
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} mtd_oob_mode_t;
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mtd_oob_ops {
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert mtd_oob_mode_t mode;
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t len;
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t retlen;
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t ooblen;
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t ooboffs;
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint8_t *datbuf;
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint8_t *oobbuf;
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mtd_info {
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_char type;
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t flags;
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t size;
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t erasesize;
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t writesize;
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t oobsize;
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t ecctype;
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t eccsize;
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_PROGREGION_CTRLMODE_VALID(mtd) (mtd)->oobsize
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_PROGREGION_CTRLMODE_INVALID(mtd) (mtd)->ecctype
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char *name;
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int index;
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct nand_ecclayout *ecclayout;
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int numeraseregions;
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct mtd_erase_region_info *eraseregions;
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t bank_size;
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*erase) (struct mtd_info *mtd, struct erase_info *instr);
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*point) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char **mtdbuf);
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*unpoint) (struct mtd_info *mtd, u_char * addr, loff_t from, size_t len);
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*read_oob) (struct mtd_info *mtd, loff_t from,
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct mtd_oob_ops *ops);
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*write_oob) (struct mtd_info *mtd, loff_t to,
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct mtd_oob_ops *ops);
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len);
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*get_user_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len);
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*read_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*write_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*lock_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len);
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*writev) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, size_t *retlen);
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*sync) (struct mtd_info *mtd);
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*lock) (struct mtd_info *mtd, loff_t ofs, size_t len);
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*unlock) (struct mtd_info *mtd, loff_t ofs, size_t len);
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*suspend) (struct mtd_info *mtd);
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*resume) (struct mtd_info *mtd);
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*block_isbad) (struct mtd_info *mtd, loff_t ofs);
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*block_markbad) (struct mtd_info *mtd, loff_t ofs);
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct notifier_block reboot_notifier;
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct mtd_ecc_stats ecc_stats;
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *priv;
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct module *owner;
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int usecount;
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mtd_notifier {
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*add)(struct mtd_info *mtd);
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*remove)(struct mtd_info *mtd);
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head list;
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_DEBUG_LEVEL0 (0)
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_DEBUG_LEVEL1 (1)
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_DEBUG_LEVEL2 (2)
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MTD_DEBUG_LEVEL3 (3)
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DEBUG(n, args...) do { } while(0)
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
154