⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mtd.h

📁 omap3 linux 2.6 用nocc去除了冗余代码
💻 H
字号:
/* * $Id: mtd.h,v 1.61 2005/11/07 11:14:54 gleixner Exp $ * * Copyright (C) 1999-2003 David Woodhouse <dwmw2@infradead.org> et al. * * Released under GPL */#ifndef __MTD_MTD_H__#define __MTD_MTD_H__#include <linux/types.h>#include <linux/module.h>#include <linux/uio.h>#include <linux/notifier.h>#include <linux/mtd/compatmac.h>#include <mtd/mtd-abi.h>#define MTD_CHAR_MAJOR 90#define MTD_BLOCK_MAJOR 31#define MAX_MTD_DEVICES 32#define MTD_ERASE_PENDING      	0x01#define MTD_ERASING		0x02#define MTD_ERASE_SUSPEND	0x04#define MTD_ERASE_DONE          0x08#define MTD_ERASE_FAILED        0x10/* If the erase fails, fail_addr might indicate exactly which block failed.  If   fail_addr = 0xffffffff, the failure was not at the device level or was not   specific to any particular block. */struct erase_info {	struct mtd_info *mtd;	u_int32_t addr;	u_int32_t len;	u_int32_t fail_addr;	u_long time;	u_long retries;	u_int dev;	u_int cell;	void (*callback) (struct erase_info *self);	u_long priv;	u_char state;	struct erase_info *next;};struct mtd_erase_region_info {	u_int32_t offset;			/* At which this region starts, from the beginning of the MTD */	u_int32_t erasesize;		/* For this region */	u_int32_t numblocks;		/* Number of blocks of erasesize in this region */	unsigned long *lockmap;		/* If keeping bitmap of locks */};/* * oob operation modes * * MTD_OOB_PLACE:	oob data are placed at the given offset * MTD_OOB_AUTO:	oob data are automatically placed at the free areas *			which are defined by the ecclayout * MTD_OOB_RAW:		mode to read raw data+oob in one chunk. The oob data *			is inserted into the data. Thats a raw image of the *			flash contents. */typedef enum {	MTD_OOB_PLACE,	MTD_OOB_AUTO,	MTD_OOB_RAW,} mtd_oob_mode_t;/** * struct mtd_oob_ops - oob operation operands * @mode:	operation mode * * @len:	number of data bytes to write/read * * @retlen:	number of data bytes written/read * * @ooblen:	number of oob bytes to write/read * @oobretlen:	number of oob bytes written/read * @ooboffs:	offset of oob data in the oob area (only relevant when *		mode = MTD_OOB_PLACE) * @datbuf:	data buffer - if NULL only oob data are read/written * @oobbuf:	oob data buffer * * Note, it is allowed to read more then one OOB area at one go, but not write. * The interface assumes that the OOB write requests program only one page's * OOB area. */struct mtd_oob_ops {	mtd_oob_mode_t	mode;	size_t		len;	size_t		retlen;	size_t		ooblen;	size_t		oobretlen;	uint32_t	ooboffs;	uint8_t		*datbuf;	uint8_t		*oobbuf;};struct mtd_info {	u_char type;	u_int32_t flags;	u_int32_t size;	 // Total size of the MTD	/* "Major" erase size for the device. Naïve users may take this	 * to be the only erase size available, or may use the more detailed	 * information below if they desire	 */	u_int32_t erasesize;	/* Minimal writable flash unit size. In case of NOR flash it is 1 (even	 * though individual bits can be cleared), in case of NAND flash it is	 * one NAND page (or half, or one-fourths of it), in case of ECC-ed NOR	 * it is of ECC block size, etc. It is illegal to have writesize = 0.	 * Any driver registering a struct mtd_info must ensure a writesize of	 * 1 or larger.	 */	u_int32_t writesize;	u_int32_t oobsize;   // Amount of OOB data per block (e.g. 16)	u_int32_t oobavail;  // Available OOB bytes per block	// Kernel-only stuff starts here.	char *name;	int index;	/* ecc layout structure pointer - read only ! */	struct nand_ecclayout *ecclayout;	/* Data for variable erase regions. If numeraseregions is zero,	 * it means that the whole device has erasesize as given above.	 */	int numeraseregions;	struct mtd_erase_region_info *eraseregions;	int (*erase) (struct mtd_info *mtd, struct erase_info *instr);	/* This stuff for eXecute-In-Place */	int (*point) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char **mtdbuf);	/* We probably shouldn't allow XIP if the unpoint isn't a NULL */	void (*unpoint) (struct mtd_info *mtd, u_char * addr, loff_t from, size_t len);	int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);	int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);	int (*read_oob) (struct mtd_info *mtd, loff_t from,			 struct mtd_oob_ops *ops);	int (*write_oob) (struct mtd_info *mtd, loff_t to,			 struct mtd_oob_ops *ops);	/*	 * Methods to access the protection register area, present in some	 * flash devices. The user data is one time programmable but the	 * factory data is read only.	 */	int (*get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len);	int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);	int (*get_user_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len);	int (*read_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);	int (*write_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);	int (*lock_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len);	/* kvec-based read/write methods.	   NB: The 'count' parameter is the number of _vectors_, each of	   which contains an (ofs, len) tuple.	*/	int (*writev) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, size_t *retlen);	/* Sync */	void (*sync) (struct mtd_info *mtd);	/* Chip-supported device locking */	int (*lock) (struct mtd_info *mtd, loff_t ofs, size_t len);	int (*unlock) (struct mtd_info *mtd, loff_t ofs, size_t len);	/* Power Management functions */	int (*suspend) (struct mtd_info *mtd);	void (*resume) (struct mtd_info *mtd);	/* Bad block management functions */	int (*block_isbad) (struct mtd_info *mtd, loff_t ofs);	int (*block_markbad) (struct mtd_info *mtd, loff_t ofs);	struct notifier_block reboot_notifier;  /* default mode before reboot */	/* ECC status information */	struct mtd_ecc_stats ecc_stats;	/* Subpage shift (NAND) */	int subpage_sft;	void *priv;	struct module *owner;	int usecount;	/* If the driver is something smart, like UBI, it may need to maintain	 * its own reference counting. The below functions are only for driver.	 * The driver may register its callbacks. These callbacks are not	 * supposed to be called by MTD users */	int (*get_device) (struct mtd_info *mtd);	void (*put_device) (struct mtd_info *mtd);};	/* Kernel-side ioctl definitions */extern int add_mtd_device(struct mtd_info *mtd);extern int del_mtd_device (struct mtd_info *mtd);extern struct mtd_info *get_mtd_device(struct mtd_info *mtd, int num);extern struct mtd_info *get_mtd_device_nm(const char *name);extern void put_mtd_device(struct mtd_info *mtd);struct mtd_notifier {	void (*add)(struct mtd_info *mtd);	void (*remove)(struct mtd_info *mtd);	struct list_head list;};extern void register_mtd_user (struct mtd_notifier *new);extern int unregister_mtd_user (struct mtd_notifier *old);int default_mtd_writev(struct mtd_info *mtd, const struct kvec *vecs,		       unsigned long count, loff_t to, size_t *retlen);int default_mtd_readv(struct mtd_info *mtd, struct kvec *vecs,		      unsigned long count, loff_t from, size_t *retlen);void mtd_erase_callback(struct erase_info *instr);/* * Debugging macro and defines */#define MTD_DEBUG_LEVEL0	(0)	/* Quiet   */#define MTD_DEBUG_LEVEL1	(1)	/* Audible */#define MTD_DEBUG_LEVEL2	(2)	/* Loud    */#define MTD_DEBUG_LEVEL3	(3)	/* Noisy   */#define DEBUG(n, args...) do { } while(0)#endif   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -