.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0 */ |
---|
1 | 2 | /* |
---|
2 | 3 | * Definitions for the NVM Express interface |
---|
3 | 4 | * Copyright (c) 2011-2014, Intel Corporation. |
---|
4 | | - * |
---|
5 | | - * This program is free software; you can redistribute it and/or modify it |
---|
6 | | - * under the terms and conditions of the GNU General Public License, |
---|
7 | | - * version 2, as published by the Free Software Foundation. |
---|
8 | | - * |
---|
9 | | - * This program is distributed in the hope it will be useful, but WITHOUT |
---|
10 | | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
---|
11 | | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
---|
12 | | - * more details. |
---|
13 | 5 | */ |
---|
14 | 6 | |
---|
15 | 7 | #ifndef _LINUX_NVME_H |
---|
16 | 8 | #define _LINUX_NVME_H |
---|
17 | 9 | |
---|
| 10 | +#include <linux/bits.h> |
---|
18 | 11 | #include <linux/types.h> |
---|
19 | 12 | #include <linux/uuid.h> |
---|
20 | 13 | |
---|
.. | .. |
---|
46 | 39 | NVMF_ADDR_FAMILY_IP6 = 2, /* IP6 */ |
---|
47 | 40 | NVMF_ADDR_FAMILY_IB = 3, /* InfiniBand */ |
---|
48 | 41 | NVMF_ADDR_FAMILY_FC = 4, /* Fibre Channel */ |
---|
| 42 | + NVMF_ADDR_FAMILY_LOOP = 254, /* Reserved for host usage */ |
---|
| 43 | + NVMF_ADDR_FAMILY_MAX, |
---|
49 | 44 | }; |
---|
50 | 45 | |
---|
51 | 46 | /* Transport Type codes for Discovery Log Page entry TRTYPE field */ |
---|
52 | 47 | enum { |
---|
53 | 48 | NVMF_TRTYPE_RDMA = 1, /* RDMA */ |
---|
54 | 49 | NVMF_TRTYPE_FC = 2, /* Fibre Channel */ |
---|
| 50 | + NVMF_TRTYPE_TCP = 3, /* TCP/IP */ |
---|
55 | 51 | NVMF_TRTYPE_LOOP = 254, /* Reserved for host usage */ |
---|
56 | 52 | NVMF_TRTYPE_MAX, |
---|
57 | 53 | }; |
---|
58 | 54 | |
---|
59 | 55 | /* Transport Requirements codes for Discovery Log Page entry TREQ field */ |
---|
60 | 56 | enum { |
---|
61 | | - NVMF_TREQ_NOT_SPECIFIED = 0, /* Not specified */ |
---|
62 | | - NVMF_TREQ_REQUIRED = 1, /* Required */ |
---|
63 | | - NVMF_TREQ_NOT_REQUIRED = 2, /* Not Required */ |
---|
| 57 | + NVMF_TREQ_NOT_SPECIFIED = 0, /* Not specified */ |
---|
| 58 | + NVMF_TREQ_REQUIRED = 1, /* Required */ |
---|
| 59 | + NVMF_TREQ_NOT_REQUIRED = 2, /* Not Required */ |
---|
| 60 | +#define NVME_TREQ_SECURE_CHANNEL_MASK \ |
---|
| 61 | + (NVMF_TREQ_REQUIRED | NVMF_TREQ_NOT_REQUIRED) |
---|
| 62 | + |
---|
| 63 | + NVMF_TREQ_DISABLE_SQFLOW = (1 << 2), /* Supports SQ flow control disable */ |
---|
64 | 64 | }; |
---|
65 | 65 | |
---|
66 | 66 | /* RDMA QP Service Type codes for Discovery Log Page entry TSAS |
---|
.. | .. |
---|
110 | 110 | NVME_REG_AQA = 0x0024, /* Admin Queue Attributes */ |
---|
111 | 111 | NVME_REG_ASQ = 0x0028, /* Admin SQ Base Address */ |
---|
112 | 112 | NVME_REG_ACQ = 0x0030, /* Admin CQ Base Address */ |
---|
113 | | - NVME_REG_CMBLOC = 0x0038, /* Controller Memory Buffer Location */ |
---|
| 113 | + NVME_REG_CMBLOC = 0x0038, /* Controller Memory Buffer Location */ |
---|
114 | 114 | NVME_REG_CMBSZ = 0x003c, /* Controller Memory Buffer Size */ |
---|
| 115 | + NVME_REG_BPINFO = 0x0040, /* Boot Partition Information */ |
---|
| 116 | + NVME_REG_BPRSEL = 0x0044, /* Boot Partition Read Select */ |
---|
| 117 | + NVME_REG_BPMBL = 0x0048, /* Boot Partition Memory Buffer |
---|
| 118 | + * Location |
---|
| 119 | + */ |
---|
| 120 | + NVME_REG_CMBMSC = 0x0050, /* Controller Memory Buffer Memory |
---|
| 121 | + * Space Control |
---|
| 122 | + */ |
---|
| 123 | + NVME_REG_PMRCAP = 0x0e00, /* Persistent Memory Capabilities */ |
---|
| 124 | + NVME_REG_PMRCTL = 0x0e04, /* Persistent Memory Region Control */ |
---|
| 125 | + NVME_REG_PMRSTS = 0x0e08, /* Persistent Memory Region Status */ |
---|
| 126 | + NVME_REG_PMREBS = 0x0e0c, /* Persistent Memory Region Elasticity |
---|
| 127 | + * Buffer Size |
---|
| 128 | + */ |
---|
| 129 | + NVME_REG_PMRSWTP = 0x0e10, /* Persistent Memory Region Sustained |
---|
| 130 | + * Write Throughput |
---|
| 131 | + */ |
---|
115 | 132 | NVME_REG_DBS = 0x1000, /* SQ 0 Tail Doorbell */ |
---|
116 | 133 | }; |
---|
117 | 134 | |
---|
.. | .. |
---|
119 | 136 | #define NVME_CAP_TIMEOUT(cap) (((cap) >> 24) & 0xff) |
---|
120 | 137 | #define NVME_CAP_STRIDE(cap) (((cap) >> 32) & 0xf) |
---|
121 | 138 | #define NVME_CAP_NSSRC(cap) (((cap) >> 36) & 0x1) |
---|
| 139 | +#define NVME_CAP_CSS(cap) (((cap) >> 37) & 0xff) |
---|
122 | 140 | #define NVME_CAP_MPSMIN(cap) (((cap) >> 48) & 0xf) |
---|
123 | 141 | #define NVME_CAP_MPSMAX(cap) (((cap) >> 52) & 0xf) |
---|
| 142 | +#define NVME_CAP_CMBS(cap) (((cap) >> 57) & 0x1) |
---|
124 | 143 | |
---|
125 | 144 | #define NVME_CMB_BIR(cmbloc) ((cmbloc) & 0x7) |
---|
126 | 145 | #define NVME_CMB_OFST(cmbloc) (((cmbloc) >> 12) & 0xfffff) |
---|
.. | .. |
---|
143 | 162 | * Submission and Completion Queue Entry Sizes for the NVM command set. |
---|
144 | 163 | * (In bytes and specified as a power of two (2^n)). |
---|
145 | 164 | */ |
---|
| 165 | +#define NVME_ADM_SQES 6 |
---|
146 | 166 | #define NVME_NVM_IOSQES 6 |
---|
147 | 167 | #define NVME_NVM_IOCQES 4 |
---|
148 | 168 | |
---|
149 | 169 | enum { |
---|
150 | 170 | NVME_CC_ENABLE = 1 << 0, |
---|
151 | | - NVME_CC_CSS_NVM = 0 << 4, |
---|
152 | 171 | NVME_CC_EN_SHIFT = 0, |
---|
153 | 172 | NVME_CC_CSS_SHIFT = 4, |
---|
154 | 173 | NVME_CC_MPS_SHIFT = 7, |
---|
.. | .. |
---|
156 | 175 | NVME_CC_SHN_SHIFT = 14, |
---|
157 | 176 | NVME_CC_IOSQES_SHIFT = 16, |
---|
158 | 177 | NVME_CC_IOCQES_SHIFT = 20, |
---|
| 178 | + NVME_CC_CSS_NVM = 0 << NVME_CC_CSS_SHIFT, |
---|
| 179 | + NVME_CC_CSS_CSI = 6 << NVME_CC_CSS_SHIFT, |
---|
| 180 | + NVME_CC_CSS_MASK = 7 << NVME_CC_CSS_SHIFT, |
---|
159 | 181 | NVME_CC_AMS_RR = 0 << NVME_CC_AMS_SHIFT, |
---|
160 | 182 | NVME_CC_AMS_WRRU = 1 << NVME_CC_AMS_SHIFT, |
---|
161 | 183 | NVME_CC_AMS_VS = 7 << NVME_CC_AMS_SHIFT, |
---|
.. | .. |
---|
165 | 187 | NVME_CC_SHN_MASK = 3 << NVME_CC_SHN_SHIFT, |
---|
166 | 188 | NVME_CC_IOSQES = NVME_NVM_IOSQES << NVME_CC_IOSQES_SHIFT, |
---|
167 | 189 | NVME_CC_IOCQES = NVME_NVM_IOCQES << NVME_CC_IOCQES_SHIFT, |
---|
| 190 | + NVME_CAP_CSS_NVM = 1 << 0, |
---|
| 191 | + NVME_CAP_CSS_CSI = 1 << 6, |
---|
168 | 192 | NVME_CSTS_RDY = 1 << 0, |
---|
169 | 193 | NVME_CSTS_CFS = 1 << 1, |
---|
170 | 194 | NVME_CSTS_NSSRO = 1 << 4, |
---|
.. | .. |
---|
173 | 197 | NVME_CSTS_SHST_OCCUR = 1 << 2, |
---|
174 | 198 | NVME_CSTS_SHST_CMPLT = 2 << 2, |
---|
175 | 199 | NVME_CSTS_SHST_MASK = 3 << 2, |
---|
| 200 | + NVME_CMBMSC_CRE = 1 << 0, |
---|
| 201 | + NVME_CMBMSC_CMSE = 1 << 1, |
---|
176 | 202 | }; |
---|
177 | 203 | |
---|
178 | 204 | struct nvme_id_power_state { |
---|
.. | .. |
---|
198 | 224 | NVME_PS_FLAGS_NON_OP_STATE = 1 << 1, |
---|
199 | 225 | }; |
---|
200 | 226 | |
---|
| 227 | +enum nvme_ctrl_attr { |
---|
| 228 | + NVME_CTRL_ATTR_HID_128_BIT = (1 << 0), |
---|
| 229 | + NVME_CTRL_ATTR_TBKAS = (1 << 6), |
---|
| 230 | +}; |
---|
| 231 | + |
---|
201 | 232 | struct nvme_id_ctrl { |
---|
202 | 233 | __le16 vid; |
---|
203 | 234 | __le16 ssvid; |
---|
.. | .. |
---|
214 | 245 | __le32 rtd3e; |
---|
215 | 246 | __le32 oaes; |
---|
216 | 247 | __le32 ctratt; |
---|
217 | | - __u8 rsvd100[156]; |
---|
| 248 | + __u8 rsvd100[28]; |
---|
| 249 | + __le16 crdt1; |
---|
| 250 | + __le16 crdt2; |
---|
| 251 | + __le16 crdt3; |
---|
| 252 | + __u8 rsvd134[122]; |
---|
218 | 253 | __le16 oacs; |
---|
219 | 254 | __u8 acl; |
---|
220 | 255 | __u8 aerl; |
---|
.. | .. |
---|
278 | 313 | }; |
---|
279 | 314 | |
---|
280 | 315 | enum { |
---|
| 316 | + NVME_CTRL_CMIC_MULTI_CTRL = 1 << 1, |
---|
| 317 | + NVME_CTRL_CMIC_ANA = 1 << 3, |
---|
281 | 318 | NVME_CTRL_ONCS_COMPARE = 1 << 0, |
---|
282 | 319 | NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 1 << 1, |
---|
283 | 320 | NVME_CTRL_ONCS_DSM = 1 << 2, |
---|
284 | 321 | NVME_CTRL_ONCS_WRITE_ZEROES = 1 << 3, |
---|
| 322 | + NVME_CTRL_ONCS_RESERVATIONS = 1 << 5, |
---|
285 | 323 | NVME_CTRL_ONCS_TIMESTAMP = 1 << 6, |
---|
286 | 324 | NVME_CTRL_VWC_PRESENT = 1 << 0, |
---|
287 | 325 | NVME_CTRL_OACS_SEC_SUPP = 1 << 0, |
---|
288 | 326 | NVME_CTRL_OACS_DIRECTIVES = 1 << 5, |
---|
289 | 327 | NVME_CTRL_OACS_DBBUF_SUPP = 1 << 8, |
---|
290 | 328 | NVME_CTRL_LPA_CMD_EFFECTS_LOG = 1 << 1, |
---|
| 329 | + NVME_CTRL_CTRATT_128_ID = 1 << 0, |
---|
| 330 | + NVME_CTRL_CTRATT_NON_OP_PSP = 1 << 1, |
---|
| 331 | + NVME_CTRL_CTRATT_NVM_SETS = 1 << 2, |
---|
| 332 | + NVME_CTRL_CTRATT_READ_RECV_LVLS = 1 << 3, |
---|
| 333 | + NVME_CTRL_CTRATT_ENDURANCE_GROUPS = 1 << 4, |
---|
| 334 | + NVME_CTRL_CTRATT_PREDICTABLE_LAT = 1 << 5, |
---|
| 335 | + NVME_CTRL_CTRATT_NAMESPACE_GRANULARITY = 1 << 7, |
---|
| 336 | + NVME_CTRL_CTRATT_UUID_LIST = 1 << 9, |
---|
291 | 337 | }; |
---|
292 | 338 | |
---|
293 | 339 | struct nvme_lbaf { |
---|
.. | .. |
---|
309 | 355 | __u8 nmic; |
---|
310 | 356 | __u8 rescap; |
---|
311 | 357 | __u8 fpi; |
---|
312 | | - __u8 rsvd33; |
---|
| 358 | + __u8 dlfeat; |
---|
313 | 359 | __le16 nawun; |
---|
314 | 360 | __le16 nawupf; |
---|
315 | 361 | __le16 nacwu; |
---|
.. | .. |
---|
318 | 364 | __le16 nabspf; |
---|
319 | 365 | __le16 noiob; |
---|
320 | 366 | __u8 nvmcap[16]; |
---|
321 | | - __u8 rsvd64[28]; |
---|
| 367 | + __le16 npwg; |
---|
| 368 | + __le16 npwa; |
---|
| 369 | + __le16 npdg; |
---|
| 370 | + __le16 npda; |
---|
| 371 | + __le16 nows; |
---|
| 372 | + __u8 rsvd74[18]; |
---|
322 | 373 | __le32 anagrpid; |
---|
323 | 374 | __u8 rsvd96[3]; |
---|
324 | 375 | __u8 nsattr; |
---|
325 | | - __u8 rsvd100[4]; |
---|
| 376 | + __le16 nvmsetid; |
---|
| 377 | + __le16 endgid; |
---|
326 | 378 | __u8 nguid[16]; |
---|
327 | 379 | __u8 eui64[8]; |
---|
328 | 380 | struct nvme_lbaf lbaf[16]; |
---|
.. | .. |
---|
330 | 382 | __u8 vs[3712]; |
---|
331 | 383 | }; |
---|
332 | 384 | |
---|
| 385 | +struct nvme_zns_lbafe { |
---|
| 386 | + __le64 zsze; |
---|
| 387 | + __u8 zdes; |
---|
| 388 | + __u8 rsvd9[7]; |
---|
| 389 | +}; |
---|
| 390 | + |
---|
| 391 | +struct nvme_id_ns_zns { |
---|
| 392 | + __le16 zoc; |
---|
| 393 | + __le16 ozcs; |
---|
| 394 | + __le32 mar; |
---|
| 395 | + __le32 mor; |
---|
| 396 | + __le32 rrl; |
---|
| 397 | + __le32 frl; |
---|
| 398 | + __u8 rsvd20[2796]; |
---|
| 399 | + struct nvme_zns_lbafe lbafe[16]; |
---|
| 400 | + __u8 rsvd3072[768]; |
---|
| 401 | + __u8 vs[256]; |
---|
| 402 | +}; |
---|
| 403 | + |
---|
| 404 | +struct nvme_id_ctrl_zns { |
---|
| 405 | + __u8 zasl; |
---|
| 406 | + __u8 rsvd1[4095]; |
---|
| 407 | +}; |
---|
| 408 | + |
---|
333 | 409 | enum { |
---|
334 | 410 | NVME_ID_CNS_NS = 0x00, |
---|
335 | 411 | NVME_ID_CNS_CTRL = 0x01, |
---|
336 | 412 | NVME_ID_CNS_NS_ACTIVE_LIST = 0x02, |
---|
337 | 413 | NVME_ID_CNS_NS_DESC_LIST = 0x03, |
---|
| 414 | + NVME_ID_CNS_CS_NS = 0x05, |
---|
| 415 | + NVME_ID_CNS_CS_CTRL = 0x06, |
---|
338 | 416 | NVME_ID_CNS_NS_PRESENT_LIST = 0x10, |
---|
339 | 417 | NVME_ID_CNS_NS_PRESENT = 0x11, |
---|
340 | 418 | NVME_ID_CNS_CTRL_NS_LIST = 0x12, |
---|
341 | 419 | NVME_ID_CNS_CTRL_LIST = 0x13, |
---|
| 420 | + NVME_ID_CNS_SCNDRY_CTRL_LIST = 0x15, |
---|
| 421 | + NVME_ID_CNS_NS_GRANULARITY = 0x16, |
---|
| 422 | + NVME_ID_CNS_UUID_LIST = 0x17, |
---|
| 423 | +}; |
---|
| 424 | + |
---|
| 425 | +enum { |
---|
| 426 | + NVME_CSI_NVM = 0, |
---|
| 427 | + NVME_CSI_ZNS = 2, |
---|
342 | 428 | }; |
---|
343 | 429 | |
---|
344 | 430 | enum { |
---|
.. | .. |
---|
356 | 442 | |
---|
357 | 443 | enum { |
---|
358 | 444 | NVME_NS_FEAT_THIN = 1 << 0, |
---|
| 445 | + NVME_NS_FEAT_ATOMICS = 1 << 1, |
---|
| 446 | + NVME_NS_FEAT_IO_OPT = 1 << 4, |
---|
| 447 | + NVME_NS_ATTR_RO = 1 << 0, |
---|
359 | 448 | NVME_NS_FLBAS_LBA_MASK = 0xf, |
---|
360 | 449 | NVME_NS_FLBAS_META_EXT = 0x10, |
---|
| 450 | + NVME_NS_NMIC_SHARED = 1 << 0, |
---|
361 | 451 | NVME_LBAF_RP_BEST = 0, |
---|
362 | 452 | NVME_LBAF_RP_BETTER = 1, |
---|
363 | 453 | NVME_LBAF_RP_GOOD = 2, |
---|
.. | .. |
---|
374 | 464 | NVME_NS_DPS_PI_TYPE3 = 3, |
---|
375 | 465 | }; |
---|
376 | 466 | |
---|
| 467 | +/* Identify Namespace Metadata Capabilities (MC): */ |
---|
| 468 | +enum { |
---|
| 469 | + NVME_MC_EXTENDED_LBA = (1 << 0), |
---|
| 470 | + NVME_MC_METADATA_PTR = (1 << 1), |
---|
| 471 | +}; |
---|
| 472 | + |
---|
377 | 473 | struct nvme_ns_id_desc { |
---|
378 | 474 | __u8 nidt; |
---|
379 | 475 | __u8 nidl; |
---|
.. | .. |
---|
383 | 479 | #define NVME_NIDT_EUI64_LEN 8 |
---|
384 | 480 | #define NVME_NIDT_NGUID_LEN 16 |
---|
385 | 481 | #define NVME_NIDT_UUID_LEN 16 |
---|
| 482 | +#define NVME_NIDT_CSI_LEN 1 |
---|
386 | 483 | |
---|
387 | 484 | enum { |
---|
388 | 485 | NVME_NIDT_EUI64 = 0x01, |
---|
389 | 486 | NVME_NIDT_NGUID = 0x02, |
---|
390 | 487 | NVME_NIDT_UUID = 0x03, |
---|
| 488 | + NVME_NIDT_CSI = 0x04, |
---|
391 | 489 | }; |
---|
392 | 490 | |
---|
393 | 491 | struct nvme_smart_log { |
---|
.. | .. |
---|
396 | 494 | __u8 avail_spare; |
---|
397 | 495 | __u8 spare_thresh; |
---|
398 | 496 | __u8 percent_used; |
---|
399 | | - __u8 rsvd6[26]; |
---|
| 497 | + __u8 endu_grp_crit_warn_sumry; |
---|
| 498 | + __u8 rsvd7[25]; |
---|
400 | 499 | __u8 data_units_read[16]; |
---|
401 | 500 | __u8 data_units_written[16]; |
---|
402 | 501 | __u8 host_reads[16]; |
---|
.. | .. |
---|
410 | 509 | __le32 warning_temp_time; |
---|
411 | 510 | __le32 critical_comp_time; |
---|
412 | 511 | __le16 temp_sensor[8]; |
---|
413 | | - __u8 rsvd216[296]; |
---|
| 512 | + __le32 thm_temp1_trans_count; |
---|
| 513 | + __le32 thm_temp2_trans_count; |
---|
| 514 | + __le32 thm_temp1_total_time; |
---|
| 515 | + __le32 thm_temp2_total_time; |
---|
| 516 | + __u8 rsvd232[280]; |
---|
414 | 517 | }; |
---|
415 | 518 | |
---|
416 | 519 | struct nvme_fw_slot_info_log { |
---|
.. | .. |
---|
426 | 529 | NVME_CMD_EFFECTS_NCC = 1 << 2, |
---|
427 | 530 | NVME_CMD_EFFECTS_NIC = 1 << 3, |
---|
428 | 531 | NVME_CMD_EFFECTS_CCC = 1 << 4, |
---|
429 | | - NVME_CMD_EFFECTS_CSE_MASK = 3 << 16, |
---|
| 532 | + NVME_CMD_EFFECTS_CSE_MASK = GENMASK(18, 16), |
---|
| 533 | + NVME_CMD_EFFECTS_UUID_SEL = 1 << 19, |
---|
430 | 534 | }; |
---|
431 | 535 | |
---|
432 | 536 | struct nvme_effects_log { |
---|
.. | .. |
---|
461 | 565 | __le16 rsvd10[3]; |
---|
462 | 566 | }; |
---|
463 | 567 | |
---|
| 568 | +struct nvme_zone_descriptor { |
---|
| 569 | + __u8 zt; |
---|
| 570 | + __u8 zs; |
---|
| 571 | + __u8 za; |
---|
| 572 | + __u8 rsvd3[5]; |
---|
| 573 | + __le64 zcap; |
---|
| 574 | + __le64 zslba; |
---|
| 575 | + __le64 wp; |
---|
| 576 | + __u8 rsvd32[32]; |
---|
| 577 | +}; |
---|
| 578 | + |
---|
| 579 | +enum { |
---|
| 580 | + NVME_ZONE_TYPE_SEQWRITE_REQ = 0x2, |
---|
| 581 | +}; |
---|
| 582 | + |
---|
| 583 | +struct nvme_zone_report { |
---|
| 584 | + __le64 nr_zones; |
---|
| 585 | + __u8 resv8[56]; |
---|
| 586 | + struct nvme_zone_descriptor entries[]; |
---|
| 587 | +}; |
---|
| 588 | + |
---|
464 | 589 | enum { |
---|
465 | 590 | NVME_SMART_CRIT_SPARE = 1 << 0, |
---|
466 | 591 | NVME_SMART_CRIT_TEMPERATURE = 1 << 1, |
---|
.. | .. |
---|
478 | 603 | }; |
---|
479 | 604 | |
---|
480 | 605 | enum { |
---|
481 | | - NVME_AER_NOTICE_NS_CHANGED = 0x00, |
---|
482 | | - NVME_AER_NOTICE_FW_ACT_STARTING = 0x01, |
---|
483 | | - NVME_AER_NOTICE_ANA = 0x03, |
---|
| 606 | + NVME_AER_ERROR_PERSIST_INT_ERR = 0x03, |
---|
484 | 607 | }; |
---|
485 | 608 | |
---|
486 | 609 | enum { |
---|
487 | | - NVME_AEN_CFG_NS_ATTR = 1 << 8, |
---|
488 | | - NVME_AEN_CFG_FW_ACT = 1 << 9, |
---|
489 | | - NVME_AEN_CFG_ANA_CHANGE = 1 << 11, |
---|
| 610 | + NVME_AER_NOTICE_NS_CHANGED = 0x00, |
---|
| 611 | + NVME_AER_NOTICE_FW_ACT_STARTING = 0x01, |
---|
| 612 | + NVME_AER_NOTICE_ANA = 0x03, |
---|
| 613 | + NVME_AER_NOTICE_DISC_CHANGED = 0xf0, |
---|
| 614 | +}; |
---|
| 615 | + |
---|
| 616 | +enum { |
---|
| 617 | + NVME_AEN_BIT_NS_ATTR = 8, |
---|
| 618 | + NVME_AEN_BIT_FW_ACT = 9, |
---|
| 619 | + NVME_AEN_BIT_ANA_CHANGE = 11, |
---|
| 620 | + NVME_AEN_BIT_DISC_CHANGE = 31, |
---|
| 621 | +}; |
---|
| 622 | + |
---|
| 623 | +enum { |
---|
| 624 | + NVME_AEN_CFG_NS_ATTR = 1 << NVME_AEN_BIT_NS_ATTR, |
---|
| 625 | + NVME_AEN_CFG_FW_ACT = 1 << NVME_AEN_BIT_FW_ACT, |
---|
| 626 | + NVME_AEN_CFG_ANA_CHANGE = 1 << NVME_AEN_BIT_ANA_CHANGE, |
---|
| 627 | + NVME_AEN_CFG_DISC_CHANGE = 1 << NVME_AEN_BIT_DISC_CHANGE, |
---|
490 | 628 | }; |
---|
491 | 629 | |
---|
492 | 630 | struct nvme_lba_range_type { |
---|
.. | .. |
---|
541 | 679 | nvme_cmd_compare = 0x05, |
---|
542 | 680 | nvme_cmd_write_zeroes = 0x08, |
---|
543 | 681 | nvme_cmd_dsm = 0x09, |
---|
| 682 | + nvme_cmd_verify = 0x0c, |
---|
544 | 683 | nvme_cmd_resv_register = 0x0d, |
---|
545 | 684 | nvme_cmd_resv_report = 0x0e, |
---|
546 | 685 | nvme_cmd_resv_acquire = 0x11, |
---|
547 | 686 | nvme_cmd_resv_release = 0x15, |
---|
| 687 | + nvme_cmd_zone_mgmt_send = 0x79, |
---|
| 688 | + nvme_cmd_zone_mgmt_recv = 0x7a, |
---|
| 689 | + nvme_cmd_zone_append = 0x7d, |
---|
548 | 690 | }; |
---|
| 691 | + |
---|
| 692 | +#define nvme_opcode_name(opcode) { opcode, #opcode } |
---|
| 693 | +#define show_nvm_opcode_name(val) \ |
---|
| 694 | + __print_symbolic(val, \ |
---|
| 695 | + nvme_opcode_name(nvme_cmd_flush), \ |
---|
| 696 | + nvme_opcode_name(nvme_cmd_write), \ |
---|
| 697 | + nvme_opcode_name(nvme_cmd_read), \ |
---|
| 698 | + nvme_opcode_name(nvme_cmd_write_uncor), \ |
---|
| 699 | + nvme_opcode_name(nvme_cmd_compare), \ |
---|
| 700 | + nvme_opcode_name(nvme_cmd_write_zeroes), \ |
---|
| 701 | + nvme_opcode_name(nvme_cmd_dsm), \ |
---|
| 702 | + nvme_opcode_name(nvme_cmd_resv_register), \ |
---|
| 703 | + nvme_opcode_name(nvme_cmd_resv_report), \ |
---|
| 704 | + nvme_opcode_name(nvme_cmd_resv_acquire), \ |
---|
| 705 | + nvme_opcode_name(nvme_cmd_resv_release)) |
---|
| 706 | + |
---|
549 | 707 | |
---|
550 | 708 | /* |
---|
551 | 709 | * Descriptor subtype - lower 4 bits of nvme_(keyed_)sgl_desc identifier |
---|
.. | .. |
---|
639 | 797 | __le32 cdw2[2]; |
---|
640 | 798 | __le64 metadata; |
---|
641 | 799 | union nvme_data_ptr dptr; |
---|
642 | | - __le32 cdw10[6]; |
---|
| 800 | + __le32 cdw10; |
---|
| 801 | + __le32 cdw11; |
---|
| 802 | + __le32 cdw12; |
---|
| 803 | + __le32 cdw13; |
---|
| 804 | + __le32 cdw14; |
---|
| 805 | + __le32 cdw15; |
---|
643 | 806 | }; |
---|
644 | 807 | |
---|
645 | 808 | struct nvme_rw_command { |
---|
.. | .. |
---|
662 | 825 | enum { |
---|
663 | 826 | NVME_RW_LR = 1 << 15, |
---|
664 | 827 | NVME_RW_FUA = 1 << 14, |
---|
| 828 | + NVME_RW_APPEND_PIREMAP = 1 << 9, |
---|
665 | 829 | NVME_RW_DSM_FREQ_UNSPEC = 0, |
---|
666 | 830 | NVME_RW_DSM_FREQ_TYPICAL = 1, |
---|
667 | 831 | NVME_RW_DSM_FREQ_RARE = 2, |
---|
.. | .. |
---|
727 | 891 | __le16 appmask; |
---|
728 | 892 | }; |
---|
729 | 893 | |
---|
| 894 | +enum nvme_zone_mgmt_action { |
---|
| 895 | + NVME_ZONE_CLOSE = 0x1, |
---|
| 896 | + NVME_ZONE_FINISH = 0x2, |
---|
| 897 | + NVME_ZONE_OPEN = 0x3, |
---|
| 898 | + NVME_ZONE_RESET = 0x4, |
---|
| 899 | + NVME_ZONE_OFFLINE = 0x5, |
---|
| 900 | + NVME_ZONE_SET_DESC_EXT = 0x10, |
---|
| 901 | +}; |
---|
| 902 | + |
---|
| 903 | +struct nvme_zone_mgmt_send_cmd { |
---|
| 904 | + __u8 opcode; |
---|
| 905 | + __u8 flags; |
---|
| 906 | + __u16 command_id; |
---|
| 907 | + __le32 nsid; |
---|
| 908 | + __le32 cdw2[2]; |
---|
| 909 | + __le64 metadata; |
---|
| 910 | + union nvme_data_ptr dptr; |
---|
| 911 | + __le64 slba; |
---|
| 912 | + __le32 cdw12; |
---|
| 913 | + __u8 zsa; |
---|
| 914 | + __u8 select_all; |
---|
| 915 | + __u8 rsvd13[2]; |
---|
| 916 | + __le32 cdw14[2]; |
---|
| 917 | +}; |
---|
| 918 | + |
---|
| 919 | +struct nvme_zone_mgmt_recv_cmd { |
---|
| 920 | + __u8 opcode; |
---|
| 921 | + __u8 flags; |
---|
| 922 | + __u16 command_id; |
---|
| 923 | + __le32 nsid; |
---|
| 924 | + __le64 rsvd2[2]; |
---|
| 925 | + union nvme_data_ptr dptr; |
---|
| 926 | + __le64 slba; |
---|
| 927 | + __le32 numd; |
---|
| 928 | + __u8 zra; |
---|
| 929 | + __u8 zrasf; |
---|
| 930 | + __u8 pr; |
---|
| 931 | + __u8 rsvd13; |
---|
| 932 | + __le32 cdw14[2]; |
---|
| 933 | +}; |
---|
| 934 | + |
---|
| 935 | +enum { |
---|
| 936 | + NVME_ZRA_ZONE_REPORT = 0, |
---|
| 937 | + NVME_ZRASF_ZONE_REPORT_ALL = 0, |
---|
| 938 | + NVME_REPORT_ZONE_PARTIAL = 1, |
---|
| 939 | +}; |
---|
| 940 | + |
---|
730 | 941 | /* Features */ |
---|
| 942 | + |
---|
| 943 | +enum { |
---|
| 944 | + NVME_TEMP_THRESH_MASK = 0xffff, |
---|
| 945 | + NVME_TEMP_THRESH_SELECT_SHIFT = 16, |
---|
| 946 | + NVME_TEMP_THRESH_TYPE_UNDER = 0x100000, |
---|
| 947 | +}; |
---|
731 | 948 | |
---|
732 | 949 | struct nvme_feat_auto_pst { |
---|
733 | 950 | __le64 entries[32]; |
---|
.. | .. |
---|
736 | 953 | enum { |
---|
737 | 954 | NVME_HOST_MEM_ENABLE = (1 << 0), |
---|
738 | 955 | NVME_HOST_MEM_RETURN = (1 << 1), |
---|
| 956 | +}; |
---|
| 957 | + |
---|
| 958 | +struct nvme_feat_host_behavior { |
---|
| 959 | + __u8 acre; |
---|
| 960 | + __u8 resv1[511]; |
---|
| 961 | +}; |
---|
| 962 | + |
---|
| 963 | +enum { |
---|
| 964 | + NVME_ENABLE_ACRE = 1, |
---|
739 | 965 | }; |
---|
740 | 966 | |
---|
741 | 967 | /* Admin commands */ |
---|
.. | .. |
---|
754 | 980 | nvme_admin_ns_mgmt = 0x0d, |
---|
755 | 981 | nvme_admin_activate_fw = 0x10, |
---|
756 | 982 | nvme_admin_download_fw = 0x11, |
---|
| 983 | + nvme_admin_dev_self_test = 0x14, |
---|
757 | 984 | nvme_admin_ns_attach = 0x15, |
---|
758 | 985 | nvme_admin_keep_alive = 0x18, |
---|
759 | 986 | nvme_admin_directive_send = 0x19, |
---|
760 | 987 | nvme_admin_directive_recv = 0x1a, |
---|
| 988 | + nvme_admin_virtual_mgmt = 0x1c, |
---|
| 989 | + nvme_admin_nvme_mi_send = 0x1d, |
---|
| 990 | + nvme_admin_nvme_mi_recv = 0x1e, |
---|
761 | 991 | nvme_admin_dbbuf = 0x7C, |
---|
762 | 992 | nvme_admin_format_nvm = 0x80, |
---|
763 | 993 | nvme_admin_security_send = 0x81, |
---|
764 | 994 | nvme_admin_security_recv = 0x82, |
---|
765 | 995 | nvme_admin_sanitize_nvm = 0x84, |
---|
| 996 | + nvme_admin_get_lba_status = 0x86, |
---|
| 997 | + nvme_admin_vendor_start = 0xC0, |
---|
766 | 998 | }; |
---|
| 999 | + |
---|
| 1000 | +#define nvme_admin_opcode_name(opcode) { opcode, #opcode } |
---|
| 1001 | +#define show_admin_opcode_name(val) \ |
---|
| 1002 | + __print_symbolic(val, \ |
---|
| 1003 | + nvme_admin_opcode_name(nvme_admin_delete_sq), \ |
---|
| 1004 | + nvme_admin_opcode_name(nvme_admin_create_sq), \ |
---|
| 1005 | + nvme_admin_opcode_name(nvme_admin_get_log_page), \ |
---|
| 1006 | + nvme_admin_opcode_name(nvme_admin_delete_cq), \ |
---|
| 1007 | + nvme_admin_opcode_name(nvme_admin_create_cq), \ |
---|
| 1008 | + nvme_admin_opcode_name(nvme_admin_identify), \ |
---|
| 1009 | + nvme_admin_opcode_name(nvme_admin_abort_cmd), \ |
---|
| 1010 | + nvme_admin_opcode_name(nvme_admin_set_features), \ |
---|
| 1011 | + nvme_admin_opcode_name(nvme_admin_get_features), \ |
---|
| 1012 | + nvme_admin_opcode_name(nvme_admin_async_event), \ |
---|
| 1013 | + nvme_admin_opcode_name(nvme_admin_ns_mgmt), \ |
---|
| 1014 | + nvme_admin_opcode_name(nvme_admin_activate_fw), \ |
---|
| 1015 | + nvme_admin_opcode_name(nvme_admin_download_fw), \ |
---|
| 1016 | + nvme_admin_opcode_name(nvme_admin_ns_attach), \ |
---|
| 1017 | + nvme_admin_opcode_name(nvme_admin_keep_alive), \ |
---|
| 1018 | + nvme_admin_opcode_name(nvme_admin_directive_send), \ |
---|
| 1019 | + nvme_admin_opcode_name(nvme_admin_directive_recv), \ |
---|
| 1020 | + nvme_admin_opcode_name(nvme_admin_dbbuf), \ |
---|
| 1021 | + nvme_admin_opcode_name(nvme_admin_format_nvm), \ |
---|
| 1022 | + nvme_admin_opcode_name(nvme_admin_security_send), \ |
---|
| 1023 | + nvme_admin_opcode_name(nvme_admin_security_recv), \ |
---|
| 1024 | + nvme_admin_opcode_name(nvme_admin_sanitize_nvm), \ |
---|
| 1025 | + nvme_admin_opcode_name(nvme_admin_get_lba_status)) |
---|
767 | 1026 | |
---|
768 | 1027 | enum { |
---|
769 | 1028 | NVME_QUEUE_PHYS_CONTIG = (1 << 0), |
---|
.. | .. |
---|
792 | 1051 | NVME_FEAT_RRL = 0x12, |
---|
793 | 1052 | NVME_FEAT_PLM_CONFIG = 0x13, |
---|
794 | 1053 | NVME_FEAT_PLM_WINDOW = 0x14, |
---|
| 1054 | + NVME_FEAT_HOST_BEHAVIOR = 0x16, |
---|
| 1055 | + NVME_FEAT_SANITIZE = 0x17, |
---|
795 | 1056 | NVME_FEAT_SW_PROGRESS = 0x80, |
---|
796 | 1057 | NVME_FEAT_HOST_ID = 0x81, |
---|
797 | 1058 | NVME_FEAT_RESV_MASK = 0x82, |
---|
798 | 1059 | NVME_FEAT_RESV_PERSIST = 0x83, |
---|
799 | 1060 | NVME_FEAT_WRITE_PROTECT = 0x84, |
---|
| 1061 | + NVME_FEAT_VENDOR_START = 0xC0, |
---|
| 1062 | + NVME_FEAT_VENDOR_END = 0xFF, |
---|
800 | 1063 | NVME_LOG_ERROR = 0x01, |
---|
801 | 1064 | NVME_LOG_SMART = 0x02, |
---|
802 | 1065 | NVME_LOG_FW_SLOT = 0x03, |
---|
803 | 1066 | NVME_LOG_CHANGED_NS = 0x04, |
---|
804 | 1067 | NVME_LOG_CMD_EFFECTS = 0x05, |
---|
| 1068 | + NVME_LOG_DEVICE_SELF_TEST = 0x06, |
---|
| 1069 | + NVME_LOG_TELEMETRY_HOST = 0x07, |
---|
| 1070 | + NVME_LOG_TELEMETRY_CTRL = 0x08, |
---|
| 1071 | + NVME_LOG_ENDURANCE_GROUP = 0x09, |
---|
805 | 1072 | NVME_LOG_ANA = 0x0c, |
---|
806 | 1073 | NVME_LOG_DISC = 0x70, |
---|
807 | 1074 | NVME_LOG_RESERVATION = 0x80, |
---|
.. | .. |
---|
830 | 1097 | __u8 cns; |
---|
831 | 1098 | __u8 rsvd3; |
---|
832 | 1099 | __le16 ctrlid; |
---|
833 | | - __u32 rsvd11[5]; |
---|
| 1100 | + __u8 rsvd11[3]; |
---|
| 1101 | + __u8 csi; |
---|
| 1102 | + __u32 rsvd12[4]; |
---|
834 | 1103 | }; |
---|
835 | 1104 | |
---|
836 | 1105 | #define NVME_IDENTIFY_DATA_SIZE 4096 |
---|
.. | .. |
---|
937 | 1206 | __le16 numdl; |
---|
938 | 1207 | __le16 numdu; |
---|
939 | 1208 | __u16 rsvd11; |
---|
940 | | - __le32 lpol; |
---|
941 | | - __le32 lpou; |
---|
942 | | - __u32 rsvd14[2]; |
---|
| 1209 | + union { |
---|
| 1210 | + struct { |
---|
| 1211 | + __le32 lpol; |
---|
| 1212 | + __le32 lpou; |
---|
| 1213 | + }; |
---|
| 1214 | + __le64 lpo; |
---|
| 1215 | + }; |
---|
| 1216 | + __u8 rsvd14[3]; |
---|
| 1217 | + __u8 csi; |
---|
| 1218 | + __u32 rsvd15; |
---|
943 | 1219 | }; |
---|
944 | 1220 | |
---|
945 | 1221 | struct nvme_directive_cmd { |
---|
.. | .. |
---|
972 | 1248 | nvme_fabrics_type_connect = 0x01, |
---|
973 | 1249 | nvme_fabrics_type_property_get = 0x04, |
---|
974 | 1250 | }; |
---|
| 1251 | + |
---|
| 1252 | +#define nvme_fabrics_type_name(type) { type, #type } |
---|
| 1253 | +#define show_fabrics_type_name(type) \ |
---|
| 1254 | + __print_symbolic(type, \ |
---|
| 1255 | + nvme_fabrics_type_name(nvme_fabrics_type_property_set), \ |
---|
| 1256 | + nvme_fabrics_type_name(nvme_fabrics_type_connect), \ |
---|
| 1257 | + nvme_fabrics_type_name(nvme_fabrics_type_property_get)) |
---|
| 1258 | + |
---|
| 1259 | +/* |
---|
| 1260 | + * If not fabrics command, fctype will be ignored. |
---|
| 1261 | + */ |
---|
| 1262 | +#define show_opcode_name(qid, opcode, fctype) \ |
---|
| 1263 | + ((opcode) == nvme_fabrics_command ? \ |
---|
| 1264 | + show_fabrics_type_name(fctype) : \ |
---|
| 1265 | + ((qid) ? \ |
---|
| 1266 | + show_nvm_opcode_name(opcode) : \ |
---|
| 1267 | + show_admin_opcode_name(opcode))) |
---|
975 | 1268 | |
---|
976 | 1269 | struct nvmf_common_command { |
---|
977 | 1270 | __u8 opcode; |
---|
.. | .. |
---|
1027 | 1320 | __le64 numrec; |
---|
1028 | 1321 | __le16 recfmt; |
---|
1029 | 1322 | __u8 resv14[1006]; |
---|
1030 | | - struct nvmf_disc_rsp_page_entry entries[0]; |
---|
| 1323 | + struct nvmf_disc_rsp_page_entry entries[]; |
---|
| 1324 | +}; |
---|
| 1325 | + |
---|
| 1326 | +enum { |
---|
| 1327 | + NVME_CONNECT_DISABLE_SQFLOW = (1 << 2), |
---|
1031 | 1328 | }; |
---|
1032 | 1329 | |
---|
1033 | 1330 | struct nvmf_connect_command { |
---|
.. | .. |
---|
1115 | 1412 | struct nvme_format_cmd format; |
---|
1116 | 1413 | struct nvme_dsm_cmd dsm; |
---|
1117 | 1414 | struct nvme_write_zeroes_cmd write_zeroes; |
---|
| 1415 | + struct nvme_zone_mgmt_send_cmd zms; |
---|
| 1416 | + struct nvme_zone_mgmt_recv_cmd zmr; |
---|
1118 | 1417 | struct nvme_abort_cmd abort; |
---|
1119 | 1418 | struct nvme_get_log_page_command get_log_page; |
---|
1120 | 1419 | struct nvmf_common_command fabrics; |
---|
.. | .. |
---|
1126 | 1425 | }; |
---|
1127 | 1426 | }; |
---|
1128 | 1427 | |
---|
| 1428 | +static inline bool nvme_is_fabrics(struct nvme_command *cmd) |
---|
| 1429 | +{ |
---|
| 1430 | + return cmd->common.opcode == nvme_fabrics_command; |
---|
| 1431 | +} |
---|
| 1432 | + |
---|
| 1433 | +struct nvme_error_slot { |
---|
| 1434 | + __le64 error_count; |
---|
| 1435 | + __le16 sqid; |
---|
| 1436 | + __le16 cmdid; |
---|
| 1437 | + __le16 status_field; |
---|
| 1438 | + __le16 param_error_location; |
---|
| 1439 | + __le64 lba; |
---|
| 1440 | + __le32 nsid; |
---|
| 1441 | + __u8 vs; |
---|
| 1442 | + __u8 resv[3]; |
---|
| 1443 | + __le64 cs; |
---|
| 1444 | + __u8 resv2[24]; |
---|
| 1445 | +}; |
---|
| 1446 | + |
---|
1129 | 1447 | static inline bool nvme_is_write(struct nvme_command *cmd) |
---|
1130 | 1448 | { |
---|
1131 | 1449 | /* |
---|
.. | .. |
---|
1133 | 1451 | * |
---|
1134 | 1452 | * Why can't we simply have a Fabrics In and Fabrics out command? |
---|
1135 | 1453 | */ |
---|
1136 | | - if (unlikely(cmd->common.opcode == nvme_fabrics_command)) |
---|
| 1454 | + if (unlikely(nvme_is_fabrics(cmd))) |
---|
1137 | 1455 | return cmd->fabrics.fctype & 1; |
---|
1138 | 1456 | return cmd->common.opcode & 1; |
---|
1139 | 1457 | } |
---|
.. | .. |
---|
1164 | 1482 | NVME_SC_SGL_INVALID_OFFSET = 0x16, |
---|
1165 | 1483 | NVME_SC_SGL_INVALID_SUBTYPE = 0x17, |
---|
1166 | 1484 | |
---|
| 1485 | + NVME_SC_SANITIZE_FAILED = 0x1C, |
---|
| 1486 | + NVME_SC_SANITIZE_IN_PROGRESS = 0x1D, |
---|
| 1487 | + |
---|
1167 | 1488 | NVME_SC_NS_WRITE_PROTECTED = 0x20, |
---|
| 1489 | + NVME_SC_CMD_INTERRUPTED = 0x21, |
---|
1168 | 1490 | |
---|
1169 | 1491 | NVME_SC_LBA_RANGE = 0x80, |
---|
1170 | 1492 | NVME_SC_CAP_EXCEEDED = 0x81, |
---|
.. | .. |
---|
1193 | 1515 | NVME_SC_FW_NEEDS_SUBSYS_RESET = 0x110, |
---|
1194 | 1516 | NVME_SC_FW_NEEDS_RESET = 0x111, |
---|
1195 | 1517 | NVME_SC_FW_NEEDS_MAX_TIME = 0x112, |
---|
1196 | | - NVME_SC_FW_ACIVATE_PROHIBITED = 0x113, |
---|
| 1518 | + NVME_SC_FW_ACTIVATE_PROHIBITED = 0x113, |
---|
1197 | 1519 | NVME_SC_OVERLAPPING_RANGE = 0x114, |
---|
1198 | | - NVME_SC_NS_INSUFFICENT_CAP = 0x115, |
---|
| 1520 | + NVME_SC_NS_INSUFFICIENT_CAP = 0x115, |
---|
1199 | 1521 | NVME_SC_NS_ID_UNAVAILABLE = 0x116, |
---|
1200 | 1522 | NVME_SC_NS_ALREADY_ATTACHED = 0x118, |
---|
1201 | 1523 | NVME_SC_NS_IS_PRIVATE = 0x119, |
---|
1202 | 1524 | NVME_SC_NS_NOT_ATTACHED = 0x11a, |
---|
1203 | 1525 | NVME_SC_THIN_PROV_NOT_SUPP = 0x11b, |
---|
1204 | 1526 | NVME_SC_CTRL_LIST_INVALID = 0x11c, |
---|
| 1527 | + NVME_SC_BP_WRITE_PROHIBITED = 0x11e, |
---|
| 1528 | + NVME_SC_PMR_SAN_PROHIBITED = 0x123, |
---|
1205 | 1529 | |
---|
1206 | 1530 | /* |
---|
1207 | 1531 | * I/O Command Set Specific - NVM commands: |
---|
.. | .. |
---|
1224 | 1548 | NVME_SC_AUTH_REQUIRED = 0x191, |
---|
1225 | 1549 | |
---|
1226 | 1550 | /* |
---|
| 1551 | + * I/O Command Set Specific - Zoned commands: |
---|
| 1552 | + */ |
---|
| 1553 | + NVME_SC_ZONE_BOUNDARY_ERROR = 0x1b8, |
---|
| 1554 | + NVME_SC_ZONE_FULL = 0x1b9, |
---|
| 1555 | + NVME_SC_ZONE_READ_ONLY = 0x1ba, |
---|
| 1556 | + NVME_SC_ZONE_OFFLINE = 0x1bb, |
---|
| 1557 | + NVME_SC_ZONE_INVALID_WRITE = 0x1bc, |
---|
| 1558 | + NVME_SC_ZONE_TOO_MANY_ACTIVE = 0x1bd, |
---|
| 1559 | + NVME_SC_ZONE_TOO_MANY_OPEN = 0x1be, |
---|
| 1560 | + NVME_SC_ZONE_INVALID_TRANSITION = 0x1bf, |
---|
| 1561 | + |
---|
| 1562 | + /* |
---|
1227 | 1563 | * Media and Data Integrity Errors: |
---|
1228 | 1564 | */ |
---|
1229 | 1565 | NVME_SC_WRITE_FAULT = 0x280, |
---|
.. | .. |
---|
1242 | 1578 | NVME_SC_ANA_INACCESSIBLE = 0x302, |
---|
1243 | 1579 | NVME_SC_ANA_TRANSITION = 0x303, |
---|
1244 | 1580 | NVME_SC_HOST_PATH_ERROR = 0x370, |
---|
| 1581 | + NVME_SC_HOST_ABORTED_CMD = 0x371, |
---|
1245 | 1582 | |
---|
| 1583 | + NVME_SC_CRD = 0x1800, |
---|
1246 | 1584 | NVME_SC_DNR = 0x4000, |
---|
1247 | 1585 | }; |
---|
1248 | 1586 | |
---|