source: Daodan/MSYS2/mingw32/i686-w64-mingw32/include/nvme.h@ 1167

Last change on this file since 1167 was 1166, checked in by rossy, 3 years ago

Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File size: 83.6 KB
RevLine 
[1166]1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6
7#ifndef NVME_INCLUDED
8#define NVME_INCLUDED
9
10#include <winapifamily.h>
11
12#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
13
14typedef enum {
15 NVME_AMS_ROUND_ROBIN = 0,
16 NVME_AMS_WEIGHTED_ROUND_ROBIN_URGENT = 1
17} NVME_AMS_OPTION;
18
19typedef union {
20 __C89_NAMELESS struct {
21 ULONGLONG MQES : 16;
22 ULONGLONG CQR : 1;
23 ULONGLONG AMS_WeightedRoundRobinWithUrgent : 1;
24 ULONGLONG AMS_VendorSpecific : 1;
25 ULONGLONG Reserved0 : 5;
26 ULONGLONG TO : 8;
27 ULONGLONG DSTRD : 4;
28 ULONGLONG NSSRS : 1;
29 ULONGLONG CSS_NVM : 1;
30 ULONGLONG CSS_Reserved0 : 1;
31 ULONGLONG CSS_Reserved1 : 1;
32 ULONGLONG CSS_Reserved2 : 1;
33 ULONGLONG CSS_Reserved3 : 1;
34 ULONGLONG CSS_Reserved4 : 1;
35 ULONGLONG CSS_MultipleIo : 1;
36 ULONGLONG CSS_AdminOnly : 1;
37 ULONGLONG Reserved2 : 3;
38 ULONGLONG MPSMIN : 4;
39 ULONGLONG MPSMAX : 4;
40 ULONGLONG Reserved3 : 8;
41 };
42 ULONGLONG AsUlonglong;
43} NVME_CONTROLLER_CAPABILITIES, *PNVME_CONTROLLER_CAPABILITIES;
44
45typedef union {
46 __C89_NAMELESS struct {
47 ULONG TER : 8;
48 ULONG MNR : 8;
49 ULONG MJR : 16;
50 };
51 ULONG AsUlong;
52} NVME_VERSION, *PNVME_VERSION;
53
54typedef enum {
55 NVME_CC_SHN_NO_NOTIFICATION = 0,
56 NVME_CC_SHN_NORMAL_SHUTDOWN = 1,
57 NVME_CC_SHN_ABRUPT_SHUTDOWN = 2
58} NVME_CC_SHN_SHUTDOWN_NOTIFICATIONS;
59
60typedef enum {
61 NVME_CSS_NVM_COMMAND_SET = 0,
62 NVME_CSS_ALL_SUPPORTED_IO_COMMAND_SET = 6,
63 NVME_CSS_ADMIN_COMMAND_SET_ONLY = 7
64} NVME_CSS_COMMAND_SETS;
65
66typedef union {
67 __C89_NAMELESS struct {
68 ULONG EN : 1;
69 ULONG Reserved0 : 3;
70 ULONG CSS : 3;
71 ULONG MPS : 4;
72 ULONG AMS : 3;
73 ULONG SHN : 2;
74 ULONG IOSQES : 4;
75 ULONG IOCQES : 4;
76 ULONG Reserved1 : 8;
77 };
78 ULONG AsUlong;
79} NVME_CONTROLLER_CONFIGURATION, *PNVME_CONTROLLER_CONFIGURATION;
80
81typedef enum {
82 NVME_CSTS_SHST_NO_SHUTDOWN = 0,
83 NVME_CSTS_SHST_SHUTDOWN_IN_PROCESS = 1,
84 NVME_CSTS_SHST_SHUTDOWN_COMPLETED = 2
85} NVME_CSTS_SHST_SHUTDOWN_STATUS;
86
87typedef union {
88 __C89_NAMELESS struct {
89 ULONG RDY : 1;
90 ULONG CFS : 1;
91 ULONG SHST : 2;
92 ULONG NSSRO : 1;
93 ULONG PP : 1;
94 ULONG Reserved0 : 26;
95 };
96 ULONG AsUlong;
97} NVME_CONTROLLER_STATUS, *PNVME_CONTROLLER_STATUS;
98
99typedef struct _NVME_NVM_SUBSYSTEM_RESET {
100 ULONG NSSRC;
101} NVME_NVM_SUBSYSTEM_RESET, *PNVME_NVM_SUBSYSTEM_RESET;
102
103typedef union {
104 __C89_NAMELESS struct {
105 ULONG ASQS : 12;
106 ULONG Reserved0 : 4;
107 ULONG ACQS : 12;
108 ULONG Reserved1 : 4;
109 };
110 ULONG AsUlong;
111} NVME_ADMIN_QUEUE_ATTRIBUTES, *PNVME_ADMIN_QUEUE_ATTRIBUTES;
112
113typedef union {
114 __C89_NAMELESS struct {
115 ULONGLONG Reserved0 : 12;
116 ULONGLONG ASQB : 52;
117 };
118 ULONGLONG AsUlonglong;
119} NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS, *PNVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS;
120
121typedef union {
122 __C89_NAMELESS struct {
123 ULONGLONG Reserved0 : 12;
124 ULONGLONG ACQB : 52;
125 };
126 ULONGLONG AsUlonglong;
127} NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS, *PNVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS;
128
129typedef union {
130 __C89_NAMELESS struct {
131 ULONG BIR : 3;
132 ULONG Reserved : 9;
133 ULONG OFST : 20;
134 };
135 ULONG AsUlong;
136} NVME_CONTROLLER_MEMORY_BUFFER_LOCATION, *PNVME_CONTROLLER_MEMORY_BUFFER_LOCATION;
137
138typedef enum {
139 NVME_CMBSZ_SIZE_UNITS_4KB = 0,
140 NVME_CMBSZ_SIZE_UNITS_64KB = 1,
141 NVME_CMBSZ_SIZE_UNITS_1MB = 2,
142 NVME_CMBSZ_SIZE_UNITS_16MB = 3,
143 NVME_CMBSZ_SIZE_UNITS_256MB = 4,
144 NVME_CMBSZ_SIZE_UNITS_4GB = 5,
145 NVME_CMBSZ_SIZE_UNITS_64GB = 6
146} NVME_CMBSZ_SIZE_UNITS;
147
148typedef union {
149 __C89_NAMELESS struct {
150 ULONG SQS : 1;
151 ULONG CQS : 1;
152 ULONG LISTS : 1;
153 ULONG RDS : 1;
154 ULONG WDS : 1;
155 ULONG Reserved : 3;
156 ULONG SZU : 4;
157 ULONG SZ : 20;
158 };
159 ULONG AsUlong;
160} NVME_CONTROLLER_MEMORY_BUFFER_SIZE, *PNVME_CONTROLLER_MEMORY_BUFFER_SIZE;
161
162typedef union {
163 __C89_NAMELESS struct {
164 ULONG SQT : 16;
165 ULONG Reserved0 : 16;
166 };
167 ULONG AsUlong;
168} NVME_SUBMISSION_QUEUE_TAIL_DOORBELL, *PNVME_SUBMISSION_QUEUE_TAIL_DOORBELL;
169
170typedef union {
171 __C89_NAMELESS struct {
172 ULONG CQH : 16;
173 ULONG Reserved0 : 16;
174 };
175 ULONG AsUlong;
176} NVME_COMPLETION_QUEUE_HEAD_DOORBELL, *PNVME_COMPLETION_QUEUE_HEAD_DOORBELL;
177
178typedef struct {
179 NVME_CONTROLLER_CAPABILITIES CAP;
180 NVME_VERSION VS;
181 ULONG INTMS;
182 ULONG INTMC;
183 NVME_CONTROLLER_CONFIGURATION CC;
184 ULONG Reserved0;
185 NVME_CONTROLLER_STATUS CSTS;
186 NVME_NVM_SUBSYSTEM_RESET NSSR;
187 NVME_ADMIN_QUEUE_ATTRIBUTES AQA;
188 NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS ASQ;
189 NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS ACQ;
190 NVME_CONTROLLER_MEMORY_BUFFER_LOCATION CMBLOC;
191 NVME_CONTROLLER_MEMORY_BUFFER_SIZE CMBSZ;
192 ULONG Reserved2[944];
193 ULONG Reserved3[64];
194 ULONG Doorbells[0];
195} NVME_CONTROLLER_REGISTERS, *PNVME_CONTROLLER_REGISTERS;
196
197typedef union {
198 __C89_NAMELESS struct {
199 USHORT P : 1;
200 USHORT SC : 8;
201 USHORT SCT : 3;
202 USHORT Reserved : 2;
203 USHORT M : 1;
204 USHORT DNR : 1;
205 };
206 USHORT AsUshort;
207} NVME_COMMAND_STATUS, *PNVME_COMMAND_STATUS;
208
209typedef struct {
210 ULONG DW0;
211 ULONG DW1;
212 union {
213 __C89_NAMELESS struct {
214 USHORT SQHD;
215 USHORT SQID;
216 };
217 ULONG AsUlong;
218 } DW2;
219 union {
220 __C89_NAMELESS struct {
221 USHORT CID;
222 NVME_COMMAND_STATUS Status;
223 };
224 ULONG AsUlong;
225 } DW3;
226} NVME_COMPLETION_ENTRY, *PNVME_COMPLETION_ENTRY;
227
228typedef enum {
229 NVME_ASYNC_EVENT_TYPE_ERROR_STATUS = 0,
230 NVME_ASYNC_EVENT_TYPE_HEALTH_STATUS = 1,
231 NVME_ASYNC_EVENT_TYPE_NOTICE = 2,
232 NVME_ASYNC_EVENT_TYPE_IO_COMMAND_SET_STATUS = 6,
233 NVME_ASYNC_EVENT_TYPE_VENDOR_SPECIFIC = 7
234} NVME_ASYNC_EVENT_TYPES;
235
236typedef enum {
237 NVME_ASYNC_ERROR_INVALID_SUBMISSION_QUEUE = 0,
238 NVME_ASYNC_ERROR_INVALID_DOORBELL_WRITE_VALUE = 1,
239 NVME_ASYNC_ERROR_DIAG_FAILURE = 2,
240 NVME_ASYNC_ERROR_PERSISTENT_INTERNAL_DEVICE_ERROR = 3,
241 NVME_ASYNC_ERROR_TRANSIENT_INTERNAL_DEVICE_ERROR = 4,
242 NVME_ASYNC_ERROR_FIRMWARE_IMAGE_LOAD_ERROR = 5
243} NVME_ASYNC_EVENT_ERROR_STATUS_CODES;
244
245typedef enum {
246 NVME_ASYNC_HEALTH_NVM_SUBSYSTEM_RELIABILITY = 0,
247 NVME_ASYNC_HEALTH_TEMPERATURE_THRESHOLD = 1,
248 NVME_ASYNC_HEALTH_SPARE_BELOW_THRESHOLD = 2
249} NVME_ASYNC_EVENT_HEALTH_STATUS_CODES;
250
251typedef enum {
252 NVME_ASYNC_NOTICE_NAMESPACE_ATTRIBUTE_CHANGED = 0,
253 NVME_ASYNC_NOTICE_FIRMWARE_ACTIVATION_STARTING = 1,
254 NVME_ASYNC_NOTICE_TELEMETRY_LOG_CHANGED = 2,
255 NVME_ASYNC_NOTICE_ASYMMETRIC_ACCESS_CHANGE = 3,
256 NVME_ASYNC_NOTICE_PREDICTABLE_LATENCY_EVENT_AGGREGATE_LOG_CHANGE = 4,
257 NVME_ASYNC_NOTICE_LBA_STATUS_INFORMATION_ALERT = 5,
258 NVME_ASYNC_NOTICE_ENDURANCE_GROUP_EVENT_AGGREGATE_LOG_CHANGE = 6,
259 NVME_ASYNC_NOTICE_ZONE_DESCRIPTOR_CHANGED = 0xEF
260} NVME_ASYNC_EVENT_NOTICE_CODES;
261
262typedef enum {
263 NVME_ASYNC_IO_CMD_SET_RESERVATION_LOG_PAGE_AVAILABLE = 0,
264 NVME_ASYNC_IO_CMD_SANITIZE_OPERATION_COMPLETED = 1,
265 NVME_ASYNC_IO_CMD_SANITIZE_OPERATION_COMPLETED_WITH_UNEXPECTED_DEALLOCATION = 2
266} NVME_ASYNC_EVENT_IO_COMMAND_SET_STATUS_CODES;
267
268typedef struct {
269 ULONG AsyncEventType : 3;
270 ULONG Reserved0 : 5;
271 ULONG AsyncEventInfo : 8;
272 ULONG LogPage : 8;
273 ULONG Reserved1 : 8;
274} NVME_COMPLETION_DW0_ASYNC_EVENT_REQUEST, *PNVME_COMPLETION_DW0_ASYNC_EVENT_REQUEST;
275
276typedef enum {
277 NVME_STATUS_TYPE_GENERIC_COMMAND = 0,
278 NVME_STATUS_TYPE_COMMAND_SPECIFIC = 1,
279 NVME_STATUS_TYPE_MEDIA_ERROR = 2,
280 NVME_STATUS_TYPE_VENDOR_SPECIFIC = 7
281} NVME_STATUS_TYPES;
282
283typedef enum {
284 NVME_STATUS_SUCCESS_COMPLETION = 0x00,
285 NVME_STATUS_INVALID_COMMAND_OPCODE = 0x01,
286 NVME_STATUS_INVALID_FIELD_IN_COMMAND = 0x02,
287 NVME_STATUS_COMMAND_ID_CONFLICT = 0x03,
288 NVME_STATUS_DATA_TRANSFER_ERROR = 0x04,
289 NVME_STATUS_COMMAND_ABORTED_DUE_TO_POWER_LOSS_NOTIFICATION = 0x05,
290 NVME_STATUS_INTERNAL_DEVICE_ERROR = 0x06,
291 NVME_STATUS_COMMAND_ABORT_REQUESTED = 0x07,
292 NVME_STATUS_COMMAND_ABORTED_DUE_TO_SQ_DELETION = 0x08,
293 NVME_STATUS_COMMAND_ABORTED_DUE_TO_FAILED_FUSED_COMMAND = 0x09,
294 NVME_STATUS_COMMAND_ABORTED_DUE_TO_FAILED_MISSING_COMMAND = 0x0A,
295 NVME_STATUS_INVALID_NAMESPACE_OR_FORMAT = 0x0B,
296 NVME_STATUS_COMMAND_SEQUENCE_ERROR = 0x0C,
297 NVME_STATUS_INVALID_SGL_LAST_SEGMENT_DESCR = 0x0D,
298 NVME_STATUS_INVALID_NUMBER_OF_SGL_DESCR = 0x0E,
299 NVME_STATUS_DATA_SGL_LENGTH_INVALID = 0x0F,
300 NVME_STATUS_METADATA_SGL_LENGTH_INVALID = 0x10,
301 NVME_STATUS_SGL_DESCR_TYPE_INVALID = 0x11,
302 NVME_STATUS_INVALID_USE_OF_CONTROLLER_MEMORY_BUFFER = 0x12,
303 NVME_STATUS_PRP_OFFSET_INVALID = 0x13,
304 NVME_STATUS_ATOMIC_WRITE_UNIT_EXCEEDED = 0x14,
305 NVME_STATUS_OPERATION_DENIED = 0x15,
306 NVME_STATUS_SGL_OFFSET_INVALID = 0x16,
307 NVME_STATUS_RESERVED = 0x17,
308 NVME_STATUS_HOST_IDENTIFIER_INCONSISTENT_FORMAT = 0x18,
309 NVME_STATUS_KEEP_ALIVE_TIMEOUT_EXPIRED = 0x19,
310 NVME_STATUS_KEEP_ALIVE_TIMEOUT_INVALID = 0x1A,
311 NVME_STATUS_COMMAND_ABORTED_DUE_TO_PREEMPT_ABORT = 0x1B,
312 NVME_STATUS_SANITIZE_FAILED = 0x1C,
313 NVME_STATUS_SANITIZE_IN_PROGRESS = 0x1D,
314 NVME_STATUS_SGL_DATA_BLOCK_GRANULARITY_INVALID = 0x1E,
315 NVME_STATUS_DIRECTIVE_TYPE_INVALID = 0x70,
316 NVME_STATUS_DIRECTIVE_ID_INVALID = 0x71,
317 NVME_STATUS_NVM_LBA_OUT_OF_RANGE = 0x80,
318 NVME_STATUS_NVM_CAPACITY_EXCEEDED = 0x81,
319 NVME_STATUS_NVM_NAMESPACE_NOT_READY = 0x82,
320 NVME_STATUS_NVM_RESERVATION_CONFLICT = 0x83,
321 NVME_STATUS_FORMAT_IN_PROGRESS = 0x84
322} NVME_STATUS_GENERIC_COMMAND_CODES;
323
324typedef enum {
325 NVME_STATUS_COMPLETION_QUEUE_INVALID = 0x00,
326 NVME_STATUS_INVALID_QUEUE_IDENTIFIER = 0x01,
327 NVME_STATUS_MAX_QUEUE_SIZE_EXCEEDED = 0x02,
328 NVME_STATUS_ABORT_COMMAND_LIMIT_EXCEEDED = 0x03,
329 NVME_STATUS_ASYNC_EVENT_REQUEST_LIMIT_EXCEEDED = 0x05,
330 NVME_STATUS_INVALID_FIRMWARE_SLOT = 0x06,
331 NVME_STATUS_INVALID_FIRMWARE_IMAGE = 0x07,
332 NVME_STATUS_INVALID_INTERRUPT_VECTOR = 0x08,
333 NVME_STATUS_INVALID_LOG_PAGE = 0x09,
334 NVME_STATUS_INVALID_FORMAT = 0x0A,
335 NVME_STATUS_FIRMWARE_ACTIVATION_REQUIRES_CONVENTIONAL_RESET = 0x0B,
336 NVME_STATUS_INVALID_QUEUE_DELETION = 0x0C,
337 NVME_STATUS_FEATURE_ID_NOT_SAVEABLE = 0x0D,
338 NVME_STATUS_FEATURE_NOT_CHANGEABLE = 0x0E,
339 NVME_STATUS_FEATURE_NOT_NAMESPACE_SPECIFIC = 0x0F,
340 NVME_STATUS_FIRMWARE_ACTIVATION_REQUIRES_NVM_SUBSYSTEM_RESET = 0x10,
341 NVME_STATUS_FIRMWARE_ACTIVATION_REQUIRES_RESET = 0x11,
342 NVME_STATUS_FIRMWARE_ACTIVATION_REQUIRES_MAX_TIME_VIOLATION = 0x12,
343 NVME_STATUS_FIRMWARE_ACTIVATION_PROHIBITED = 0x13,
344 NVME_STATUS_OVERLAPPING_RANGE = 0x14,
345 NVME_STATUS_NAMESPACE_INSUFFICIENT_CAPACITY = 0x15,
346 NVME_STATUS_NAMESPACE_IDENTIFIER_UNAVAILABLE = 0x16,
347 NVME_STATUS_NAMESPACE_ALREADY_ATTACHED = 0x18,
348 NVME_STATUS_NAMESPACE_IS_PRIVATE = 0x19,
349 NVME_STATUS_NAMESPACE_NOT_ATTACHED = 0x1A,
350 NVME_STATUS_NAMESPACE_THIN_PROVISIONING_NOT_SUPPORTED = 0x1B,
351 NVME_STATUS_CONTROLLER_LIST_INVALID = 0x1C,
352 NVME_STATUS_DEVICE_SELF_TEST_IN_PROGRESS = 0x1D,
353 NVME_STATUS_BOOT_PARTITION_WRITE_PROHIBITED = 0x1E,
354 NVME_STATUS_INVALID_CONTROLLER_IDENTIFIER = 0x1F,
355 NVME_STATUS_INVALID_SECONDARY_CONTROLLER_STATE = 0x20,
356 NVME_STATUS_INVALID_NUMBER_OF_CONTROLLER_RESOURCES = 0x21,
357 NVME_STATUS_INVALID_RESOURCE_IDENTIFIER = 0x22,
358 NVME_STATUS_SANITIZE_PROHIBITED_ON_PERSISTENT_MEMORY = 0x23,
359 NVME_STATUS_INVALID_ANA_GROUP_IDENTIFIER = 0x24,
360 NVME_STATUS_ANA_ATTACH_FAILED = 0x25,
361 NVME_IO_COMMAND_SET_NOT_SUPPORTED = 0x29,
362 NVME_IO_COMMAND_SET_NOT_ENABLED = 0x2A,
363 NVME_IO_COMMAND_SET_COMBINATION_REJECTED = 0x2B,
364 NVME_IO_COMMAND_SET_INVALID = 0x2C,
365 NVME_STATUS_STREAM_RESOURCE_ALLOCATION_FAILED = 0x7F,
366 NVME_STATUS_ZONE_INVALID_FORMAT = 0x7F,
367 NVME_STATUS_NVM_CONFLICTING_ATTRIBUTES = 0x80,
368 NVME_STATUS_NVM_INVALID_PROTECTION_INFORMATION = 0x81,
369 NVME_STATUS_NVM_ATTEMPTED_WRITE_TO_READ_ONLY_RANGE = 0x82,
370 NVME_STATUS_NVM_COMMAND_SIZE_LIMIT_EXCEEDED = 0x83,
371 NVME_STATUS_ZONE_BOUNDARY_ERROR = 0xB8,
372 NVME_STATUS_ZONE_FULL = 0xB9,
373 NVME_STATUS_ZONE_READ_ONLY = 0xBA,
374 NVME_STATUS_ZONE_OFFLINE = 0xBB,
375 NVME_STATUS_ZONE_INVALID_WRITE = 0xBC,
376 NVME_STATUS_ZONE_TOO_MANY_ACTIVE = 0xBD,
377 NVME_STATUS_ZONE_TOO_MANY_OPEN = 0xBE,
378 NVME_STATUS_ZONE_INVALID_STATE_TRANSITION = 0xBF
379} NVME_STATUS_COMMAND_SPECIFIC_CODES;
380
381typedef enum {
382 NVME_STATUS_NVM_WRITE_FAULT = 0x80,
383 NVME_STATUS_NVM_UNRECOVERED_READ_ERROR = 0x81,
384 NVME_STATUS_NVM_END_TO_END_GUARD_CHECK_ERROR = 0x82,
385 NVME_STATUS_NVM_END_TO_END_APPLICATION_TAG_CHECK_ERROR = 0x83,
386 NVME_STATUS_NVM_END_TO_END_REFERENCE_TAG_CHECK_ERROR = 0x84,
387 NVME_STATUS_NVM_COMPARE_FAILURE = 0x85,
388 NVME_STATUS_NVM_ACCESS_DENIED = 0x86,
389 NVME_STATUS_NVM_DEALLOCATED_OR_UNWRITTEN_LOGICAL_BLOCK = 0x87
390} NVME_STATUS_MEDIA_ERROR_CODES;
391
392typedef enum {
393 NVME_ADMIN_COMMAND_DELETE_IO_SQ = 0x00,
394 NVME_ADMIN_COMMAND_CREATE_IO_SQ = 0x01,
395 NVME_ADMIN_COMMAND_GET_LOG_PAGE = 0x02,
396 NVME_ADMIN_COMMAND_DELETE_IO_CQ = 0x04,
397 NVME_ADMIN_COMMAND_CREATE_IO_CQ = 0x05,
398 NVME_ADMIN_COMMAND_IDENTIFY = 0x06,
399 NVME_ADMIN_COMMAND_ABORT = 0x08,
400 NVME_ADMIN_COMMAND_SET_FEATURES = 0x09,
401 NVME_ADMIN_COMMAND_GET_FEATURES = 0x0A,
402 NVME_ADMIN_COMMAND_ASYNC_EVENT_REQUEST = 0x0C,
403 NVME_ADMIN_COMMAND_NAMESPACE_MANAGEMENT = 0x0D,
404 NVME_ADMIN_COMMAND_FIRMWARE_ACTIVATE = 0x10,
405 NVME_ADMIN_COMMAND_FIRMWARE_COMMIT = 0x10,
406 NVME_ADMIN_COMMAND_FIRMWARE_IMAGE_DOWNLOAD = 0x11,
407 NVME_ADMIN_COMMAND_DEVICE_SELF_TEST = 0x14,
408 NVME_ADMIN_COMMAND_NAMESPACE_ATTACHMENT = 0x15,
409 NVME_ADMIN_COMMAND_DIRECTIVE_SEND = 0x19,
410 NVME_ADMIN_COMMAND_DIRECTIVE_RECEIVE = 0x1A,
411 NVME_ADMIN_COMMAND_VIRTUALIZATION_MANAGEMENT = 0x1C,
412 NVME_ADMIN_COMMAND_NVME_MI_SEND = 0x1D,
413 NVME_ADMIN_COMMAND_NVME_MI_RECEIVE = 0x1E,
414 NVME_ADMIN_COMMAND_DOORBELL_BUFFER_CONFIG = 0x7C,
415 NVME_ADMIN_COMMAND_FORMAT_NVM = 0x80,
416 NVME_ADMIN_COMMAND_SECURITY_SEND = 0x81,
417 NVME_ADMIN_COMMAND_SECURITY_RECEIVE = 0x82,
418 NVME_ADMIN_COMMAND_SANITIZE = 0x84,
419 NVME_ADMIN_COMMAND_GET_LBA_STATUS = 0x86
420} NVME_ADMIN_COMMANDS;
421
422typedef enum {
423 NVME_FEATURE_ARBITRATION = 0x01,
424 NVME_FEATURE_POWER_MANAGEMENT = 0x02,
425 NVME_FEATURE_LBA_RANGE_TYPE = 0x03,
426 NVME_FEATURE_TEMPERATURE_THRESHOLD = 0x04,
427 NVME_FEATURE_ERROR_RECOVERY = 0x05,
428 NVME_FEATURE_VOLATILE_WRITE_CACHE = 0x06,
429 NVME_FEATURE_NUMBER_OF_QUEUES = 0x07,
430 NVME_FEATURE_INTERRUPT_COALESCING = 0x08,
431 NVME_FEATURE_INTERRUPT_VECTOR_CONFIG = 0x09,
432 NVME_FEATURE_WRITE_ATOMICITY = 0x0A,
433 NVME_FEATURE_ASYNC_EVENT_CONFIG = 0x0B,
434 NVME_FEATURE_AUTONOMOUS_POWER_STATE_TRANSITION = 0x0C,
435 NVME_FEATURE_HOST_MEMORY_BUFFER = 0x0D,
436 NVME_FEATURE_TIMESTAMP = 0x0E,
437 NVME_FEATURE_KEEP_ALIVE = 0x0F,
438 NVME_FEATURE_HOST_CONTROLLED_THERMAL_MANAGEMENT = 0x10,
439 NVME_FEATURE_NONOPERATIONAL_POWER_STATE = 0x11,
440 NVME_FEATURE_READ_RECOVERY_LEVEL_CONFIG = 0x12,
441 NVME_FEATURE_PREDICTABLE_LATENCY_MODE_CONFIG = 0x13,
442 NVME_FEATURE_PREDICTABLE_LATENCY_MODE_WINDOW = 0x14,
443 NVME_FEATURE_LBA_STATUS_INFORMATION_REPORT_INTERVAL = 0x15,
444 NVME_FEATURE_HOST_BEHAVIOR_SUPPORT = 0x16,
445 NVME_FEATURE_SANITIZE_CONFIG = 0x17,
446 NVME_FEATURE_ENDURANCE_GROUP_EVENT_CONFIG = 0x18,
447 NVME_FEATURE_IO_COMMAND_SET_PROFILE = 0x19,
448 NVME_FEATURE_ENHANCED_CONTROLLER_METADATA = 0x7D,
449 NVME_FEATURE_CONTROLLER_METADATA = 0x7E,
450 NVME_FEATURE_NAMESPACE_METADATA = 0x7F,
451 NVME_FEATURE_NVM_SOFTWARE_PROGRESS_MARKER = 0x80,
452 NVME_FEATURE_NVM_HOST_IDENTIFIER = 0x81,
453 NVME_FEATURE_NVM_RESERVATION_NOTIFICATION_MASK = 0x82,
454 NVME_FEATURE_NVM_RESERVATION_PERSISTANCE = 0x83,
455 NVME_FEATURE_NVM_NAMESPACE_WRITE_PROTECTION_CONFIG = 0x84,
456 NVME_FEATURE_ERROR_INJECTION = 0xC0,
457 NVME_FEATURE_CLEAR_FW_UPDATE_HISTORY = 0xC1,
458 NVME_FEATURE_READONLY_WRITETHROUGH_MODE = 0xC2,
459 NVME_FEATURE_CLEAR_PCIE_CORRECTABLE_ERROR_COUNTERS = 0xC3,
460 NVME_FEATURE_ENABLE_IEEE1667_SILO = 0xC4,
461 NVME_FEATURE_PLP_HEALTH_MONITOR = 0xC5
462} NVME_FEATURES;
463
464typedef union {
465 __C89_NAMELESS struct {
466 ULONG SQID : 8;
467 ULONG CID : 16;
468 };
469 ULONG AsUlong;
470} NVME_CDW10_ABORT, *PNVME_CDW10_ABORT;
471
472typedef enum {
473 NVME_IDENTIFY_CNS_SPECIFIC_NAMESPACE = 0x0,
474 NVME_IDENTIFY_CNS_CONTROLLER = 0x1,
475 NVME_IDENTIFY_CNS_ACTIVE_NAMESPACES = 0x2,
476 NVME_IDENTIFY_CNS_DESCRIPTOR_NAMESPACE = 0x3,
477 NVME_IDENTIFY_CNS_NVM_SET = 0x4,
478 NVME_IDENTIFY_CNS_SPECIFIC_NAMESPACE_IO_COMMAND_SET = 0x5,
479 NVME_IDENTIFY_CNS_SPECIFIC_CONTROLLER_IO_COMMAND_SET = 0x6,
480 NVME_IDENTIFY_CNS_ACTIVE_NAMESPACE_LIST_IO_COMMAND_SET = 0x7,
481 NVME_IDENTIFY_CNS_ALLOCATED_NAMESPACE_LIST = 0x10,
482 NVME_IDENTIFY_CNS_ALLOCATED_NAMESPACE = 0x11,
483 NVME_IDENTIFY_CNS_CONTROLLER_LIST_OF_NSID = 0x12,
484 NVME_IDENTIFY_CNS_CONTROLLER_LIST_OF_NVM_SUBSYSTEM = 0x13,
485 NVME_IDENTIFY_CNS_PRIMARY_CONTROLLER_CAPABILITIES = 0x14,
486 NVME_IDENTIFY_CNS_SECONDARY_CONTROLLER_LIST = 0x15,
487 NVME_IDENTIFY_CNS_NAMESPACE_GRANULARITY_LIST = 0x16,
488 NVME_IDENTIFY_CNS_UUID_LIST = 0x17,
489 NVME_IDENTIFY_CNS_DOMAIN_LIST = 0x18,
490 NVME_IDENTIFY_CNS_ENDURANCE_GROUP_LIST = 0x19,
491 NVME_IDENTIFY_CNS_ALLOCATED_NAMSPACE_LIST_IO_COMMAND_SET = 0x1A,
492 NVME_IDENTIFY_CNS_ALLOCATED_NAMESPACE_IO_COMMAND_SET = 0x1B,
493 NVME_IDENTIFY_CNS_IO_COMMAND_SET = 0x1C
494} NVME_IDENTIFY_CNS_CODES;
495
496typedef enum {
497 NVME_COMMAND_SET_NVM = 0x0,
498 NVME_COMMAND_SET_KEY_VALUE = 0x1,
499 NVME_COMMAND_SET_ZONED_NAMESPACE = 0x2
500} NVME_COMMAND_SET_IDENTIFIERS;
501
502typedef union {
503 __C89_NAMELESS struct {
504 ULONG CNS : 8;
505 ULONG Reserved : 8;
506 ULONG CNTID : 16;
507 };
508 ULONG AsUlong;
509} NVME_CDW10_IDENTIFY, *PNVME_CDW10_IDENTIFY;
510
511typedef union {
512 __C89_NAMELESS struct {
513 USHORT NVMSETID;
514 USHORT Reserved;
515 };
516 __C89_NAMELESS struct {
517 ULONG CNSID : 16;
518 ULONG Reserved2 : 8;
519 ULONG CSI : 8;
520 };
521 ULONG AsUlong;
522} NVME_CDW11_IDENTIFY, *PNVME_CDW11_IDENTIFY;
523
524typedef union {
525 __C89_NAMELESS struct {
526 USHORT MS;
527 UCHAR LBADS;
528 UCHAR RP : 2;
529 UCHAR Reserved0 : 6;
530 };
531 ULONG AsUlong;
532} NVME_LBA_FORMAT, *PNVME_LBA_FORMAT;
533
534typedef union {
535 __C89_NAMELESS struct {
536 UCHAR PersistThroughPowerLoss : 1;
537 UCHAR WriteExclusiveReservation : 1;
538 UCHAR ExclusiveAccessReservation : 1;
539 UCHAR WriteExclusiveRegistrantsOnlyReservation : 1;
540 UCHAR ExclusiveAccessRegistrantsOnlyReservation : 1;
541 UCHAR WriteExclusiveAllRegistrantsReservation : 1;
542 UCHAR ExclusiveAccessAllRegistrantsReservation : 1;
543 UCHAR Reserved : 1;
544 };
545 UCHAR AsUchar;
546} NVM_RESERVATION_CAPABILITIES, *PNVME_RESERVATION_CAPABILITIES;
547
548typedef struct {
549 ULONGLONG NSZE;
550 ULONGLONG NCAP;
551 ULONGLONG NUSE;
552 struct {
553 UCHAR ThinProvisioning : 1;
554 UCHAR NameSpaceAtomicWriteUnit : 1;
555 UCHAR DeallocatedOrUnwrittenError : 1;
556 UCHAR SkipReuseUI : 1;
557 UCHAR NameSpaceIoOptimization : 1;
558 UCHAR Reserved : 3;
559 } NSFEAT;
560 UCHAR NLBAF;
561 struct {
562 UCHAR LbaFormatIndex : 4;
563 UCHAR MetadataInExtendedDataLBA : 1;
564 UCHAR Reserved : 3;
565 } FLBAS;
566 struct {
567 UCHAR MetadataInExtendedDataLBA : 1;
568 UCHAR MetadataInSeparateBuffer : 1;
569 UCHAR Reserved : 6;
570 } MC;
571 struct {
572 UCHAR ProtectionInfoType1 : 1;
573 UCHAR ProtectionInfoType2 : 1;
574 UCHAR ProtectionInfoType3 : 1;
575 UCHAR InfoAtBeginningOfMetadata : 1;
576 UCHAR InfoAtEndOfMetadata : 1;
577 UCHAR Reserved : 3;
578 } DPC;
579 struct {
580 UCHAR ProtectionInfoTypeEnabled : 3;
581 UCHAR InfoAtBeginningOfMetadata : 1;
582 UCHAR Reserved : 4;
583 } DPS;
584 struct {
585 UCHAR SharedNameSpace : 1;
586 UCHAR Reserved : 7;
587 } NMIC;
588 NVM_RESERVATION_CAPABILITIES RESCAP;
589 struct {
590 UCHAR PercentageRemained : 7;
591 UCHAR Supported : 1;
592 } FPI;
593 struct {
594 UCHAR ReadBehavior : 3;
595 UCHAR WriteZeroes : 1;
596 UCHAR GuardFieldWithCRC : 1;
597 UCHAR Reserved : 3;
598 } DLFEAT;
599 USHORT NAWUN;
600 USHORT NAWUPF;
601 USHORT NACWU;
602 USHORT NABSN;
603 USHORT NABO;
604 USHORT NABSPF;
605 USHORT NOIOB;
606 UCHAR NVMCAP[16];
607 USHORT NPWG;
608 USHORT NPWA;
609 USHORT NPDG;
610 USHORT NPDA;
611 USHORT NOWS;
612 USHORT MSSRL;
613 ULONG MCL;
614 UCHAR MSRC;
615 UCHAR Reserved2[11];
616 ULONG ANAGRPID;
617 UCHAR Reserved3[3];
618 struct {
619 UCHAR WriteProtected : 1;
620 UCHAR Reserved : 7;
621 } NSATTR;
622 USHORT NVMSETID;
623 USHORT ENDGID;
624 UCHAR NGUID[16];
625 UCHAR EUI64[8];
626 NVME_LBA_FORMAT LBAF[16];
627 UCHAR Reserved4[192];
628 UCHAR VS[3712];
629} NVME_IDENTIFY_NAMESPACE_DATA, *PNVME_IDENTIFY_NAMESPACE_DATA;
630
631typedef struct {
632 USHORT MP;
633 UCHAR Reserved0;
634 UCHAR MPS : 1;
635 UCHAR NOPS : 1;
636 UCHAR Reserved1 : 6;
637 ULONG ENLAT;
638 ULONG EXLAT;
639 UCHAR RRT : 5;
640 UCHAR Reserved2 : 3;
641 UCHAR RRL : 5;
642 UCHAR Reserved3 : 3;
643 UCHAR RWT : 5;
644 UCHAR Reserved4 : 3;
645 UCHAR RWL : 5;
646 UCHAR Reserved5 : 3;
647 USHORT IDLP;
648 UCHAR Reserved6 : 6;
649 UCHAR IPS : 2;
650 UCHAR Reserved7;
651 USHORT ACTP;
652 UCHAR APW : 3;
653 UCHAR Reserved8 : 3;
654 UCHAR APS : 2;
655 UCHAR Reserved9[9];
656} NVME_POWER_STATE_DESC, *PNVME_POWER_STATE_DESC;
657
658typedef struct {
659 USHORT VID;
660 USHORT SSVID;
661 UCHAR SN[20];
662 UCHAR MN[40];
663 UCHAR FR[8];
664 UCHAR RAB;
665 UCHAR IEEE[3];
666 struct {
667 UCHAR MultiPCIePorts : 1;
668 UCHAR MultiControllers : 1;
669 UCHAR SRIOV : 1;
670 UCHAR Reserved : 5;
671 } CMIC;
672 UCHAR MDTS;
673 USHORT CNTLID;
674 ULONG VER;
675 ULONG RTD3R;
676 ULONG RTD3E;
677 struct {
678 ULONG Reserved0 : 8;
679 ULONG NamespaceAttributeChanged : 1;
680 ULONG FirmwareActivation : 1;
681 ULONG Reserved1 : 1;
682 ULONG AsymmetricAccessChanged : 1;
683 ULONG PredictableLatencyAggregateLogChanged : 1;
684 ULONG LbaStatusChanged : 1;
685 ULONG EnduranceGroupAggregateLogChanged : 1;
686 ULONG Reserved2 : 12;
687 ULONG ZoneInformation : 1;
688 ULONG Reserved3 : 4;
689 } OAES;
690 struct {
691 ULONG HostIdentifier128Bit : 1;
692 ULONG NOPSPMode : 1;
693 ULONG NVMSets : 1;
694 ULONG ReadRecoveryLevels : 1;
695 ULONG EnduranceGroups : 1;
696 ULONG PredictableLatencyMode : 1;
697 ULONG TBKAS : 1;
698 ULONG NamespaceGranularity : 1;
699 ULONG SQAssociations : 1;
700 ULONG UUIDList : 1;
701 ULONG Reserved0 : 22;
702 } CTRATT;
703 struct {
704 USHORT ReadRecoveryLevel0 : 1;
705 USHORT ReadRecoveryLevel1 : 1;
706 USHORT ReadRecoveryLevel2 : 1;
707 USHORT ReadRecoveryLevel3 : 1;
708 USHORT ReadRecoveryLevel4 : 1;
709 USHORT ReadRecoveryLevel5 : 1;
710 USHORT ReadRecoveryLevel6 : 1;
711 USHORT ReadRecoveryLevel7 : 1;
712 USHORT ReadRecoveryLevel8 : 1;
713 USHORT ReadRecoveryLevel9 : 1;
714 USHORT ReadRecoveryLevel10 : 1;
715 USHORT ReadRecoveryLevel11 : 1;
716 USHORT ReadRecoveryLevel12 : 1;
717 USHORT ReadRecoveryLevel13 : 1;
718 USHORT ReadRecoveryLevel14 : 1;
719 USHORT ReadRecoveryLevel15 : 1;
720 } RRLS;
721 UCHAR Reserved0[9];
722 UCHAR CNTRLTYPE;
723 UCHAR FGUID[16];
724 USHORT CRDT1;
725 USHORT CRDT2;
726 USHORT CRDT3;
727 UCHAR Reserved0_1[106];
728 UCHAR ReservedForManagement[16];
729 struct {
730 USHORT SecurityCommands : 1;
731 USHORT FormatNVM : 1;
732 USHORT FirmwareCommands : 1;
733 USHORT NamespaceCommands : 1;
734 USHORT DeviceSelfTest : 1;
735 USHORT Directives : 1;
736 USHORT NVMeMICommands : 1;
737 USHORT VirtualizationMgmt : 1;
738 USHORT DoorBellBufferConfig: 1;
739 USHORT GetLBAStatus : 1;
740 USHORT Reserved : 6;
741 } OACS;
742 UCHAR ACL;
743 UCHAR AERL;
744 struct {
745 UCHAR Slot1ReadOnly : 1;
746 UCHAR SlotCount : 3;
747 UCHAR ActivationWithoutReset : 1;
748 UCHAR Reserved : 3;
749 } FRMW;
750 struct {
751 UCHAR SmartPagePerNamespace : 1;
752 UCHAR CommandEffectsLog : 1;
753 UCHAR LogPageExtendedData : 1;
754 UCHAR TelemetrySupport : 1;
755 UCHAR PersistentEventLog : 1;
756 UCHAR Reserved0 : 1;
757 UCHAR TelemetryDataArea4 : 1;
758 UCHAR Reserved1 : 1;
759 } LPA;
760 UCHAR ELPE;
761 UCHAR NPSS;
762 struct {
763 UCHAR CommandFormatInSpec : 1;
764 UCHAR Reserved : 7;
765 } AVSCC;
766 struct {
767 UCHAR Supported : 1;
768 UCHAR Reserved : 7;
769 } APSTA;
770 USHORT WCTEMP;
771 USHORT CCTEMP;
772 USHORT MTFA;
773 ULONG HMPRE;
774 ULONG HMMIN;
775 UCHAR TNVMCAP[16];
776 UCHAR UNVMCAP[16];
777 struct {
778 ULONG RPMBUnitCount : 3;
779 ULONG AuthenticationMethod : 3;
780 ULONG Reserved0 : 10;
781 ULONG TotalSize : 8;
782 ULONG AccessSize : 8;
783 } RPMBS;
784 USHORT EDSTT;
785 UCHAR DSTO;
786 UCHAR FWUG;
787 USHORT KAS;
788 struct {
789 USHORT Supported : 1;
790 USHORT Reserved : 15;
791 } HCTMA;
792 USHORT MNTMT;
793 USHORT MXTMT;
794 struct {
795 ULONG CryptoErase : 1;
796 ULONG BlockErase : 1;
797 ULONG Overwrite : 1;
798 ULONG Reserved : 26;
799 ULONG NDI : 1;
800 ULONG NODMMAS : 2;
801 } SANICAP;
802 ULONG HMMINDS;
803 USHORT HMMAXD;
804 USHORT NSETIDMAX;
805 USHORT ENDGIDMAX;
806 UCHAR ANATT;
807 struct {
808 UCHAR OptimizedState : 1;
809 UCHAR NonOptimizedState : 1;
810 UCHAR InaccessibleState : 1;
811 UCHAR PersistentLossState : 1;
812 UCHAR ChangeState : 1;
813 UCHAR Reserved : 1;
814 UCHAR StaticANAGRPID : 1;
815 UCHAR SupportNonZeroANAGRPID : 1;
816 } ANACAP;
817 ULONG ANAGRPMAX;
818 ULONG NANAGRPID;
819 ULONG PELS;
820 UCHAR Reserved1[156];
821 struct {
822 UCHAR RequiredEntrySize : 4;
823 UCHAR MaxEntrySize : 4;
824 } SQES;
825 struct {
826 UCHAR RequiredEntrySize : 4;
827 UCHAR MaxEntrySize : 4;
828 } CQES;
829 USHORT MAXCMD;
830 ULONG NN;
831 struct {
832 USHORT Compare : 1;
833 USHORT WriteUncorrectable : 1;
834 USHORT DatasetManagement : 1;
835 USHORT WriteZeroes : 1;
836 USHORT FeatureField : 1;
837 USHORT Reservations : 1;
838 USHORT Timestamp : 1;
839 USHORT Verify : 1;
840 USHORT Reserved : 8;
841 } ONCS;
842 struct {
843 USHORT CompareAndWrite : 1;
844 USHORT Reserved : 15;
845 } FUSES;
846 struct {
847 UCHAR FormatApplyToAll : 1;
848 UCHAR SecureEraseApplyToAll : 1;
849 UCHAR CryptographicEraseSupported : 1;
850 UCHAR FormatSupportNSIDAllF : 1;
851 UCHAR Reserved : 4;
852 } FNA;
853 struct {
854 UCHAR Present : 1;
855 UCHAR FlushBehavior : 2;
856 UCHAR Reserved : 5;
857 } VWC;
858 USHORT AWUN;
859 USHORT AWUPF;
860 struct {
861 UCHAR CommandFormatInSpec : 1;
862 UCHAR Reserved : 7;
863 } NVSCC;
864 struct {
865 UCHAR WriteProtect : 1;
866 UCHAR UntilPowerCycle : 1;
867 UCHAR Permanent : 1;
868 UCHAR Reserved : 5;
869 } NWPC;
870 USHORT ACWU;
871 UCHAR Reserved4[2];
872 struct {
873 ULONG SGLSupported : 2;
874 ULONG KeyedSGLData : 1;
875 ULONG Reserved0 : 13;
876 ULONG BitBucketDescrSupported : 1;
877 ULONG ByteAlignedContiguousPhysicalBuffer : 1;
878 ULONG SGLLengthLargerThanDataLength : 1;
879 ULONG MPTRSGLDescriptor : 1;
880 ULONG AddressFieldSGLDataBlock: 1;
881 ULONG TransportSGLData : 1;
882 ULONG Reserved1 : 10;
883 } SGLS;
884 ULONG MNAN;
885 UCHAR Reserved6[224];
886 UCHAR SUBNQN[256];
887 UCHAR Reserved7[768];
888 UCHAR Reserved8[256];
889 NVME_POWER_STATE_DESC PDS[32];
890 UCHAR VS[1024];
891} NVME_IDENTIFY_CONTROLLER_DATA, *PNVME_IDENTIFY_CONTROLLER_DATA;
892
893typedef enum {
894 NVME_IDENTIFIER_TYPE_EUI64 = 0x1,
895 NVME_IDENTIFIER_TYPE_NGUID = 0x2,
896 NVME_IDENTIFIER_TYPE_UUID = 0x3,
897 NVME_IDENTIFIER_TYPE_CSI = 0x4
898} NVME_IDENTIFIER_TYPE;
899
900typedef enum {
901 NVME_IDENTIFIER_TYPE_EUI64_LENGTH = 0x8,
902 NVME_IDENTIFIER_TYPE_NGUID_LENGTH = 0x10,
903 NVME_IDENTIFIER_TYPE_UUID_LENGTH = 0x10,
904 NVME_IDENTIFIER_TYPE_CSI_LENGTH = 0x1
905} NVME_IDENTIFIER_TYPE_LENGTH;
906
907#define NVME_IDENTIFY_CNS_DESCRIPTOR_NAMESPACE_SIZE 0x1000
908
909typedef struct {
910 UCHAR NIDT;
911 UCHAR NIDL;
912 UCHAR Reserved[2];
913 UCHAR NID[ANYSIZE_ARRAY];
914} NVME_IDENTIFY_NAMESPACE_DESCRIPTOR, *PNVME_IDENTIFY_NAMESPACE_DESCRIPTOR;
915
916typedef struct {
917 USHORT Identifier;
918 USHORT ENDGID;
919 ULONG Reserved1;
920 ULONG Random4KBReadTypical;
921 ULONG OptimalWriteSize;
922 UCHAR TotalCapacity[16];
923 UCHAR UnallocatedCapacity[16];
924 UCHAR Reserved2[80];
925} NVME_SET_ATTRIBUTES_ENTRY, *PNVME_SET_ATTRIBUTES_ENTRY;
926
927typedef struct {
928 UCHAR IdentifierCount;
929 UCHAR Reserved[127];
930 NVME_SET_ATTRIBUTES_ENTRY Entry[ANYSIZE_ARRAY];
931} NVM_SET_LIST, *PNVM_SET_LIST;
932
933typedef struct {
934 ULONGLONG ZoneSize;
935 UCHAR ZDES;
936 UCHAR Reserved[7];
937} NVME_LBA_ZONE_FORMAT, *PNVME_LBA_ZONE_FORMAT;
938
939typedef struct {
940 struct {
941 USHORT VariableZoneCapacity : 1;
942 USHORT ZoneExcursions : 1;
943 USHORT Reserved : 14;
944 } ZOC;
945 struct {
946 USHORT ReadAcrossZoneBoundaries : 1;
947 USHORT Reserved : 15;
948 } OZCS;
949 ULONG MAR;
950 ULONG MOR;
951 ULONG RRL;
952 ULONG FRL;
953 UCHAR Reserved0[2796];
954 NVME_LBA_ZONE_FORMAT LBAEF[16];
955 UCHAR Reserved1[768];
956 UCHAR VS[256];
957} NVME_IDENTIFY_SPECIFIC_NAMESPACE_IO_COMMAND_SET, *PNVME_IDENTIFY_SPECIFIC_NAMESPACE_IO_COMMAND_SET;
958
959typedef struct {
960 UCHAR VSL;
961 UCHAR WZSL;
962 UCHAR WUSL;
963 UCHAR DMRL;
964 ULONG DMRSL;
965 ULONGLONG DMSL;
966 UCHAR Reserved[4080];
967} NVME_IDENTIFY_NVM_SPECIFIC_CONTROLLER_IO_COMMAND_SET, *PNVME_IDENTIFY_NVM_SPECIFIC_CONTROLLER_IO_COMMAND_SET;
968
969typedef struct {
970 UCHAR ZASL;
971 UCHAR Reserved[4095];
972} NVME_IDENTIFY_ZNS_SPECIFIC_CONTROLLER_IO_COMMAND_SET, *PNVME_IDENTIFY_ZNS_SPECIFIC_CONTROLLER_IO_COMMAND_SET;
973
974typedef struct {
975 USHORT NumberOfIdentifiers;
976 USHORT ControllerID[2047];
977} NVME_CONTROLLER_LIST, *PNVME_CONTROLLER_LIST;
978
979typedef struct {
980 ULONGLONG IOCommandSetVector[512];
981} NVME_IDENTIFY_IO_COMMAND_SET, *PNVME_IDENTIFY_IO_COMMAND_SET;
982
983typedef enum {
984 NVME_LBA_RANGE_TYPE_RESERVED = 0,
985 NVME_LBA_RANGE_TYPE_FILESYSTEM = 1,
986 NVME_LBA_RANGE_TYPE_RAID = 2,
987 NVME_LBA_RANGE_TYPE_CACHE = 3,
988 NVME_LBA_RANGE_TYPE_PAGE_SWAP_FILE = 4
989} NVME_LBA_RANGE_TYPES;
990
991typedef struct {
992 UCHAR Type;
993 struct {
994 UCHAR MayOverwritten : 1;
995 UCHAR Hidden : 1;
996 UCHAR Reserved : 6;
997 } Attributes;
998 UCHAR Reserved0[14];
999 ULONGLONG SLBA;
1000 ULONGLONG NLB;
1001 UCHAR GUID[16];
1002 UCHAR Reserved1[16];
1003} NVME_LBA_RANGET_TYPE_ENTRY, *PNVME_LBA_RANGET_TYPE_ENTRY;
1004
1005typedef enum {
1006 NVME_LOG_PAGE_WCS_DEVICE_SMART_ATTRIBUTES = 0xC0,
1007 NVME_LOG_PAGE_WCS_DEVICE_ERROR_RECOVERY = 0xC1
1008} NVME_VENDOR_LOG_PAGES;
1009
1010#define GUID_WCS_DEVICE_SMART_ATTRIBUTESGuid { 0x2810AFC5, 0xBFEA, 0xA4F2, { 0x9C, 0x4F, 0x6F, 0x7C, 0xC9, 0x14, 0xD5, 0xAF} }
1011DEFINE_GUID(GUID_WCS_DEVICE_SMART_ATTRIBUTES, 0x2810AFC5, 0xBFEA, 0xA4F2, 0x9C, 0x4F, 0x6F, 0x7C, 0xC9, 0x14, 0xD5, 0xAF);
1012
1013#define GUID_WCS_DEVICE_ERROR_RECOVERYGuid { 0x2131D944, 0x30FE, 0xAE34, {0xAB, 0x4D, 0xFD, 0x3D, 0xBA, 0x83, 0x19, 0x5A} }
1014DEFINE_GUID(GUID_WCS_DEVICE_ERROR_RECOVERY, 0x2131D944, 0x30FE, 0xAE34, 0xAB, 0x4D, 0xFD, 0x3D, 0xBA, 0x83, 0x19, 0x5A);
1015
1016typedef enum {
1017 NVME_ASYNC_EVENT_TYPE_VENDOR_SPECIFIC_RESERVED = 0,
1018 NVME_ASYNC_EVENT_TYPE_VENDOR_SPECIFIC_DEVICE_PANIC = 1
1019} NVME_ASYNC_EVENT_TYPE_VENDOR_SPECIFIC_CODES;
1020
1021typedef struct _NVME_WCS_DEVICE_RESET_ACTION {
1022 union {
1023 __C89_NAMELESS struct {
1024 UCHAR ControllerReset : 1;
1025 UCHAR NVMeSubsystemReset : 1;
1026 UCHAR PCIeFLR : 1;
1027 UCHAR PERST : 1;
1028 UCHAR PowerCycle : 1;
1029 UCHAR PCIeConventionalHotReset : 1;
1030 UCHAR Reserved : 2;
1031 };
1032 UCHAR AsUCHAR;
1033 };
1034} NVME_WCS_DEVICE_RESET_ACTION, *PNVME_WCS_DEVICE_RESET_ACTION;
1035
1036typedef struct _NVME_WCS_DEVICE_CAPABILITIES {
1037 union {
1038 __C89_NAMELESS struct {
1039 ULONG PanicAEN : 1;
1040 ULONG PanicCFS : 1;
1041 ULONG Reserved : 30;
1042 };
1043 ULONG AsULONG;
1044 };
1045} NVME_WCS_DEVICE_CAPABILITIES, *PNVME_WCS_DEVICE_CAPABILITIES;
1046
1047typedef enum _NVME_WCS_DEVICE_RECOVERY_ACTION {
1048 NVMeDeviceRecoveryNoAction = 0,
1049 NVMeDeviceRecoveryFormatNVM,
1050 NVMeDeviceRecoveryVendorSpecificCommand,
1051 NVMeDeviceRecoveryVendorAnalysis,
1052 NVMeDeviceRecoveryDeviceReplacement,
1053 NVMeDeviceRecoverySanitize,
1054 NVMeDeviceRecoveryMax = 15
1055} NVME_WCS_DEVICE_RECOVERY_ACTION, *PNVME_WCS_DEVICE_RECOVERY_ACTION;
1056
1057#pragma pack(push, 1)
1058
1059typedef struct _NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG {
1060 UCHAR VersionSpecificData[494];
1061 USHORT LogPageVersionNumber;
1062 GUID LogPageGUID;
1063} NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG, *PNVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG;
1064
1065C_ASSERT(sizeof(NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG) == 512);
1066
1067#define NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG_VERSION_2 0x0002
1068
1069typedef struct _NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG_V2 {
1070 UCHAR MediaUnitsWritten[16];
1071 UCHAR MediaUnitsRead[16];
1072 struct {
1073 UCHAR RawCount[6];
1074 UCHAR Normalized[2];
1075 } BadUserNANDBlockCount;
1076 struct {
1077 UCHAR RawCount[6];
1078 UCHAR Normalized[2];
1079 } BadSystemNANDBlockCount;
1080 ULONGLONG XORRecoveryCount;
1081 ULONGLONG UnrecoverableReadErrorCount;
1082 ULONGLONG SoftECCErrorCount;
1083 struct {
1084 ULONG DetectedCounts;
1085 ULONG CorrectedCounts;
1086 } EndToEndCorrectionCounts;
1087 UCHAR PercentageSystemDataUsed;
1088 UCHAR RefreshCount[7];
1089 struct {
1090 ULONG MaximumCount;
1091 ULONG MinimumCount;
1092 } UserDataEraseCounts;
1093 struct {
1094 UCHAR EventCount;
1095 UCHAR Status;
1096 } ThermalThrottling;
1097 UCHAR Reserved0[6];
1098 ULONGLONG PCIeCorrectableErrorCount;
1099 ULONG IncompleteShutdownCount;
1100 ULONG Reserved1;
1101 UCHAR PercentageFreeBlocks;
1102 UCHAR Reserved2[7];
1103 USHORT CapacitorHealth;
1104 UCHAR Reserved3[6];
1105 ULONGLONG UnalignedIOCount;
1106 ULONGLONG SecurityVersionNumber;
1107 ULONGLONG NUSE;
1108 UCHAR PLPStartCount[16];
1109 UCHAR EnduranceEstimate[16];
1110 UCHAR Reserved4[302];
1111 USHORT LogPageVersionNumber;
1112 GUID LogPageGUID;
1113} NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG_V2, *PNVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG_V2;
1114
1115C_ASSERT(sizeof(NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG_V2) == sizeof(NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG));
1116
1117typedef struct _NVME_WCS_DEVICE_ERROR_RECOVERY_LOG {
1118 USHORT PanicResetWaitTime;
1119 NVME_WCS_DEVICE_RESET_ACTION PanicResetAction;
1120 UCHAR DriveRecoveryAction;
1121 ULONGLONG PanicId;
1122 NVME_WCS_DEVICE_CAPABILITIES DeviceCapabilities;
1123 UCHAR VendorSpecificRecoveryCode;
1124 UCHAR Reserved0[3];
1125 ULONG VendorSpecificCommandCDW12;
1126 ULONG VendorSpecificCommandCDW13;
1127 UCHAR Reserved1[466];
1128 USHORT LogPageVersionNumber;
1129 GUID LogPageGUID;
1130} NVME_WCS_DEVICE_ERROR_RECOVERY_LOG, *PNVME_WCS_DEVICE_ERROR_RECOVERY_LOG;
1131
1132C_ASSERT(sizeof(NVME_WCS_DEVICE_ERROR_RECOVERY_LOG) == 512);
1133
1134#pragma pack(pop)
1135
1136typedef union {
1137 __C89_NAMELESS struct {
1138 ULONG QID : 16;
1139 ULONG QSIZE : 16;
1140 };
1141 ULONG AsUlong;
1142} NVME_CDW10_CREATE_IO_QUEUE, *PNVME_CDW10_CREATE_IO_QUEUE;
1143
1144typedef union {
1145 __C89_NAMELESS struct {
1146 ULONG PC : 1;
1147 ULONG IEN : 1;
1148 ULONG Reserved0 : 14;
1149 ULONG IV : 16;
1150 };
1151 ULONG AsUlong;
1152} NVME_CDW11_CREATE_IO_CQ, *PNVME_CDW11_CREATE_IO_CQ;
1153
1154typedef enum {
1155 NVME_NVM_QUEUE_PRIORITY_URGENT = 0,
1156 NVME_NVM_QUEUE_PRIORITY_HIGH = 1,
1157 NVME_NVM_QUEUE_PRIORITY_MEDIUM = 2,
1158 NVME_NVM_QUEUE_PRIORITY_LOW = 3
1159} NVME_NVM_QUEUE_PRIORITIES;
1160
1161typedef union {
1162 __C89_NAMELESS struct {
1163 ULONG PC : 1;
1164 ULONG QPRIO : 2;
1165 ULONG Reserved0 : 13;
1166 ULONG CQID : 16;
1167 };
1168 ULONG AsUlong;
1169} NVME_CDW11_CREATE_IO_SQ, *PNVME_CDW11_CREATE_IO_SQ;
1170
1171typedef enum {
1172 NVME_FEATURE_VALUE_CURRENT = 0,
1173 NVME_FEATURE_VALUE_DEFAULT = 1,
1174 NVME_FEATURE_VALUE_SAVED = 2,
1175 NVME_FEATURE_VALUE_SUPPORTED_CAPABILITIES = 3
1176} NVME_FEATURE_VALUE_CODES;
1177
1178typedef union {
1179 __C89_NAMELESS struct {
1180 ULONG FID : 8;
1181 ULONG SEL : 3;
1182 ULONG Reserved0 : 21;
1183 };
1184 ULONG AsUlong;
1185} NVME_CDW10_GET_FEATURES, *PNVME_CDW10_GET_FEATURES;
1186
1187typedef union {
1188 __C89_NAMELESS struct {
1189 ULONG FID : 8;
1190 ULONG Reserved0 : 23;
1191 ULONG SV : 1;
1192 };
1193 ULONG AsUlong;
1194} NVME_CDW10_SET_FEATURES, *PNVME_CDW10_SET_FEATURES;
1195
1196typedef union {
1197 __C89_NAMELESS struct {
1198 ULONG NSQ : 16;
1199 ULONG NCQ : 16;
1200 };
1201 ULONG AsUlong;
1202} NVME_CDW11_FEATURE_NUMBER_OF_QUEUES, *PNVME_CDW11_FEATURE_NUMBER_OF_QUEUES;
1203
1204typedef union {
1205 __C89_NAMELESS struct {
1206 ULONG THR : 8;
1207 ULONG TIME : 8;
1208 ULONG Reserved0 : 16;
1209 };
1210 ULONG AsUlong;
1211} NVME_CDW11_FEATURE_INTERRUPT_COALESCING, *PNVME_CDW11_FEATURE_INTERRUPT_COALESCING;
1212
1213typedef union {
1214 __C89_NAMELESS struct {
1215 ULONG IV : 16;
1216 ULONG CD : 1;
1217 ULONG Reserved0 : 15;
1218 };
1219 ULONG AsUlong;
1220} NVME_CDW11_FEATURE_INTERRUPT_VECTOR_CONFIG, *PNVME_CDW11_FEATURE_INTERRUPT_VECTOR_CONFIG;
1221
1222typedef union {
1223 __C89_NAMELESS struct {
1224 ULONG DN : 1;
1225 ULONG Reserved0 : 31;
1226 };
1227 ULONG AsUlong;
1228} NVME_CDW11_FEATURE_WRITE_ATOMICITY_NORMAL, *PNVME_CDW11_FEATURE_WRITE_ATOMICITY_NORMAL;
1229
1230typedef union {
1231 __C89_NAMELESS struct {
1232 ULONG NOPPME : 1;
1233 ULONG Reserved0 : 31;
1234 };
1235 ULONG AsUlong;
1236} NVME_CDW11_FEATURE_NON_OPERATIONAL_POWER_STATE, *PNVME_CDW11_FEATURE_NON_OPERATIONAL_POWER_STATE;
1237
1238typedef union {
1239 __C89_NAMELESS struct {
1240 ULONG NUM : 6;
1241 ULONG Reserved0 : 26;
1242 };
1243 ULONG AsUlong;
1244} NVME_CDW11_FEATURE_LBA_RANGE_TYPE, *PNVME_CDW11_FEATURE_LBA_RANGE_TYPE;
1245
1246typedef union {
1247 __C89_NAMELESS struct {
1248 ULONG AB : 3;
1249 ULONG Reserved0 : 5;
1250 ULONG LPW : 8;
1251 ULONG MPW : 8;
1252 ULONG HPW : 8;
1253 };
1254 ULONG AsUlong;
1255} NVME_CDW11_FEATURE_ARBITRATION, *PNVME_CDW11_FEATURE_ARBITRATION;
1256
1257typedef union {
1258 __C89_NAMELESS struct {
1259 ULONG WCE : 1;
1260 ULONG Reserved0 : 31;
1261 };
1262 ULONG AsUlong;
1263} NVME_CDW11_FEATURE_VOLATILE_WRITE_CACHE, *PNVME_CDW11_FEATURE_VOLATILE_WRITE_CACHE;
1264
1265typedef union {
1266 __C89_NAMELESS struct {
1267 ULONG SAVE : 1;
1268 ULONG NSS : 1;
1269 ULONG MOD : 1;
1270 ULONG Reserved0 : 29;
1271 };
1272 ULONG AsUlong;
1273} NVME_CDW11_FEATURE_SUPPORTED_CAPABILITY, *PNVME_CDW11_FEATURE_SUPPORTED_CAPABILITY;
1274
1275typedef union {
1276 __C89_NAMELESS struct {
1277 ULONG CriticalWarnings : 8;
1278 ULONG NsAttributeNotices : 1;
1279 ULONG FwActivationNotices : 1;
1280 ULONG TelemetryLogNotices : 1;
1281 ULONG ANAChangeNotices : 1;
1282 ULONG PredictableLogChangeNotices : 1;
1283 ULONG LBAStatusNotices : 1;
1284 ULONG EnduranceEventNotices : 1;
1285 ULONG Reserved0 : 12;
1286 ULONG ZoneDescriptorNotices : 1;
1287 ULONG Reserved1 : 4;
1288 };
1289 ULONG AsUlong;
1290} NVME_CDW11_FEATURE_ASYNC_EVENT_CONFIG, *PNVME_CDW11_FEATURE_ASYNC_EVENT_CONFIG;
1291
1292typedef union {
1293 __C89_NAMELESS struct {
1294 ULONG PS : 5;
1295 ULONG Reserved0 : 27;
1296 };
1297 ULONG AsUlong;
1298} NVME_CDW11_FEATURE_POWER_MANAGEMENT, *PNVME_CDW11_FEATURE_POWER_MANAGEMENT;
1299
1300typedef union {
1301 __C89_NAMELESS struct {
1302 ULONG APSTE : 1;
1303 ULONG Reserved0 : 31;
1304 };
1305 ULONG AsUlong;
1306} NVME_CDW11_FEATURE_AUTO_POWER_STATE_TRANSITION, *PNVME_CDW11_FEATURE_AUTO_POWER_STATE_TRANSITION;
1307
1308typedef struct {
1309 ULONG Reserved0 : 3;
1310 ULONG IdleTransitionPowerState : 5;
1311 ULONG IdleTimePriorToTransition : 24;
1312 ULONG Reserved1;
1313} NVME_AUTO_POWER_STATE_TRANSITION_ENTRY, *PNVME_AUTO_POWER_STATE_TRANSITION_ENTRY;
1314
1315typedef enum {
1316 NVME_TEMPERATURE_OVER_THRESHOLD = 0,
1317 NVME_TEMPERATURE_UNDER_THRESHOLD = 1
1318} NVME_TEMPERATURE_THRESHOLD_TYPES;
1319
1320typedef union {
1321 __C89_NAMELESS struct {
1322 ULONG TMPTH : 16;
1323 ULONG TMPSEL : 4;
1324 ULONG THSEL : 2;
1325 ULONG Reserved0 : 10;
1326 };
1327 ULONG AsUlong;
1328} NVME_CDW11_FEATURE_TEMPERATURE_THRESHOLD, *PNVME_CDW11_FEATURE_TEMPERATURE_THRESHOLD;
1329
1330typedef union {
1331 __C89_NAMELESS struct {
1332 ULONG TLER : 16;
1333 ULONG DULBE : 1;
1334 ULONG Reserved0 : 15;
1335 };
1336 ULONG AsUlong;
1337} NVME_CDW11_FEATURE_ERROR_RECOVERY, *PNVME_CDW11_FEATURE_ERROR_RECOVERY;
1338
1339typedef union {
1340 __C89_NAMELESS struct {
1341 ULONG EHM : 1;
1342 ULONG MR : 1;
1343 ULONG Reserved : 30;
1344 };
1345 ULONG AsUlong;
1346} NVME_CDW11_FEATURE_HOST_MEMORY_BUFFER, *PNVME_CDW11_FEATURE_HOST_MEMORY_BUFFER;
1347
1348typedef union {
1349 __C89_NAMELESS struct {
1350 ULONG HSIZE;
1351 };
1352 ULONG AsUlong;
1353} NVME_CDW12_FEATURE_HOST_MEMORY_BUFFER, *PNVME_CDW12_FEATURE_HOST_MEMORY_BUFFER;
1354
1355typedef union {
1356 __C89_NAMELESS struct {
1357 ULONG Reserved : 4;
1358 ULONG HMDLLA : 28;
1359 };
1360 ULONG AsUlong;
1361} NVME_CDW13_FEATURE_HOST_MEMORY_BUFFER, *PNVME_CDW13_FEATURE_HOST_MEMORY_BUFFER;
1362
1363typedef union {
1364 __C89_NAMELESS struct {
1365 ULONG HMDLUA;
1366 };
1367 ULONG AsUlong;
1368} NVME_CDW14_FEATURE_HOST_MEMORY_BUFFER, *PNVME_CDW14_FEATURE_HOST_MEMORY_BUFFER;
1369
1370typedef union {
1371 __C89_NAMELESS struct {
1372 ULONG HMDLEC;
1373 };
1374 ULONG AsUlong;
1375} NVME_CDW15_FEATURE_HOST_MEMORY_BUFFER, *PNVME_CDW15_FEATURE_HOST_MEMORY_BUFFER;
1376
1377typedef struct {
1378 ULONGLONG BADD;
1379 ULONG BSIZE;
1380 ULONG Reserved;
1381} NVME_HOST_MEMORY_BUFFER_DESCRIPTOR_ENTRY, *PNVME_HOST_MEMORY_BUFFER_DESCRIPTOR_ENTRY;
1382
1383typedef union {
1384 __C89_NAMELESS struct {
1385 ULONG IOCSCI : 8;
1386 ULONG Reserved : 24;
1387 };
1388 ULONG AsUlong;
1389} NVME_CDW11_FEATURE_IO_COMMAND_SET_PROFILE, *PNVME_CDW11_FEATURE_IO_COMMAND_SET_PROFILE;
1390
1391typedef union {
1392 __C89_NAMELESS struct {
1393 ULONG GDHM : 1;
1394 ULONG Reserved : 31;
1395 };
1396 ULONG AsUlong;
1397} NVME_CDW11_FEATURE_GET_HOST_METADATA, *PNVME_CDW11_FEATURE_GET_HOST_METADATA;
1398
1399typedef enum {
1400 NVME_HOST_METADATA_ADD_REPLACE_ENTRY = 0,
1401 NVME_HOST_METADATA_DELETE_ENTRY_MULTIPLE = 1,
1402 NVME_HOST_METADATA_ADD_ENTRY_MULTIPLE = 2
1403} NVME_HOST_METADATA_ELEMENT_ACTIONS;
1404
1405typedef union {
1406 __C89_NAMELESS struct {
1407 ULONG Reserved0 : 13;
1408 ULONG EA : 2;
1409 ULONG Reserved1 : 17;
1410 };
1411 ULONG AsUlong;
1412} NVME_CDW11_FEATURE_SET_HOST_METADATA, *PNVME_CDW11_FEATURE_SET_HOST_METADATA;
1413
1414typedef enum {
1415 NVME_CONTROLLER_METADATA_OPERATING_SYSTEM_CONTROLLER_NAME = 0x1,
1416 NVME_CONTROLLER_METADATA_OPERATING_SYSTEM_DRIVER_NAME = 0x2,
1417 NVME_CONTROLLER_METADATA_OPERATING_SYSTEM_DRIVER_VERSION = 0x3,
1418 NVME_CONTROLLER_METADATA_PREBOOT_CONTROLLER_NAME = 0x4,
1419 NVME_CONTROLLER_METADATA_PREBOOT_DRIVER_NAME = 0x5,
1420 NVME_CONTROLLER_METADATA_PREBOOT_DRIVER_VERSION = 0x6,
1421 NVME_CONTROLLER_METADATA_SYSTEM_PROCESSOR_MODEL = 0x7,
1422 NVME_CONTROLLER_METADATA_CHIPSET_DRIVER_NAME = 0x8,
1423 NVME_CONTROLLER_METADATA_CHIPSET_DRIVER_VERSION = 0x9,
1424 NVME_CONTROLLER_METADATA_OPERATING_SYSTEM_NAME_AND_BUILD = 0xA,
1425 NVME_CONTROLLER_METADATA_SYSTEM_PRODUCT_NAME = 0xB,
1426 NVME_CONTROLLER_METADATA_FIRMWARE_VERSION = 0xC,
1427 NVME_CONTROLLER_METADATA_OPERATING_SYSTEM_DRIVER_FILENAME = 0xD,
1428 NVME_CONTROLLER_METADATA_DISPLAY_DRIVER_NAME = 0xE,
1429 NVME_CONTROLLER_METADATA_DISPLAY_DRIVER_VERSION = 0xF,
1430 NVME_CONTROLLER_METADATA_HOST_DETERMINED_FAILURE_RECORD = 0x10
1431} NVME_CONTROLLER_METADATA_ELEMENT_TYPES;
1432
1433typedef enum {
1434 NVME_NAMESPACE_METADATA_OPERATING_SYSTEM_NAMESPACE_NAME = 0x1,
1435 NVME_NAMESPACE_METADATA_PREBOOT_NAMESPACE_NAME = 0x2,
1436 NVME_NAMESPACE_METADATA_OPERATING_SYSTEM_NAMESPACE_NAME_QUALIFIER_1 = 0x3,
1437 NVME_NAMESPACE_METADATA_OPERATING_SYSTEM_NAMESPACE_NAME_QUALIFIER_2 = 0x4
1438} NVME_NAMESPACE_METADATA_ELEMENT_TYPES;
1439
1440typedef struct {
1441 ULONG ET : 6;
1442 ULONG Reserved0 : 2;
1443 ULONG ER : 4;
1444 ULONG Reserved1 : 4;
1445 ULONG ELEN : 16;
1446 UCHAR EVAL[ANYSIZE_ARRAY];
1447} NVME_HOST_METADATA_ELEMENT_DESCRIPTOR, *PNVME_HOST_METADATA_ELEMENT_DESCRIPTOR;
1448
1449typedef struct {
1450 UCHAR NumberOfMetadataElementDescriptors;
1451 UCHAR Reserved0;
1452 UCHAR MetadataElementDescriptors[4094];
1453} NVME_FEATURE_HOST_METADATA_DATA, *PNVME_FEATURE_HOST_METADATA_DATA;
1454
1455typedef union {
1456 __C89_NAMELESS struct {
1457 ULONG NUM : 7;
1458 ULONG Reserved0 : 25;
1459 };
1460 ULONG AsUlong;
1461} NVME_CDW11_FEATURE_ERROR_INJECTION, *PNVME_CDW11_FEATURE_ERROR_INJECTION;
1462
1463typedef NVME_CDW11_FEATURE_ERROR_INJECTION NVME_CDW0_FEATURE_ERROR_INJECTION, *PNVME_CDW0_FEATURE_ERROR_INJECTION;
1464
1465typedef struct {
1466 union {
1467 __C89_NAMELESS struct {
1468 UCHAR Enable : 1;
1469 UCHAR SingleInstance : 1;
1470 UCHAR Reserved0 : 6;
1471 };
1472 UCHAR AsUchar;
1473 } Flags;
1474 UCHAR Reserved1;
1475 USHORT ErrorInjectionType;
1476 UCHAR ErrorInjectionTypeSpecific[28];
1477} NVME_ERROR_INJECTION_ENTRY, *PNVME_ERROR_INJECTION_ENTRY;
1478
1479typedef enum {
1480 NVME_ERROR_INJECTION_TYPE_RESERVED0 = 0,
1481 NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_CPU_CONTROLLER_HANG,
1482 NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_NAND_HANG,
1483 NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_PLP_DEFECT,
1484 NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_LOGICAL_FW_ERROR,
1485 NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_DRAM_CORRUPTION_CRITICAL,
1486 NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_DRAM_CORRUPTION_NONCRITICAL,
1487 NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_NAND_CORRUPTION,
1488 NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_SRAM_CORRUPTION,
1489 NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_HW_MALFUNCTION,
1490 NVME_ERROR_INJECTION_TYPE_RESERVED1,
1491 NVME_ERROR_INJECTION_TYPE_MAX = 0xFFFF
1492} NVME_ERROR_INJECTION_TYPES;
1493
1494typedef union {
1495 __C89_NAMELESS struct {
1496 ULONG Reserved0 : 31;
1497 ULONG Clear : 1;
1498 };
1499 ULONG AsUlong;
1500} NVME_CDW11_FEATURE_CLEAR_FW_UPDATE_HISTORY, *PNVME_CDW11_FEATURE_CLEAR_FW_UPDATE_HISTORY;
1501
1502typedef union {
1503 __C89_NAMELESS struct {
1504 ULONG Reserved0 : 30;
1505 ULONG EOLBehavior : 2;
1506 };
1507 ULONG AsUlong;
1508} NVME_CDW11_FEATURE_READONLY_WRITETHROUGH_MODE, *PNVME_CDW11_FEATURE_READONLY_WRITETHROUGH_MODE;
1509
1510typedef union {
1511 __C89_NAMELESS struct {
1512 ULONG EOLBehavior : 3;
1513 ULONG Reserved0 : 29;
1514 };
1515 ULONG AsUlong;
1516} NVME_CDW0_FEATURE_READONLY_WRITETHROUGH_MODE, *PNVME_CDW0_FEATURE_READONLY_WRITETHROUGH_MODE;
1517
1518typedef union {
1519 __C89_NAMELESS struct {
1520 ULONG Reserved0 : 31;
1521 ULONG Clear : 1;
1522 };
1523 ULONG AsUlong;
1524} NVME_CDW11_FEATURE_CLEAR_PCIE_CORRECTABLE_ERROR_COUNTERS, *PNVME_CDW11_FEATURE_CLEAR_PCIE_CORRECTABLE_ERROR_COUNTERS;
1525
1526typedef union {
1527 __C89_NAMELESS struct {
1528 ULONG Reserved0 : 31;
1529 ULONG Enable : 1;
1530 };
1531 ULONG AsUlong;
1532} NVME_CDW11_FEATURE_ENABLE_IEEE1667_SILO, *PNVME_CDW11_FEATURE_ENABLE_IEEE1667_SILO;
1533
1534typedef union {
1535 __C89_NAMELESS struct {
1536 ULONG Enabled : 3;
1537 ULONG Reserved0 : 29;
1538 };
1539 ULONG AsUlong;
1540} NVME_CDW0_FEATURE_ENABLE_IEEE1667_SILO, *PNVME_CDW0_FEATURE_ENABLE_IEEE1667_SILO;
1541
1542#define NVME_MAX_HOST_IDENTIFIER_SIZE 16
1543#define NVME_HOST_IDENTIFIER_SIZE 8
1544#define NVME_EXTENDED_HOST_IDENTIFIER_SIZE 16
1545
1546typedef struct {
1547 ULONG EXHID : 1;
1548 ULONG Reserved : 31;
1549} NVME_CDW11_FEATURE_HOST_IDENTIFIER, *PNVME_CDW11_FEATURE_HOST_IDENTIFIER;
1550
1551typedef struct {
1552 UCHAR HOSTID[NVME_MAX_HOST_IDENTIFIER_SIZE];
1553} NVME_FEATURE_HOST_IDENTIFIER_DATA, *PNVME_FEATURE_HOST_IDENTIFIER_DATA;
1554
1555typedef struct {
1556 ULONG PTPL : 1;
1557 ULONG Reserved : 31;
1558} NVME_CDW11_FEATURE_RESERVATION_PERSISTENCE, *PNVME_CDW11_FEATURE_RESERVATION_PERSISTENCE;
1559
1560typedef struct {
1561 ULONG Reserved : 1;
1562 ULONG REGPRE : 1;
1563 ULONG RESREL : 1;
1564 ULONG RESPRE : 1;
1565 ULONG Reserved1 : 28;
1566} NVME_CDW11_FEATURE_RESERVATION_NOTIFICATION_MASK, *PNVME_CDW11_FEATURE_RESERVATION_NOTIFICATION_MASK;
1567
1568typedef union {
1569 NVME_CDW11_FEATURE_NUMBER_OF_QUEUES NumberOfQueues;
1570 NVME_CDW11_FEATURE_INTERRUPT_COALESCING InterruptCoalescing;
1571 NVME_CDW11_FEATURE_INTERRUPT_VECTOR_CONFIG InterruptVectorConfig;
1572 NVME_CDW11_FEATURE_LBA_RANGE_TYPE LbaRangeType;
1573 NVME_CDW11_FEATURE_ARBITRATION Arbitration;
1574 NVME_CDW11_FEATURE_VOLATILE_WRITE_CACHE VolatileWriteCache;
1575 NVME_CDW11_FEATURE_ASYNC_EVENT_CONFIG AsyncEventConfig;
1576 NVME_CDW11_FEATURE_POWER_MANAGEMENT PowerManagement;
1577 NVME_CDW11_FEATURE_AUTO_POWER_STATE_TRANSITION AutoPowerStateTransition;
1578 NVME_CDW11_FEATURE_TEMPERATURE_THRESHOLD TemperatureThreshold;
1579 NVME_CDW11_FEATURE_ERROR_RECOVERY ErrorRecovery;
1580 NVME_CDW11_FEATURE_HOST_MEMORY_BUFFER HostMemoryBuffer;
1581 NVME_CDW11_FEATURE_WRITE_ATOMICITY_NORMAL WriteAtomicityNormal;
1582 NVME_CDW11_FEATURE_NON_OPERATIONAL_POWER_STATE NonOperationalPowerState;
1583 NVME_CDW11_FEATURE_IO_COMMAND_SET_PROFILE IoCommandSetProfile;
1584 NVME_CDW11_FEATURE_ERROR_INJECTION ErrorInjection;
1585 NVME_CDW11_FEATURE_HOST_IDENTIFIER HostIdentifier;
1586 NVME_CDW11_FEATURE_RESERVATION_PERSISTENCE ReservationPersistence;
1587 NVME_CDW11_FEATURE_RESERVATION_NOTIFICATION_MASK ReservationNotificationMask;
1588 NVME_CDW11_FEATURE_GET_HOST_METADATA GetHostMetadata;
1589 NVME_CDW11_FEATURE_SET_HOST_METADATA SetHostMetadata;
1590 ULONG AsUlong;
1591} NVME_CDW11_FEATURES, *PNVME_CDW11_FEATURES;
1592
1593typedef union {
1594 NVME_CDW12_FEATURE_HOST_MEMORY_BUFFER HostMemoryBuffer;
1595 ULONG AsUlong;
1596} NVME_CDW12_FEATURES, *PNVME_CDW12_FEATURES;
1597
1598typedef union {
1599 NVME_CDW13_FEATURE_HOST_MEMORY_BUFFER HostMemoryBuffer;
1600 ULONG AsUlong;
1601} NVME_CDW13_FEATURES, *PNVME_CDW13_FEATURES;
1602
1603typedef union {
1604 NVME_CDW14_FEATURE_HOST_MEMORY_BUFFER HostMemoryBuffer;
1605 ULONG AsUlong;
1606} NVME_CDW14_FEATURES, *PNVME_CDW14_FEATURES;
1607
1608typedef union {
1609 NVME_CDW15_FEATURE_HOST_MEMORY_BUFFER HostMemoryBuffer;
1610 ULONG AsUlong;
1611} NVME_CDW15_FEATURES, *PNVME_CDW15_FEATURES;
1612
1613#define NVME_MAX_LOG_SIZE 0x1000
1614
1615typedef enum {
1616 NVME_LOG_PAGE_ERROR_INFO = 0x01,
1617 NVME_LOG_PAGE_HEALTH_INFO = 0x02,
1618 NVME_LOG_PAGE_FIRMWARE_SLOT_INFO = 0x03,
1619 NVME_LOG_PAGE_CHANGED_NAMESPACE_LIST = 0x04,
1620 NVME_LOG_PAGE_COMMAND_EFFECTS = 0x05,
1621 NVME_LOG_PAGE_DEVICE_SELF_TEST = 0x06,
1622 NVME_LOG_PAGE_TELEMETRY_HOST_INITIATED = 0x07,
1623 NVME_LOG_PAGE_TELEMETRY_CTLR_INITIATED = 0x08,
1624 NVME_LOG_PAGE_ENDURANCE_GROUP_INFORMATION = 0x09,
1625 NVME_LOG_PAGE_PREDICTABLE_LATENCY_NVM_SET = 0x0A,
1626 NVME_LOG_PAGE_PREDICTABLE_LATENCY_EVENT_AGGREGATE = 0x0B,
1627 NVME_LOG_PAGE_ASYMMETRIC_NAMESPACE_ACCESS = 0x0C,
1628 NVME_LOG_PAGE_PERSISTENT_EVENT_LOG = 0x0D,
1629 NVME_LOG_PAGE_LBA_STATUS_INFORMATION = 0x0E,
1630 NVME_LOG_PAGE_ENDURANCE_GROUP_EVENT_AGGREGATE = 0x0F,
1631 NVME_LOG_PAGE_RESERVATION_NOTIFICATION = 0x80,
1632 NVME_LOG_PAGE_SANITIZE_STATUS = 0x81,
1633 NVME_LOG_PAGE_CHANGED_ZONE_LIST = 0xBF
1634} NVME_LOG_PAGES;
1635
1636typedef union {
1637 __C89_NAMELESS struct {
1638 ULONG LID : 8;
1639 ULONG Reserved0 : 8;
1640 ULONG NUMD : 12;
1641 ULONG Reserved1 : 4;
1642 };
1643 ULONG AsUlong;
1644} NVME_CDW10_GET_LOG_PAGE, *PNVME_CDW10_GET_LOG_PAGE;
1645
1646typedef union {
1647 __C89_NAMELESS struct {
1648 ULONG LID : 8;
1649 ULONG LSP : 4;
1650 ULONG Reserved0 : 3;
1651 ULONG RAE : 1;
1652 ULONG NUMDL : 16;
1653 };
1654 ULONG AsUlong;
1655} NVME_CDW10_GET_LOG_PAGE_V13, *PNVME_CDW10_GET_LOG_PAGE_V13;
1656
1657typedef union {
1658 __C89_NAMELESS struct {
1659 ULONG NUMDU : 16;
1660 ULONG LogSpecificIdentifier : 16;
1661 };
1662 ULONG AsUlong;
1663} NVME_CDW11_GET_LOG_PAGE, *PNVME_CDW11_GET_LOG_PAGE;
1664
1665typedef struct {
1666 ULONG LPOL;
1667} NVME_CDW12_GET_LOG_PAGE, *PNVME_CDW12_GET_LOG_PAGE;
1668
1669typedef struct {
1670 ULONG LPOU;
1671} NVME_CDW13_GET_LOG_PAGE, *PNVME_CDW13_GET_LOG_PAGE;
1672
1673typedef union {
1674 __C89_NAMELESS struct {
1675 ULONG UUIDIndex : 7;
1676 ULONG Reserved : 17;
1677 ULONG CommandSetIdentifier : 8;
1678 };
1679 ULONG AsUlong;
1680} NVME_CDW14_GET_LOG_PAGE, *PNVME_CDW14_GET_LOG_PAGE;
1681
1682typedef struct {
1683 ULONGLONG ErrorCount;
1684 USHORT SQID;
1685 USHORT CMDID;
1686 NVME_COMMAND_STATUS Status;
1687 struct {
1688 USHORT Byte : 8;
1689 USHORT Bit : 3;
1690 USHORT Reserved : 5;
1691 } ParameterErrorLocation;
1692 ULONGLONG Lba;
1693 ULONG NameSpace;
1694 UCHAR VendorInfoAvailable;
1695 UCHAR Reserved0[3];
1696 ULONGLONG CommandSpecificInfo;
1697 UCHAR Reserved1[24];
1698} NVME_ERROR_INFO_LOG, *PNVME_ERROR_INFO_LOG;
1699
1700typedef struct {
1701 union {
1702 __C89_NAMELESS struct {
1703 UCHAR AvailableSpaceLow : 1;
1704 UCHAR TemperatureThreshold : 1;
1705 UCHAR ReliabilityDegraded : 1;
1706 UCHAR ReadOnly : 1;
1707 UCHAR VolatileMemoryBackupDeviceFailed : 1;
1708 UCHAR Reserved : 3;
1709 };
1710 UCHAR AsUchar;
1711 } CriticalWarning;
1712 UCHAR Temperature[2];
1713 UCHAR AvailableSpare;
1714 UCHAR AvailableSpareThreshold;
1715 UCHAR PercentageUsed;
1716 UCHAR Reserved0[26];
1717 UCHAR DataUnitRead[16];
1718 UCHAR DataUnitWritten[16];
1719 UCHAR HostReadCommands[16];
1720 UCHAR HostWrittenCommands[16];
1721 UCHAR ControllerBusyTime[16];
1722 UCHAR PowerCycle[16];
1723 UCHAR PowerOnHours[16];
1724 UCHAR UnsafeShutdowns[16];
1725 UCHAR MediaErrors[16];
1726 UCHAR ErrorInfoLogEntryCount[16];
1727 ULONG WarningCompositeTemperatureTime;
1728 ULONG CriticalCompositeTemperatureTime;
1729 USHORT TemperatureSensor1;
1730 USHORT TemperatureSensor2;
1731 USHORT TemperatureSensor3;
1732 USHORT TemperatureSensor4;
1733 USHORT TemperatureSensor5;
1734 USHORT TemperatureSensor6;
1735 USHORT TemperatureSensor7;
1736 USHORT TemperatureSensor8;
1737 UCHAR Reserved1[296];
1738} NVME_HEALTH_INFO_LOG, *PNVME_HEALTH_INFO_LOG;
1739
1740#define NVME_TELEMETRY_DATA_BLOCK_SIZE 0x200
1741
1742typedef struct _NVME_TELEMETRY_HOST_INITIATED_LOG {
1743 UCHAR LogIdentifier;
1744 UCHAR Reserved0[4];
1745 UCHAR OrganizationID[3];
1746 USHORT Area1LastBlock;
1747 USHORT Area2LastBlock;
1748 USHORT Area3LastBlock;
1749 UCHAR Reserved1[2];
1750 ULONG Area4LastBlock;
1751 UCHAR Reserved2[361];
1752 UCHAR HostInitiatedDataGenerationNumber;
1753 UCHAR ControllerInitiatedDataAvailable;
1754 UCHAR ControllerInitiatedDataGenerationNumber;
1755 UCHAR ReasonIdentifier[128];
1756} NVME_TELEMETRY_HOST_INITIATED_LOG, *PNVME_TELEMETRY_HOST_INITIATED_LOG;
1757
1758typedef struct _NVME_TELEMETRY_CONTROLLER_INITIATED_LOG {
1759 UCHAR LogIdentifier;
1760 UCHAR Reserved0[4];
1761 UCHAR OrganizationID[3];
1762 USHORT Area1LastBlock;
1763 USHORT Area2LastBlock;
1764 USHORT Area3LastBlock;
1765 UCHAR Reserved1[2];
1766 ULONG Area4LastBlock;
1767 UCHAR Reserved2[362];
1768 UCHAR ControllerInitiatedDataAvailable;
1769 UCHAR ControllerInitiatedDataGenerationNumber;
1770 UCHAR ReasonIdentifier[128];
1771} NVME_TELEMETRY_CONTROLLER_INITIATED_LOG, *PNVME_TELEMETRY_CONTROLLER_INITIATED_LOG;
1772
1773typedef struct {
1774 struct {
1775 UCHAR ActiveSlot : 3;
1776 UCHAR Reserved0 : 1;
1777 UCHAR PendingActivateSlot : 3;
1778 UCHAR Reserved1 : 1;
1779 } AFI;
1780 UCHAR Reserved0[7];
1781 ULONGLONG FRS[7];
1782 UCHAR Reserved1[448];
1783} NVME_FIRMWARE_SLOT_INFO_LOG, *PNVME_FIRMWARE_SLOT_INFO_LOG;
1784
1785typedef struct {
1786 ULONG NSID[1024];
1787} NVME_CHANGED_NAMESPACE_LIST_LOG, *PNVME_CHANGED_NAMESPACE_LIST_LOG;
1788
1789typedef struct {
1790 USHORT ZoneIdentifiersCount;
1791 UCHAR Reserved[6];
1792 ULONGLONG ZoneIdentifier[511];
1793} NVME_CHANGED_ZONE_LIST_LOG, *PNVME_CHANGED_ZONE_LIST_LOG;
1794
1795typedef enum {
1796 NVME_COMMAND_EFFECT_SBUMISSION_EXECUTION_LIMIT_NONE = 0,
1797 NVME_COMMAND_EFFECT_SBUMISSION_EXECUTION_LIMIT_SINGLE_PER_NAMESPACE = 1,
1798 NVME_COMMAND_EFFECT_SBUMISSION_EXECUTION_LIMIT_SINGLE_PER_CONTROLLER = 2
1799} NVME_COMMAND_EFFECT_SBUMISSION_EXECUTION_LIMITS;
1800
1801typedef union {
1802 __C89_NAMELESS struct {
1803 ULONG CSUPP : 1;
1804 ULONG LBCC : 1;
1805 ULONG NCC : 1;
1806 ULONG NIC : 1;
1807 ULONG CCC : 1;
1808 ULONG Reserved0 : 11;
1809 ULONG CSE : 3;
1810 ULONG Reserved1 : 13;
1811 };
1812 ULONG AsUlong;
1813} NVME_COMMAND_EFFECTS_DATA, *PNVME_COMMAND_EFFECTS_DATA;
1814
1815typedef struct {
1816 NVME_COMMAND_EFFECTS_DATA ACS[256];
1817 NVME_COMMAND_EFFECTS_DATA IOCS[256];
1818 UCHAR Reserved[2048];
1819} NVME_COMMAND_EFFECTS_LOG, *PNVME_COMMAND_EFFECTS_LOG;
1820
1821#pragma pack(push, 1)
1822typedef struct {
1823 struct {
1824 UCHAR Result : 4;
1825 UCHAR CodeValue : 4;
1826 } Status;
1827 UCHAR SegmentNumber;
1828 struct {
1829 UCHAR NSIDValid : 1;
1830 UCHAR FLBAValid : 1;
1831 UCHAR SCTValid : 1;
1832 UCHAR SCValid : 1;
1833 UCHAR Reserved : 4;
1834 } ValidDiagnostics;
1835 UCHAR Reserved;
1836 ULONGLONG POH;
1837 ULONG NSID;
1838 ULONGLONG FailingLBA;
1839 struct {
1840 UCHAR AdditionalInfo : 3;
1841 UCHAR Reserved : 5;
1842 } StatusCodeType;
1843 UCHAR StatusCode;
1844 USHORT VendorSpecific;
1845} NVME_DEVICE_SELF_TEST_RESULT_DATA, *PNVME_DEVICE_SELF_TEST_RESULT_DATA;
1846
1847typedef struct {
1848 struct {
1849 UCHAR Status : 4;
1850 UCHAR Reserved : 4;
1851 } CurrentOperation;
1852 struct {
1853 UCHAR CompletePercent : 7;
1854 UCHAR Reserved : 1;
1855 } CurrentCompletion;
1856 UCHAR Reserved[2];
1857 NVME_DEVICE_SELF_TEST_RESULT_DATA ResultData[20];
1858} NVME_DEVICE_SELF_TEST_LOG, *PNVME_DEVICE_SELF_TEST_LOG;
1859
1860typedef struct {
1861 ULONG Reserved0;
1862 UCHAR AvailableSpareThreshold;
1863 UCHAR PercentageUsed;
1864 UCHAR Reserved1[26];
1865 UCHAR EnduranceEstimate[16];
1866 UCHAR DataUnitsRead[16];
1867 UCHAR DataUnitsWritten[16];
1868 UCHAR MediaUnitsWritten[16];
1869 UCHAR Reserved2[416];
1870} NVME_ENDURANCE_GROUP_LOG, *PNVME_ENDURANCE_GROUP_LOG;
1871
1872typedef struct {
1873 UCHAR LogIdentifier;
1874 UCHAR Reserved0[3];
1875 ULONG TotalNumberOfEvents;
1876 ULONGLONG TotalLogLength;
1877 UCHAR LogRevision;
1878 UCHAR Reserved1;
1879 USHORT LogHeaderLength;
1880 ULONGLONG Timestamp;
1881 UCHAR PowerOnHours[16];
1882 ULONGLONG PowerCycleCount;
1883 USHORT PciVendorId;
1884 USHORT PciSubsystemVendorId;
1885 UCHAR SerialNumber[20];
1886 UCHAR ModelNumber[40];
1887 UCHAR NVMSubsystemNVMeQualifiedName[256];
1888 UCHAR Reserved[108];
1889 UCHAR SupportedEventsBitmap[32];
1890} NVME_PERSISTENT_EVENT_LOG_HEADER, *PNVME_PERSISTENT_EVENT_LOG_HEADER;
1891
1892typedef struct {
1893 UCHAR EventType;
1894 UCHAR EventTypeRevision;
1895 UCHAR EventHeaderLength;
1896 UCHAR Reserved0;
1897 USHORT ControllerIdentifier;
1898 ULONGLONG EventTimestamp;
1899 UCHAR Reserved1[6];
1900 USHORT VendorSpecificInformationLength;
1901 USHORT EventLength;
1902} NVME_PERSISTENT_EVENT_LOG_EVENT_HEADER, *PNVME_PERSISTENT_EVENT_LOG_EVENT_HEADER;
1903
1904typedef enum {
1905 NVME_PERSISTENT_EVENT_TYPE_RESERVED0 = 0x00,
1906 NVME_PERSISTENT_EVENT_TYPE_SMART_HEALTH_LOG_SNAPSHOT = 0x01,
1907 NVME_PERSISTENT_EVENT_TYPE_FIRMWARE_COMMIT = 0x02,
1908 NVME_PERSISTENT_EVENT_TYPE_TIMESTAMP_CHANGE = 0x03,
1909 NVME_PERSISTENT_EVENT_TYPE_POWER_ON_OR_RESET = 0x04,
1910 NVME_PERSISTENT_EVENT_TYPE_NVM_SUBSYSTEM_HARDWARE_ERROR = 0x05,
1911 NVME_PERSISTENT_EVENT_TYPE_CHANGE_NAMESPACE = 0x06,
1912 NVME_PERSISTENT_EVENT_TYPE_FORMAT_NVM_START = 0x07,
1913 NVME_PERSISTENT_EVENT_TYPE_FORMAT_NVM_COMPLETION = 0x08,
1914 NVME_PERSISTENT_EVENT_TYPE_SANITIZE_START = 0x09,
1915 NVME_PERSISTENT_EVENT_TYPE_SANITIZE_COMPLETION = 0x0A,
1916 NVME_PERSISTENT_EVENT_TYPE_SET_FEATURE = 0x0B,
1917 NVME_PERSISTENT_EVENT_TYPE_TELEMETRY_LOG_CREATED = 0x0C,
1918 NVME_PERSISTENT_EVENT_TYPE_THERMAL_EXCURSION = 0x0D,
1919 NVME_PERSISTENT_EVENT_TYPE_RESERVED1_BEGIN = 0x0E,
1920 NVME_PERSISTENT_EVENT_TYPE_RESERVED1_END = 0xDD,
1921 NVME_PERSISTENT_EVENT_TYPE_VENDOR_SPECIFIC_EVENT = 0xDE,
1922 NVME_PERSISTENT_EVENT_TYPE_TCG_DEFINED = 0xDF,
1923 NVME_PERSISTENT_EVENT_TYPE_RESERVED2_BEGIN = 0xE0,
1924 NVME_PERSISTENT_EVENT_TYPE_RESERVED2_END = 0xFF,
1925 NVME_PERSISTENT_EVENT_TYPE_MAX = 0xFF
1926} NVME_PERSISTENT_EVENT_LOG_EVENT_TYPES;
1927
1928#pragma pack(pop)
1929
1930typedef enum {
1931 NVME_RESERVATION_NOTIFICATION_TYPE_EMPTY_LOG_PAGE = 0,
1932 NVME_RESERVATION_NOTIFICATION_TYPE_REGISTRATION_PREEMPTED = 1,
1933 NVME_RESERVATION_NOTIFICATION_TYPE_REGISTRATION_RELEASED = 2,
1934 NVME_RESERVATION_NOTIFICATION_TYPE_RESERVATION_PREEPMPTED = 3
1935} NVME_RESERVATION_NOTIFICATION_TYPES;
1936
1937typedef struct {
1938 ULONGLONG LogPageCount;
1939 UCHAR LogPageType;
1940 UCHAR AvailableLogPageCount;
1941 UCHAR Reserved0[2];
1942 ULONG NameSpaceId;
1943 UCHAR Reserved1[48];
1944} NVME_RESERVATION_NOTIFICATION_LOG, *PNVME_RESERVATION_NOTIFICATION_LOG;
1945
1946typedef enum {
1947 NVME_SANITIZE_OPERATION_NONE = 0,
1948 NVME_SANITIZE_OPERATION_SUCCEEDED = 1,
1949 NVME_SANITIZE_OPERATION_IN_PROGRESS = 2,
1950 NVME_SANITIZE_OPERATION_FAILED = 3,
1951 NVME_SANITIZE_OPERATION_SUCCEEDED_WITH_FORCED_DEALLOCATION = 4
1952} NVME_SANITIZE_OPERATION_STATUS, *PNVME_SANITIZE_OPERATION_STATUS;
1953
1954typedef struct {
1955 USHORT MostRecentSanitizeOperationStatus : 3;
1956 USHORT NumberCompletedPassesOfOverwrite : 4;
1957 USHORT GlobalDataErased : 1;
1958 USHORT Reserved : 8;
1959} NVME_SANITIZE_STATUS, *PNVME_SANITIZE_STATUS;
1960
1961typedef struct {
1962 USHORT SPROG;
1963 NVME_SANITIZE_STATUS SSTAT;
1964 ULONG SCDW10;
1965 ULONG EstimatedTimeForOverwrite;
1966 ULONG EstimatedTimeForBlockErase;
1967 ULONG EstimatedTimeForCryptoErase;
1968 ULONG EstimatedTimeForOverwriteWithNoDeallocateMediaModification;
1969 ULONG EstimatedTimeForBlockEraseWithNoDeallocateMediaModification;
1970 ULONG EstimatedTimeForCryptoEraseWithNoDeallocateMediaModification;
1971 UCHAR Reserved[480];
1972} NVME_SANITIZE_STATUS_LOG, *PNVME_SANITIZE_STATUS_LOG;
1973
1974typedef struct {
1975 ULONG NUMD;
1976} NVME_CDW10_FIRMWARE_DOWNLOAD, *PNVME_CDW10_FIRMWARE_DOWNLOAD;
1977
1978typedef struct {
1979 ULONG OFST;
1980} NVME_CDW11_FIRMWARE_DOWNLOAD, *PNVME_CDW11_FIRMWARE_DOWNLOAD;
1981
1982typedef enum {
1983 NVME_FIRMWARE_ACTIVATE_ACTION_DOWNLOAD_TO_SLOT = 0,
1984 NVME_FIRMWARE_ACTIVATE_ACTION_DOWNLOAD_TO_SLOT_AND_ACTIVATE = 1,
1985 NVME_FIRMWARE_ACTIVATE_ACTION_ACTIVATE = 2,
1986 NVME_FIRMWARE_ACTIVATE_ACTION_DOWNLOAD_TO_SLOT_AND_ACTIVATE_IMMEDIATE = 3
1987} NVME_FIRMWARE_ACTIVATE_ACTIONS;
1988
1989typedef union {
1990 __C89_NAMELESS struct {
1991 ULONG FS : 3;
1992 ULONG AA : 2;
1993 ULONG Reserved : 27;
1994 };
1995 ULONG AsUlong;
1996} NVME_CDW10_FIRMWARE_ACTIVATE, *PNVME_CDW10_FIRMWARE_ACTIVATE;
1997
1998typedef enum {
1999 NVME_PROTECTION_INFORMATION_NOT_ENABLED = 0,
2000 NVME_PROTECTION_INFORMATION_TYPE1 = 1,
2001 NVME_PROTECTION_INFORMATION_TYPE2 = 2,
2002 NVME_PROTECTION_INFORMATION_TYPE3 = 3
2003} NVME_PROTECTION_INFORMATION_TYPES;
2004
2005typedef enum {
2006 NVME_SECURE_ERASE_NONE = 0,
2007 NVME_SECURE_ERASE_USER_DATA = 1,
2008 NVME_SECURE_ERASE_CRYPTOGRAPHIC = 2
2009} NVME_SECURE_ERASE_SETTINGS;
2010
2011typedef union {
2012 __C89_NAMELESS struct {
2013 ULONG LBAF : 4;
2014 ULONG MS : 1;
2015 ULONG PI : 3;
2016 ULONG PIL : 1;
2017 ULONG SES : 3;
2018 ULONG ZF : 2;
2019 ULONG Reserved : 18;
2020 };
2021 ULONG AsUlong;
2022} NVME_CDW10_FORMAT_NVM, *PNVME_CDW10_FORMAT_NVM;
2023
2024typedef enum {
2025 NVME_MEDIA_ADDITIONALLY_MODIFIED_AFTER_SANITIZE_NOT_DEFINED = 0,
2026 NVME_MEDIA_NOT_ADDITIONALLY_MODIFIED_AFTER_SANITIZE = 1,
2027 NVME_MEDIA_ADDITIONALLY_MOFIDIED_AFTER_SANITIZE = 2
2028} NVME_NO_DEALLOCATE_MODIFIES_MEDIA_AFTER_SANITIZE, *PNVME_NO_DEALLOCATE_MODIFIES_MEDIA_AFTER_SANITIZE;
2029
2030typedef enum {
2031 NVME_SANITIZE_ACTION_RESERVED = 0,
2032 NVME_SANITIZE_ACTION_EXIT_FAILURE_MODE = 1,
2033 NVME_SANITIZE_ACTION_START_BLOCK_ERASE_SANITIZE = 2,
2034 NVME_SANITIZE_ACTION_START_OVERWRITE_SANITIZE = 3,
2035 NVME_SANITIZE_ACTION_START_CRYPTO_ERASE_SANITIZE = 4
2036} NVME_SANITIZE_ACTION, *PNVME_SANITIZE_ACTION;
2037
2038typedef union {
2039 __C89_NAMELESS struct {
2040 ULONG SANACT : 3;
2041 ULONG AUSE : 1;
2042 ULONG OWPASS : 4;
2043 ULONG OIPBP : 1;
2044 ULONG NDAS : 1;
2045 ULONG Reserved : 22;
2046 };
2047 ULONG AsUlong;
2048} NVME_CDW10_SANITIZE, *PNVME_CDW10_SANITIZE;
2049
2050typedef union {
2051 __C89_NAMELESS struct {
2052 ULONG OVRPAT;
2053 };
2054 ULONG AsUlong;
2055} NVME_CDW11_SANITIZE;
2056
2057typedef enum {
2058 NVME_RESERVATION_TYPE_RESERVED = 0,
2059 NVME_RESERVATION_TYPE_WRITE_EXCLUSIVE = 1,
2060 NVME_RESERVATION_TYPE_EXCLUSIVE_ACCESS = 2,
2061 NVME_RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS_ONLY = 3,
2062 NVME_RESERVATION_TYPE_EXCLUSIVE_ACCESS_REGISTRANTS_ONLY = 4,
2063 NVME_RESERVATION_TYPE_WRITE_EXCLUSIVE_ALL_REGISTRANTS = 5,
2064 NVME_RESERVATION_TYPE_EXCLUSIVE_ACCESS_ALL_REGISTRANTS = 6
2065} NVME_RESERVATION_TYPES;
2066
2067typedef enum {
2068 NVME_RESERVATION_ACQUIRE_ACTION_ACQUIRE = 0,
2069 NVME_RESERVATION_ACQUIRE_ACTION_PREEMPT = 1,
2070 NVME_RESERVATION_ACQUIRE_ACTION_PREEMPT_AND_ABORT = 2
2071} NVME_RESERVATION_ACQUIRE_ACTIONS;
2072
2073typedef struct {
2074 ULONG PTPL : 1;
2075 ULONG Reserved : 31;
2076} NVME_CDW0_RESERVATION_PERSISTENCE, *PNVME_CDW0_RESERVATION_PERSISTENCE;
2077
2078typedef union {
2079 __C89_NAMELESS struct {
2080 ULONG RACQA : 3;
2081 ULONG IEKEY : 1;
2082 ULONG Reserved : 4;
2083 ULONG RTYPE : 8;
2084 ULONG Reserved1 : 16;
2085 };
2086 ULONG AsUlong;
2087} NVME_CDW10_RESERVATION_ACQUIRE, *PNVME_CDW10_RESERVATION_ACQUIRE;
2088
2089typedef struct {
2090 ULONGLONG CRKEY;
2091 ULONGLONG PRKEY;
2092} NVME_RESERVATION_ACQUIRE_DATA_STRUCTURE, *PNVME_RESERVATION_ACQUIRE_DATA_STRUCTURE;
2093
2094typedef enum {
2095 NVME_RESERVATION_REGISTER_ACTION_REGISTER = 0,
2096 NVME_RESERVATION_REGISTER_ACTION_UNREGISTER = 1,
2097 NVME_RESERVATION_REGISTER_ACTION_REPLACE = 2
2098} NVME_RESERVATION_REGISTER_ACTIONS;
2099
2100typedef enum {
2101 NVME_RESERVATION_REGISTER_PTPL_STATE_NO_CHANGE = 0,
2102 NVME_RESERVATION_REGISTER_PTPL_STATE_RESERVED = 1,
2103 NVME_RESERVATION_REGISTER_PTPL_STATE_SET_TO_0 = 2,
2104 NVME_RESERVATION_REGISTER_PTPL_STATE_SET_TO_1 = 3
2105} NVME_RESERVATION_REGISTER_PTPL_STATE_CHANGES;
2106
2107typedef union {
2108 __C89_NAMELESS struct {
2109 ULONG RREGA : 3;
2110 ULONG IEKEY : 1;
2111 ULONG Reserved : 26;
2112 ULONG CPTPL : 2;
2113 };
2114 ULONG AsUlong;
2115} NVME_CDW10_RESERVATION_REGISTER, *PNVME_CDW10_RESERVATION_REGISTER;
2116
2117typedef struct {
2118 ULONGLONG CRKEY;
2119 ULONGLONG NRKEY;
2120} NVME_RESERVATION_REGISTER_DATA_STRUCTURE, *PNVME_RESERVATION_REGISTER_DATA_STRUCTURE;
2121
2122typedef enum {
2123 NVME_RESERVATION_RELEASE_ACTION_RELEASE = 0,
2124 NVME_RESERVATION_RELEASE_ACTION_CLEAR = 1
2125} NVME_RESERVATION_RELEASE_ACTIONS;
2126
2127typedef union {
2128 struct {
2129 ULONG RRELA : 3;
2130 ULONG IEKEY : 1;
2131 ULONG Reserved : 4;
2132 ULONG RTYPE : 8;
2133 ULONG Reserved1 : 16;
2134 };
2135 ULONG AsUlong;
2136} NVME_CDW10_RESERVATION_RELEASE, *PNVME_CDW10_RESERVATION_RELEASE;
2137
2138typedef struct {
2139 ULONGLONG CRKEY;
2140} NVME_RESERVATION_RELEASE_DATA_STRUCTURE, *PNVME_RESERVATION_RELEASE_DATA_STRUCTURE;
2141
2142typedef union {
2143 __C89_NAMELESS struct {
2144 ULONG NUMD;
2145 };
2146 ULONG AsUlong;
2147} NVME_CDW10_RESERVATION_REPORT, *PNVME_CDW10_RESERVATION_REPORT;
2148
2149typedef union {
2150 __C89_NAMELESS struct {
2151 ULONG EDS : 1;
2152 ULONG Reserved : 31;
2153 };
2154 ULONG AsUlong;
2155} NVME_CDW11_RESERVATION_REPORT, *PNVME_CDW11_RESERVATION_REPORT;
2156
2157#pragma pack(push, 1)
2158typedef struct {
2159 ULONG GEN;
2160 UCHAR RTYPE;
2161 USHORT REGCTL;
2162 UCHAR Reserved[2];
2163 UCHAR PTPLS;
2164 UCHAR Reserved1[14];
2165} NVME_RESERVATION_REPORT_STATUS_HEADER, *PNVME_RESERVATION_REPORT_STATUS_HEADER;
2166#pragma pack(pop)
2167
2168C_ASSERT(sizeof(NVME_RESERVATION_REPORT_STATUS_HEADER) == 24);
2169
2170typedef struct {
2171 USHORT CNTLID;
2172 struct {
2173 UCHAR HoldReservation : 1;
2174 UCHAR Reserved : 7;
2175 } RCSTS;
2176 UCHAR Reserved[5];
2177 UCHAR HOSTID[8];
2178 ULONGLONG RKEY;
2179} NVME_REGISTERED_CONTROLLER_DATA, *PNVME_REGISTERED_CONTROLLER_DATA;
2180
2181C_ASSERT(sizeof(NVME_REGISTERED_CONTROLLER_DATA) == 24);
2182
2183typedef struct {
2184 NVME_RESERVATION_REPORT_STATUS_HEADER Header;
2185 NVME_REGISTERED_CONTROLLER_DATA RegisteredControllersData[ANYSIZE_ARRAY];
2186} NVME_RESERVATION_REPORT_STATUS_DATA_STRUCTURE, *PNVME_RESERVATION_REPORT_STATUS_DATA_STRUCTURE;
2187
2188typedef struct {
2189 USHORT CNTLID;
2190 struct {
2191 UCHAR HoldReservation : 1;
2192 UCHAR Reserved : 7;
2193 } RCSTS;
2194 UCHAR Reserved[5];
2195 ULONGLONG RKEY;
2196 UCHAR HOSTID[16];
2197 UCHAR Reserved1[32];
2198} NVME_REGISTERED_CONTROLLER_EXTENDED_DATA, *PNVME_REGISTERED_CONTROLLER_EXTENDED_DATA;
2199
2200C_ASSERT(sizeof(NVME_REGISTERED_CONTROLLER_EXTENDED_DATA) == 64);
2201
2202typedef struct {
2203 NVME_RESERVATION_REPORT_STATUS_HEADER Header;
2204 UCHAR Reserved1[40];
2205 NVME_REGISTERED_CONTROLLER_EXTENDED_DATA RegisteredControllersExtendedData[ANYSIZE_ARRAY];
2206} NVME_RESERVATION_REPORT_STATUS_EXTENDED_DATA_STRUCTURE, *PNVME_RESERVATION_REPORT_STATUS_EXTENDED_DATA_STRUCTURE;
2207
2208typedef enum {
2209 NVME_DIRECTIVE_TYPE_IDENTIFY = 0x00,
2210 NVME_DIRECTIVE_TYPE_STREAMS = 0x01
2211} NVME_DIRECTIVE_TYPES;
2212
2213#define NVME_STREAMS_ID_MIN 1
2214#define NVME_STREAMS_ID_MAX 0xFFFF
2215
2216typedef struct {
2217 ULONG NUMD;
2218} NVME_CDW10_DIRECTIVE_RECEIVE, *PNVME_CDW10_DIRECTIVE_RECEIVE;
2219
2220typedef union {
2221 __C89_NAMELESS struct {
2222 ULONG DOPER : 8;
2223 ULONG DTYPE : 8;
2224 ULONG DSPEC : 16;
2225 };
2226 ULONG AsUlong;
2227} NVME_CDW11_DIRECTIVE_RECEIVE, *PNVME_CDW11_DIRECTIVE_RECEIVE;
2228
2229typedef struct {
2230 ULONG NUMD;
2231} NVME_CDW10_DIRECTIVE_SEND, *PNVME_CDW10_DIRECTIVE_SEND;
2232
2233typedef union {
2234 __C89_NAMELESS struct {
2235 ULONG DOPER : 8;
2236 ULONG DTYPE : 8;
2237 ULONG DSPEC : 16;
2238 };
2239 ULONG AsUlong;
2240} NVME_CDW11_DIRECTIVE_SEND, *PNVME_CDW11_DIRECTIVE_SEND;
2241
2242typedef enum {
2243 NVME_DIRECTIVE_RECEIVE_IDENTIFY_OPERATION_RETURN_PARAMETERS = 1
2244} NVME_DIRECTIVE_RECEIVE_IDENTIFY_OPERATIONS;
2245
2246typedef enum {
2247 NVME_DIRECTIVE_SEND_IDENTIFY_OPERATION_ENABLE_DIRECTIVE = 1
2248} NVME_DIRECTIVE_SEND_IDENTIFY_OPERATIONS;
2249
2250typedef struct {
2251 UCHAR Identify : 1;
2252 UCHAR Streams : 1;
2253 UCHAR Reserved0 : 6;
2254 UCHAR Reserved1[31];
2255} NVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS_DESCRIPTOR, *PNVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS_DESCRIPTOR;
2256
2257typedef struct {
2258 NVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS_DESCRIPTOR DirectivesSupported;
2259 NVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS_DESCRIPTOR DirectivesEnabled;
2260} NVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS, *PNVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS;
2261
2262typedef union {
2263 __C89_NAMELESS struct {
2264 ULONG ENDIR : 1;
2265 ULONG Reserved0 : 7;
2266 ULONG DTYPE : 8;
2267 ULONG Reserved1 : 16;
2268 };
2269 ULONG AsUlong;
2270} NVME_CDW12_DIRECTIVE_SEND_IDENTIFY_ENABLE_DIRECTIVE, *PNVME_CDW12_DIRECTIVE_SEND_IDENTIFY_ENABLE_DIRECTIVE;
2271
2272typedef enum {
2273 NVME_DIRECTIVE_RECEIVE_STREAMS_OPERATION_RETURN_PARAMETERS = 1,
2274 NVME_DIRECTIVE_RECEIVE_STREAMS_OPERATION_GET_STATUS = 2,
2275 NVME_DIRECTIVE_RECEIVE_STREAMS_OPERATION_ALLOCATE_RESOURCES = 3
2276} NVME_DIRECTIVE_RECEIVE_STREAMS_OPERATIONS;
2277
2278typedef enum {
2279 NVME_DIRECTIVE_SEND_STREAMS_OPERATION_RELEASE_IDENTIFIER = 1,
2280 NVME_DIRECTIVE_SEND_STREAMS_OPERATION_RELEASE_RESOURCES = 2
2281} NVME_DIRECTIVE_SEND_STREAMS_OPERATIONS;
2282
2283typedef struct {
2284 USHORT MSL;
2285 USHORT NSSA;
2286 USHORT NSSO;
2287 UCHAR Reserved0[10];
2288 ULONG SWS;
2289 USHORT SGS;
2290 USHORT NSA;
2291 USHORT NSO;
2292 UCHAR Reserved1[6];
2293} NVME_DIRECTIVE_STREAMS_RETURN_PARAMETERS, *PNVME_DIRECTIVE_STREAMS_RETURN_PARAMETERS;
2294
2295#define NVME_STREAMS_GET_STATUS_MAX_IDS 65535
2296
2297typedef struct {
2298 USHORT OpenStreamCount;
2299 USHORT StreamIdentifiers[NVME_STREAMS_GET_STATUS_MAX_IDS];
2300} NVME_DIRECTIVE_STREAMS_GET_STATUS_DATA, *PNVME_DIRECTIVE_STREAMS_GET_STATUS_DATA;
2301
2302typedef union {
2303 __C89_NAMELESS struct {
2304 ULONG NSR : 16;
2305 ULONG Reserved : 16;
2306 };
2307 ULONG AsUlong;
2308} NVME_CDW12_DIRECTIVE_RECEIVE_STREAMS_ALLOCATE_RESOURCES, *PNVME_CDW12_DIRECTIVE_RECEIVE_STREAMS_ALLOCATE_RESOURCES;
2309
2310typedef struct {
2311 __C89_NAMELESS struct {
2312 ULONG NSA : 16;
2313 ULONG Reserved : 16;
2314 };
2315 ULONG AsUlong;
2316} NVME_COMPLETION_DW0_DIRECTIVE_RECEIVE_STREAMS_ALLOCATE_RESOURCES, *PNVME_COMPLETION_DW0_DIRECTIVE_RECEIVE_STREAMS_ALLOCATE_RESOURCES;
2317
2318typedef union {
2319 NVME_CDW12_DIRECTIVE_SEND_IDENTIFY_ENABLE_DIRECTIVE EnableDirective;
2320 ULONG AsUlong;
2321} NVME_CDW12_DIRECTIVE_SEND;
2322
2323typedef union {
2324 NVME_CDW12_DIRECTIVE_RECEIVE_STREAMS_ALLOCATE_RESOURCES AllocateResources;
2325 ULONG AsUlong;
2326} NVME_CDW12_DIRECTIVE_RECEIVE;
2327
2328typedef union {
2329 __C89_NAMELESS struct {
2330 ULONG Reserved0 : 8;
2331 ULONG SPSP : 16;
2332 ULONG SECP : 8;
2333 };
2334 ULONG AsUlong;
2335} NVME_CDW10_SECURITY_SEND_RECEIVE, *PNVME_CDW10_SECURITY_SEND_RECEIVE;
2336
2337typedef struct {
2338 ULONG TL;
2339} NVME_CDW11_SECURITY_SEND, *PNVME_CDW11_SECURITY_SEND;
2340
2341typedef struct {
2342 ULONG AL;
2343} NVME_CDW11_SECURITY_RECEIVE, *PNVME_CDW11_SECURITY_RECEIVE;
2344
2345typedef enum {
2346 NVME_NVM_COMMAND_FLUSH = 0x00,
2347 NVME_NVM_COMMAND_WRITE = 0x01,
2348 NVME_NVM_COMMAND_READ = 0x02,
2349 NVME_NVM_COMMAND_WRITE_UNCORRECTABLE = 0x04,
2350 NVME_NVM_COMMAND_COMPARE = 0x05,
2351 NVME_NVM_COMMAND_WRITE_ZEROES = 0x08,
2352 NVME_NVM_COMMAND_DATASET_MANAGEMENT = 0x09,
2353 NVME_NVM_COMMAND_VERIFY = 0x0C,
2354 NVME_NVM_COMMAND_RESERVATION_REGISTER = 0x0D,
2355 NVME_NVM_COMMAND_RESERVATION_REPORT = 0x0E,
2356 NVME_NVM_COMMAND_RESERVATION_ACQUIRE = 0x11,
2357 NVME_NVM_COMMAND_RESERVATION_RELEASE = 0x15,
2358 NVME_NVM_COMMAND_COPY = 0x19,
2359 NVME_NVM_COMMAND_ZONE_MANAGEMENT_SEND = 0x79,
2360 NVME_NVM_COMMAND_ZONE_MANAGEMENT_RECEIVE = 0x7A,
2361 NVME_NVM_COMMAND_ZONE_APPEND = 0x7D
2362} NVME_NVM_COMMANDS;
2363
2364typedef union {
2365 __C89_NAMELESS struct {
2366 ULONG NLB : 16;
2367 ULONG Reserved0 : 4;
2368 ULONG DTYPE : 4;
2369 ULONG Reserved1 : 2;
2370 ULONG PRINFO : 4;
2371 ULONG FUA : 1;
2372 ULONG LR : 1;
2373 };
2374 ULONG AsUlong;
2375} NVME_CDW12_READ_WRITE, *PNVME_CDW12_READ_WRITE;
2376
2377typedef enum {
2378 NVME_ACCESS_FREQUENCY_NONE = 0,
2379 NVME_ACCESS_FREQUENCY_TYPICAL = 1,
2380 NVME_ACCESS_FREQUENCY_INFR_WRITE_INFR_READ = 2,
2381 NVME_ACCESS_FREQUENCY_INFR_WRITE_FR_READ = 3,
2382 NVME_ACCESS_FREQUENCY_FR_WRITE_INFR_READ = 4,
2383 NVME_ACCESS_FREQUENCY_FR_WRITE_FR_READ = 5,
2384 NVME_ACCESS_FREQUENCY_ONE_TIME_READ = 6,
2385 NVME_ACCESS_FREQUENCY_SPECULATIVE_READ = 7,
2386 NVME_ACCESS_FREQUENCY_WILL_BE_OVERWRITTEN = 8
2387} NVME_ACCESS_FREQUENCIES;
2388
2389typedef enum {
2390 NVME_ACCESS_LATENCY_NONE = 0,
2391 NVME_ACCESS_LATENCY_IDLE = 1,
2392 NVME_ACCESS_LATENCY_NORMAL = 2,
2393 NVME_ACCESS_LATENCY_LOW = 3
2394} NVME_ACCESS_LATENCIES;
2395
2396typedef union {
2397 __C89_NAMELESS struct {
2398 struct {
2399 UCHAR AccessFrequency : 4;
2400 UCHAR AccessLatency : 2;
2401 UCHAR SequentialRequest : 1;
2402 UCHAR Incompressible : 1;
2403 } DSM;
2404 UCHAR Reserved;
2405 USHORT DSPEC;
2406 };
2407 ULONG AsUlong;
2408} NVME_CDW13_READ_WRITE, *PNVME_CDW13_READ_WRITE;
2409
2410typedef union {
2411 __C89_NAMELESS struct {
2412 ULONG ELBAT : 16;
2413 ULONG ELBATM : 16;
2414 };
2415 ULONG AsUlong;
2416} NVME_CDW15_READ_WRITE, *PNVME_CDW15_READ_WRITE;
2417
2418typedef union {
2419 __C89_NAMELESS struct {
2420 ULONG AccessFrequency : 4;
2421 ULONG AccessLatency : 2;
2422 ULONG Reserved0 : 2;
2423 ULONG SequentialReadRange : 1;
2424 ULONG SequentialWriteRange : 1;
2425 ULONG WritePrepare : 1;
2426 ULONG Reserved1 : 13;
2427 ULONG CommandAccessSize : 8;
2428 };
2429 ULONG AsUlong;
2430} NVME_CONTEXT_ATTRIBUTES, *PNVME_CONTEXT_ATTRIBUTES;
2431
2432typedef struct {
2433 NVME_CONTEXT_ATTRIBUTES Attributes;
2434 ULONG LogicalBlockCount;
2435 ULONGLONG StartingLBA;
2436} NVME_LBA_RANGE, *PNVME_LBA_RANGE;
2437
2438typedef union {
2439 __C89_NAMELESS struct {
2440 ULONG NR : 8;
2441 ULONG Reserved : 24;
2442 };
2443 ULONG AsUlong;
2444} NVME_CDW10_DATASET_MANAGEMENT, *PNVME_CDW10_DATASET_MANAGEMENT;
2445
2446typedef union {
2447 __C89_NAMELESS struct {
2448 ULONG IDR : 1;
2449 ULONG IDW : 1;
2450 ULONG AD : 1;
2451 ULONG Reserved : 29;
2452 };
2453 ULONG AsUlong;
2454} NVME_CDW11_DATASET_MANAGEMENT, *PNVME_CDW11_DATASET_MANAGEMENT;
2455
2456typedef struct {
2457 __C89_NAMELESS struct {
2458 UCHAR ZT : 4;
2459 UCHAR Reserved1 : 4;
2460 };
2461 __C89_NAMELESS struct {
2462 UCHAR Reserved2 : 4;
2463 UCHAR ZS : 4;
2464 };
2465 struct {
2466 UCHAR ZFC : 1;
2467 UCHAR FZR : 1;
2468 UCHAR RZR : 1;
2469 UCHAR Reserved : 4;
2470 UCHAR ZDEV : 1;
2471 } ZA;
2472 UCHAR Reserved3[5];
2473 ULONGLONG ZCAP;
2474 ULONGLONG ZSLBA;
2475 ULONGLONG WritePointer;
2476 UCHAR Reserved4[32];
2477} NVME_ZONE_DESCRIPTOR, *PNVME_ZONE_DESCRIPTOR;
2478
2479typedef enum {
2480 NVME_STATE_ZSE = 0x1,
2481 NVME_STATE_ZSIO = 0x2,
2482 NVME_STATE_ZSEO = 0x3,
2483 NVME_STATE_ZSC = 0x4,
2484 NVME_STATE_ZSRO = 0xD,
2485 NVME_STATE_ZSF = 0xE,
2486 NVME_STATE_ZSO = 0xF
2487} ZONE_STATE;
2488
2489typedef enum {
2490 NVME_ZONE_SEND_CLOSE = 1,
2491 NVME_ZONE_SEND_FINISH = 2,
2492 NVME_ZONE_SEND_OPEN = 3,
2493 NVME_ZONE_SEND_RESET = 4,
2494 NVME_ZONE_SEND_OFFLINE = 5,
2495 NVME_ZONE_SEND_SET_ZONE_DESCRIPTOR = 0x10
2496} NVME_ZONE_SEND_ACTION;
2497
2498typedef struct {
2499 ULONGLONG SLBA;
2500} NVME_CDW10_ZONE_MANAGEMENT_SEND, *PNVME_CDW10_ZONE_MANAGEMENT_SEND;
2501
2502typedef union {
2503 __C89_NAMELESS struct {
2504 ULONG ZSA : 8;
2505 ULONG SelectAll : 1;
2506 ULONG Reserved : 23;
2507 };
2508 ULONG AsUlong;
2509} NVME_CDW13_ZONE_MANAGEMENT_SEND, *PNVME_CDW13_ZONE_MANAGEMENT_SEND;
2510
2511typedef struct {
2512 ULONGLONG ZoneCount;
2513 ULONGLONG Reserved[7];
2514 NVME_ZONE_DESCRIPTOR ZoneDescriptor[ANYSIZE_ARRAY];
2515} NVME_REPORT_ZONE_INFO, *PNVME_REPORT_ZONE_INFO;
2516
2517typedef struct{
2518 UCHAR ZoneDescriptorExtensionInfo[64];
2519} NVME_ZONE_DESCRIPTOR_EXTENSION, *PNVME_ZONE_DESCRIPTOR_EXTENSION;
2520
2521typedef struct {
2522 NVME_ZONE_DESCRIPTOR ZoneDescriptor;
2523 NVME_ZONE_DESCRIPTOR_EXTENSION ZoneDescriptorExtension[ANYSIZE_ARRAY];
2524} NVME_ZONE_EXTENDED_REPORT_ZONE_DESC, *PNVME_ZONE_EXTENDED_REPORT_ZONE_DESC;
2525
2526typedef struct {
2527 ULONGLONG ZoneCount;
2528 ULONGLONG Reserved[7];
2529 NVME_ZONE_EXTENDED_REPORT_ZONE_DESC Desc[ANYSIZE_ARRAY];
2530} NVME_EXTENDED_REPORT_ZONE_INFO, *PNVME_EXTENDED_REPORT_ZONE_INFO;
2531
2532typedef enum {
2533 NVME_ZONE_RECEIVE_REPORT_ZONES = 0,
2534 NVME_ZONE_RECEIVE_EXTENDED_REPORT_ZONES = 1
2535} NVME_ZONE_RECEIVE_ACTION;
2536
2537typedef enum {
2538 NVME_ZRA_ALL_ZONES = 0,
2539 NVME_ZRA_EMPTY_STATE_ZONES = 1,
2540 NVME_ZRA_IO_STATE_ZONES = 2,
2541 NVME_ZRA_EO_STATE_ZONES = 3,
2542 NVME_ZRA_CLOSED_STATE_ZONES = 4,
2543 NVME_ZRA_FULL_STATE_ZONES = 5,
2544 NVME_ZRA_RO_STATE_ZONES = 6,
2545 NVME_ZRA_OFFLINE_STATE_ZONES = 7
2546} NVME_ZONE_RECEIVE_ACTION_SPECIFIC;
2547
2548typedef struct {
2549 ULONGLONG SLBA;
2550} NVME_CDW10_ZONE_MANAGEMENT_RECEIVE, *PNVME_CDW10_ZONE_MANAGEMENT_RECEIVE;
2551
2552typedef union {
2553 __C89_NAMELESS struct {
2554 ULONG ZRA : 8;
2555 ULONG ZRASpecific : 8;
2556 ULONG Partial : 1;
2557 ULONG Reserved : 15;
2558 };
2559 ULONG AsUlong;
2560} NVME_CDW13_ZONE_MANAGEMENT_RECEIVE, *PNVME_CDW13_ZONE_MANAGEMENT_RECEIVE;
2561
2562typedef struct {
2563 ULONGLONG SLBA;
2564} NVME_CDW10_ZONE_APPEND, *PNVME_CDW10_ZONE_APPEND;
2565
2566typedef union {
2567 __C89_NAMELESS struct {
2568 ULONG NLB : 16;
2569 ULONG Reserved : 9;
2570 ULONG PIREMAP : 1;
2571 ULONG PRINFO : 4;
2572 ULONG FUA : 1;
2573 ULONG LR : 1;
2574 };
2575 ULONG AsUlong;
2576} NVME_CDW12_ZONE_APPEND, *PNVME_CDW12_ZONE_APPEND;
2577
2578typedef union {
2579 __C89_NAMELESS struct {
2580 ULONG LBAT : 16;
2581 ULONG LBATM : 16;
2582 };
2583 ULONG AsUlong;
2584} NVME_CDW15_ZONE_APPEND, *PNVME_CDW15_ZONE_APPEND;
2585
2586typedef union {
2587 __C89_NAMELESS struct {
2588 ULONG OPC : 8;
2589 ULONG FUSE : 2;
2590 ULONG Reserved0 : 5;
2591 ULONG PSDT : 1;
2592 ULONG CID : 16;
2593 };
2594 ULONG AsUlong;
2595} NVME_COMMAND_DWORD0, *PNVME_COMMAND_DWORD0;
2596
2597typedef enum {
2598 NVME_FUSED_OPERATION_NORMAL = 0,
2599 NVME_FUSED_OPERATION_FIRST_CMD = 1,
2600 NVME_FUSED_OPERATION_SECOND_CMD = 2
2601} NVME_FUSED_OPERATION_CODES;
2602
2603typedef union {
2604 __C89_NAMELESS struct {
2605 ULONGLONG Reserved0 : 2;
2606 ULONGLONG PBAO : 62;
2607 };
2608 ULONGLONG AsUlonglong;
2609} NVME_PRP_ENTRY, *PNVME_PRP_ENTRY;
2610
2611#define NVME_NAMESPACE_ALL 0xFFFFFFFF
2612
2613typedef struct {
2614 NVME_COMMAND_DWORD0 CDW0;
2615 ULONG NSID;
2616 ULONG Reserved0[2];
2617 ULONGLONG MPTR;
2618 ULONGLONG PRP1;
2619 ULONGLONG PRP2;
2620 union {
2621 struct {
2622 ULONG CDW10;
2623 ULONG CDW11;
2624 ULONG CDW12;
2625 ULONG CDW13;
2626 ULONG CDW14;
2627 ULONG CDW15;
2628 } GENERAL;
2629 struct {
2630 NVME_CDW10_IDENTIFY CDW10;
2631 NVME_CDW11_IDENTIFY CDW11;
2632 ULONG CDW12;
2633 ULONG CDW13;
2634 ULONG CDW14;
2635 ULONG CDW15;
2636 } IDENTIFY;
2637 struct {
2638 NVME_CDW10_ABORT CDW10;
2639 ULONG CDW11;
2640 ULONG CDW12;
2641 ULONG CDW13;
2642 ULONG CDW14;
2643 ULONG CDW15;
2644 } ABORT;
2645 struct {
2646 NVME_CDW10_GET_FEATURES CDW10;
2647 NVME_CDW11_FEATURES CDW11;
2648 ULONG CDW12;
2649 ULONG CDW13;
2650 ULONG CDW14;
2651 ULONG CDW15;
2652 } GETFEATURES;
2653 struct {
2654 NVME_CDW10_SET_FEATURES CDW10;
2655 NVME_CDW11_FEATURES CDW11;
2656 NVME_CDW12_FEATURES CDW12;
2657 NVME_CDW13_FEATURES CDW13;
2658 NVME_CDW14_FEATURES CDW14;
2659 NVME_CDW15_FEATURES CDW15;
2660 } SETFEATURES;
2661 struct {
2662 union {
2663 NVME_CDW10_GET_LOG_PAGE CDW10;
2664 NVME_CDW10_GET_LOG_PAGE_V13 CDW10_V13;
2665 };
2666 NVME_CDW11_GET_LOG_PAGE CDW11;
2667 NVME_CDW12_GET_LOG_PAGE CDW12;
2668 NVME_CDW13_GET_LOG_PAGE CDW13;
2669 NVME_CDW14_GET_LOG_PAGE CDW14;
2670 ULONG CDW15;
2671 } GETLOGPAGE;
2672 struct {
2673 NVME_CDW10_CREATE_IO_QUEUE CDW10;
2674 NVME_CDW11_CREATE_IO_CQ CDW11;
2675 ULONG CDW12;
2676 ULONG CDW13;
2677 ULONG CDW14;
2678 ULONG CDW15;
2679 } CREATEIOCQ;
2680 struct {
2681 NVME_CDW10_CREATE_IO_QUEUE CDW10;
2682 NVME_CDW11_CREATE_IO_SQ CDW11;
2683 ULONG CDW12;
2684 ULONG CDW13;
2685 ULONG CDW14;
2686 ULONG CDW15;
2687 } CREATEIOSQ;
2688 struct {
2689 NVME_CDW10_DATASET_MANAGEMENT CDW10;
2690 NVME_CDW11_DATASET_MANAGEMENT CDW11;
2691 ULONG CDW12;
2692 ULONG CDW13;
2693 ULONG CDW14;
2694 ULONG CDW15;
2695 } DATASETMANAGEMENT;
2696 struct {
2697 NVME_CDW10_SECURITY_SEND_RECEIVE CDW10;
2698 NVME_CDW11_SECURITY_SEND CDW11;
2699 ULONG CDW12;
2700 ULONG CDW13;
2701 ULONG CDW14;
2702 ULONG CDW15;
2703 } SECURITYSEND;
2704 struct {
2705 NVME_CDW10_SECURITY_SEND_RECEIVE CDW10;
2706 NVME_CDW11_SECURITY_RECEIVE CDW11;
2707 ULONG CDW12;
2708 ULONG CDW13;
2709 ULONG CDW14;
2710 ULONG CDW15;
2711 } SECURITYRECEIVE;
2712 struct {
2713 NVME_CDW10_FIRMWARE_DOWNLOAD CDW10;
2714 NVME_CDW11_FIRMWARE_DOWNLOAD CDW11;
2715 ULONG CDW12;
2716 ULONG CDW13;
2717 ULONG CDW14;
2718 ULONG CDW15;
2719 } FIRMWAREDOWNLOAD;
2720 struct {
2721 NVME_CDW10_FIRMWARE_ACTIVATE CDW10;
2722 ULONG CDW11;
2723 ULONG CDW12;
2724 ULONG CDW13;
2725 ULONG CDW14;
2726 ULONG CDW15;
2727 } FIRMWAREACTIVATE;
2728 struct {
2729 NVME_CDW10_FORMAT_NVM CDW10;
2730 ULONG CDW11;
2731 ULONG CDW12;
2732 ULONG CDW13;
2733 ULONG CDW14;
2734 ULONG CDW15;
2735 } FORMATNVM;
2736 struct {
2737 NVME_CDW10_DIRECTIVE_RECEIVE CDW10;
2738 NVME_CDW11_DIRECTIVE_RECEIVE CDW11;
2739 NVME_CDW12_DIRECTIVE_RECEIVE CDW12;
2740 ULONG CDW13;
2741 ULONG CDW14;
2742 ULONG CDW15;
2743 } DIRECTIVERECEIVE;
2744 struct {
2745 NVME_CDW10_DIRECTIVE_SEND CDW10;
2746 NVME_CDW11_DIRECTIVE_SEND CDW11;
2747 NVME_CDW12_DIRECTIVE_SEND CDW12;
2748 ULONG CDW13;
2749 ULONG CDW14;
2750 ULONG CDW15;
2751 } DIRECTIVESEND;
2752 struct {
2753 NVME_CDW10_SANITIZE CDW10;
2754 NVME_CDW11_SANITIZE CDW11;
2755 ULONG CDW12;
2756 ULONG CDW13;
2757 ULONG CDW14;
2758 ULONG CDW15;
2759 } SANITIZE;
2760 struct {
2761 ULONG LBALOW;
2762 ULONG LBAHIGH;
2763 NVME_CDW12_READ_WRITE CDW12;
2764 NVME_CDW13_READ_WRITE CDW13;
2765 ULONG CDW14;
2766 NVME_CDW15_READ_WRITE CDW15;
2767 } READWRITE;
2768 struct {
2769 NVME_CDW10_RESERVATION_ACQUIRE CDW10;
2770 ULONG CDW11;
2771 ULONG CDW12;
2772 ULONG CDW13;
2773 ULONG CDW14;
2774 ULONG CDW15;
2775 } RESERVATIONACQUIRE;
2776 struct {
2777 NVME_CDW10_RESERVATION_REGISTER CDW10;
2778 ULONG CDW11;
2779 ULONG CDW12;
2780 ULONG CDW13;
2781 ULONG CDW14;
2782 ULONG CDW15;
2783 } RESERVATIONREGISTER;
2784 struct {
2785 NVME_CDW10_RESERVATION_RELEASE CDW10;
2786 ULONG CDW11;
2787 ULONG CDW12;
2788 ULONG CDW13;
2789 ULONG CDW14;
2790 ULONG CDW15;
2791 } RESERVATIONRELEASE;
2792 struct {
2793 NVME_CDW10_RESERVATION_REPORT CDW10;
2794 NVME_CDW11_RESERVATION_REPORT CDW11;
2795 ULONG CDW12;
2796 ULONG CDW13;
2797 ULONG CDW14;
2798 ULONG CDW15;
2799 } RESERVATIONREPORT;
2800 struct {
2801 NVME_CDW10_ZONE_MANAGEMENT_SEND CDW1011;
2802 ULONG CDW12;
2803 NVME_CDW13_ZONE_MANAGEMENT_SEND CDW13;
2804 ULONG CDW14;
2805 ULONG CDW15;
2806 } ZONEMANAGEMENTSEND;
2807 struct {
2808 NVME_CDW10_ZONE_MANAGEMENT_RECEIVE CDW1011;
2809 ULONG DWORDCOUNT;
2810 NVME_CDW13_ZONE_MANAGEMENT_RECEIVE CDW13;
2811 ULONG CDW14;
2812 ULONG CDW15;
2813 } ZONEMANAGEMENTRECEIVE;
2814 struct {
2815 NVME_CDW10_ZONE_APPEND CDW1011;
2816 NVME_CDW12_ZONE_APPEND CDW12;
2817 ULONG CDW13;
2818 ULONG ILBRT;
2819 NVME_CDW15_ZONE_APPEND CDW15;
2820 } ZONEAPPEND;
2821 } u;
2822} NVME_COMMAND, *PNVME_COMMAND;
2823
2824C_ASSERT(sizeof(NVME_COMMAND) == 64);
2825
2826typedef struct {
2827 CHAR PCIVendorID[4];
2828 CHAR ModelNumber[40];
2829 CHAR NamespaceID[4];
2830 CHAR SerialNumber[20];
2831} NVME_SCSI_NAME_STRING, *PNVME_SCSI_NAME_STRING;
2832
2833#endif /* WINAPI_PARTITION_DESKTOP */
2834
2835#endif /* NVME_INCLUDED */
Note: See TracBrowser for help on using the repository browser.