nvme.h 84 KB

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