Browse Source

lightnvm: add shorten OCSSD version in geo

Create a shorten version to use in the generic geometry.

Signed-off-by: Javier González <javier@cnexlabs.com>
Signed-off-by: Matias Bjørling <mb@lightnvm.io>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Javier González 7 years ago
parent
commit
f1d4e8121f
2 changed files with 14 additions and 0 deletions
  1. 6 0
      drivers/nvme/host/lightnvm.c
  2. 8 0
      include/linux/lightnvm.h

+ 6 - 0
drivers/nvme/host/lightnvm.c

@@ -299,6 +299,9 @@ static int nvme_nvm_setup_12(struct nvme_nvm_id12 *id,
 	geo->major_ver_id = id->ver_id;
 	geo->major_ver_id = id->ver_id;
 	geo->minor_ver_id = 2;
 	geo->minor_ver_id = 2;
 
 
+	/* Set compacted version for upper layers */
+	geo->version = NVM_OCSSD_SPEC_12;
+
 	geo->nr_chnls = src->num_ch;
 	geo->nr_chnls = src->num_ch;
 	geo->nr_luns = src->num_lun;
 	geo->nr_luns = src->num_lun;
 	geo->all_luns = geo->nr_chnls * geo->nr_luns;
 	geo->all_luns = geo->nr_chnls * geo->nr_luns;
@@ -384,6 +387,9 @@ static int nvme_nvm_setup_20(struct nvme_nvm_id20 *id,
 	geo->major_ver_id = id->mjr;
 	geo->major_ver_id = id->mjr;
 	geo->minor_ver_id = id->mnr;
 	geo->minor_ver_id = id->mnr;
 
 
+	/* Set compacted version for upper layers */
+	geo->version = NVM_OCSSD_SPEC_20;
+
 	if (!(geo->major_ver_id == 2 && geo->minor_ver_id == 0)) {
 	if (!(geo->major_ver_id == 2 && geo->minor_ver_id == 0)) {
 		pr_err("nvm: OCSSD version not supported (v%d.%d)\n",
 		pr_err("nvm: OCSSD version not supported (v%d.%d)\n",
 				geo->major_ver_id, geo->minor_ver_id);
 				geo->major_ver_id, geo->minor_ver_id);

+ 8 - 0
include/linux/lightnvm.h

@@ -23,6 +23,11 @@ enum {
 #define NVM_LUN_BITS (8)
 #define NVM_LUN_BITS (8)
 #define NVM_CH_BITS  (7)
 #define NVM_CH_BITS  (7)
 
 
+enum {
+	NVM_OCSSD_SPEC_12 = 12,
+	NVM_OCSSD_SPEC_20 = 20,
+};
+
 struct ppa_addr {
 struct ppa_addr {
 	/* Generic structure for all addresses */
 	/* Generic structure for all addresses */
 	union {
 	union {
@@ -266,6 +271,9 @@ struct nvm_geo {
 	u8	major_ver_id;
 	u8	major_ver_id;
 	u8	minor_ver_id;
 	u8	minor_ver_id;
 
 
+	/* kernel short version */
+	u8	version;
+
 	/* instance specific geometry */
 	/* instance specific geometry */
 	int nr_chnls;
 	int nr_chnls;
 	int nr_luns;		/* per channel */
 	int nr_luns;		/* per channel */