0001
0002
0003
0004
0005
0006 #ifndef __MTD_TRANS_H__
0007 #define __MTD_TRANS_H__
0008
0009 #include <linux/mutex.h>
0010 #include <linux/kref.h>
0011 #include <linux/sysfs.h>
0012
0013 struct hd_geometry;
0014 struct mtd_info;
0015 struct mtd_blktrans_ops;
0016 struct file;
0017 struct inode;
0018
0019 struct mtd_blktrans_dev {
0020 struct mtd_blktrans_ops *tr;
0021 struct list_head list;
0022 struct mtd_info *mtd;
0023 struct mutex lock;
0024 int devnum;
0025 bool bg_stop;
0026 unsigned long size;
0027 int readonly;
0028 int open;
0029 struct kref ref;
0030 struct gendisk *disk;
0031 struct attribute_group *disk_attributes;
0032 struct request_queue *rq;
0033 struct list_head rq_list;
0034 struct blk_mq_tag_set *tag_set;
0035 spinlock_t queue_lock;
0036 void *priv;
0037 fmode_t file_mode;
0038 };
0039
0040 struct mtd_blktrans_ops {
0041 char *name;
0042 int major;
0043 int part_bits;
0044 int blksize;
0045 int blkshift;
0046
0047
0048 int (*readsect)(struct mtd_blktrans_dev *dev,
0049 unsigned long block, char *buffer);
0050 int (*writesect)(struct mtd_blktrans_dev *dev,
0051 unsigned long block, char *buffer);
0052 int (*discard)(struct mtd_blktrans_dev *dev,
0053 unsigned long block, unsigned nr_blocks);
0054 void (*background)(struct mtd_blktrans_dev *dev);
0055
0056
0057 int (*getgeo)(struct mtd_blktrans_dev *dev, struct hd_geometry *geo);
0058 int (*flush)(struct mtd_blktrans_dev *dev);
0059
0060
0061 int (*open)(struct mtd_blktrans_dev *dev);
0062 void (*release)(struct mtd_blktrans_dev *dev);
0063
0064
0065
0066 void (*add_mtd)(struct mtd_blktrans_ops *tr, struct mtd_info *mtd);
0067 void (*remove_dev)(struct mtd_blktrans_dev *dev);
0068
0069 struct list_head devs;
0070 struct list_head list;
0071 struct module *owner;
0072 };
0073
0074 extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr);
0075 extern int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr);
0076 extern int add_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
0077 extern int del_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
0078 extern int mtd_blktrans_cease_background(struct mtd_blktrans_dev *dev);
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088 #define module_mtd_blktrans(__mtd_blktrans) \
0089 module_driver(__mtd_blktrans, register_mtd_blktrans, \
0090 deregister_mtd_blktrans)
0091
0092 #endif