1/**
   2 * This file has no copyright assigned and is placed in the Public Domain.
   3 * This file is part of the mingw-w64 runtime package.
   4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
   5 */
   6
   7#ifndef _NTATA_
   8#define _NTATA_
   9
  10#pragma pack(push,1)
  11
  12typedef struct _IDENTIFY_DEVICE_DATA {
  13  struct {
  14    USHORT Reserved1 : 1;
  15    USHORT Retired3 : 1;
  16    USHORT ResponseIncomplete : 1;
  17    USHORT Retired2 : 3;
  18    USHORT FixedDevice : 1;
  19    USHORT RemovableMedia : 1;
  20    USHORT Retired1 : 7;
  21    USHORT DeviceType : 1;
  22  } GeneralConfiguration;
  23  USHORT NumCylinders;
  24  USHORT SpecificConfiguration;
  25  USHORT NumHeads;
  26  USHORT Retired1[2];
  27  USHORT NumSectorsPerTrack;
  28  USHORT VendorUnique1[3];
  29  UCHAR SerialNumber[20];
  30  USHORT Retired2[2];
  31  USHORT Obsolete1;
  32  UCHAR FirmwareRevision[8];
  33  UCHAR ModelNumber[40];
  34  UCHAR MaximumBlockTransfer;
  35  UCHAR VendorUnique2;
  36  struct {
  37    USHORT FeatureSupported : 1;
  38    USHORT Reserved : 15;
  39  } TrustedComputing;
  40  struct {
  41    UCHAR CurrentLongPhysicalSectorAlignment : 2;
  42    UCHAR ReservedByte49 : 6;
  43    UCHAR DmaSupported : 1;
  44    UCHAR LbaSupported : 1;
  45    UCHAR IordyDisable : 1;
  46    UCHAR IordySupported : 1;
  47    UCHAR Reserved1 : 1;
  48    UCHAR StandybyTimerSupport : 1;
  49    UCHAR Reserved2 : 2;
  50    USHORT ReservedWord50;
  51  } Capabilities;
  52  USHORT ObsoleteWords51[2];
  53  USHORT TranslationFieldsValid : 3;
  54  USHORT Reserved3 : 5;
  55  USHORT FreeFallControlSensitivity : 8;
  56  USHORT NumberOfCurrentCylinders;
  57  USHORT NumberOfCurrentHeads;
  58  USHORT CurrentSectorsPerTrack;
  59  ULONG CurrentSectorCapacity;
  60  UCHAR CurrentMultiSectorSetting;
  61  UCHAR MultiSectorSettingValid : 1;
  62  UCHAR ReservedByte59 : 3;
  63  UCHAR SanitizeFeatureSupported : 1;
  64  UCHAR CryptoScrambleExtCommandSupported : 1;
  65  UCHAR OverwriteExtCommandSupported : 1;
  66  UCHAR BlockEraseExtCommandSupported : 1;
  67  ULONG UserAddressableSectors;
  68  USHORT ObsoleteWord62;
  69  USHORT MultiWordDMASupport : 8;
  70  USHORT MultiWordDMAActive : 8;
  71  USHORT AdvancedPIOModes : 8;
  72  USHORT ReservedByte64 : 8;
  73  USHORT MinimumMWXferCycleTime;
  74  USHORT RecommendedMWXferCycleTime;
  75  USHORT MinimumPIOCycleTime;
  76  USHORT MinimumPIOCycleTimeIORDY;
  77  struct {
  78    USHORT ZonedCapabilities : 2;
  79    USHORT NonVolatileWriteCache : 1;
  80    USHORT ExtendedUserAddressableSectorsSupported : 1;
  81    USHORT DeviceEncryptsAllUserData : 1;
  82    USHORT ReadZeroAfterTrimSupported : 1;
  83    USHORT Optional28BitCommandsSupported : 1;
  84    USHORT IEEE1667 : 1;
  85    USHORT DownloadMicrocodeDmaSupported : 1;
  86    USHORT SetMaxSetPasswordUnlockDmaSupported : 1;
  87    USHORT WriteBufferDmaSupported : 1;
  88    USHORT ReadBufferDmaSupported : 1;
  89    USHORT DeviceConfigIdentifySetDmaSupported : 1;
  90    USHORT LPSAERCSupported : 1;
  91    USHORT DeterministicReadAfterTrimSupported : 1;
  92    USHORT CFastSpecSupported : 1;
  93  } AdditionalSupported;
  94  USHORT ReservedWords70[5];
  95  USHORT QueueDepth : 5;
  96  USHORT ReservedWord75 : 11;
  97  struct {
  98    USHORT Reserved0 : 1;
  99    USHORT SataGen1 : 1;
 100    USHORT SataGen2 : 1;
 101    USHORT SataGen3 : 1;
 102    USHORT Reserved1 : 4;
 103    USHORT NCQ : 1;
 104    USHORT HIPM : 1;
 105    USHORT PhyEvents : 1;
 106    USHORT NcqUnload : 1;
 107    USHORT NcqPriority : 1;
 108    USHORT HostAutoPS : 1;
 109    USHORT DeviceAutoPS : 1;
 110    USHORT ReadLogDMA : 1;
 111    USHORT Reserved2 : 1;
 112    USHORT CurrentSpeed : 3;
 113    USHORT NcqStreaming : 1;
 114    USHORT NcqQueueMgmt : 1;
 115    USHORT NcqReceiveSend : 1;
 116    USHORT DEVSLPtoReducedPwrState : 1;
 117    USHORT Reserved3 : 8;
 118  } SerialAtaCapabilities;
 119  struct {
 120    USHORT Reserved0 : 1;
 121    USHORT NonZeroOffsets : 1;
 122    USHORT DmaSetupAutoActivate : 1;
 123    USHORT DIPM : 1;
 124    USHORT InOrderData : 1;
 125    USHORT HardwareFeatureControl : 1;
 126    USHORT SoftwareSettingsPreservation : 1;
 127    USHORT NCQAutosense : 1;
 128    USHORT DEVSLP : 1;
 129    USHORT HybridInformation : 1;
 130    USHORT Reserved1 : 6;
 131  } SerialAtaFeaturesSupported;
 132  struct {
 133    USHORT Reserved0 : 1;
 134    USHORT NonZeroOffsets : 1;
 135    USHORT DmaSetupAutoActivate : 1;
 136    USHORT DIPM : 1;
 137    USHORT InOrderData : 1;
 138    USHORT HardwareFeatureControl : 1;
 139    USHORT SoftwareSettingsPreservation : 1;
 140    USHORT DeviceAutoPS : 1;
 141    USHORT DEVSLP : 1;
 142    USHORT HybridInformation : 1;
 143    USHORT Reserved1 : 6;
 144  } SerialAtaFeaturesEnabled;
 145  USHORT MajorRevision;
 146  USHORT MinorRevision;
 147  struct {
 148    USHORT SmartCommands : 1;
 149    USHORT SecurityMode : 1;
 150    USHORT RemovableMediaFeature : 1;
 151    USHORT PowerManagement : 1;
 152    USHORT Reserved1 : 1;
 153    USHORT WriteCache : 1;
 154    USHORT LookAhead : 1;
 155    USHORT ReleaseInterrupt : 1;
 156    USHORT ServiceInterrupt : 1;
 157    USHORT DeviceReset : 1;
 158    USHORT HostProtectedArea : 1;
 159    USHORT Obsolete1 : 1;
 160    USHORT WriteBuffer : 1;
 161    USHORT ReadBuffer : 1;
 162    USHORT Nop : 1;
 163    USHORT Obsolete2 : 1;
 164    USHORT DownloadMicrocode : 1;
 165    USHORT DmaQueued : 1;
 166    USHORT Cfa : 1;
 167    USHORT AdvancedPm : 1;
 168    USHORT Msn : 1;
 169    USHORT PowerUpInStandby : 1;
 170    USHORT ManualPowerUp : 1;
 171    USHORT Reserved2 : 1;
 172    USHORT SetMax : 1;
 173    USHORT Acoustics : 1;
 174    USHORT BigLba : 1;
 175    USHORT DeviceConfigOverlay : 1;
 176    USHORT FlushCache : 1;
 177    USHORT FlushCacheExt : 1;
 178    USHORT WordValid83 : 2;
 179    USHORT SmartErrorLog : 1;
 180    USHORT SmartSelfTest : 1;
 181    USHORT MediaSerialNumber : 1;
 182    USHORT MediaCardPassThrough : 1;
 183    USHORT StreamingFeature : 1;
 184    USHORT GpLogging : 1;
 185    USHORT WriteFua : 1;
 186    USHORT WriteQueuedFua : 1;
 187    USHORT WWN64Bit : 1;
 188    USHORT URGReadStream : 1;
 189    USHORT URGWriteStream : 1;
 190    USHORT ReservedForTechReport : 2;
 191    USHORT IdleWithUnloadFeature : 1;
 192    USHORT WordValid : 2;
 193  } CommandSetSupport;
 194  struct {
 195    USHORT SmartCommands : 1;
 196    USHORT SecurityMode : 1;
 197    USHORT RemovableMediaFeature : 1;
 198    USHORT PowerManagement : 1;
 199    USHORT Reserved1 : 1;
 200    USHORT WriteCache : 1;
 201    USHORT LookAhead : 1;
 202    USHORT ReleaseInterrupt : 1;
 203    USHORT ServiceInterrupt : 1;
 204    USHORT DeviceReset : 1;
 205    USHORT HostProtectedArea : 1;
 206    USHORT Obsolete1 : 1;
 207    USHORT WriteBuffer : 1;
 208    USHORT ReadBuffer : 1;
 209    USHORT Nop : 1;
 210    USHORT Obsolete2 : 1;
 211    USHORT DownloadMicrocode : 1;
 212    USHORT DmaQueued : 1;
 213    USHORT Cfa : 1;
 214    USHORT AdvancedPm : 1;
 215    USHORT Msn : 1;
 216    USHORT PowerUpInStandby : 1;
 217    USHORT ManualPowerUp : 1;
 218    USHORT Reserved2 : 1;
 219    USHORT SetMax : 1;
 220    USHORT Acoustics : 1;
 221    USHORT BigLba : 1;
 222    USHORT DeviceConfigOverlay : 1;
 223    USHORT FlushCache : 1;
 224    USHORT FlushCacheExt : 1;
 225    USHORT Resrved3 : 1;
 226    USHORT Words119_120Valid : 1;
 227    USHORT SmartErrorLog : 1;
 228    USHORT SmartSelfTest : 1;
 229    USHORT MediaSerialNumber : 1;
 230    USHORT MediaCardPassThrough : 1;
 231    USHORT StreamingFeature : 1;
 232    USHORT GpLogging : 1;
 233    USHORT WriteFua : 1;
 234    USHORT WriteQueuedFua : 1;
 235    USHORT WWN64Bit : 1;
 236    USHORT URGReadStream : 1;
 237    USHORT URGWriteStream : 1;
 238    USHORT ReservedForTechReport : 2;
 239    USHORT IdleWithUnloadFeature : 1;
 240    USHORT Reserved4 : 2;
 241  } CommandSetActive;
 242  USHORT UltraDMASupport : 8;
 243  USHORT UltraDMAActive : 8;
 244  struct {
 245    USHORT TimeRequired : 15;
 246    USHORT ExtendedTimeReported : 1;
 247  } NormalSecurityEraseUnit;
 248  struct {
 249    USHORT TimeRequired : 15;
 250    USHORT ExtendedTimeReported : 1;
 251  } EnhancedSecurityEraseUnit;
 252  USHORT CurrentAPMLevel : 8;
 253  USHORT ReservedWord91 : 8;
 254  USHORT MasterPasswordID;
 255  USHORT HardwareResetResult;
 256  USHORT CurrentAcousticValue : 8;
 257  USHORT RecommendedAcousticValue : 8;
 258  USHORT StreamMinRequestSize;
 259  USHORT StreamingTransferTimeDMA;
 260  USHORT StreamingAccessLatencyDMAPIO;
 261  ULONG StreamingPerfGranularity;
 262  ULONG Max48BitLBA[2];
 263  USHORT StreamingTransferTime;
 264  USHORT DsmCap;
 265  struct {
 266    USHORT LogicalSectorsPerPhysicalSector : 4;
 267    USHORT Reserved0 : 8;
 268    USHORT LogicalSectorLongerThan256Words : 1;
 269    USHORT MultipleLogicalSectorsPerPhysicalSector : 1;
 270    USHORT Reserved1 : 2;
 271  } PhysicalLogicalSectorSize;
 272  USHORT InterSeekDelay;
 273  USHORT WorldWideName[4];
 274  USHORT ReservedForWorldWideName128[4];
 275  USHORT ReservedForTlcTechnicalReport;
 276  USHORT WordsPerLogicalSector[2];
 277  struct {
 278    USHORT ReservedForDrqTechnicalReport : 1;
 279    USHORT WriteReadVerify : 1;
 280    USHORT WriteUncorrectableExt : 1;
 281    USHORT ReadWriteLogDmaExt : 1;
 282    USHORT DownloadMicrocodeMode3 : 1;
 283    USHORT FreefallControl : 1;
 284    USHORT SenseDataReporting : 1;
 285    USHORT ExtendedPowerConditions : 1;
 286    USHORT Reserved0 : 6;
 287    USHORT WordValid : 2;
 288  } CommandSetSupportExt;
 289  struct {
 290    USHORT ReservedForDrqTechnicalReport : 1;
 291    USHORT WriteReadVerify : 1;
 292    USHORT WriteUncorrectableExt : 1;
 293    USHORT ReadWriteLogDmaExt : 1;
 294    USHORT DownloadMicrocodeMode3 : 1;
 295    USHORT FreefallControl : 1;
 296    USHORT SenseDataReporting : 1;
 297    USHORT ExtendedPowerConditions : 1;
 298    USHORT Reserved0 : 6;
 299    USHORT Reserved1 : 2;
 300  } CommandSetActiveExt;
 301  USHORT ReservedForExpandedSupportandActive[6];
 302  USHORT MsnSupport : 2;
 303  USHORT ReservedWord127 : 14;
 304  struct {
 305    USHORT SecuritySupported : 1;
 306    USHORT SecurityEnabled : 1;
 307    USHORT SecurityLocked : 1;
 308    USHORT SecurityFrozen : 1;
 309    USHORT SecurityCountExpired : 1;
 310    USHORT EnhancedSecurityEraseSupported : 1;
 311    USHORT Reserved0 : 2;
 312    USHORT SecurityLevel : 1;
 313    USHORT Reserved1 : 7;
 314  } SecurityStatus;
 315  USHORT ReservedWord129[31];
 316  struct {
 317    USHORT MaximumCurrentInMA : 12;
 318    USHORT CfaPowerMode1Disabled : 1;
 319    USHORT CfaPowerMode1Required : 1;
 320    USHORT Reserved0 : 1;
 321    USHORT Word160Supported : 1;
 322  } CfaPowerMode1;
 323  USHORT ReservedForCfaWord161[7];
 324  USHORT NominalFormFactor : 4;
 325  USHORT ReservedWord168 : 12;
 326  struct {
 327    USHORT SupportsTrim : 1;
 328    USHORT Reserved0 : 15;
 329  } DataSetManagementFeature;
 330  USHORT AdditionalProductID[4];
 331  USHORT ReservedForCfaWord174[2];
 332  USHORT CurrentMediaSerialNumber[30];
 333  struct {
 334    USHORT Supported : 1;
 335    USHORT Reserved0 : 1;
 336    USHORT WriteSameSuported : 1;
 337    USHORT ErrorRecoveryControlSupported : 1;
 338    USHORT FeatureControlSuported : 1;
 339    USHORT DataTablesSuported : 1;
 340    USHORT Reserved1 : 6;
 341    USHORT VendorSpecific : 4;
 342  } SCTCommandTransport;
 343  USHORT ReservedWord207[2];
 344  struct {
 345    USHORT AlignmentOfLogicalWithinPhysical : 14;
 346    USHORT Word209Supported : 1;
 347    USHORT Reserved0 : 1;
 348  } BlockAlignment;
 349  USHORT WriteReadVerifySectorCountMode3Only[2];
 350  USHORT WriteReadVerifySectorCountMode2Only[2];
 351  struct {
 352    USHORT NVCachePowerModeEnabled : 1;
 353    USHORT Reserved0 : 3;
 354    USHORT NVCacheFeatureSetEnabled : 1;
 355    USHORT Reserved1 : 3;
 356    USHORT NVCachePowerModeVersion : 4;
 357    USHORT NVCacheFeatureSetVersion : 4;
 358  } NVCacheCapabilities;
 359  USHORT NVCacheSizeLSW;
 360  USHORT NVCacheSizeMSW;
 361  USHORT NominalMediaRotationRate;
 362  USHORT ReservedWord218;
 363  struct {
 364    UCHAR NVCacheEstimatedTimeToSpinUpInSeconds;
 365    UCHAR Reserved;
 366  } NVCacheOptions;
 367  USHORT WriteReadVerifySectorCountMode : 8;
 368  USHORT ReservedWord220 : 8;
 369  USHORT ReservedWord221;
 370  struct {
 371    USHORT MajorVersion : 12;
 372    USHORT TransportType : 4;
 373  } TransportMajorVersion;
 374  USHORT TransportMinorVersion;
 375  USHORT ReservedWord224[6];
 376  ULONG ExtendedNumberOfUserAddressableSectors[2];
 377  USHORT MinBlocksPerDownloadMicrocodeMode03;
 378  USHORT MaxBlocksPerDownloadMicrocodeMode03;
 379  USHORT ReservedWord236[19];
 380  USHORT Signature : 8;
 381  USHORT CheckSum : 8;
 382} IDENTIFY_DEVICE_DATA, *PIDENTIFY_DEVICE_DATA;
 383
 384typedef struct _IDENTIFY_PACKET_DATA {
 385  struct {
 386    USHORT PacketType : 2;
 387    USHORT IncompleteResponse : 1;
 388    USHORT Reserved1 : 2;
 389    USHORT DrqDelay : 2;
 390    USHORT RemovableMedia : 1;
 391    USHORT CommandPacketType : 5;
 392    USHORT Reserved2 : 1;
 393    USHORT DeviceType : 2;
 394  } GeneralConfiguration;
 395  USHORT ResevedWord1;
 396  USHORT UniqueConfiguration;
 397  USHORT ReservedWords3[7];
 398  UCHAR SerialNumber[20];
 399  USHORT ReservedWords20[3];
 400  UCHAR FirmwareRevision[8];
 401  UCHAR ModelNumber[40];
 402  USHORT ReservedWords47[2];
 403  struct {
 404    USHORT VendorSpecific : 8;
 405    USHORT DmaSupported : 1;
 406    USHORT LbaSupported : 1;
 407    USHORT IordyDisabled : 1;
 408    USHORT IordySupported : 1;
 409    USHORT Obsolete : 1;
 410    USHORT OverlapSupported : 1;
 411    USHORT QueuedCommandsSupported : 1;
 412    USHORT InterleavedDmaSupported : 1;
 413    USHORT DeviceSpecificStandbyTimerValueMin : 1;
 414    USHORT Obsolete1 : 1;
 415    USHORT ReservedWord50 : 12;
 416    USHORT WordValid : 2;
 417  } Capabilities;
 418  USHORT ObsoleteWords51[2];
 419  USHORT TranslationFieldsValid : 3;
 420  USHORT Reserved3 : 13;
 421  USHORT ReservedWords54[8];
 422  struct {
 423    USHORT UDMA0Supported : 1;
 424    USHORT UDMA1Supported : 1;
 425    USHORT UDMA2Supported : 1;
 426    USHORT UDMA3Supported : 1;
 427    USHORT UDMA4Supported : 1;
 428    USHORT UDMA5Supported : 1;
 429    USHORT UDMA6Supported : 1;
 430    USHORT MDMA0Supported : 1;
 431    USHORT MDMA1Supported : 1;
 432    USHORT MDMA2Supported : 1;
 433    USHORT DMASupported : 1;
 434    USHORT ReservedWord62 : 4;
 435    USHORT DMADIRBitRequired : 1;
 436  } DMADIR;
 437  USHORT MultiWordDMASupport : 8;
 438  USHORT MultiWordDMAActive : 8;
 439  USHORT AdvancedPIOModes : 8;
 440  USHORT ReservedByte64 : 8;
 441  USHORT MinimumMWXferCycleTime;
 442  USHORT RecommendedMWXferCycleTime;
 443  USHORT MinimumPIOCycleTime;
 444  USHORT MinimumPIOCycleTimeIORDY;
 445  USHORT ReservedWords69[2];
 446  USHORT BusReleaseDelay;
 447  USHORT ServiceCommandDelay;
 448  USHORT ReservedWords73[2];
 449  USHORT QueueDepth : 5;
 450  USHORT ReservedWord75 : 11;
 451  struct {
 452    USHORT Reserved0 : 1;
 453    USHORT SataGen1 : 1;
 454    USHORT SataGen2 : 1;
 455    USHORT SataGen3 : 1;
 456    USHORT Reserved1 : 5;
 457    USHORT HIPM : 1;
 458    USHORT PhyEvents : 1;
 459    USHORT Reserved3 : 2;
 460    USHORT HostAutoPS : 1;
 461    USHORT DeviceAutoPS : 1;
 462    USHORT Reserved4 : 1;
 463    USHORT Reserved5 : 1;
 464    USHORT CurrentSpeed : 3;
 465    USHORT SlimlineDeviceAttention : 1;
 466    USHORT HostEnvironmentDetect : 1;
 467    USHORT Reserved : 10;
 468  } SerialAtaCapabilities;
 469  struct {
 470    USHORT Reserved0 : 1;
 471    USHORT Reserved1 : 2;
 472    USHORT DIPM : 1;
 473    USHORT Reserved2 : 1;
 474    USHORT AsynchronousNotification : 1;
 475    USHORT SoftwareSettingsPreservation : 1;
 476    USHORT Reserved3 : 9;
 477  } SerialAtaFeaturesSupported;
 478  struct {
 479    USHORT Reserved0 : 1;
 480    USHORT Reserved1 : 2;
 481    USHORT DIPM : 1;
 482    USHORT Reserved2 : 1;
 483    USHORT AsynchronousNotification : 1;
 484    USHORT SoftwareSettingsPreservation : 1;
 485    USHORT DeviceAutoPS : 1;
 486    USHORT Reserved3 : 8;
 487  } SerialAtaFeaturesEnabled;
 488  USHORT MajorRevision;
 489  USHORT MinorRevision;
 490  struct {
 491    USHORT SmartCommands : 1;
 492    USHORT SecurityMode : 1;
 493    USHORT RemovableMedia : 1;
 494    USHORT PowerManagement : 1;
 495    USHORT PacketCommands : 1;
 496    USHORT WriteCache : 1;
 497    USHORT LookAhead : 1;
 498    USHORT ReleaseInterrupt : 1;
 499    USHORT ServiceInterrupt : 1;
 500    USHORT DeviceReset : 1;
 501    USHORT HostProtectedArea : 1;
 502    USHORT Obsolete1 : 1;
 503    USHORT WriteBuffer : 1;
 504    USHORT ReadBuffer : 1;
 505    USHORT Nop : 1;
 506    USHORT Obsolete2 : 1;
 507    USHORT DownloadMicrocode : 1;
 508    USHORT Reserved1 : 2;
 509    USHORT AdvancedPm : 1;
 510    USHORT Msn : 1;
 511    USHORT PowerUpInStandby : 1;
 512    USHORT ManualPowerUp : 1;
 513    USHORT Reserved2 : 1;
 514    USHORT SetMax : 1;
 515    USHORT Reserved3 : 3;
 516    USHORT FlushCache : 1;
 517    USHORT Reserved4 : 1;
 518    USHORT WordValid : 2;
 519  } CommandSetSupport;
 520  struct {
 521    USHORT Reserved0 : 5;
 522    USHORT GpLogging : 1;
 523    USHORT Reserved1 : 2;
 524    USHORT WWN64Bit : 1;
 525    USHORT Reserved2 : 5;
 526    USHORT WordValid : 2;
 527  } CommandSetSupportExt;
 528  struct {
 529    USHORT SmartCommands : 1;
 530    USHORT SecurityMode : 1;
 531    USHORT RemovableMedia : 1;
 532    USHORT PowerManagement : 1;
 533    USHORT PacketCommands : 1;
 534    USHORT WriteCache : 1;
 535    USHORT LookAhead : 1;
 536    USHORT ReleaseInterrupt : 1;
 537    USHORT ServiceInterrupt : 1;
 538    USHORT DeviceReset : 1;
 539    USHORT HostProtectedArea : 1;
 540    USHORT Obsolete1 : 1;
 541    USHORT WriteBuffer : 1;
 542    USHORT ReadBuffer : 1;
 543    USHORT Nop : 1;
 544    USHORT Obsolete2 : 1;
 545    USHORT DownloadMicrocode : 1;
 546    USHORT Reserved1 : 2;
 547    USHORT AdvancedPm : 1;
 548    USHORT Msn : 1;
 549    USHORT PowerUpInStandby : 1;
 550    USHORT ManualPowerUp : 1;
 551    USHORT Reserved2 : 1;
 552    USHORT SetMax : 1;
 553    USHORT Reserved3 : 3;
 554    USHORT FlushCache : 1;
 555    USHORT Reserved : 3;
 556  } CommandSetActive;
 557  struct {
 558    USHORT Reserved0 : 5;
 559    USHORT GpLogging : 1;
 560    USHORT Reserved1 : 2;
 561    USHORT WWN64Bit : 1;
 562    USHORT Reserved2 : 5;
 563    USHORT WordValid : 2;
 564  } CommandSetActiveExt;
 565  USHORT UltraDMASupport : 8;
 566  USHORT UltraDMAActive : 8;
 567  USHORT TimeRequiredForNormalEraseModeSecurityEraseUnit;
 568  USHORT TimeRequiredForEnhancedEraseModeSecurityEraseUnit;
 569  USHORT CurrentAPMLevel;
 570  USHORT MasterPasswordID;
 571  USHORT HardwareResetResult;
 572  USHORT ReservedWords94[14];
 573  USHORT WorldWideName[4];
 574  USHORT ReservedWords112[13];
 575  USHORT AtapiZeroByteCount;
 576  USHORT ReservedWord126;
 577  USHORT MsnSupport : 2;
 578  USHORT ReservedWord127 : 14;
 579  USHORT SecurityStatus;
 580  USHORT VendorSpecific[31];
 581  USHORT ReservedWord160[16];
 582  USHORT ReservedWord176[46];
 583  struct {
 584    USHORT MajorVersion : 12;
 585    USHORT TransportType : 4;
 586  } TransportMajorVersion;
 587  USHORT TransportMinorVersion;
 588  USHORT ReservedWord224[31];
 589  USHORT Signature : 8;
 590  USHORT CheckSum : 8;
 591} IDENTIFY_PACKET_DATA, *PIDENTIFY_PACKET_DATA;
 592
 593typedef struct _REGISTER_FIS {
 594  UCHAR FisType;
 595  UCHAR Reserved0 : 7;
 596  UCHAR CmdReg : 1;
 597  UCHAR Command;
 598  UCHAR Features;
 599  UCHAR SectorNumber;
 600  UCHAR CylinderLow;
 601  UCHAR CylinderHigh;
 602  UCHAR DeviceHead;
 603  UCHAR SectorNumberExp;
 604  UCHAR CylinderLowExp;
 605  UCHAR CylinderHighExp;
 606  UCHAR FeaturesExp;
 607  UCHAR SectorCount;
 608  UCHAR SectorCountExp;
 609  UCHAR Reserved2;
 610  UCHAR Control;
 611  ULONG Reserved3;
 612} REGISTER_FIS, *PREGISTER_FIS;
 613
 614typedef union _ATA_HYBRID_INFO_FIELDS {
 615  _ANONYMOUS_STRUCT struct {
 616    UCHAR HybridPriority : 4;
 617    UCHAR Reserved0 : 1;
 618    UCHAR InfoValid : 1;
 619    UCHAR Reserved1 : 2;
 620  } DUMMYSTRUCTNAME;
 621  UCHAR AsUchar;
 622} ATA_HYBRID_INFO_FIELDS, *PATA_HYBRID_INFO_FIELDS;
 623
 624typedef struct _DEVICE_SET_PASSWORD {
 625  struct {
 626    USHORT PasswordIdentifier : 1;
 627    USHORT Reserved1 : 7;
 628    USHORT MasterPasswordCapability : 1;
 629    USHORT Reserved2 : 7;
 630  } ControlWord;
 631  USHORT Password[16];
 632  USHORT MasterPasswordIdentifier;
 633  USHORT Reserved[238];
 634} DEVICE_SET_PASSWORD, *PDEVICE_SET_PASSWORD;
 635
 636typedef struct _IDENTIFY_DEVICE_DATA_LOG_PAGE_HEADER {
 637  ULONGLONG RevisionNumber : 16;
 638  ULONGLONG PageNumber : 8;
 639  ULONGLONG Reserved : 39;
 640  ULONGLONG Valid : 1;
 641} IDENTIFY_DEVICE_DATA_LOG_PAGE_HEADER, *PIDENTIFY_DEVICE_DATA_LOG_PAGE_HEADER;
 642
 643typedef struct _IDENTIFY_DEVICE_DATA_LOG_PAGE_SUPPORTED_CAPABILITIES {
 644  IDENTIFY_DEVICE_DATA_LOG_PAGE_HEADER Header;
 645  struct {
 646    ULONGLONG WRV : 1;
 647    ULONGLONG WriteUncorrectable : 1;
 648    ULONGLONG GplDma : 1;
 649    ULONGLONG DmMode3 : 1;
 650    ULONGLONG FreeFall : 1;
 651    ULONGLONG SenseData : 1;
 652    ULONGLONG EPC : 1;
 653    ULONGLONG SmartErrorLogging : 1;
 654    ULONGLONG SmartSelfTest : 1;
 655    ULONGLONG Reserved9 : 1;
 656    ULONGLONG Streaming : 1;
 657    ULONGLONG GPL : 1;
 658    ULONGLONG WriteFuaExt : 1;
 659    ULONGLONG Unload : 1;
 660    ULONGLONG DownloadMicrocode : 1;
 661    ULONGLONG Reserved15ForCFA : 1;
 662    ULONGLONG APM : 1;
 663    ULONGLONG PUIS : 1;
 664    ULONGLONG SpinUp : 1;
 665    ULONGLONG Reserved19 : 1;
 666    ULONGLONG Cmd48Bit : 1;
 667    ULONGLONG Reserved21 : 1;
 668    ULONGLONG FlushCacheExt : 1;
 669    ULONGLONG Smart : 1;
 670    ULONGLONG VolatileWriteCache : 1;
 671    ULONGLONG ReadLookahead : 1;
 672    ULONGLONG Reserved26 : 1;
 673    ULONGLONG WriteBuffer : 1;
 674    ULONGLONG ReadBuffer : 1;
 675    ULONGLONG NOP : 1;
 676    ULONGLONG Reserved30 : 1;
 677    ULONGLONG RZAT : 1;
 678    ULONGLONG Cmd28bit : 1;
 679    ULONGLONG DownloadMicrocodeDma : 1;
 680    ULONGLONG Reserved34 : 1;
 681    ULONGLONG WriteBufferDma : 1;
 682    ULONGLONG ReadBufferDma : 1;
 683    ULONGLONG Reserved37 : 1;
 684    ULONGLONG LpsMisalignmentReporting : 1;
 685    ULONGLONG DRAT : 1;
 686    ULONGLONG Reserved40ForCFA : 1;
 687    ULONGLONG AmaxAddr : 1;
 688    ULONGLONG SetEpcPowerSource : 1;
 689    ULONGLONG LowPowerStandby : 1;
 690    ULONGLONG DSN : 1;
 691    ULONGLONG RequestSenseDeviceFault : 1;
 692    ULONGLONG Reserved : 17;
 693    ULONGLONG Valid : 1;
 694  } SupportedCapabilities;
 695  struct {
 696    ULONGLONG DmMinTransferSize : 16;
 697    ULONGLONG DmMaxTransferSize : 16;
 698    ULONGLONG DmOffsetsImmediateSupported : 1;
 699    ULONGLONG DmImmediateSupported : 1;
 700    ULONGLONG DmOffsetsDeferredSupported : 1;
 701    ULONGLONG Reserved : 28;
 702    ULONGLONG Valid : 1;
 703  } DownloadMicrocodeCapabilities;
 704  struct {
 705    ULONGLONG Rate : 16;
 706    ULONGLONG Reserved : 47;
 707    ULONGLONG Valid : 1;
 708  } NominalMediaRotationRate;
 709  struct {
 710    ULONGLONG Factor : 4;
 711    ULONGLONG Reserved : 59;
 712    ULONGLONG Valid : 1;
 713  } NominalFormFactor;
 714  struct {
 715    ULONGLONG Count : 32;
 716    ULONGLONG Reserved : 31;
 717    ULONGLONG Valid : 1;
 718  } WRVSectorCountMode3;
 719  struct {
 720    ULONGLONG Count : 32;
 721    ULONGLONG Reserved : 31;
 722    ULONGLONG Valid : 1;
 723  } WRVSectorCountMode2;
 724  struct {
 725    ULONGLONG Name;
 726    ULONGLONG Reserved : 63;
 727    ULONGLONG Valid : 1;
 728  } WorldWideName;
 729  struct {
 730    ULONGLONG TrimSupported : 1;
 731    ULONGLONG Reserved : 62;
 732    ULONGLONG Valid : 1;
 733  } DataSetManagement;
 734  struct {
 735    ULONGLONG UtilizationA : 32;
 736    ULONGLONG UtilizationB : 32;
 737    ULONGLONG Reserved0 : 32;
 738    ULONGLONG UtilizationInterval : 8;
 739    ULONGLONG UtilizationUnit : 8;
 740    ULONGLONG UtilizationType : 8;
 741    ULONGLONG Reserved1 : 7;
 742    ULONGLONG Valid : 1;
 743  } UtilizationPerUnitTime;
 744  struct {
 745    ULONGLONG DateTimeRateBasisSupported : 1;
 746    ULONGLONG Reserved0 : 3;
 747    ULONGLONG PowerOnHoursRateBasisSupported : 1;
 748    ULONGLONG Reserved1 : 3;
 749    ULONGLONG SincePowerOnRateBasisSupported : 1;
 750    ULONGLONG Reserved2 : 14;
 751    ULONGLONG SettingRateBasisSupported : 1;
 752    ULONGLONG Reserved3 : 39;
 753    ULONGLONG Valid : 1;
 754  } UtilizationUsageRateSupport;
 755  struct {
 756    ULONGLONG Zoned : 2;
 757    ULONGLONG Reserved : 61;
 758    ULONGLONG Valid : 1;
 759  } ZonedCapabilities;
 760  struct {
 761    ULONGLONG ReportZonesExtSupported : 1;
 762    ULONGLONG NonDataOpenZoneExtSupported : 1;
 763    ULONGLONG NonDataCloseZoneExtSupported : 1;
 764    ULONGLONG NonDataFinishZoneExtSupported : 1;
 765    ULONGLONG NonDataResetWritePointersExtSupported : 1;
 766    ULONGLONG Reserved : 58;
 767    ULONGLONG Valid : 1;
 768  } SupportedZacCapabilities;
 769  UCHAR Reserved[392];
 770} IDENTIFY_DEVICE_DATA_LOG_PAGE_SUPPORTED_CAPABILITIES, *PIDENTIFY_DEVICE_DATA_LOG_PAGE_SUPPORTED_CAPABILITIES;
 771
 772typedef struct _IDENTIFY_DEVICE_DATA_LOG_PAGE_ZONED_DEVICE_INFO {
 773  IDENTIFY_DEVICE_DATA_LOG_PAGE_HEADER Header;
 774  struct {
 775    ULONGLONG URSWRZ : 1;
 776    ULONGLONG Reserved : 62;
 777    ULONGLONG Valid : 1;
 778  } ZonedDeviceCapabilities;
 779  struct {
 780    ULONGLONG Reserved : 63;
 781    ULONGLONG Valid : 1;
 782  } ZonedDeviceSettings;
 783  struct {
 784    ULONGLONG Number : 32;
 785    ULONGLONG Reserved : 31;
 786    ULONGLONG Valid : 1;
 787  } OptimalNumberOfOpenSequentialWritePreferredZones;
 788  struct {
 789    ULONGLONG Number : 32;
 790    ULONGLONG Reserved : 31;
 791    ULONGLONG Valid : 1;
 792  } OptimalNumberOfNonSequentiallyWrittenSequentialWritePreferredZones;
 793  struct {
 794    ULONGLONG Number : 32;
 795    ULONGLONG Reserved : 31;
 796    ULONGLONG Valid : 1;
 797  } MaxNumberOfOpenSequentialWriteRequiredZones;
 798  struct {
 799    ULONGLONG ZacMinorVersion : 16;
 800    ULONGLONG Reserved0 : 47;
 801    ULONGLONG Valid : 1;
 802  } Version;
 803  UCHAR Reserved[456];
 804} IDENTIFY_DEVICE_DATA_LOG_PAGE_ZONED_DEVICE_INFO, *PIDENTIFY_DEVICE_DATA_LOG_PAGE_ZONED_DEVICE_INFO;
 805
 806typedef struct _CURRENT_DEVICE_INTERNAL_STATUS_LOG {
 807  UCHAR LogAddress;
 808  UCHAR Reserved0[3];
 809  ULONG OrganizationID;
 810  USHORT Area1LastLogPage;
 811  USHORT Area2LastLogPage;
 812  USHORT Area3LastLogPage;
 813  UCHAR Reserved2[368];
 814  UCHAR SavedDataAvailable;
 815  UCHAR SavedDataGenerationNumber;
 816  UCHAR ReasonIdentifier[128];
 817} CURRENT_DEVICE_INTERNAL_STATUS_LOG, *PCURRENT_DEVICE_INTERNAL_STATUS_LOG;
 818
 819typedef struct _SAVED_DEVICE_INTERNAL_STATUS_LOG {
 820  UCHAR LogAddress;
 821  UCHAR Reserved0[3];
 822  ULONG OrganizationID;
 823  USHORT Area1LastLogPage;
 824  USHORT Area2LastLogPage;
 825  USHORT Area3LastLogPage;
 826  UCHAR Reserved2[368];
 827  UCHAR SavedDataAvailable;
 828  UCHAR GenerationNumber;
 829  UCHAR ReasonIdentifier[128];
 830} SAVED_DEVICE_INTERNAL_STATUS_LOG, *PSAVED_DEVICE_INTERNAL_STATUS_LOG;
 831
 832typedef struct _DEVICE_STATISTICS_LOG_PAGE_HEADER {
 833  ULONGLONG RevisionNumber : 16;
 834  ULONGLONG PageNumber : 8;
 835  ULONGLONG Reserved : 40;
 836} DEVICE_STATISTICS_LOG_PAGE_HEADER, *PDEVICE_STATISTICS_LOG_PAGE_HEADER;
 837
 838typedef struct _GP_LOG_SUPPORTED_DEVICE_STATISTICS {
 839  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
 840  UCHAR NumberOfEntries;
 841  UCHAR LogPageNumbers[503];
 842} GP_LOG_SUPPORTED_DEVICE_STATISTICS, *PGP_LOG_SUPPORTED_DEVICE_STATISTICS;
 843
 844typedef struct _GP_LOG_GENERAL_STATISTICS {
 845  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
 846  struct {
 847    ULONGLONG Count : 32;
 848    ULONGLONG Reserved : 24;
 849    ULONGLONG ReservedFlags : 3;
 850    ULONGLONG MonitoredConditionMet : 1;
 851    ULONGLONG StatisticsSupportsDsn : 1;
 852    ULONGLONG Normalized : 1;
 853    ULONGLONG ValidValue : 1;
 854    ULONGLONG Supported : 1;
 855  } LifeTimePoweronResets;
 856  struct {
 857    ULONGLONG Count : 32;
 858    ULONGLONG Reserved : 24;
 859    ULONGLONG ReservedFlags : 3;
 860    ULONGLONG MonitoredConditionMet : 1;
 861    ULONGLONG StatisticsSupportsDsn : 1;
 862    ULONGLONG Normalized : 1;
 863    ULONGLONG ValidValue : 1;
 864    ULONGLONG Supported : 1;
 865  } PoweronHours;
 866  struct {
 867    ULONGLONG Count : 48;
 868    ULONGLONG Reserved : 8;
 869    ULONGLONG ReservedFlags : 3;
 870    ULONGLONG MonitoredConditionMet : 1;
 871    ULONGLONG StatisticsSupportsDsn : 1;
 872    ULONGLONG Normalized : 1;
 873    ULONGLONG ValidValue : 1;
 874    ULONGLONG Supported : 1;
 875  } LogicalSectorsWritten;
 876  struct {
 877    ULONGLONG Count : 48;
 878    ULONGLONG Reserved : 8;
 879    ULONGLONG ReservedFlags : 3;
 880    ULONGLONG MonitoredConditionMet : 1;
 881    ULONGLONG StatisticsSupportsDsn : 1;
 882    ULONGLONG Normalized : 1;
 883    ULONGLONG ValidValue : 1;
 884    ULONGLONG Supported : 1;
 885  } WriteCommandCount;
 886  struct {
 887    ULONGLONG Count : 48;
 888    ULONGLONG Reserved : 8;
 889    ULONGLONG ReservedFlags : 3;
 890    ULONGLONG MonitoredConditionMet : 1;
 891    ULONGLONG StatisticsSupportsDsn : 1;
 892    ULONGLONG Normalized : 1;
 893    ULONGLONG ValidValue : 1;
 894    ULONGLONG Supported : 1;
 895  } LogicalSectorsRead;
 896  struct {
 897    ULONGLONG Count : 48;
 898    ULONGLONG Reserved : 8;
 899    ULONGLONG ReservedFlags : 3;
 900    ULONGLONG MonitoredConditionMet : 1;
 901    ULONGLONG StatisticsSupportsDsn : 1;
 902    ULONGLONG Normalized : 1;
 903    ULONGLONG ValidValue : 1;
 904    ULONGLONG Supported : 1;
 905  } ReadCommandCount;
 906  struct {
 907    ULONGLONG TimeStamp : 48;
 908    ULONGLONG Reserved : 8;
 909    ULONGLONG ReservedFlags : 3;
 910    ULONGLONG MonitoredConditionMet : 1;
 911    ULONGLONG StatisticsSupportsDsn : 1;
 912    ULONGLONG Normalized : 1;
 913    ULONGLONG ValidValue : 1;
 914    ULONGLONG Supported : 1;
 915  } DateAndTime;
 916  struct {
 917    ULONGLONG Count : 32;
 918    ULONGLONG Reserved : 24;
 919    ULONGLONG ReservedFlags : 3;
 920    ULONGLONG MonitoredConditionMet : 1;
 921    ULONGLONG StatisticsSupportsDsn : 1;
 922    ULONGLONG Normalized : 1;
 923    ULONGLONG ValidValue : 1;
 924    ULONGLONG Supported : 1;
 925  } PendingErrorCount;
 926  struct {
 927    ULONGLONG Value : 16;
 928    ULONGLONG Reserved : 40;
 929    ULONGLONG ReservedFlags : 3;
 930    ULONGLONG MonitoredConditionMet : 1;
 931    ULONGLONG StatisticsSupportsDsn : 1;
 932    ULONGLONG Normalized : 1;
 933    ULONGLONG ValidValue : 1;
 934    ULONGLONG Supported : 1;
 935  } WorkloadUtilizaton;
 936  struct {
 937    ULONGLONG Value : 8;
 938    ULONGLONG Reserved0 : 28;
 939    ULONGLONG RateBasis : 4;
 940    ULONGLONG RateValidity : 8;
 941    ULONGLONG Reserved1 : 8;
 942    ULONGLONG ReservedFlags : 3;
 943    ULONGLONG MonitoredConditionMet : 1;
 944    ULONGLONG StatisticsSupportsDsn : 1;
 945    ULONGLONG Normalized : 1;
 946    ULONGLONG ValidValue : 1;
 947    ULONGLONG Supported : 1;
 948  } UtilizationUsageRate;
 949  UCHAR Reserved[424];
 950} GP_LOG_GENERAL_STATISTICS, *PGP_LOG_GENERAL_STATISTICS;
 951
 952typedef struct _GP_LOG_FREE_FALL_STATISTICS {
 953  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
 954  struct {
 955    ULONGLONG Count : 32;
 956    ULONGLONG Reserved : 24;
 957    ULONGLONG ReservedFlags : 3;
 958    ULONGLONG MonitoredConditionMet : 1;
 959    ULONGLONG StatisticsSupportsDsn : 1;
 960    ULONGLONG Normalized : 1;
 961    ULONGLONG ValidValue : 1;
 962    ULONGLONG Supported : 1;
 963  } NumberofFreeFallEventsDetected;
 964  struct {
 965    ULONGLONG Count : 32;
 966    ULONGLONG Reserved : 24;
 967    ULONGLONG ReservedFlags : 3;
 968    ULONGLONG MonitoredConditionMet : 1;
 969    ULONGLONG StatisticsSupportsDsn : 1;
 970    ULONGLONG Normalized : 1;
 971    ULONGLONG ValidValue : 1;
 972    ULONGLONG Supported : 1;
 973  } OverlimitShockEvents;
 974  UCHAR Reserved[488];
 975} GP_LOG_FREE_FALL_STATISTICS, *PGP_LOG_FREE_FALL_STATISTICS;
 976
 977typedef struct _GP_LOG_ROTATING_MEDIA_STATISTICS {
 978  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
 979  struct {
 980    ULONGLONG Count : 32;
 981    ULONGLONG Reserved : 24;
 982    ULONGLONG ReservedFlags : 3;
 983    ULONGLONG MonitoredConditionMet : 1;
 984    ULONGLONG StatisticsSupportsDsn : 1;
 985    ULONGLONG Normalized : 1;
 986    ULONGLONG ValidValue : 1;
 987    ULONGLONG Supported : 1;
 988  } SpindleMotorPoweronHours;
 989  struct {
 990    ULONGLONG Count : 32;
 991    ULONGLONG Reserved : 24;
 992    ULONGLONG ReservedFlags : 3;
 993    ULONGLONG MonitoredConditionMet : 1;
 994    ULONGLONG StatisticsSupportsDsn : 1;
 995    ULONGLONG Normalized : 1;
 996    ULONGLONG ValidValue : 1;
 997    ULONGLONG Supported : 1;
 998  } HeadFlyingHours;
 999  struct {
1000    ULONGLONG Count : 32;
1001    ULONGLONG Reserved : 24;
1002    ULONGLONG ReservedFlags : 3;
1003    ULONGLONG MonitoredConditionMet : 1;
1004    ULONGLONG StatisticsSupportsDsn : 1;
1005    ULONGLONG Normalized : 1;
1006    ULONGLONG ValidValue : 1;
1007    ULONGLONG Supported : 1;
1008  } HeadLoadEvents;
1009  struct {
1010    ULONGLONG Count : 32;
1011    ULONGLONG Reserved : 24;
1012    ULONGLONG ReservedFlags : 3;
1013    ULONGLONG MonitoredConditionMet : 1;
1014    ULONGLONG StatisticsSupportsDsn : 1;
1015    ULONGLONG Normalized : 1;
1016    ULONGLONG ValidValue : 1;
1017    ULONGLONG Supported : 1;
1018  } NumberOfReallocatedLogicalSectors;
1019  struct {
1020    ULONGLONG Count : 32;
1021    ULONGLONG Reserved : 24;
1022    ULONGLONG ReservedFlags : 3;
1023    ULONGLONG MonitoredConditionMet : 1;
1024    ULONGLONG StatisticsSupportsDsn : 1;
1025    ULONGLONG Normalized : 1;
1026    ULONGLONG ValidValue : 1;
1027    ULONGLONG Supported : 1;
1028  } ReadRecoveryAttempts;
1029  struct {
1030    ULONGLONG Count : 32;
1031    ULONGLONG Reserved : 24;
1032    ULONGLONG ReservedFlags : 3;
1033    ULONGLONG MonitoredConditionMet : 1;
1034    ULONGLONG StatisticsSupportsDsn : 1;
1035    ULONGLONG Normalized : 1;
1036    ULONGLONG ValidValue : 1;
1037    ULONGLONG Supported : 1;
1038  } NumberOfMechanicalStartFailures;
1039  struct {
1040    ULONGLONG Count : 32;
1041    ULONGLONG Reserved : 24;
1042    ULONGLONG ReservedFlags : 3;
1043    ULONGLONG MonitoredConditionMet : 1;
1044    ULONGLONG StatisticsSupportsDsn : 1;
1045    ULONGLONG Normalized : 1;
1046    ULONGLONG ValidValue : 1;
1047    ULONGLONG Supported : 1;
1048  } NumberOfReallocationCandidateLogicalSectors;
1049  struct {
1050    ULONGLONG Count : 32;
1051    ULONGLONG Reserved : 24;
1052    ULONGLONG ReservedFlags : 3;
1053    ULONGLONG MonitoredConditionMet : 1;
1054    ULONGLONG StatisticsSupportsDsn : 1;
1055    ULONGLONG Normalized : 1;
1056    ULONGLONG ValidValue : 1;
1057    ULONGLONG Supported : 1;
1058  } NumberOfHighPriorityUnloadEvents;
1059  UCHAR Reserved[440];
1060} GP_LOG_ROTATING_MEDIA_STATISTICS, *PGP_LOG_ROTATING_MEDIA_STATISTICS;
1061
1062typedef struct _GP_LOG_GENERAL_ERROR_STATISTICS {
1063  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
1064  struct {
1065    ULONGLONG Count : 32;
1066    ULONGLONG Reserved : 24;
1067    ULONGLONG ReservedFlags : 3;
1068    ULONGLONG MonitoredConditionMet : 1;
1069    ULONGLONG StatisticsSupportsDsn : 1;
1070    ULONGLONG Normalized : 1;
1071    ULONGLONG ValidValue : 1;
1072    ULONGLONG Supported : 1;
1073  } NumberOfReportedUncorrectableErrors;
1074  struct {
1075    ULONGLONG Count : 32;
1076    ULONGLONG Reserved : 24;
1077    ULONGLONG ReservedFlags : 3;
1078    ULONGLONG MonitoredConditionMet : 1;
1079    ULONGLONG StatisticsSupportsDsn : 1;
1080    ULONGLONG Normalized : 1;
1081    ULONGLONG ValidValue : 1;
1082    ULONGLONG Supported : 1;
1083  } NumberOfResetsBetweenCommandAcceptanceAndCommandCompletion;
1084  UCHAR Reserved[488];
1085} GP_LOG_GENERAL_ERROR_STATISTICS, *PGP_LOG_GENERAL_ERROR_STATISTICS;
1086
1087typedef struct _GP_LOG_TEMPERATURE_STATISTICS {
1088  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
1089  struct {
1090    ULONGLONG Value : 8;
1091    ULONGLONG Reserved : 48;
1092    ULONGLONG ReservedFlags : 3;
1093    ULONGLONG MonitoredConditionMet : 1;
1094    ULONGLONG StatisticsSupportsDsn : 1;
1095    ULONGLONG Normalized : 1;
1096    ULONGLONG ValidValue : 1;
1097    ULONGLONG Supported : 1;
1098  } CurrentTemperature;
1099  struct {
1100    ULONGLONG Value : 8;
1101    ULONGLONG Reserved : 48;
1102    ULONGLONG ReservedFlags : 3;
1103    ULONGLONG MonitoredConditionMet : 1;
1104    ULONGLONG StatisticsSupportsDsn : 1;
1105    ULONGLONG Normalized : 1;
1106    ULONGLONG ValidValue : 1;
1107    ULONGLONG Supported : 1;
1108  } AverageShortTermTemperature;
1109  struct {
1110    ULONGLONG Value : 8;
1111    ULONGLONG Reserved : 48;
1112    ULONGLONG ReservedFlags : 3;
1113    ULONGLONG MonitoredConditionMet : 1;
1114    ULONGLONG StatisticsSupportsDsn : 1;
1115    ULONGLONG Normalized : 1;
1116    ULONGLONG ValidValue : 1;
1117    ULONGLONG Supported : 1;
1118  } AverageLongTermTemperature;
1119  struct {
1120    ULONGLONG Value : 8;
1121    ULONGLONG Reserved : 48;
1122    ULONGLONG ReservedFlags : 3;
1123    ULONGLONG MonitoredConditionMet : 1;
1124    ULONGLONG StatisticsSupportsDsn : 1;
1125    ULONGLONG Normalized : 1;
1126    ULONGLONG ValidValue : 1;
1127    ULONGLONG Supported : 1;
1128  } HighestTemperature;
1129  struct {
1130    ULONGLONG Value : 8;
1131    ULONGLONG Reserved : 48;
1132    ULONGLONG ReservedFlags : 3;
1133    ULONGLONG MonitoredConditionMet : 1;
1134    ULONGLONG StatisticsSupportsDsn : 1;
1135    ULONGLONG Normalized : 1;
1136    ULONGLONG ValidValue : 1;
1137    ULONGLONG Supported : 1;
1138  } LowestTemperature;
1139  struct {
1140    ULONGLONG Value : 8;
1141    ULONGLONG Reserved : 48;
1142    ULONGLONG ReservedFlags : 3;
1143    ULONGLONG MonitoredConditionMet : 1;
1144    ULONGLONG StatisticsSupportsDsn : 1;
1145    ULONGLONG Normalized : 1;
1146    ULONGLONG ValidValue : 1;
1147    ULONGLONG Supported : 1;
1148  } HighestAverageShortTermTemperature;
1149  struct {
1150    ULONGLONG Value : 8;
1151    ULONGLONG Reserved : 48;
1152    ULONGLONG ReservedFlags : 3;
1153    ULONGLONG MonitoredConditionMet : 1;
1154    ULONGLONG StatisticsSupportsDsn : 1;
1155    ULONGLONG Normalized : 1;
1156    ULONGLONG ValidValue : 1;
1157    ULONGLONG Supported : 1;
1158  } LowestAverageShortTermTemperature;
1159  struct {
1160    ULONGLONG Value : 8;
1161    ULONGLONG Reserved : 48;
1162    ULONGLONG ReservedFlags : 3;
1163    ULONGLONG MonitoredConditionMet : 1;
1164    ULONGLONG StatisticsSupportsDsn : 1;
1165    ULONGLONG Normalized : 1;
1166    ULONGLONG ValidValue : 1;
1167    ULONGLONG Supported : 1;
1168  } HighstAverageLongTermTemperature;
1169  struct {
1170    ULONGLONG Value : 8;
1171    ULONGLONG Reserved : 48;
1172    ULONGLONG ReservedFlags : 3;
1173    ULONGLONG MonitoredConditionMet : 1;
1174    ULONGLONG StatisticsSupportsDsn : 1;
1175    ULONGLONG Normalized : 1;
1176    ULONGLONG ValidValue : 1;
1177    ULONGLONG Supported : 1;
1178  } LowestAverageLongTermTemperature;
1179  struct {
1180    ULONGLONG Value : 8;
1181    ULONGLONG Reserved : 48;
1182    ULONGLONG ReservedFlags : 3;
1183    ULONGLONG MonitoredConditionMet : 1;
1184    ULONGLONG StatisticsSupportsDsn : 1;
1185    ULONGLONG Normalized : 1;
1186    ULONGLONG ValidValue : 1;
1187    ULONGLONG Supported : 1;
1188  } TimeInOverTemperature;
1189  struct {
1190    ULONGLONG Value : 8;
1191    ULONGLONG Reserved : 48;
1192    ULONGLONG ReservedFlags : 3;
1193    ULONGLONG MonitoredConditionMet : 1;
1194    ULONGLONG StatisticsSupportsDsn : 1;
1195    ULONGLONG Normalized : 1;
1196    ULONGLONG ValidValue : 1;
1197    ULONGLONG Supported : 1;
1198  } SpecifiedMaximumOperatingTemperature;
1199  struct {
1200    ULONGLONG Value : 8;
1201    ULONGLONG Reserved : 48;
1202    ULONGLONG ReservedFlags : 3;
1203    ULONGLONG MonitoredConditionMet : 1;
1204    ULONGLONG StatisticsSupportsDsn : 1;
1205    ULONGLONG Normalized : 1;
1206    ULONGLONG ValidValue : 1;
1207    ULONGLONG Supported : 1;
1208  } TimeInUnderTemperature;
1209  struct {
1210    ULONGLONG Value : 8;
1211    ULONGLONG Reserved : 48;
1212    ULONGLONG ReservedFlags : 3;
1213    ULONGLONG MonitoredConditionMet : 1;
1214    ULONGLONG StatisticsSupportsDsn : 1;
1215    ULONGLONG Normalized : 1;
1216    ULONGLONG ValidValue : 1;
1217    ULONGLONG Supported : 1;
1218  } SpecifiedMinimumOperatingTemperature;
1219  UCHAR Reserved[400];
1220} GP_LOG_TEMPERATURE_STATISTICS, *PGP_LOG_TEMPERATURE_STATISTICS;
1221
1222typedef struct _GP_LOG_TRANSPORT_STATISTICS {
1223  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
1224  struct {
1225    ULONGLONG Count : 8;
1226    ULONGLONG Reserved : 48;
1227    ULONGLONG ReservedFlags : 3;
1228    ULONGLONG MonitoredConditionMet : 1;
1229    ULONGLONG StatisticsSupportsDsn : 1;
1230    ULONGLONG Normalized : 1;
1231    ULONGLONG ValidValue : 1;
1232    ULONGLONG Supported : 1;
1233  } NumberOfHardwareResets;
1234  struct {
1235    ULONGLONG Count : 32;
1236    ULONGLONG Reserved : 24;
1237    ULONGLONG ReservedFlags : 3;
1238    ULONGLONG MonitoredConditionMet : 1;
1239    ULONGLONG StatisticsSupportsDsn : 1;
1240    ULONGLONG Normalized : 1;
1241    ULONGLONG ValidValue : 1;
1242    ULONGLONG Supported : 1;
1243  } NumberOfAsrEvents;
1244  struct {
1245    ULONGLONG Count : 32;
1246    ULONGLONG Reserved : 24;
1247    ULONGLONG ReservedFlags : 3;
1248    ULONGLONG MonitoredConditionMet : 1;
1249    ULONGLONG StatisticsSupportsDsn : 1;
1250    ULONGLONG Normalized : 1;
1251    ULONGLONG ValidValue : 1;
1252    ULONGLONG Supported : 1;
1253  } NumberOfInterfaceCrcErrors;
1254  UCHAR Reserved[480];
1255} GP_LOG_TRANSPORT_STATISTICS, *PGP_LOG_TRANSPORT_STATISTICS;
1256
1257typedef struct _GP_LOG_SOLID_STATE_DEVICE_STATISTICS {
1258  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
1259  struct {
1260    ULONGLONG Value : 8;
1261    ULONGLONG Reserved : 48;
1262    ULONGLONG ReservedFlags : 3;
1263    ULONGLONG MonitoredConditionMet : 1;
1264    ULONGLONG StatisticsSupportsDsn : 1;
1265    ULONGLONG Normalized : 1;
1266    ULONGLONG ValidValue : 1;
1267    ULONGLONG Supported : 1;
1268  } PercentageUsedEnduranceIndicator;
1269  UCHAR Reserved[496];
1270} GP_LOG_SOLID_STATE_DEVICE_STATISTICS, *PGP_LOG_SOLID_STATE_DEVICE_STATISTICS;
1271
1272typedef struct _GP_LOG_NCQ_COMMAND_ERROR {
1273  UCHAR NcqTag : 5;
1274  UCHAR Reserved0 : 1;
1275  UCHAR UNL : 1;
1276  UCHAR NonQueuedCmd : 1;
1277  UCHAR Reserved1;
1278  UCHAR Status;
1279  UCHAR Error;
1280  UCHAR LBA7_0;
1281  UCHAR LBA15_8;
1282  UCHAR LBA23_16;
1283  UCHAR Device;
1284  UCHAR LBA31_24;
1285  UCHAR LBA39_32;
1286  UCHAR LBA47_40;
1287  UCHAR Reserved2;
1288  UCHAR Count7_0;
1289  UCHAR Count15_8;
1290  UCHAR SenseKey;
1291  UCHAR ASC;
1292  UCHAR ASCQ;
1293  UCHAR Reserved3[239];
1294  UCHAR Vendor[255];
1295  UCHAR Checksum;
1296} GP_LOG_NCQ_COMMAND_ERROR, *PGP_LOG_NCQ_COMMAND_ERROR;
1297
1298typedef struct _GP_LOG_NCQ_NON_DATA {
1299  struct {
1300    ULONG AbortNcq : 1;
1301    ULONG AbortAll : 1;
1302    ULONG AbortStreaming : 1;
1303    ULONG AbortNonStreaming : 1;
1304    ULONG AbortSelectedTTag : 1;
1305    ULONG Reserved : 27;
1306  } SubCmd0;
1307  struct {
1308    ULONG DeadlineHandling : 1;
1309    ULONG WriteDataNotContinue : 1;
1310    ULONG ReadDataNotContinue : 1;
1311    ULONG Reserved : 29;
1312  } SubCmd1;
1313  struct {
1314    ULONG HybridDemoteBySize : 1;
1315    ULONG Reserved : 31;
1316  } SubCmd2;
1317  struct {
1318    ULONG HybridChangeByLbaRange : 1;
1319    ULONG Reserved : 31;
1320  } SubCmd3;
1321  struct {
1322    ULONG HybridControl : 1;
1323    ULONG Reserved : 31;
1324  } SubCmd4;
1325  struct {
1326    ULONG Reserved : 32;
1327  } SubCmd5;
1328  struct {
1329    ULONG Reserved : 32;
1330  } SubCmd6;
1331  struct {
1332    ULONG Reserved : 32;
1333  } SubCmd7;
1334  struct {
1335    ULONG Reserved : 32;
1336  } SubCmd8;
1337  struct {
1338    ULONG Reserved : 32;
1339  } SubCmd9;
1340  struct {
1341    ULONG Reserved : 32;
1342  } SubCmdA;
1343  struct {
1344    ULONG Reserved : 32;
1345  } SubCmdB;
1346  struct {
1347    ULONG Reserved : 32;
1348  } SubCmdC;
1349  struct {
1350    ULONG Reserved : 32;
1351  } SubCmdD;
1352  struct {
1353    ULONG Reserved : 32;
1354  } SubCmdE;
1355  struct {
1356    ULONG Reserved : 32;
1357  } SubCmdF;
1358  ULONG Reserved[112];
1359} GP_LOG_NCQ_NON_DATA, *PGP_LOG_NCQ_NON_DATA;
1360
1361typedef struct _GP_LOG_NCQ_SEND_RECEIVE {
1362  struct {
1363    ULONG DataSetManagement : 1;
1364    ULONG HybridEvict : 1;
1365    ULONG Reserved : 30;
1366  } SubCmd;
1367  struct {
1368    ULONG Trim : 1;
1369    ULONG Reserved : 31;
1370  } DataSetManagement;
1371  ULONG Reserved[126];
1372} GP_LOG_NCQ_SEND_RECEIVE, *PGP_LOG_NCQ_SEND_RECEIVE;
1373
1374typedef struct _GP_LOG_HYBRID_INFORMATION_HEADER {
1375  USHORT HybridInfoDescrCount : 4;
1376  USHORT Reserved0 : 12;
1377  UCHAR Enabled;
1378  UCHAR HybridHealth;
1379  UCHAR DirtyLowThreshold;
1380  UCHAR DirtyHighThreshold;
1381  UCHAR OptimalWriteGranularity;
1382  UCHAR MaximumHybridPriorityLevel : 4;
1383  UCHAR Reserved1 : 4;
1384  UCHAR PowerCondidtion;
1385  UCHAR CachingMediumEnabled ;
1386  struct {
1387    UCHAR MaximumPriorityBehavior : 1;
1388    UCHAR SupportCacheBehavior : 1;
1389    UCHAR Reserved : 6;
1390  } SupportedOptions;
1391  UCHAR Reserved2;
1392  ULONG TimeSinceEnabled;
1393  ULONGLONG NVMSize;
1394  ULONGLONG EnableCount;
1395  USHORT MaximumEvictionCommands : 5;
1396  USHORT Reserved3 : 11;
1397  USHORT MaximumEvictionDataBlocks;
1398  UCHAR Reserved[28];
1399} GP_LOG_HYBRID_INFORMATION_HEADER, *PGP_LOG_HYBRID_INFORMATION_HEADER;
1400
1401typedef struct _GP_LOG_HYBRID_INFORMATION_DESCRIPTOR {
1402  UCHAR HybridPriority;
1403  UCHAR ConsumedNVMSizeFraction;
1404  UCHAR ConsumedMappingResourcesFraction;
1405  UCHAR ConsumedNVMSizeForDirtyDataFraction;
1406  UCHAR ConsumedMappingResourcesForDirtyDataFraction;
1407  UCHAR Reserved[11];
1408} GP_LOG_HYBRID_INFORMATION_DESCRIPTOR, *PGP_LOG_HYBRID_INFORMATION_DESCRIPTOR;
1409
1410typedef struct _GP_LOG_HYBRID_INFORMATION {
1411  GP_LOG_HYBRID_INFORMATION_HEADER Header;
1412  GP_LOG_HYBRID_INFORMATION_DESCRIPTOR Descriptor[0];
1413} GP_LOG_HYBRID_INFORMATION, *PGP_LOG_HYBRID_INFORMATION;
1414
1415typedef struct _REPORT_ZONES_EXT_DATA {
1416  ULONG ZoneListLength;
1417  UCHAR SAME : 4;
1418  UCHAR Reserved0 : 4;
1419  UCHAR Reserved1[3];
1420  ULONGLONG MaxLBA : 48;
1421  ULONGLONG Reserved2 : 16;
1422  UCHAR Reserved3[48];
1423} REPORT_ZONES_EXT_DATA, *PREPORT_ZONES_EXT_DATA;
1424
1425typedef struct _ATA_ZONE_DESCRIPTOR {
1426  UCHAR ZoneType : 4;
1427  UCHAR Reserved0 : 4;
1428  UCHAR Reset : 1;
1429  UCHAR NonSeq : 1;
1430  UCHAR Reserved1 : 2;
1431  UCHAR ZoneCondition : 4;
1432  UCHAR Reserved2[6];
1433  ULONGLONG ZoneLength : 48;
1434  ULONGLONG Reserved3 : 16;
1435  ULONGLONG ZoneStartLBA : 48;
1436  ULONGLONG Reserved4 : 16;
1437  ULONGLONG WritePointerLBA : 48;
1438  ULONGLONG Reserved5 : 16;
1439  UCHAR Reserved6[32];
1440} ATA_ZONE_DESCRIPTOR, *PATA_ZONE_DESCRIPTOR;
1441
1442typedef struct _ATA_PHYSICAL_ELEMENT_STATUS_DESCRIPTOR {
1443  UCHAR Reserved1[4];
1444  ULONG ElementIdentifier;
1445  UCHAR Reserved2[6];
1446  UCHAR PhysicalElementType;
1447  UCHAR PhysicalElementHealth;
1448  ULONGLONG AssociatedCapacity;
1449  UCHAR Reserved3[8];
1450} ATA_PHYSICAL_ELEMENT_STATUS_DESCRIPTOR, *PATA_PHYSICAL_ELEMENT_STATUS_DESCRIPTOR;
1451
1452typedef struct _ATA_GET_PHYSICAL_ELEMENT_STATUS_PARAMETER_DATA {
1453  ULONG NumberOfDescriptors;
1454  ULONG NumberOfDescriptorsReturned;
1455  ULONG ElementIdentifierBeingDepoped;
1456  UCHAR Reserved[20];
1457  ATA_PHYSICAL_ELEMENT_STATUS_DESCRIPTOR Descriptors[ANYSIZE_ARRAY];
1458} ATA_GET_PHYSICAL_ELEMENT_STATUS_PARAMETER_DATA, *PATA_GET_PHYSICAL_ELEMENT_STATUS_PARAMETER_DATA;
1459
1460#pragma pack(pop)
1461
1462#define ATAPI_MODE_SENSE        0x5A
1463#define ATAPI_MODE_SELECT       0x55
1464#define ATAPI_LS120_FORMAT_UNIT 0x24
1465
1466#define IDE_LBA_MODE   (1 << 6)
1467
1468#define IDE_DC_DISABLE_INTERRUPTS    0x02
1469#define IDE_DC_RESET_CONTROLLER      0x04
1470#define IDE_DC_REENABLE_CONTROLLER   0x00
1471
1472#define IDE_STATUS_ERROR             0x01
1473#define IDE_STATUS_INDEX             0x02
1474#define IDE_STATUS_CORRECTED_ERROR   0x04
1475#define IDE_STATUS_DRQ               0x08
1476#define IDE_STATUS_DSC               0x10
1477#define IDE_STATUS_DEVICE_FAULT      0x20
1478#define IDE_STATUS_DRDY              0x40
1479#define IDE_STATUS_IDLE              0x50
1480#define IDE_STATUS_BUSY              0x80
1481
1482#define IDE_ERROR_BAD_BLOCK          0x80
1483#define IDE_ERROR_CRC_ERROR          IDE_ERROR_BAD_BLOCK
1484#define IDE_ERROR_DATA_ERROR         0x40
1485#define IDE_ERROR_MEDIA_CHANGE       0x20
1486#define IDE_ERROR_ID_NOT_FOUND       0x10
1487#define IDE_ERROR_MEDIA_CHANGE_REQ   0x08
1488#define IDE_ERROR_COMMAND_ABORTED    0x04
1489#define IDE_ERROR_END_OF_MEDIA       0x02
1490#define IDE_ERROR_ILLEGAL_LENGTH     0x01
1491#define IDE_ERROR_ADDRESS_NOT_FOUND  IDE_ERROR_ILLEGAL_LENGTH
1492
1493#define IDE_COMMAND_NOP                         0x00
1494#define IDE_COMMAND_DATA_SET_MANAGEMENT         0x06
1495#define IDE_COMMAND_ATAPI_RESET                 0x08
1496#define IDE_COMMAND_GET_PHYSICAL_ELEMENT_STATUS 0x12
1497#define IDE_COMMAND_READ                        0x20
1498#define IDE_COMMAND_READ_EXT                    0x24
1499#define IDE_COMMAND_READ_DMA_EXT                0x25
1500#define IDE_COMMAND_READ_DMA_QUEUED_EXT         0x26
1501#define IDE_COMMAND_READ_MULTIPLE_EXT           0x29
1502#define IDE_COMMAND_READ_LOG_EXT                0x2f
1503#define IDE_COMMAND_WRITE                       0x30
1504#define IDE_COMMAND_WRITE_EXT                   0x34
1505#define IDE_COMMAND_WRITE_DMA_EXT               0x35
1506#define IDE_COMMAND_WRITE_DMA_QUEUED_EXT        0x36
1507#define IDE_COMMAND_WRITE_MULTIPLE_EXT          0x39
1508#define IDE_COMMAND_WRITE_DMA_FUA_EXT           0x3D
1509#define IDE_COMMAND_WRITE_DMA_QUEUED_FUA_EXT    0x3E
1510#define IDE_COMMAND_WRITE_LOG_EXT               0x3F
1511#define IDE_COMMAND_VERIFY                      0x40
1512#define IDE_COMMAND_VERIFY_EXT                  0x42
1513#define IDE_COMMAND_ZAC_MANAGEMENT_IN           0x4A
1514#define IDE_COMMAND_WRITE_LOG_DMA_EXT           0x57
1515#define IDE_COMMAND_TRUSTED_NON_DATA            0x5B
1516#define IDE_COMMAND_TRUSTED_RECEIVE             0x5C
1517#define IDE_COMMAND_TRUSTED_RECEIVE_DMA         0x5D
1518#define IDE_COMMAND_TRUSTED_SEND                0x5E
1519#define IDE_COMMAND_TRUSTED_SEND_DMA            0x5F
1520#define IDE_COMMAND_READ_FPDMA_QUEUED           0x60
1521#define IDE_COMMAND_WRITE_FPDMA_QUEUED          0x61
1522#define IDE_COMMAND_NCQ_NON_DATA                0x63
1523#define IDE_COMMAND_SEND_FPDMA_QUEUED           0x64
1524#define IDE_COMMAND_RECEIVE_FPDMA_QUEUED        0x65
1525#define IDE_COMMAND_SET_DATE_AND_TIME           0x77
1526#define IDE_COMMAND_REMOVE_ELEMENT_AND_TRUNCATE 0x7C
1527#define IDE_COMMAND_EXECUTE_DEVICE_DIAGNOSTIC   0x90
1528#define IDE_COMMAND_SET_DRIVE_PARAMETERS        0x91
1529#define IDE_COMMAND_DOWNLOAD_MICROCODE          0x92
1530#define IDE_COMMAND_DOWNLOAD_MICROCODE_DMA      0x93
1531#define IDE_COMMAND_ZAC_MANAGEMENT_OUT          0x9F
1532#define IDE_COMMAND_ATAPI_PACKET                0xA0
1533#define IDE_COMMAND_ATAPI_IDENTIFY              0xA1
1534#define IDE_COMMAND_SMART                       0xB0
1535#define IDE_COMMAND_READ_LOG_DMA_EXT            0xB1
1536#define IDE_COMMAND_SANITIZE_DEVICE             0xB4
1537#define IDE_COMMAND_READ_MULTIPLE               0xC4
1538#define IDE_COMMAND_WRITE_MULTIPLE              0xC5
1539#define IDE_COMMAND_SET_MULTIPLE                0xC6
1540#define IDE_COMMAND_READ_DMA                    0xC8
1541#define IDE_COMMAND_WRITE_DMA                   0xCA
1542#define IDE_COMMAND_WRITE_DMA_QUEUED            0xCC
1543#define IDE_COMMAND_WRITE_MULTIPLE_FUA_EXT      0xCE
1544#define IDE_COMMAND_GET_MEDIA_STATUS            0xDA
1545#define IDE_COMMAND_DOOR_LOCK                   0xDE
1546#define IDE_COMMAND_DOOR_UNLOCK                 0xDF
1547#define IDE_COMMAND_STANDBY_IMMEDIATE           0xE0
1548#define IDE_COMMAND_IDLE_IMMEDIATE              0xE1
1549#define IDE_COMMAND_CHECK_POWER                 0xE5
1550#define IDE_COMMAND_SLEEP                       0xE6
1551#define IDE_COMMAND_FLUSH_CACHE                 0xE7
1552#define IDE_COMMAND_FLUSH_CACHE_EXT             0xEA
1553#define IDE_COMMAND_IDENTIFY                    0xEC
1554#define IDE_COMMAND_MEDIA_EJECT                 0xED
1555#define IDE_COMMAND_SET_FEATURE                 0xEF
1556#define IDE_COMMAND_SECURITY_SET_PASSWORD       0xF1
1557#define IDE_COMMAND_SECURITY_UNLOCK             0xF2
1558#define IDE_COMMAND_SECURITY_ERASE_PREPARE      0xF3
1559#define IDE_COMMAND_SECURITY_ERASE_UNIT         0xF4
1560#define IDE_COMMAND_SECURITY_FREEZE_LOCK        0xF5
1561#define IDE_COMMAND_SECURITY_DISABLE_PASSWORD   0xF6
1562#define IDE_COMMAND_NOT_VALID                   0xFF
1563
1564#define IDE_SET_DEFAULT_PIO_MODE(mode)      ((UCHAR)1)
1565#define IDE_SET_ADVANCE_PIO_MODE(mode)      ((UCHAR)((1 << 3) | (mode)))
1566#define IDE_SET_SWDMA_MODE(mode)            ((UCHAR)((1 << 4) | (mode)))
1567#define IDE_SET_MWDMA_MODE(mode)            ((UCHAR)((1 << 5) | (mode)))
1568#define IDE_SET_UDMA_MODE(mode)             ((UCHAR)((1 << 6) | (mode)))
1569
1570#define IDE_FEATURE_ENABLE_WRITE_CACHE          0x2
1571#define IDE_FEATURE_SET_TRANSFER_MODE           0x3
1572#define IDE_FEATURE_ENABLE_PUIS                 0x6
1573#define IDE_FEATURE_PUIS_SPIN_UP                0x7
1574#define IDE_FEATURE_ENABLE_SATA_FEATURE         0x10
1575#define IDE_FEATURE_DISABLE_MSN                 0x31
1576#define IDE_FEATURE_DISABLE_REVERT_TO_POWER_ON  0x66
1577#define IDE_FEATURE_DISABLE_WRITE_CACHE         0x82
1578#define IDE_FEATURE_DISABLE_PUIS                0x86
1579#define IDE_FEATURE_DISABLE_SATA_FEATURE        0x90
1580#define IDE_FEATURE_ENABLE_MSN                  0x95
1581
1582#define IDE_SATA_FEATURE_NON_ZERO_DMA_BUFFER_OFFSET         0x1
1583#define IDE_SATA_FEATURE_DMA_SETUP_FIS_AUTO_ACTIVATE        0x2
1584#define IDE_SATA_FEATURE_DEVICE_INITIATED_POWER_MANAGEMENT  0x3
1585#define IDE_SATA_FEATURE_GUARANTEED_IN_ORDER_DELIVERY       0x4
1586#define IDE_SATA_FEATURE_ASYNCHRONOUS_NOTIFICATION          0x5
1587#define IDE_SATA_FEATURE_SOFTWARE_SETTINGS_PRESERVATION     0x6
1588#define IDE_SATA_FEATURE_DEVICE_AUTO_PARTIAL_TO_SLUMBER     0x7
1589#define IDE_SATA_FEATURE_ENABLE_HARDWARE_FEATURE_CONTROL    0x8
1590#define IDE_SATA_FEATURE_DEVSLP                             0x9
1591#define IDE_SATA_FEATURE_HYBRID_INFORMATION                 0xA
1592
1593#define IDE_SMART_READ_ATTRIBUTES               0xD0
1594#define IDE_SMART_READ_THRESHOLDS               0xD1
1595#define IDE_SMART_ENABLE_DISABLE_AUTOSAVE       0xD2
1596#define IDE_SMART_SAVE_ATTRIBUTE_VALUES         0xD3
1597#define IDE_SMART_EXECUTE_OFFLINE_DIAGS         0xD4
1598#define IDE_SMART_READ_LOG                      0xD5
1599#define IDE_SMART_WRITE_LOG                     0xD6
1600#define IDE_SMART_ENABLE                        0xD8
1601#define IDE_SMART_DISABLE                       0xD9
1602#define IDE_SMART_RETURN_STATUS                 0xDA
1603#define IDE_SMART_ENABLE_DISABLE_AUTO_OFFLINE   0xDB
1604
1605#define IDE_DSM_FEATURE_TRIM                  0x0001
1606
1607#define IDE_NCQ_NON_DATA_ABORT_NCQ_QUEUE                0x00
1608#define IDE_NCQ_NON_DATA_DEADLINE_HANDLING              0x01
1609#define IDE_NCQ_NON_DATA_HYBRID_CHANGE_BY_SIZE          0x02
1610#define IDE_NCQ_NON_DATA_HYBRID_DEMOTE_BY_SIZE          0x02
1611#define IDE_NCQ_NON_DATA_HYBRID_CHANGE_BY_LBA_RANGE     0x03
1612#define IDE_NCQ_NON_DATA_HYBRID_CONTROL                 0x04
1613
1614#define IDE_NCQ_SEND_DATA_SET_MANAGEMENT                0x00
1615#define IDE_NCQ_SEND_HYBRID_EVICT                       0x01
1616
1617#define ATA_DEVICE_SET_PASSWORD_MASTER       0x01
1618#define ATA_DEVICE_SET_PASSWORD_USER         0x00
1619
1620#define IDE_GP_LOG_DIRECTORY_ADDRESS                0x00
1621#define IDE_GP_SUMMARY_SMART_ERROR                  0x01
1622#define IDE_GP_COMPREHENSIVE_SMART_ERROR            0x02
1623#define IDE_GP_EXTENDED_COMPREHENSIVE_SMART_ERROR   0x03
1624#define IDE_GP_LOG_DEVICE_STATISTICS_ADDRESS        0x04
1625#define IDE_GP_SMART_SELF_TEST                      0x06
1626#define IDE_GP_EXTENDED_SMART_SELF_TEST             0x07
1627#define IDE_GP_LOG_POWER_CONDITIONS                 0x08
1628#define IDE_GP_SELECTIVE_SELF_TEST                  0x09
1629#define IDE_GP_DEVICE_STATISTICS_NOTIFICATION       0x0A
1630#define IDE_GP_PENDING_DEFECTS                      0x0C
1631#define IDE_GP_LPS_MISALIGNMENT                     0x0D
1632#define IDE_GP_LOG_NCQ_COMMAND_ERROR_ADDRESS        0x10
1633#define IDE_GP_LOG_PHY_EVENT_COUNTER_ADDRESS        0x11
1634#define IDE_GP_LOG_NCQ_NON_DATA_ADDRESS             0x12
1635#define IDE_GP_LOG_NCQ_SEND_RECEIVE_ADDRESS         0x13
1636#define IDE_GP_LOG_HYBRID_INFO_ADDRESS              0x14
1637#define IDE_GP_LOG_REBUILD_ASSIST                   0x15
1638#define IDE_GP_LOG_LBA_STATUS                       0x19
1639#define IDE_GP_LOG_WRITE_STREAM_ERROR               0x21
1640#define IDE_GP_LOG_READ_STREAM_ERROR                0x22
1641#define IDE_GP_LOG_CURRENT_DEVICE_INTERNAL_STATUS   0x24
1642#define IDE_GP_LOG_SAVED_DEVICE_INTERNAL_STATUS     0x25
1643#define IDE_GP_LOG_IDENTIFY_DEVICE_DATA_ADDRESS     0x30
1644#define IDE_GP_LOG_SCT_COMMAND_STATUS               0xE0
1645#define IDE_GP_LOG_SCT_DATA_TRANSFER                0xE1
1646
1647#define IDE_GP_LOG_SECTOR_SIZE                      0x200
1648
1649#define IDE_GP_LOG_VERSION                          0x0001
1650
1651#define IDE_GP_LOG_SUPPORTED_PAGES                  0x00
1652
1653#define IDE_GP_LOG_IDENTIFY_DEVICE_DATA_SUPPORTED_CAPABILITIES_PAGE     0x03
1654#define IDE_GP_LOG_IDENTIFY_DEVICE_DATA_SATA_PAGE                       0x08
1655#define IDE_GP_LOG_IDENTIFY_DEVICE_DATA_ZONED_DEVICE_INFORMATION_PAGE   0x09
1656
1657#define ATA_ZONED_CAPABILITIES_NOT_REPORTED       0x0
1658#define ATA_ZONED_CAPABILITIES_HOST_AWARE         0x1
1659#define ATA_ZONED_CAPABILITIES_DEVICE_MANAGED     0x2
1660
1661#define ZAC_REVISION_NOT_REPORTED_1     0x0000
1662#define ZAC_REVISION_NOT_REPORTED_2     0xFFFF
1663#define ZAC_REVISION_01                 0xB6E8
1664#define ZAC_REVISION_04                 0xA36C
1665
1666#define CURRENT_DEVICE_INTERNAL_STATUS_DATA_LOG_ADDRESS     0x24
1667#define SAVED_DEVICE_INTERNAL_STATUS_DATA_LOG_ADDRESS       0x25
1668
1669#define IDE_GP_LOG_DEVICE_STATISTICS_GENERAL_PAGE           0x01
1670#define IDE_GP_LOG_DEVICE_STATISTICS_FREE_FALL_PAGE         0x02
1671#define IDE_GP_LOG_DEVICE_STATISTICS_ROTATING_MEDIA_PAGE    0x03
1672#define IDE_GP_LOG_DEVICE_STATISTICS_GENERAL_ERROR_PAGE     0x04
1673#define IDE_GP_LOG_DEVICE_STATISTICS_TEMPERATURE_PAGE       0x05
1674#define IDE_GP_LOG_DEVICE_STATISTICS_TRANSPORT_PAGE         0x06
1675#define IDE_GP_LOG_DEVICE_STATISTICS_SSD_PAGE               0x07
1676
1677#define HYBRID_INFORMATION_DISABLED             0x00
1678#define HYBRID_INFORMATION_DISABLE_IN_PROCESS   0x80
1679#define HYBRID_INFORMATION_ENABLED              0xFF
1680
1681#define HYBRID_HEALTH_UNUSEABLE                 0x01
1682#define HYBRID_HEALTH_NVM_SIZE_CHANGED          0x02
1683#define HYBRID_HEALTH_READ_ONLY                 0x04
1684#define HYBRID_HEALTH_DATA_LOSS                 0x08
1685
1686#define ATA_DEVICE_SIGNATURE_ATA                0x00000101
1687#define ATA_DEVICE_SIGNATURE_ATAPI              0xEB140101
1688#define ATA_DEVICE_SIGNATURE_HOST_ZONED         0xABCD0101
1689#define ATA_DEVICE_SIGNATURE_ENCLOSURE          0xC33C0101
1690#define ATA_DEVICE_SIGNATURE_PORT_MULTIPLIER    0x96690101
1691
1692#define ZM_ACTION_REPORT_ZONES          0x00
1693#define ZM_ACTION_CLOSE_ZONE            0x01
1694#define ZM_ACTION_FINISH_ZONE           0x02
1695#define ZM_ACTION_OPEN_ZONE             0x03
1696#define ZM_ACTION_RESET_WRITE_POINTER   0x04
1697
1698#define ZM_ALL_ZONES_BIT                (1 << 8)
1699
1700#define ATA_REPORT_ZONES_OPTION_LIST_ALL_ZONES                  0x00
1701#define ATA_REPORT_ZONES_OPTION_LIST_EMPTY_ZONES                0x01
1702#define ATA_REPORT_ZONES_OPTION_LIST_IMPLICITLY_OPENED_ZONES    0x02
1703#define ATA_REPORT_ZONES_OPTION_LIST_EXPLICITLY_OPENED_ZONES    0x03
1704#define ATA_REPORT_ZONES_OPTION_LIST_CLOSED_ZONES               0x04
1705#define ATA_REPORT_ZONES_OPTION_LIST_FULL_ZONES                 0x05
1706#define ATA_REPORT_ZONES_OPTION_LIST_READ_ONLY_ZONES            0x06
1707#define ATA_REPORT_ZONES_OPTION_LIST_OFFLINE_ZONES              0x07
1708
1709#define ATA_REPORT_ZONES_OPTION_LIST_RWP_ZONES                                      0x10
1710#define ATA_REPORT_ZONES_OPTION_LIST_NON_SEQUENTIAL_WRITE_RESOURCES_ACTIVE_ZONES    0x11
1711
1712#define ATA_REPORT_ZONES_OPTION_LIST_NOT_WRITE_POINTER_ZONES    0x3F
1713
1714#define ATA_ZONES_TYPE_AND_LENGTH_MAY_DIFFERENT          0x0
1715#define ATA_ZONES_TYPE_SAME_LENGTH_SAME                  0x1
1716#define ATA_ZONES_TYPE_SAME_LAST_ZONE_LENGTH_DIFFERENT   0x2
1717#define ATA_ZONES_TYPE_MAY_DIFFERENT_LENGTH_SAME         0x3
1718
1719#define ATA_ZONE_TYPE_CONVENTIONAL                          0x1
1720#define ATA_ZONE_TYPE_SEQUENTIAL_WRITE_REQUIRED             0x2
1721#define ATA_ZONE_TYPE_SEQUENTIAL_WRITE_PREFERRED            0x3
1722
1723#define ATA_ZONE_CONDITION_NOT_WRITE_POINTER                0x0
1724#define ATA_ZONE_CONDITION_EMPTY                            0x1
1725#define ATA_ZONE_CONDITION_IMPLICITLY_OPENED                0x2
1726#define ATA_ZONE_CONDITION_EXPLICITLY_OPENED                0x3
1727#define ATA_ZONE_CONDITION_CLOSED                           0x4
1728#define ATA_ZONE_CONDITION_READ_ONLY                        0xD
1729#define ATA_ZONE_CONDITION_FULL                             0xE
1730#define ATA_ZONE_CONDITION_OFFLINE                          0xF
1731
1732#endif