diff options
Diffstat (limited to 'kernel/drivers/lightnvm/gennvm.h')
-rw-r--r-- | kernel/drivers/lightnvm/gennvm.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/kernel/drivers/lightnvm/gennvm.h b/kernel/drivers/lightnvm/gennvm.h new file mode 100644 index 000000000..9c24b5b32 --- /dev/null +++ b/kernel/drivers/lightnvm/gennvm.h @@ -0,0 +1,48 @@ +/* + * Copyright: Matias Bjorling <mb@bjorling.me> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version + * 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + */ + +#ifndef GENNVM_H_ +#define GENNVM_H_ + +#include <linux/module.h> +#include <linux/vmalloc.h> + +#include <linux/lightnvm.h> + +struct gen_lun { + struct nvm_lun vlun; + + int reserved_blocks; + /* lun block lists */ + struct list_head used_list; /* In-use blocks */ + struct list_head free_list; /* Not used blocks i.e. released + * and ready for use + */ + struct list_head bb_list; /* Bad blocks. Mutually exclusive with + * free_list and used_list + */ +}; + +struct gen_nvm { + struct nvm_dev *dev; + + int nr_luns; + struct gen_lun *luns; +}; + +#define gennvm_for_each_lun(bm, lun, i) \ + for ((i) = 0, lun = &(bm)->luns[0]; \ + (i) < (bm)->nr_luns; (i)++, lun = &(bm)->luns[(i)]) + +#endif /* GENNVM_H_ */ |