aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatias Bjørling <mb@lightnvm.io>2018-03-29 18:05:00 -0400
committerJens Axboe <axboe@kernel.dk>2018-03-29 19:29:09 -0400
commita04e0cf93aee6b5e59e84ab66253f09eb71d621b (patch)
tree825eb5908270bbd28853d2fd710185420fd1cf85
parente411b33117d1967d2a5784ed32385e566a871d12 (diff)
lightnvm: make 1.2 data structures explicit
Make the 1.2 data structures explicit, so it will be easy to identify the 2.0 data structures. Also fix the order of which the nvme_nvm_* are declared, such that they follow the nvme_nvm_command order. Signed-off-by: Matias Bjørling <mb@lightnvm.io> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--drivers/nvme/host/lightnvm.c82
1 files changed, 41 insertions, 41 deletions
diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
index dc0b1335c7c6..60db3f1b59da 100644
--- a/drivers/nvme/host/lightnvm.c
+++ b/drivers/nvme/host/lightnvm.c
@@ -51,6 +51,21 @@ struct nvme_nvm_ph_rw {
51 __le64 resv; 51 __le64 resv;
52}; 52};
53 53
54struct nvme_nvm_erase_blk {
55 __u8 opcode;
56 __u8 flags;
57 __u16 command_id;
58 __le32 nsid;
59 __u64 rsvd[2];
60 __le64 prp1;
61 __le64 prp2;
62 __le64 spba;
63 __le16 length;
64 __le16 control;
65 __le32 dsmgmt;
66 __le64 resv;
67};
68
54struct nvme_nvm_identity { 69struct nvme_nvm_identity {
55 __u8 opcode; 70 __u8 opcode;
56 __u8 flags; 71 __u8 flags;
@@ -89,33 +104,18 @@ struct nvme_nvm_setbbtbl {
89 __u32 rsvd4[3]; 104 __u32 rsvd4[3];
90}; 105};
91 106
92struct nvme_nvm_erase_blk {
93 __u8 opcode;
94 __u8 flags;
95 __u16 command_id;
96 __le32 nsid;
97 __u64 rsvd[2];
98 __le64 prp1;
99 __le64 prp2;
100 __le64 spba;
101 __le16 length;
102 __le16 control;
103 __le32 dsmgmt;
104 __le64 resv;
105};
106
107struct nvme_nvm_command { 107struct nvme_nvm_command {
108 union { 108 union {
109 struct nvme_common_command common; 109 struct nvme_common_command common;
110 struct nvme_nvm_identity identity;
111 struct nvme_nvm_ph_rw ph_rw; 110 struct nvme_nvm_ph_rw ph_rw;
111 struct nvme_nvm_erase_blk erase;
112 struct nvme_nvm_identity identity;
112 struct nvme_nvm_getbbtbl get_bb; 113 struct nvme_nvm_getbbtbl get_bb;
113 struct nvme_nvm_setbbtbl set_bb; 114 struct nvme_nvm_setbbtbl set_bb;
114 struct nvme_nvm_erase_blk erase;
115 }; 115 };
116}; 116};
117 117
118struct nvme_nvm_id_group { 118struct nvme_nvm_id12_grp {
119 __u8 mtype; 119 __u8 mtype;
120 __u8 fmtype; 120 __u8 fmtype;
121 __le16 res16; 121 __le16 res16;
@@ -141,7 +141,7 @@ struct nvme_nvm_id_group {
141 __u8 reserved[906]; 141 __u8 reserved[906];
142} __packed; 142} __packed;
143 143
144struct nvme_nvm_addr_format { 144struct nvme_nvm_id12_addrf {
145 __u8 ch_offset; 145 __u8 ch_offset;
146 __u8 ch_len; 146 __u8 ch_len;
147 __u8 lun_offset; 147 __u8 lun_offset;
@@ -157,16 +157,16 @@ struct nvme_nvm_addr_format {
157 __u8 res[4]; 157 __u8 res[4];
158} __packed; 158} __packed;
159 159
160struct nvme_nvm_id { 160struct nvme_nvm_id12 {
161 __u8 ver_id; 161 __u8 ver_id;
162 __u8 vmnt; 162 __u8 vmnt;
163 __u8 cgrps; 163 __u8 cgrps;
164 __u8 res; 164 __u8 res;
165 __le32 cap; 165 __le32 cap;
166 __le32 dom; 166 __le32 dom;
167 struct nvme_nvm_addr_format ppaf; 167 struct nvme_nvm_id12_addrf ppaf;
168 __u8 resv[228]; 168 __u8 resv[228];
169 struct nvme_nvm_id_group group; 169 struct nvme_nvm_id12_grp grp;
170 __u8 resv2[2880]; 170 __u8 resv2[2880];
171} __packed; 171} __packed;
172 172
@@ -191,25 +191,25 @@ static inline void _nvme_nvm_check_size(void)
191{ 191{
192 BUILD_BUG_ON(sizeof(struct nvme_nvm_identity) != 64); 192 BUILD_BUG_ON(sizeof(struct nvme_nvm_identity) != 64);
193 BUILD_BUG_ON(sizeof(struct nvme_nvm_ph_rw) != 64); 193 BUILD_BUG_ON(sizeof(struct nvme_nvm_ph_rw) != 64);
194 BUILD_BUG_ON(sizeof(struct nvme_nvm_erase_blk) != 64);
194 BUILD_BUG_ON(sizeof(struct nvme_nvm_getbbtbl) != 64); 195 BUILD_BUG_ON(sizeof(struct nvme_nvm_getbbtbl) != 64);
195 BUILD_BUG_ON(sizeof(struct nvme_nvm_setbbtbl) != 64); 196 BUILD_BUG_ON(sizeof(struct nvme_nvm_setbbtbl) != 64);
196 BUILD_BUG_ON(sizeof(struct nvme_nvm_erase_blk) != 64); 197 BUILD_BUG_ON(sizeof(struct nvme_nvm_id12_grp) != 960);
197 BUILD_BUG_ON(sizeof(struct nvme_nvm_id_group) != 960); 198 BUILD_BUG_ON(sizeof(struct nvme_nvm_id12_addrf) != 16);
198 BUILD_BUG_ON(sizeof(struct nvme_nvm_addr_format) != 16); 199 BUILD_BUG_ON(sizeof(struct nvme_nvm_id12) != NVME_IDENTIFY_DATA_SIZE);
199 BUILD_BUG_ON(sizeof(struct nvme_nvm_id) != NVME_IDENTIFY_DATA_SIZE);
200 BUILD_BUG_ON(sizeof(struct nvme_nvm_bb_tbl) != 64); 200 BUILD_BUG_ON(sizeof(struct nvme_nvm_bb_tbl) != 64);
201} 201}
202 202
203static int init_grps(struct nvm_id *nvm_id, struct nvme_nvm_id *nvme_nvm_id) 203static int init_grp(struct nvm_id *nvm_id, struct nvme_nvm_id12 *id12)
204{ 204{
205 struct nvme_nvm_id_group *src; 205 struct nvme_nvm_id12_grp *src;
206 struct nvm_id_group *grp; 206 struct nvm_id_group *grp;
207 int sec_per_pg, sec_per_pl, pg_per_blk; 207 int sec_per_pg, sec_per_pl, pg_per_blk;
208 208
209 if (nvme_nvm_id->cgrps != 1) 209 if (id12->cgrps != 1)
210 return -EINVAL; 210 return -EINVAL;
211 211
212 src = &nvme_nvm_id->group; 212 src = &id12->grp;
213 grp = &nvm_id->grp; 213 grp = &nvm_id->grp;
214 214
215 grp->mtype = src->mtype; 215 grp->mtype = src->mtype;
@@ -261,34 +261,34 @@ static int init_grps(struct nvm_id *nvm_id, struct nvme_nvm_id *nvme_nvm_id)
261static int nvme_nvm_identity(struct nvm_dev *nvmdev, struct nvm_id *nvm_id) 261static int nvme_nvm_identity(struct nvm_dev *nvmdev, struct nvm_id *nvm_id)
262{ 262{
263 struct nvme_ns *ns = nvmdev->q->queuedata; 263 struct nvme_ns *ns = nvmdev->q->queuedata;
264 struct nvme_nvm_id *nvme_nvm_id; 264 struct nvme_nvm_id12 *id;
265 struct nvme_nvm_command c = {}; 265 struct nvme_nvm_command c = {};
266 int ret; 266 int ret;
267 267
268 c.identity.opcode = nvme_nvm_admin_identity; 268 c.identity.opcode = nvme_nvm_admin_identity;
269 c.identity.nsid = cpu_to_le32(ns->head->ns_id); 269 c.identity.nsid = cpu_to_le32(ns->head->ns_id);
270 270
271 nvme_nvm_id = kmalloc(sizeof(struct nvme_nvm_id), GFP_KERNEL); 271 id = kmalloc(sizeof(struct nvme_nvm_id12), GFP_KERNEL);
272 if (!nvme_nvm_id) 272 if (!id)
273 return -ENOMEM; 273 return -ENOMEM;
274 274
275 ret = nvme_submit_sync_cmd(ns->ctrl->admin_q, (struct nvme_command *)&c, 275 ret = nvme_submit_sync_cmd(ns->ctrl->admin_q, (struct nvme_command *)&c,
276 nvme_nvm_id, sizeof(struct nvme_nvm_id)); 276 id, sizeof(struct nvme_nvm_id12));
277 if (ret) { 277 if (ret) {
278 ret = -EIO; 278 ret = -EIO;
279 goto out; 279 goto out;
280 } 280 }
281 281
282 nvm_id->ver_id = nvme_nvm_id->ver_id; 282 nvm_id->ver_id = id->ver_id;
283 nvm_id->vmnt = nvme_nvm_id->vmnt; 283 nvm_id->vmnt = id->vmnt;
284 nvm_id->cap = le32_to_cpu(nvme_nvm_id->cap); 284 nvm_id->cap = le32_to_cpu(id->cap);
285 nvm_id->dom = le32_to_cpu(nvme_nvm_id->dom); 285 nvm_id->dom = le32_to_cpu(id->dom);
286 memcpy(&nvm_id->ppaf, &nvme_nvm_id->ppaf, 286 memcpy(&nvm_id->ppaf, &id->ppaf,
287 sizeof(struct nvm_addr_format)); 287 sizeof(struct nvm_addr_format));
288 288
289 ret = init_grps(nvm_id, nvme_nvm_id); 289 ret = init_grp(nvm_id, id);
290out: 290out:
291 kfree(nvme_nvm_id); 291 kfree(id);
292 return ret; 292 return ret;
293} 293}
294 294