Merge tag 'iio-for-4.10a' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23...
[linux-2.6-microblaze.git] / drivers / lightnvm / gennvm.h
1 /*
2  * Copyright: Matias Bjorling <mb@bjorling.me>
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License version
6  * 2 as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  * General Public License for more details.
12  *
13  */
14
15 #ifndef GENNVM_H_
16 #define GENNVM_H_
17
18 #include <linux/module.h>
19 #include <linux/vmalloc.h>
20
21 #include <linux/lightnvm.h>
22
23 struct gen_lun {
24         struct nvm_lun vlun;
25
26         int reserved_blocks;
27         /* lun block lists */
28         struct list_head used_list;     /* In-use blocks */
29         struct list_head free_list;     /* Not used blocks i.e. released
30                                          * and ready for use
31                                          */
32         struct list_head bb_list;       /* Bad blocks. Mutually exclusive with
33                                          * free_list and used_list
34                                          */
35 };
36
37 struct gen_dev {
38         struct nvm_dev *dev;
39
40         int nr_luns;
41         struct gen_lun *luns;
42         struct list_head area_list;
43
44         struct mutex lock;
45         struct list_head targets;
46 };
47
48 struct gen_area {
49         struct list_head list;
50         sector_t begin;
51         sector_t end;   /* end is excluded */
52 };
53
54 #define gen_for_each_lun(bm, lun, i) \
55                 for ((i) = 0, lun = &(bm)->luns[0]; \
56                         (i) < (bm)->nr_luns; (i)++, lun = &(bm)->luns[(i)])
57
58 #endif /* GENNVM_H_ */