Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
61ecfa87 | 2 | * $Id: blktrans.h,v 1.6 2005/11/07 11:14:54 gleixner Exp $ |
1da177e4 LT |
3 | * |
4 | * (C) 2003 David Woodhouse <dwmw2@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 <asm/semaphore.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 semaphore sem; | |
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); | |
61ecfa87 | 70 | |
1da177e4 LT |
71 | |
72 | #endif /* __MTD_TRANS_H__ */ |