diff options
Diffstat (limited to 'include/linux/mtd/blktrans.h')
| -rw-r--r-- | include/linux/mtd/blktrans.h | 81 | 
1 files changed, 81 insertions, 0 deletions
| diff --git a/include/linux/mtd/blktrans.h b/include/linux/mtd/blktrans.h new file mode 100644 index 000000000..d1ded51d7 --- /dev/null +++ b/include/linux/mtd/blktrans.h @@ -0,0 +1,81 @@ +/* + * $Id: blktrans.h,v 1.6 2005/11/07 11:14:54 gleixner Exp $ + * + * (C) 2003 David Woodhouse <dwmw2@infradead.org> + * + * Interface to Linux block layer for MTD 'translation layers'. + * + */ + +#ifndef __MTD_TRANS_H__ +#define __MTD_TRANS_H__ + +/* XXX U-BOOT XXX */ +#if 0 +#include <linux/mutex.h> +#else +#include <linux/list.h> +#endif + +struct hd_geometry; +struct mtd_info; +struct mtd_blktrans_ops; +struct file; +struct inode; + +struct mtd_blktrans_dev { +	struct mtd_blktrans_ops *tr; +	struct list_head list; +	struct mtd_info *mtd; +/* XXX U-BOOT XXX */ +#if 0 +	struct mutex lock; +#endif +	int devnum; +	unsigned long size; +	int readonly; +	void *blkcore_priv; /* gendisk in 2.5, devfs_handle in 2.4 */ +}; + +struct blkcore_priv; /* Differs for 2.4 and 2.5 kernels; private */ + +struct mtd_blktrans_ops { +	char *name; +	int major; +	int part_bits; +	int blksize; +	int blkshift; + +	/* Access functions */ +	int (*readsect)(struct mtd_blktrans_dev *dev, +		    unsigned long block, char *buffer); +	int (*writesect)(struct mtd_blktrans_dev *dev, +		     unsigned long block, char *buffer); + +	/* Block layer ioctls */ +	int (*getgeo)(struct mtd_blktrans_dev *dev, struct hd_geometry *geo); +	int (*flush)(struct mtd_blktrans_dev *dev); + +	/* Called with mtd_table_mutex held; no race with add/remove */ +	int (*open)(struct mtd_blktrans_dev *dev); +	int (*release)(struct mtd_blktrans_dev *dev); + +	/* Called on {de,}registration and on subsequent addition/removal +	   of devices, with mtd_table_mutex held. */ +	void (*add_mtd)(struct mtd_blktrans_ops *tr, struct mtd_info *mtd); +	void (*remove_dev)(struct mtd_blktrans_dev *dev); + +	struct list_head devs; +	struct list_head list; +	struct module *owner; + +	struct mtd_blkcore_priv *blkcore_priv; +}; + +extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr); +extern int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr); +extern int add_mtd_blktrans_dev(struct mtd_blktrans_dev *dev); +extern int del_mtd_blktrans_dev(struct mtd_blktrans_dev *dev); + + +#endif /* __MTD_TRANS_H__ */ |