Home | History | Annotate | Download | only in mtd
      1 /*
      2  * $Id: blktrans.h,v 1.6 2005/11/07 11:14:54 gleixner Exp $
      3  *
      4  * (C) 2003 David Woodhouse <dwmw2 (at) infradead.org>
      5  *
      6  * Interface to Linux block layer for MTD 'translation layers'.
      7  *
      8  */
      9 
     10 #ifndef __MTD_TRANS_H__
     11 #define __MTD_TRANS_H__
     12 
     13 #include <linux/mutex.h>
     14 
     15 struct hd_geometry;
     16 struct mtd_info;
     17 struct mtd_blktrans_ops;
     18 struct file;
     19 struct inode;
     20 
     21 struct mtd_blktrans_dev {
     22 	struct mtd_blktrans_ops *tr;
     23 	struct list_head list;
     24 	struct mtd_info *mtd;
     25 	struct mutex lock;
     26 	int devnum;
     27 	int blksize;
     28 	unsigned long size;
     29 	int readonly;
     30 	void *blkcore_priv; /* gendisk in 2.5, devfs_handle in 2.4 */
     31 };
     32 
     33 struct blkcore_priv; /* Differs for 2.4 and 2.5 kernels; private */
     34 
     35 struct mtd_blktrans_ops {
     36 	char *name;
     37 	int major;
     38 	int part_bits;
     39 
     40 	/* Access functions */
     41 	int (*readsect)(struct mtd_blktrans_dev *dev,
     42 		    unsigned long block, char *buffer);
     43 	int (*writesect)(struct mtd_blktrans_dev *dev,
     44 		     unsigned long block, char *buffer);
     45 
     46 	/* Block layer ioctls */
     47 	int (*getgeo)(struct mtd_blktrans_dev *dev, struct hd_geometry *geo);
     48 	int (*flush)(struct mtd_blktrans_dev *dev);
     49 
     50 	/* Called with mtd_table_mutex held; no race with add/remove */
     51 	int (*open)(struct mtd_blktrans_dev *dev);
     52 	int (*release)(struct mtd_blktrans_dev *dev);
     53 
     54 	/* Called on {de,}registration and on subsequent addition/removal
     55 	   of devices, with mtd_table_mutex held. */
     56 	void (*add_mtd)(struct mtd_blktrans_ops *tr, struct mtd_info *mtd);
     57 	void (*remove_dev)(struct mtd_blktrans_dev *dev);
     58 
     59 	struct list_head devs;
     60 	struct list_head list;
     61 	struct module *owner;
     62 
     63 	struct mtd_blkcore_priv *blkcore_priv;
     64 };
     65 
     66 extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr);
     67 extern int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr);
     68 extern int add_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
     69 extern int del_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
     70 
     71 
     72 #endif /* __MTD_TRANS_H__ */
     73