diff options
author | Matias Bjørling <mb@lightnvm.io> | 2018-03-29 18:05:00 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-03-29 19:29:09 -0400 |
commit | a04e0cf93aee6b5e59e84ab66253f09eb71d621b (patch) | |
tree | 825eb5908270bbd28853d2fd710185420fd1cf85 | |
parent | e411b33117d1967d2a5784ed32385e566a871d12 (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.c | 82 |
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 | ||
54 | struct 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 | |||
54 | struct nvme_nvm_identity { | 69 | struct 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 | ||
92 | struct 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 | |||
107 | struct nvme_nvm_command { | 107 | struct 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 | ||
118 | struct nvme_nvm_id_group { | 118 | struct 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 | ||
144 | struct nvme_nvm_addr_format { | 144 | struct 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 | ||
160 | struct nvme_nvm_id { | 160 | struct 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 | ||
203 | static int init_grps(struct nvm_id *nvm_id, struct nvme_nvm_id *nvme_nvm_id) | 203 | static 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) | |||
261 | static int nvme_nvm_identity(struct nvm_dev *nvmdev, struct nvm_id *nvm_id) | 261 | static 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); |
290 | out: | 290 | out: |
291 | kfree(nvme_nvm_id); | 291 | kfree(id); |
292 | return ret; | 292 | return ret; |
293 | } | 293 | } |
294 | 294 | ||