Commit | Line | Data |
---|---|---|
fd534e9b | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
1da177e4 | 2 | /* |
a1452a37 | 3 | * Copyright © 2003-2010 David Woodhouse <dwmw2@infradead.org> |
1da177e4 LT |
4 | */ |
5 | ||
6 | #ifndef __MTD_TRANS_H__ | |
7 | #define __MTD_TRANS_H__ | |
8 | ||
48b19268 | 9 | #include <linux/mutex.h> |
048d8719 | 10 | #include <linux/kref.h> |
026ec578 | 11 | #include <linux/sysfs.h> |
1da177e4 LT |
12 | |
13 | struct hd_geometry; | |
14 | struct mtd_info; | |
15 | struct mtd_blktrans_ops; | |
16 | struct file; | |
17 | struct inode; | |
18 | ||
19 | struct mtd_blktrans_dev { | |
20 | struct mtd_blktrans_ops *tr; | |
21 | struct list_head list; | |
22 | struct mtd_info *mtd; | |
48b19268 | 23 | struct mutex lock; |
1da177e4 | 24 | int devnum; |
7bf7e370 | 25 | bool bg_stop; |
1da177e4 LT |
26 | unsigned long size; |
27 | int readonly; | |
048d8719 ML |
28 | int open; |
29 | struct kref ref; | |
a8638622 | 30 | struct gendisk *disk; |
026ec578 | 31 | struct attribute_group *disk_attributes; |
a8638622 | 32 | struct request_queue *rq; |
891b7c5f JA |
33 | struct list_head rq_list; |
34 | struct blk_mq_tag_set *tag_set; | |
a8638622 ML |
35 | spinlock_t queue_lock; |
36 | void *priv; | |
70d5098a | 37 | fmode_t file_mode; |
1da177e4 LT |
38 | }; |
39 | ||
1da177e4 LT |
40 | struct mtd_blktrans_ops { |
41 | char *name; | |
42 | int major; | |
43 | int part_bits; | |
19187672 RP |
44 | int blksize; |
45 | int blkshift; | |
1da177e4 LT |
46 | |
47 | /* Access functions */ | |
48 | int (*readsect)(struct mtd_blktrans_dev *dev, | |
49 | unsigned long block, char *buffer); | |
50 | int (*writesect)(struct mtd_blktrans_dev *dev, | |
51 | unsigned long block, char *buffer); | |
eae9acd1 DW |
52 | int (*discard)(struct mtd_blktrans_dev *dev, |
53 | unsigned long block, unsigned nr_blocks); | |
c7519dbf | 54 | void (*background)(struct mtd_blktrans_dev *dev); |
1da177e4 LT |
55 | |
56 | /* Block layer ioctls */ | |
57 | int (*getgeo)(struct mtd_blktrans_dev *dev, struct hd_geometry *geo); | |
58 | int (*flush)(struct mtd_blktrans_dev *dev); | |
59 | ||
60 | /* Called with mtd_table_mutex held; no race with add/remove */ | |
61 | int (*open)(struct mtd_blktrans_dev *dev); | |
a8ca889e | 62 | void (*release)(struct mtd_blktrans_dev *dev); |
1da177e4 LT |
63 | |
64 | /* Called on {de,}registration and on subsequent addition/removal | |
65 | of devices, with mtd_table_mutex held. */ | |
66 | void (*add_mtd)(struct mtd_blktrans_ops *tr, struct mtd_info *mtd); | |
67 | void (*remove_dev)(struct mtd_blktrans_dev *dev); | |
68 | ||
69 | struct list_head devs; | |
70 | struct list_head list; | |
71 | struct module *owner; | |
1da177e4 LT |
72 | }; |
73 | ||
74 | extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr); | |
75 | extern int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr); | |
76 | extern int add_mtd_blktrans_dev(struct mtd_blktrans_dev *dev); | |
77 | extern int del_mtd_blktrans_dev(struct mtd_blktrans_dev *dev); | |
c7519dbf | 78 | extern int mtd_blktrans_cease_background(struct mtd_blktrans_dev *dev); |
61ecfa87 | 79 | |
1da177e4 LT |
80 | |
81 | #endif /* __MTD_TRANS_H__ */ |