Signed-off-by: Mark Harmstone <m...@harmstone.com>
---
 mingw-w64-headers/ddk/include/ddk/ata.h | 1732 +++++++++++++++++++++++
 1 file changed, 1732 insertions(+)
 create mode 100644 mingw-w64-headers/ddk/include/ddk/ata.h

diff --git a/mingw-w64-headers/ddk/include/ddk/ata.h 
b/mingw-w64-headers/ddk/include/ddk/ata.h
new file mode 100644
index 000000000..2d95717e8
--- /dev/null
+++ b/mingw-w64-headers/ddk/include/ddk/ata.h
@@ -0,0 +1,1732 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _NTATA_
+#define _NTATA_
+
+#pragma pack(push,1)
+
+typedef struct _IDENTIFY_DEVICE_DATA {
+  struct {
+    USHORT Reserved1 : 1;
+    USHORT Retired3 : 1;
+    USHORT ResponseIncomplete : 1;
+    USHORT Retired2 : 3;
+    USHORT FixedDevice : 1;
+    USHORT RemovableMedia : 1;
+    USHORT Retired1 : 7;
+    USHORT DeviceType : 1;
+  } GeneralConfiguration;
+  USHORT NumCylinders;
+  USHORT SpecificConfiguration;
+  USHORT NumHeads;
+  USHORT Retired1[2];
+  USHORT NumSectorsPerTrack;
+  USHORT VendorUnique1[3];
+  UCHAR SerialNumber[20];
+  USHORT Retired2[2];
+  USHORT Obsolete1;
+  UCHAR FirmwareRevision[8];
+  UCHAR ModelNumber[40];
+  UCHAR MaximumBlockTransfer;
+  UCHAR VendorUnique2;
+  struct {
+    USHORT FeatureSupported : 1;
+    USHORT Reserved : 15;
+  } TrustedComputing;
+  struct {
+    UCHAR CurrentLongPhysicalSectorAlignment : 2;
+    UCHAR ReservedByte49 : 6;
+    UCHAR DmaSupported : 1;
+    UCHAR LbaSupported : 1;
+    UCHAR IordyDisable : 1;
+    UCHAR IordySupported : 1;
+    UCHAR Reserved1 : 1;
+    UCHAR StandybyTimerSupport : 1;
+    UCHAR Reserved2 : 2;
+    USHORT ReservedWord50;
+  } Capabilities;
+  USHORT ObsoleteWords51[2];
+  USHORT TranslationFieldsValid : 3;
+  USHORT Reserved3 : 5;
+  USHORT FreeFallControlSensitivity : 8;
+  USHORT NumberOfCurrentCylinders;
+  USHORT NumberOfCurrentHeads;
+  USHORT CurrentSectorsPerTrack;
+  ULONG CurrentSectorCapacity;
+  UCHAR CurrentMultiSectorSetting;
+  UCHAR MultiSectorSettingValid : 1;
+  UCHAR ReservedByte59 : 3;
+  UCHAR SanitizeFeatureSupported : 1;
+  UCHAR CryptoScrambleExtCommandSupported : 1;
+  UCHAR OverwriteExtCommandSupported : 1;
+  UCHAR BlockEraseExtCommandSupported : 1;
+  ULONG UserAddressableSectors;
+  USHORT ObsoleteWord62;
+  USHORT MultiWordDMASupport : 8;
+  USHORT MultiWordDMAActive : 8;
+  USHORT AdvancedPIOModes : 8;
+  USHORT ReservedByte64 : 8;
+  USHORT MinimumMWXferCycleTime;
+  USHORT RecommendedMWXferCycleTime;
+  USHORT MinimumPIOCycleTime;
+  USHORT MinimumPIOCycleTimeIORDY;
+  struct {
+    USHORT ZonedCapabilities : 2;
+    USHORT NonVolatileWriteCache : 1;
+    USHORT ExtendedUserAddressableSectorsSupported : 1;
+    USHORT DeviceEncryptsAllUserData : 1;
+    USHORT ReadZeroAfterTrimSupported : 1;
+    USHORT Optional28BitCommandsSupported : 1;
+    USHORT IEEE1667 : 1;
+    USHORT DownloadMicrocodeDmaSupported : 1;
+    USHORT SetMaxSetPasswordUnlockDmaSupported : 1;
+    USHORT WriteBufferDmaSupported : 1;
+    USHORT ReadBufferDmaSupported : 1;
+    USHORT DeviceConfigIdentifySetDmaSupported : 1;
+    USHORT LPSAERCSupported : 1;
+    USHORT DeterministicReadAfterTrimSupported : 1;
+    USHORT CFastSpecSupported : 1;
+  } AdditionalSupported;
+  USHORT ReservedWords70[5];
+  USHORT QueueDepth : 5;
+  USHORT ReservedWord75 : 11;
+  struct {
+    USHORT Reserved0 : 1;
+    USHORT SataGen1 : 1;
+    USHORT SataGen2 : 1;
+    USHORT SataGen3 : 1;
+    USHORT Reserved1 : 4;
+    USHORT NCQ : 1;
+    USHORT HIPM : 1;
+    USHORT PhyEvents : 1;
+    USHORT NcqUnload : 1;
+    USHORT NcqPriority : 1;
+    USHORT HostAutoPS : 1;
+    USHORT DeviceAutoPS : 1;
+    USHORT ReadLogDMA : 1;
+    USHORT Reserved2 : 1;
+    USHORT CurrentSpeed : 3;
+    USHORT NcqStreaming : 1;
+    USHORT NcqQueueMgmt : 1;
+    USHORT NcqReceiveSend : 1;
+    USHORT DEVSLPtoReducedPwrState : 1;
+    USHORT Reserved3 : 8;
+  } SerialAtaCapabilities;
+  struct {
+    USHORT Reserved0 : 1;
+    USHORT NonZeroOffsets : 1;
+    USHORT DmaSetupAutoActivate : 1;
+    USHORT DIPM : 1;
+    USHORT InOrderData : 1;
+    USHORT HardwareFeatureControl : 1;
+    USHORT SoftwareSettingsPreservation : 1;
+    USHORT NCQAutosense : 1;
+    USHORT DEVSLP : 1;
+    USHORT HybridInformation : 1;
+    USHORT Reserved1 : 6;
+  } SerialAtaFeaturesSupported;
+  struct {
+    USHORT Reserved0 : 1;
+    USHORT NonZeroOffsets : 1;
+    USHORT DmaSetupAutoActivate : 1;
+    USHORT DIPM : 1;
+    USHORT InOrderData : 1;
+    USHORT HardwareFeatureControl : 1;
+    USHORT SoftwareSettingsPreservation : 1;
+    USHORT DeviceAutoPS : 1;
+    USHORT DEVSLP : 1;
+    USHORT HybridInformation : 1;
+    USHORT Reserved1 : 6;
+  } SerialAtaFeaturesEnabled;
+  USHORT MajorRevision;
+  USHORT MinorRevision;
+  struct {
+    USHORT SmartCommands : 1;
+    USHORT SecurityMode : 1;
+    USHORT RemovableMediaFeature : 1;
+    USHORT PowerManagement : 1;
+    USHORT Reserved1 : 1;
+    USHORT WriteCache : 1;
+    USHORT LookAhead : 1;
+    USHORT ReleaseInterrupt : 1;
+    USHORT ServiceInterrupt : 1;
+    USHORT DeviceReset : 1;
+    USHORT HostProtectedArea : 1;
+    USHORT Obsolete1 : 1;
+    USHORT WriteBuffer : 1;
+    USHORT ReadBuffer : 1;
+    USHORT Nop : 1;
+    USHORT Obsolete2 : 1;
+    USHORT DownloadMicrocode : 1;
+    USHORT DmaQueued : 1;
+    USHORT Cfa : 1;
+    USHORT AdvancedPm : 1;
+    USHORT Msn : 1;
+    USHORT PowerUpInStandby : 1;
+    USHORT ManualPowerUp : 1;
+    USHORT Reserved2 : 1;
+    USHORT SetMax : 1;
+    USHORT Acoustics : 1;
+    USHORT BigLba : 1;
+    USHORT DeviceConfigOverlay : 1;
+    USHORT FlushCache : 1;
+    USHORT FlushCacheExt : 1;
+    USHORT WordValid83 : 2;
+    USHORT SmartErrorLog : 1;
+    USHORT SmartSelfTest : 1;
+    USHORT MediaSerialNumber : 1;
+    USHORT MediaCardPassThrough : 1;
+    USHORT StreamingFeature : 1;
+    USHORT GpLogging : 1;
+    USHORT WriteFua : 1;
+    USHORT WriteQueuedFua : 1;
+    USHORT WWN64Bit : 1;
+    USHORT URGReadStream : 1;
+    USHORT URGWriteStream : 1;
+    USHORT ReservedForTechReport : 2;
+    USHORT IdleWithUnloadFeature : 1;
+    USHORT WordValid : 2;
+  } CommandSetSupport;
+  struct {
+    USHORT SmartCommands : 1;
+    USHORT SecurityMode : 1;
+    USHORT RemovableMediaFeature : 1;
+    USHORT PowerManagement : 1;
+    USHORT Reserved1 : 1;
+    USHORT WriteCache : 1;
+    USHORT LookAhead : 1;
+    USHORT ReleaseInterrupt : 1;
+    USHORT ServiceInterrupt : 1;
+    USHORT DeviceReset : 1;
+    USHORT HostProtectedArea : 1;
+    USHORT Obsolete1 : 1;
+    USHORT WriteBuffer : 1;
+    USHORT ReadBuffer : 1;
+    USHORT Nop : 1;
+    USHORT Obsolete2 : 1;
+    USHORT DownloadMicrocode : 1;
+    USHORT DmaQueued : 1;
+    USHORT Cfa : 1;
+    USHORT AdvancedPm : 1;
+    USHORT Msn : 1;
+    USHORT PowerUpInStandby : 1;
+    USHORT ManualPowerUp : 1;
+    USHORT Reserved2 : 1;
+    USHORT SetMax : 1;
+    USHORT Acoustics : 1;
+    USHORT BigLba : 1;
+    USHORT DeviceConfigOverlay : 1;
+    USHORT FlushCache : 1;
+    USHORT FlushCacheExt : 1;
+    USHORT Resrved3 : 1;
+    USHORT Words119_120Valid : 1;
+    USHORT SmartErrorLog : 1;
+    USHORT SmartSelfTest : 1;
+    USHORT MediaSerialNumber : 1;
+    USHORT MediaCardPassThrough : 1;
+    USHORT StreamingFeature : 1;
+    USHORT GpLogging : 1;
+    USHORT WriteFua : 1;
+    USHORT WriteQueuedFua : 1;
+    USHORT WWN64Bit : 1;
+    USHORT URGReadStream : 1;
+    USHORT URGWriteStream : 1;
+    USHORT ReservedForTechReport : 2;
+    USHORT IdleWithUnloadFeature : 1;
+    USHORT Reserved4 : 2;
+  } CommandSetActive;
+  USHORT UltraDMASupport : 8;
+  USHORT UltraDMAActive : 8;
+  struct {
+    USHORT TimeRequired : 15;
+    USHORT ExtendedTimeReported : 1;
+  } NormalSecurityEraseUnit;
+  struct {
+    USHORT TimeRequired : 15;
+    USHORT ExtendedTimeReported : 1;
+  } EnhancedSecurityEraseUnit;
+  USHORT CurrentAPMLevel : 8;
+  USHORT ReservedWord91 : 8;
+  USHORT MasterPasswordID;
+  USHORT HardwareResetResult;
+  USHORT CurrentAcousticValue : 8;
+  USHORT RecommendedAcousticValue : 8;
+  USHORT StreamMinRequestSize;
+  USHORT StreamingTransferTimeDMA;
+  USHORT StreamingAccessLatencyDMAPIO;
+  ULONG StreamingPerfGranularity;
+  ULONG Max48BitLBA[2];
+  USHORT StreamingTransferTime;
+  USHORT DsmCap;
+  struct {
+    USHORT LogicalSectorsPerPhysicalSector : 4;
+    USHORT Reserved0 : 8;
+    USHORT LogicalSectorLongerThan256Words : 1;
+    USHORT MultipleLogicalSectorsPerPhysicalSector : 1;
+    USHORT Reserved1 : 2;
+  } PhysicalLogicalSectorSize;
+  USHORT InterSeekDelay;
+  USHORT WorldWideName[4];
+  USHORT ReservedForWorldWideName128[4];
+  USHORT ReservedForTlcTechnicalReport;
+  USHORT WordsPerLogicalSector[2];
+  struct {
+    USHORT ReservedForDrqTechnicalReport : 1;
+    USHORT WriteReadVerify : 1;
+    USHORT WriteUncorrectableExt : 1;
+    USHORT ReadWriteLogDmaExt : 1;
+    USHORT DownloadMicrocodeMode3 : 1;
+    USHORT FreefallControl : 1;
+    USHORT SenseDataReporting : 1;
+    USHORT ExtendedPowerConditions : 1;
+    USHORT Reserved0 : 6;
+    USHORT WordValid : 2;
+  } CommandSetSupportExt;
+  struct {
+    USHORT ReservedForDrqTechnicalReport : 1;
+    USHORT WriteReadVerify : 1;
+    USHORT WriteUncorrectableExt : 1;
+    USHORT ReadWriteLogDmaExt : 1;
+    USHORT DownloadMicrocodeMode3 : 1;
+    USHORT FreefallControl : 1;
+    USHORT SenseDataReporting : 1;
+    USHORT ExtendedPowerConditions : 1;
+    USHORT Reserved0 : 6;
+    USHORT Reserved1 : 2;
+  } CommandSetActiveExt;
+  USHORT ReservedForExpandedSupportandActive[6];
+  USHORT MsnSupport : 2;
+  USHORT ReservedWord127 : 14;
+  struct {
+    USHORT SecuritySupported : 1;
+    USHORT SecurityEnabled : 1;
+    USHORT SecurityLocked : 1;
+    USHORT SecurityFrozen : 1;
+    USHORT SecurityCountExpired : 1;
+    USHORT EnhancedSecurityEraseSupported : 1;
+    USHORT Reserved0 : 2;
+    USHORT SecurityLevel : 1;
+    USHORT Reserved1 : 7;
+  } SecurityStatus;
+  USHORT ReservedWord129[31];
+  struct {
+    USHORT MaximumCurrentInMA : 12;
+    USHORT CfaPowerMode1Disabled : 1;
+    USHORT CfaPowerMode1Required : 1;
+    USHORT Reserved0 : 1;
+    USHORT Word160Supported : 1;
+  } CfaPowerMode1;
+  USHORT ReservedForCfaWord161[7];
+  USHORT NominalFormFactor : 4;
+  USHORT ReservedWord168 : 12;
+  struct {
+    USHORT SupportsTrim : 1;
+    USHORT Reserved0 : 15;
+  } DataSetManagementFeature;
+  USHORT AdditionalProductID[4];
+  USHORT ReservedForCfaWord174[2];
+  USHORT CurrentMediaSerialNumber[30];
+  struct {
+    USHORT Supported : 1;
+    USHORT Reserved0 : 1;
+    USHORT WriteSameSuported : 1;
+    USHORT ErrorRecoveryControlSupported : 1;
+    USHORT FeatureControlSuported : 1;
+    USHORT DataTablesSuported : 1;
+    USHORT Reserved1 : 6;
+    USHORT VendorSpecific : 4;
+  } SCTCommandTransport;
+  USHORT ReservedWord207[2];
+  struct {
+    USHORT AlignmentOfLogicalWithinPhysical : 14;
+    USHORT Word209Supported : 1;
+    USHORT Reserved0 : 1;
+  } BlockAlignment;
+  USHORT WriteReadVerifySectorCountMode3Only[2];
+  USHORT WriteReadVerifySectorCountMode2Only[2];
+  struct {
+    USHORT NVCachePowerModeEnabled : 1;
+    USHORT Reserved0 : 3;
+    USHORT NVCacheFeatureSetEnabled : 1;
+    USHORT Reserved1 : 3;
+    USHORT NVCachePowerModeVersion : 4;
+    USHORT NVCacheFeatureSetVersion : 4;
+  } NVCacheCapabilities;
+  USHORT NVCacheSizeLSW;
+  USHORT NVCacheSizeMSW;
+  USHORT NominalMediaRotationRate;
+  USHORT ReservedWord218;
+  struct {
+    UCHAR NVCacheEstimatedTimeToSpinUpInSeconds;
+    UCHAR Reserved;
+  } NVCacheOptions;
+  USHORT WriteReadVerifySectorCountMode : 8;
+  USHORT ReservedWord220 : 8;
+  USHORT ReservedWord221;
+  struct {
+    USHORT MajorVersion : 12;
+    USHORT TransportType : 4;
+  } TransportMajorVersion;
+  USHORT TransportMinorVersion;
+  USHORT ReservedWord224[6];
+  ULONG ExtendedNumberOfUserAddressableSectors[2];
+  USHORT MinBlocksPerDownloadMicrocodeMode03;
+  USHORT MaxBlocksPerDownloadMicrocodeMode03;
+  USHORT ReservedWord236[19];
+  USHORT Signature : 8;
+  USHORT CheckSum : 8;
+} IDENTIFY_DEVICE_DATA, *PIDENTIFY_DEVICE_DATA;
+
+typedef struct _IDENTIFY_PACKET_DATA {
+  struct {
+    USHORT PacketType : 2;
+    USHORT IncompleteResponse : 1;
+    USHORT Reserved1 : 2;
+    USHORT DrqDelay : 2;
+    USHORT RemovableMedia : 1;
+    USHORT CommandPacketType : 5;
+    USHORT Reserved2 : 1;
+    USHORT DeviceType : 2;
+  } GeneralConfiguration;
+  USHORT ResevedWord1;
+  USHORT UniqueConfiguration;
+  USHORT ReservedWords3[7];
+  UCHAR SerialNumber[20];
+  USHORT ReservedWords20[3];
+  UCHAR FirmwareRevision[8];
+  UCHAR ModelNumber[40];
+  USHORT ReservedWords47[2];
+  struct {
+    USHORT VendorSpecific : 8;
+    USHORT DmaSupported : 1;
+    USHORT LbaSupported : 1;
+    USHORT IordyDisabled : 1;
+    USHORT IordySupported : 1;
+    USHORT Obsolete : 1;
+    USHORT OverlapSupported : 1;
+    USHORT QueuedCommandsSupported : 1;
+    USHORT InterleavedDmaSupported : 1;
+    USHORT DeviceSpecificStandbyTimerValueMin : 1;
+    USHORT Obsolete1 : 1;
+    USHORT ReservedWord50 : 12;
+    USHORT WordValid : 2;
+  } Capabilities;
+  USHORT ObsoleteWords51[2];
+  USHORT TranslationFieldsValid : 3;
+  USHORT Reserved3 : 13;
+  USHORT ReservedWords54[8];
+  struct {
+    USHORT UDMA0Supported : 1;
+    USHORT UDMA1Supported : 1;
+    USHORT UDMA2Supported : 1;
+    USHORT UDMA3Supported : 1;
+    USHORT UDMA4Supported : 1;
+    USHORT UDMA5Supported : 1;
+    USHORT UDMA6Supported : 1;
+    USHORT MDMA0Supported : 1;
+    USHORT MDMA1Supported : 1;
+    USHORT MDMA2Supported : 1;
+    USHORT DMASupported : 1;
+    USHORT ReservedWord62 : 4;
+    USHORT DMADIRBitRequired : 1;
+  } DMADIR;
+  USHORT MultiWordDMASupport : 8;
+  USHORT MultiWordDMAActive : 8;
+  USHORT AdvancedPIOModes : 8;
+  USHORT ReservedByte64 : 8;
+  USHORT MinimumMWXferCycleTime;
+  USHORT RecommendedMWXferCycleTime;
+  USHORT MinimumPIOCycleTime;
+  USHORT MinimumPIOCycleTimeIORDY;
+  USHORT ReservedWords69[2];
+  USHORT BusReleaseDelay;
+  USHORT ServiceCommandDelay;
+  USHORT ReservedWords73[2];
+  USHORT QueueDepth : 5;
+  USHORT ReservedWord75 : 11;
+  struct {
+    USHORT Reserved0 : 1;
+    USHORT SataGen1 : 1;
+    USHORT SataGen2 : 1;
+    USHORT SataGen3 : 1;
+    USHORT Reserved1 : 5;
+    USHORT HIPM : 1;
+    USHORT PhyEvents : 1;
+    USHORT Reserved3 : 2;
+    USHORT HostAutoPS : 1;
+    USHORT DeviceAutoPS : 1;
+    USHORT Reserved4 : 1;
+    USHORT Reserved5 : 1;
+    USHORT CurrentSpeed : 3;
+    USHORT SlimlineDeviceAttention : 1;
+    USHORT HostEnvironmentDetect : 1;
+    USHORT Reserved : 10;
+  } SerialAtaCapabilities;
+  struct {
+    USHORT Reserved0 : 1;
+    USHORT Reserved1 : 2;
+    USHORT DIPM : 1;
+    USHORT Reserved2 : 1;
+    USHORT AsynchronousNotification : 1;
+    USHORT SoftwareSettingsPreservation : 1;
+    USHORT Reserved3 : 9;
+  } SerialAtaFeaturesSupported;
+  struct {
+    USHORT Reserved0 : 1;
+    USHORT Reserved1 : 2;
+    USHORT DIPM : 1;
+    USHORT Reserved2 : 1;
+    USHORT AsynchronousNotification : 1;
+    USHORT SoftwareSettingsPreservation : 1;
+    USHORT DeviceAutoPS : 1;
+    USHORT Reserved3 : 8;
+  } SerialAtaFeaturesEnabled;
+  USHORT MajorRevision;
+  USHORT MinorRevision;
+  struct {
+    USHORT SmartCommands : 1;
+    USHORT SecurityMode : 1;
+    USHORT RemovableMedia : 1;
+    USHORT PowerManagement : 1;
+    USHORT PacketCommands : 1;
+    USHORT WriteCache : 1;
+    USHORT LookAhead : 1;
+    USHORT ReleaseInterrupt : 1;
+    USHORT ServiceInterrupt : 1;
+    USHORT DeviceReset : 1;
+    USHORT HostProtectedArea : 1;
+    USHORT Obsolete1 : 1;
+    USHORT WriteBuffer : 1;
+    USHORT ReadBuffer : 1;
+    USHORT Nop : 1;
+    USHORT Obsolete2 : 1;
+    USHORT DownloadMicrocode : 1;
+    USHORT Reserved1 : 2;
+    USHORT AdvancedPm : 1;
+    USHORT Msn : 1;
+    USHORT PowerUpInStandby : 1;
+    USHORT ManualPowerUp : 1;
+    USHORT Reserved2 : 1;
+    USHORT SetMax : 1;
+    USHORT Reserved3 : 3;
+    USHORT FlushCache : 1;
+    USHORT Reserved4 : 1;
+    USHORT WordValid : 2;
+  } CommandSetSupport;
+  struct {
+    USHORT Reserved0 : 5;
+    USHORT GpLogging : 1;
+    USHORT Reserved1 : 2;
+    USHORT WWN64Bit : 1;
+    USHORT Reserved2 : 5;
+    USHORT WordValid : 2;
+  } CommandSetSupportExt;
+  struct {
+    USHORT SmartCommands : 1;
+    USHORT SecurityMode : 1;
+    USHORT RemovableMedia : 1;
+    USHORT PowerManagement : 1;
+    USHORT PacketCommands : 1;
+    USHORT WriteCache : 1;
+    USHORT LookAhead : 1;
+    USHORT ReleaseInterrupt : 1;
+    USHORT ServiceInterrupt : 1;
+    USHORT DeviceReset : 1;
+    USHORT HostProtectedArea : 1;
+    USHORT Obsolete1 : 1;
+    USHORT WriteBuffer : 1;
+    USHORT ReadBuffer : 1;
+    USHORT Nop : 1;
+    USHORT Obsolete2 : 1;
+    USHORT DownloadMicrocode : 1;
+    USHORT Reserved1 : 2;
+    USHORT AdvancedPm : 1;
+    USHORT Msn : 1;
+    USHORT PowerUpInStandby : 1;
+    USHORT ManualPowerUp : 1;
+    USHORT Reserved2 : 1;
+    USHORT SetMax : 1;
+    USHORT Reserved3 : 3;
+    USHORT FlushCache : 1;
+    USHORT Reserved : 3;
+  } CommandSetActive;
+  struct {
+    USHORT Reserved0 : 5;
+    USHORT GpLogging : 1;
+    USHORT Reserved1 : 2;
+    USHORT WWN64Bit : 1;
+    USHORT Reserved2 : 5;
+    USHORT WordValid : 2;
+  } CommandSetActiveExt;
+  USHORT UltraDMASupport : 8;
+  USHORT UltraDMAActive : 8;
+  USHORT TimeRequiredForNormalEraseModeSecurityEraseUnit;
+  USHORT TimeRequiredForEnhancedEraseModeSecurityEraseUnit;
+  USHORT CurrentAPMLevel;
+  USHORT MasterPasswordID;
+  USHORT HardwareResetResult;
+  USHORT ReservedWords94[14];
+  USHORT WorldWideName[4];
+  USHORT ReservedWords112[13];
+  USHORT AtapiZeroByteCount;
+  USHORT ReservedWord126;
+  USHORT MsnSupport : 2;
+  USHORT ReservedWord127 : 14;
+  USHORT SecurityStatus;
+  USHORT VendorSpecific[31];
+  USHORT ReservedWord160[16];
+  USHORT ReservedWord176[46];
+  struct {
+    USHORT MajorVersion : 12;
+    USHORT TransportType : 4;
+  } TransportMajorVersion;
+  USHORT TransportMinorVersion;
+  USHORT ReservedWord224[31];
+  USHORT Signature : 8;
+  USHORT CheckSum : 8;
+} IDENTIFY_PACKET_DATA, *PIDENTIFY_PACKET_DATA;
+
+typedef struct _REGISTER_FIS {
+  UCHAR FisType;
+  UCHAR Reserved0 : 7;
+  UCHAR CmdReg : 1;
+  UCHAR Command;
+  UCHAR Features;
+  UCHAR SectorNumber;
+  UCHAR CylinderLow;
+  UCHAR CylinderHigh;
+  UCHAR DeviceHead;
+  UCHAR SectorNumberExp;
+  UCHAR CylinderLowExp;
+  UCHAR CylinderHighExp;
+  UCHAR FeaturesExp;
+  UCHAR SectorCount;
+  UCHAR SectorCountExp;
+  UCHAR Reserved2;
+  UCHAR Control;
+  ULONG Reserved3;
+} REGISTER_FIS, *PREGISTER_FIS;
+
+typedef union _ATA_HYBRID_INFO_FIELDS {
+  _ANONYMOUS_STRUCT struct {
+    UCHAR HybridPriority : 4;
+    UCHAR Reserved0 : 1;
+    UCHAR InfoValid : 1;
+    UCHAR Reserved1 : 2;
+  } DUMMYSTRUCTNAME;
+  UCHAR AsUchar;
+} ATA_HYBRID_INFO_FIELDS, *PATA_HYBRID_INFO_FIELDS;
+
+typedef struct _DEVICE_SET_PASSWORD {
+  struct {
+    USHORT PasswordIdentifier : 1;
+    USHORT Reserved1 : 7;
+    USHORT MasterPasswordCapability : 1;
+    USHORT Reserved2 : 7;
+  } ControlWord;
+  USHORT Password[16];
+  USHORT MasterPasswordIdentifier;
+  USHORT Reserved[238];
+} DEVICE_SET_PASSWORD, *PDEVICE_SET_PASSWORD;
+
+typedef struct _IDENTIFY_DEVICE_DATA_LOG_PAGE_HEADER {
+  ULONGLONG RevisionNumber : 16;
+  ULONGLONG PageNumber : 8;
+  ULONGLONG Reserved : 39;
+  ULONGLONG Valid : 1;
+} IDENTIFY_DEVICE_DATA_LOG_PAGE_HEADER, *PIDENTIFY_DEVICE_DATA_LOG_PAGE_HEADER;
+
+typedef struct _IDENTIFY_DEVICE_DATA_LOG_PAGE_SUPPORTED_CAPABILITIES {
+  IDENTIFY_DEVICE_DATA_LOG_PAGE_HEADER Header;
+  struct {
+    ULONGLONG WRV : 1;
+    ULONGLONG WriteUncorrectable : 1;
+    ULONGLONG GplDma : 1;
+    ULONGLONG DmMode3 : 1;
+    ULONGLONG FreeFall : 1;
+    ULONGLONG SenseData : 1;
+    ULONGLONG EPC : 1;
+    ULONGLONG SmartErrorLogging : 1;
+    ULONGLONG SmartSelfTest : 1;
+    ULONGLONG Reserved9 : 1;
+    ULONGLONG Streaming : 1;
+    ULONGLONG GPL : 1;
+    ULONGLONG WriteFuaExt : 1;
+    ULONGLONG Unload : 1;
+    ULONGLONG DownloadMicrocode : 1;
+    ULONGLONG Reserved15ForCFA : 1;
+    ULONGLONG APM : 1;
+    ULONGLONG PUIS : 1;
+    ULONGLONG SpinUp : 1;
+    ULONGLONG Reserved19 : 1;
+    ULONGLONG Cmd48Bit : 1;
+    ULONGLONG Reserved21 : 1;
+    ULONGLONG FlushCacheExt : 1;
+    ULONGLONG Smart : 1;
+    ULONGLONG VolatileWriteCache : 1;
+    ULONGLONG ReadLookahead : 1;
+    ULONGLONG Reserved26 : 1;
+    ULONGLONG WriteBuffer : 1;
+    ULONGLONG ReadBuffer : 1;
+    ULONGLONG NOP : 1;
+    ULONGLONG Reserved30 : 1;
+    ULONGLONG RZAT : 1;
+    ULONGLONG Cmd28bit : 1;
+    ULONGLONG DownloadMicrocodeDma : 1;
+    ULONGLONG Reserved34 : 1;
+    ULONGLONG WriteBufferDma : 1;
+    ULONGLONG ReadBufferDma : 1;
+    ULONGLONG Reserved37 : 1;
+    ULONGLONG LpsMisalignmentReporting : 1;
+    ULONGLONG DRAT : 1;
+    ULONGLONG Reserved40ForCFA : 1;
+    ULONGLONG AmaxAddr : 1;
+    ULONGLONG SetEpcPowerSource : 1;
+    ULONGLONG LowPowerStandby : 1;
+    ULONGLONG DSN : 1;
+    ULONGLONG RequestSenseDeviceFault : 1;
+    ULONGLONG Reserved : 17;
+    ULONGLONG Valid : 1;
+  } SupportedCapabilities;
+  struct {
+    ULONGLONG DmMinTransferSize : 16;
+    ULONGLONG DmMaxTransferSize : 16;
+    ULONGLONG DmOffsetsImmediateSupported : 1;
+    ULONGLONG DmImmediateSupported : 1;
+    ULONGLONG DmOffsetsDeferredSupported : 1;
+    ULONGLONG Reserved : 28;
+    ULONGLONG Valid : 1;
+  } DownloadMicrocodeCapabilities;
+  struct {
+    ULONGLONG Rate : 16;
+    ULONGLONG Reserved : 47;
+    ULONGLONG Valid : 1;
+  } NominalMediaRotationRate;
+  struct {
+    ULONGLONG Factor : 4;
+    ULONGLONG Reserved : 59;
+    ULONGLONG Valid : 1;
+  } NominalFormFactor;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 31;
+    ULONGLONG Valid : 1;
+  } WRVSectorCountMode3;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 31;
+    ULONGLONG Valid : 1;
+  } WRVSectorCountMode2;
+  struct {
+    ULONGLONG Name;
+    ULONGLONG Reserved : 63;
+    ULONGLONG Valid : 1;
+  } WorldWideName;
+  struct {
+    ULONGLONG TrimSupported : 1;
+    ULONGLONG Reserved : 62;
+    ULONGLONG Valid : 1;
+  } DataSetManagement;
+  struct {
+    ULONGLONG UtilizationA : 32;
+    ULONGLONG UtilizationB : 32;
+    ULONGLONG Reserved0 : 32;
+    ULONGLONG UtilizationInterval : 8;
+    ULONGLONG UtilizationUnit : 8;
+    ULONGLONG UtilizationType : 8;
+    ULONGLONG Reserved1 : 7;
+    ULONGLONG Valid : 1;
+  } UtilizationPerUnitTime;
+  struct {
+    ULONGLONG DateTimeRateBasisSupported : 1;
+    ULONGLONG Reserved0 : 3;
+    ULONGLONG PowerOnHoursRateBasisSupported : 1;
+    ULONGLONG Reserved1 : 3;
+    ULONGLONG SincePowerOnRateBasisSupported : 1;
+    ULONGLONG Reserved2 : 14;
+    ULONGLONG SettingRateBasisSupported : 1;
+    ULONGLONG Reserved3 : 39;
+    ULONGLONG Valid : 1;
+  } UtilizationUsageRateSupport;
+  struct {
+    ULONGLONG Zoned : 2;
+    ULONGLONG Reserved : 61;
+    ULONGLONG Valid : 1;
+  } ZonedCapabilities;
+  struct {
+    ULONGLONG ReportZonesExtSupported : 1;
+    ULONGLONG NonDataOpenZoneExtSupported : 1;
+    ULONGLONG NonDataCloseZoneExtSupported : 1;
+    ULONGLONG NonDataFinishZoneExtSupported : 1;
+    ULONGLONG NonDataResetWritePointersExtSupported : 1;
+    ULONGLONG Reserved : 58;
+    ULONGLONG Valid : 1;
+  } SupportedZacCapabilities;
+  UCHAR Reserved[392];
+} IDENTIFY_DEVICE_DATA_LOG_PAGE_SUPPORTED_CAPABILITIES, 
*PIDENTIFY_DEVICE_DATA_LOG_PAGE_SUPPORTED_CAPABILITIES;
+
+typedef struct _IDENTIFY_DEVICE_DATA_LOG_PAGE_ZONED_DEVICE_INFO {
+  IDENTIFY_DEVICE_DATA_LOG_PAGE_HEADER Header;
+  struct {
+    ULONGLONG URSWRZ : 1;
+    ULONGLONG Reserved : 62;
+    ULONGLONG Valid : 1;
+  } ZonedDeviceCapabilities;
+  struct {
+    ULONGLONG Reserved : 63;
+    ULONGLONG Valid : 1;
+  } ZonedDeviceSettings;
+  struct {
+    ULONGLONG Number : 32;
+    ULONGLONG Reserved : 31;
+    ULONGLONG Valid : 1;
+  } OptimalNumberOfOpenSequentialWritePreferredZones;
+  struct {
+    ULONGLONG Number : 32;
+    ULONGLONG Reserved : 31;
+    ULONGLONG Valid : 1;
+  } OptimalNumberOfNonSequentiallyWrittenSequentialWritePreferredZones;
+  struct {
+    ULONGLONG Number : 32;
+    ULONGLONG Reserved : 31;
+    ULONGLONG Valid : 1;
+  } MaxNumberOfOpenSequentialWriteRequiredZones;
+  struct {
+    ULONGLONG ZacMinorVersion : 16;
+    ULONGLONG Reserved0 : 47;
+    ULONGLONG Valid : 1;
+  } Version;
+  UCHAR Reserved[456];
+} IDENTIFY_DEVICE_DATA_LOG_PAGE_ZONED_DEVICE_INFO, 
*PIDENTIFY_DEVICE_DATA_LOG_PAGE_ZONED_DEVICE_INFO;
+
+typedef struct _CURRENT_DEVICE_INTERNAL_STATUS_LOG {
+  UCHAR LogAddress;
+  UCHAR Reserved0[3];
+  ULONG OrganizationID;
+  USHORT Area1LastLogPage;
+  USHORT Area2LastLogPage;
+  USHORT Area3LastLogPage;
+  UCHAR Reserved2[368];
+  UCHAR SavedDataAvailable;
+  UCHAR SavedDataGenerationNumber;
+  UCHAR ReasonIdentifier[128];
+} CURRENT_DEVICE_INTERNAL_STATUS_LOG, *PCURRENT_DEVICE_INTERNAL_STATUS_LOG;
+
+typedef struct _SAVED_DEVICE_INTERNAL_STATUS_LOG {
+  UCHAR LogAddress;
+  UCHAR Reserved0[3];
+  ULONG OrganizationID;
+  USHORT Area1LastLogPage;
+  USHORT Area2LastLogPage;
+  USHORT Area3LastLogPage;
+  UCHAR Reserved2[368];
+  UCHAR SavedDataAvailable;
+  UCHAR GenerationNumber;
+  UCHAR ReasonIdentifier[128];
+} SAVED_DEVICE_INTERNAL_STATUS_LOG, *PSAVED_DEVICE_INTERNAL_STATUS_LOG;
+
+typedef struct _DEVICE_STATISTICS_LOG_PAGE_HEADER {
+  ULONGLONG RevisionNumber : 16;
+  ULONGLONG PageNumber : 8;
+  ULONGLONG Reserved : 40;
+} DEVICE_STATISTICS_LOG_PAGE_HEADER, *PDEVICE_STATISTICS_LOG_PAGE_HEADER;
+
+typedef struct _GP_LOG_SUPPORTED_DEVICE_STATISTICS {
+  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
+  UCHAR NumberOfEntries;
+  UCHAR LogPageNumbers[503];
+} GP_LOG_SUPPORTED_DEVICE_STATISTICS, *PGP_LOG_SUPPORTED_DEVICE_STATISTICS;
+
+typedef struct _GP_LOG_GENERAL_STATISTICS {
+  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } LifeTimePoweronResets;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } PoweronHours;
+  struct {
+    ULONGLONG Count : 48;
+    ULONGLONG Reserved : 8;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } LogicalSectorsWritten;
+  struct {
+    ULONGLONG Count : 48;
+    ULONGLONG Reserved : 8;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } WriteCommandCount;
+  struct {
+    ULONGLONG Count : 48;
+    ULONGLONG Reserved : 8;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } LogicalSectorsRead;
+  struct {
+    ULONGLONG Count : 48;
+    ULONGLONG Reserved : 8;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } ReadCommandCount;
+  struct {
+    ULONGLONG TimeStamp : 48;
+    ULONGLONG Reserved : 8;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } DateAndTime;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } PendingErrorCount;
+  struct {
+    ULONGLONG Value : 16;
+    ULONGLONG Reserved : 40;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } WorkloadUtilizaton;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved0 : 28;
+    ULONGLONG RateBasis : 4;
+    ULONGLONG RateValidity : 8;
+    ULONGLONG Reserved1 : 8;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } UtilizationUsageRate;
+  UCHAR Reserved[424];
+} GP_LOG_GENERAL_STATISTICS, *PGP_LOG_GENERAL_STATISTICS;
+
+typedef struct _GP_LOG_FREE_FALL_STATISTICS {
+  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } NumberofFreeFallEventsDetected;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } OverlimitShockEvents;
+  UCHAR Reserved[488];
+} GP_LOG_FREE_FALL_STATISTICS, *PGP_LOG_FREE_FALL_STATISTICS;
+
+typedef struct _GP_LOG_ROTATING_MEDIA_STATISTICS {
+  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } SpindleMotorPoweronHours;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } HeadFlyingHours;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } HeadLoadEvents;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } NumberOfReallocatedLogicalSectors;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } ReadRecoveryAttempts;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } NumberOfMechanicalStartFailures;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } NumberOfReallocationCandidateLogicalSectors;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } NumberOfHighPriorityUnloadEvents;
+  UCHAR Reserved[440];
+} GP_LOG_ROTATING_MEDIA_STATISTICS, *PGP_LOG_ROTATING_MEDIA_STATISTICS;
+
+typedef struct _GP_LOG_GENERAL_ERROR_STATISTICS {
+  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } NumberOfReportedUncorrectableErrors;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } NumberOfResetsBetweenCommandAcceptanceAndCommandCompletion;
+  UCHAR Reserved[488];
+} GP_LOG_GENERAL_ERROR_STATISTICS, *PGP_LOG_GENERAL_ERROR_STATISTICS;
+
+typedef struct _GP_LOG_TEMPERATURE_STATISTICS {
+  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } CurrentTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } AverageShortTermTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } AverageLongTermTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } HighestTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } LowestTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } HighestAverageShortTermTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } LowestAverageShortTermTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } HighstAverageLongTermTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } LowestAverageLongTermTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } TimeInOverTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } SpecifiedMaximumOperatingTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } TimeInUnderTemperature;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } SpecifiedMinimumOperatingTemperature;
+  UCHAR Reserved[400];
+} GP_LOG_TEMPERATURE_STATISTICS, *PGP_LOG_TEMPERATURE_STATISTICS;
+
+typedef struct _GP_LOG_TRANSPORT_STATISTICS {
+  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
+  struct {
+    ULONGLONG Count : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } NumberOfHardwareResets;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } NumberOfAsrEvents;
+  struct {
+    ULONGLONG Count : 32;
+    ULONGLONG Reserved : 24;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } NumberOfInterfaceCrcErrors;
+  UCHAR Reserved[480];
+} GP_LOG_TRANSPORT_STATISTICS, *PGP_LOG_TRANSPORT_STATISTICS;
+
+typedef struct _GP_LOG_SOLID_STATE_DEVICE_STATISTICS {
+  DEVICE_STATISTICS_LOG_PAGE_HEADER Header;
+  struct {
+    ULONGLONG Value : 8;
+    ULONGLONG Reserved : 48;
+    ULONGLONG ReservedFlags : 3;
+    ULONGLONG MonitoredConditionMet : 1;
+    ULONGLONG StatisticsSupportsDsn : 1;
+    ULONGLONG Normalized : 1;
+    ULONGLONG ValidValue : 1;
+    ULONGLONG Supported : 1;
+  } PercentageUsedEnduranceIndicator;
+  UCHAR Reserved[496];
+} GP_LOG_SOLID_STATE_DEVICE_STATISTICS, *PGP_LOG_SOLID_STATE_DEVICE_STATISTICS;
+
+typedef struct _GP_LOG_NCQ_COMMAND_ERROR {
+  UCHAR NcqTag : 5;
+  UCHAR Reserved0 : 1;
+  UCHAR UNL : 1;
+  UCHAR NonQueuedCmd : 1;
+  UCHAR Reserved1;
+  UCHAR Status;
+  UCHAR Error;
+  UCHAR LBA7_0;
+  UCHAR LBA15_8;
+  UCHAR LBA23_16;
+  UCHAR Device;
+  UCHAR LBA31_24;
+  UCHAR LBA39_32;
+  UCHAR LBA47_40;
+  UCHAR Reserved2;
+  UCHAR Count7_0;
+  UCHAR Count15_8;
+  UCHAR SenseKey;
+  UCHAR ASC;
+  UCHAR ASCQ;
+  UCHAR Reserved3[239];
+  UCHAR Vendor[255];
+  UCHAR Checksum;
+} GP_LOG_NCQ_COMMAND_ERROR, *PGP_LOG_NCQ_COMMAND_ERROR;
+
+typedef struct _GP_LOG_NCQ_NON_DATA {
+  struct {
+    ULONG AbortNcq : 1;
+    ULONG AbortAll : 1;
+    ULONG AbortStreaming : 1;
+    ULONG AbortNonStreaming : 1;
+    ULONG AbortSelectedTTag : 1;
+    ULONG Reserved : 27;
+  } SubCmd0;
+  struct {
+    ULONG DeadlineHandling : 1;
+    ULONG WriteDataNotContinue : 1;
+    ULONG ReadDataNotContinue : 1;
+    ULONG Reserved : 29;
+  } SubCmd1;
+  struct {
+    ULONG HybridDemoteBySize : 1;
+    ULONG Reserved : 31;
+  } SubCmd2;
+  struct {
+    ULONG HybridChangeByLbaRange : 1;
+    ULONG Reserved : 31;
+  } SubCmd3;
+  struct {
+    ULONG HybridControl : 1;
+    ULONG Reserved : 31;
+  } SubCmd4;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmd5;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmd6;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmd7;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmd8;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmd9;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmdA;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmdB;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmdC;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmdD;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmdE;
+  struct {
+    ULONG Reserved : 32;
+  } SubCmdF;
+  ULONG Reserved[112];
+} GP_LOG_NCQ_NON_DATA, *PGP_LOG_NCQ_NON_DATA;
+
+typedef struct _GP_LOG_NCQ_SEND_RECEIVE {
+  struct {
+    ULONG DataSetManagement : 1;
+    ULONG HybridEvict : 1;
+    ULONG Reserved : 30;
+  } SubCmd;
+  struct {
+    ULONG Trim : 1;
+    ULONG Reserved : 31;
+  } DataSetManagement;
+  ULONG Reserved[126];
+} GP_LOG_NCQ_SEND_RECEIVE, *PGP_LOG_NCQ_SEND_RECEIVE;
+
+typedef struct _GP_LOG_HYBRID_INFORMATION_HEADER {
+  USHORT HybridInfoDescrCount : 4;
+  USHORT Reserved0 : 12;
+  UCHAR Enabled;
+  UCHAR HybridHealth;
+  UCHAR DirtyLowThreshold;
+  UCHAR DirtyHighThreshold;
+  UCHAR OptimalWriteGranularity;
+  UCHAR MaximumHybridPriorityLevel : 4;
+  UCHAR Reserved1 : 4;
+  UCHAR PowerCondidtion;
+  UCHAR CachingMediumEnabled ;
+  struct {
+    UCHAR MaximumPriorityBehavior : 1;
+    UCHAR SupportCacheBehavior : 1;
+    UCHAR Reserved : 6;
+  } SupportedOptions;
+  UCHAR Reserved2;
+  ULONG TimeSinceEnabled;
+  ULONGLONG NVMSize;
+  ULONGLONG EnableCount;
+  USHORT MaximumEvictionCommands : 5;
+  USHORT Reserved3 : 11;
+  USHORT MaximumEvictionDataBlocks;
+  UCHAR Reserved[28];
+} GP_LOG_HYBRID_INFORMATION_HEADER, *PGP_LOG_HYBRID_INFORMATION_HEADER;
+
+typedef struct _GP_LOG_HYBRID_INFORMATION_DESCRIPTOR {
+  UCHAR HybridPriority;
+  UCHAR ConsumedNVMSizeFraction;
+  UCHAR ConsumedMappingResourcesFraction;
+  UCHAR ConsumedNVMSizeForDirtyDataFraction;
+  UCHAR ConsumedMappingResourcesForDirtyDataFraction;
+  UCHAR Reserved[11];
+} GP_LOG_HYBRID_INFORMATION_DESCRIPTOR, *PGP_LOG_HYBRID_INFORMATION_DESCRIPTOR;
+
+typedef struct _GP_LOG_HYBRID_INFORMATION {
+  GP_LOG_HYBRID_INFORMATION_HEADER Header;
+  GP_LOG_HYBRID_INFORMATION_DESCRIPTOR Descriptor[0];
+} GP_LOG_HYBRID_INFORMATION, *PGP_LOG_HYBRID_INFORMATION;
+
+typedef struct _REPORT_ZONES_EXT_DATA {
+  ULONG ZoneListLength;
+  UCHAR SAME : 4;
+  UCHAR Reserved0 : 4;
+  UCHAR Reserved1[3];
+  ULONGLONG MaxLBA : 48;
+  ULONGLONG Reserved2 : 16;
+  UCHAR Reserved3[48];
+} REPORT_ZONES_EXT_DATA, *PREPORT_ZONES_EXT_DATA;
+
+typedef struct _ATA_ZONE_DESCRIPTOR {
+  UCHAR ZoneType : 4;
+  UCHAR Reserved0 : 4;
+  UCHAR Reset : 1;
+  UCHAR NonSeq : 1;
+  UCHAR Reserved1 : 2;
+  UCHAR ZoneCondition : 4;
+  UCHAR Reserved2[6];
+  ULONGLONG ZoneLength : 48;
+  ULONGLONG Reserved3 : 16;
+  ULONGLONG ZoneStartLBA : 48;
+  ULONGLONG Reserved4 : 16;
+  ULONGLONG WritePointerLBA : 48;
+  ULONGLONG Reserved5 : 16;
+  UCHAR Reserved6[32];
+} ATA_ZONE_DESCRIPTOR, *PATA_ZONE_DESCRIPTOR;
+
+typedef struct _ATA_PHYSICAL_ELEMENT_STATUS_DESCRIPTOR {
+  UCHAR Reserved1[4];
+  ULONG ElementIdentifier;
+  UCHAR Reserved2[6];
+  UCHAR PhysicalElementType;
+  UCHAR PhysicalElementHealth;
+  ULONGLONG AssociatedCapacity;
+  UCHAR Reserved3[8];
+} ATA_PHYSICAL_ELEMENT_STATUS_DESCRIPTOR, 
*PATA_PHYSICAL_ELEMENT_STATUS_DESCRIPTOR;
+
+typedef struct _ATA_GET_PHYSICAL_ELEMENT_STATUS_PARAMETER_DATA {
+  ULONG NumberOfDescriptors;
+  ULONG NumberOfDescriptorsReturned;
+  ULONG ElementIdentifierBeingDepoped;
+  UCHAR Reserved[20];
+  ATA_PHYSICAL_ELEMENT_STATUS_DESCRIPTOR Descriptors[ANYSIZE_ARRAY];
+} ATA_GET_PHYSICAL_ELEMENT_STATUS_PARAMETER_DATA, 
*PATA_GET_PHYSICAL_ELEMENT_STATUS_PARAMETER_DATA;
+
+#pragma pack(pop)
+
+#define ATAPI_MODE_SENSE        0x5A
+#define ATAPI_MODE_SELECT       0x55
+#define ATAPI_LS120_FORMAT_UNIT 0x24
+
+#define IDE_LBA_MODE   (1 << 6)
+
+#define IDE_DC_DISABLE_INTERRUPTS    0x02
+#define IDE_DC_RESET_CONTROLLER      0x04
+#define IDE_DC_REENABLE_CONTROLLER   0x00
+
+#define IDE_STATUS_ERROR             0x01
+#define IDE_STATUS_INDEX             0x02
+#define IDE_STATUS_CORRECTED_ERROR   0x04
+#define IDE_STATUS_DRQ               0x08
+#define IDE_STATUS_DSC               0x10
+#define IDE_STATUS_DEVICE_FAULT      0x20
+#define IDE_STATUS_DRDY              0x40
+#define IDE_STATUS_IDLE              0x50
+#define IDE_STATUS_BUSY              0x80
+
+#define IDE_ERROR_BAD_BLOCK          0x80
+#define IDE_ERROR_CRC_ERROR          IDE_ERROR_BAD_BLOCK
+#define IDE_ERROR_DATA_ERROR         0x40
+#define IDE_ERROR_MEDIA_CHANGE       0x20
+#define IDE_ERROR_ID_NOT_FOUND       0x10
+#define IDE_ERROR_MEDIA_CHANGE_REQ   0x08
+#define IDE_ERROR_COMMAND_ABORTED    0x04
+#define IDE_ERROR_END_OF_MEDIA       0x02
+#define IDE_ERROR_ILLEGAL_LENGTH     0x01
+#define IDE_ERROR_ADDRESS_NOT_FOUND  IDE_ERROR_ILLEGAL_LENGTH
+
+#define IDE_COMMAND_NOP                         0x00
+#define IDE_COMMAND_DATA_SET_MANAGEMENT         0x06
+#define IDE_COMMAND_ATAPI_RESET                 0x08
+#define IDE_COMMAND_GET_PHYSICAL_ELEMENT_STATUS 0x12
+#define IDE_COMMAND_READ                        0x20
+#define IDE_COMMAND_READ_EXT                    0x24
+#define IDE_COMMAND_READ_DMA_EXT                0x25
+#define IDE_COMMAND_READ_DMA_QUEUED_EXT         0x26
+#define IDE_COMMAND_READ_MULTIPLE_EXT           0x29
+#define IDE_COMMAND_READ_LOG_EXT                0x2f
+#define IDE_COMMAND_WRITE                       0x30
+#define IDE_COMMAND_WRITE_EXT                   0x34
+#define IDE_COMMAND_WRITE_DMA_EXT               0x35
+#define IDE_COMMAND_WRITE_DMA_QUEUED_EXT        0x36
+#define IDE_COMMAND_WRITE_MULTIPLE_EXT          0x39
+#define IDE_COMMAND_WRITE_DMA_FUA_EXT           0x3D
+#define IDE_COMMAND_WRITE_DMA_QUEUED_FUA_EXT    0x3E
+#define IDE_COMMAND_WRITE_LOG_EXT               0x3F
+#define IDE_COMMAND_VERIFY                      0x40
+#define IDE_COMMAND_VERIFY_EXT                  0x42
+#define IDE_COMMAND_ZAC_MANAGEMENT_IN           0x4A
+#define IDE_COMMAND_WRITE_LOG_DMA_EXT           0x57
+#define IDE_COMMAND_TRUSTED_NON_DATA            0x5B
+#define IDE_COMMAND_TRUSTED_RECEIVE             0x5C
+#define IDE_COMMAND_TRUSTED_RECEIVE_DMA         0x5D
+#define IDE_COMMAND_TRUSTED_SEND                0x5E
+#define IDE_COMMAND_TRUSTED_SEND_DMA            0x5F
+#define IDE_COMMAND_READ_FPDMA_QUEUED           0x60
+#define IDE_COMMAND_WRITE_FPDMA_QUEUED          0x61
+#define IDE_COMMAND_NCQ_NON_DATA                0x63
+#define IDE_COMMAND_SEND_FPDMA_QUEUED           0x64
+#define IDE_COMMAND_RECEIVE_FPDMA_QUEUED        0x65
+#define IDE_COMMAND_SET_DATE_AND_TIME           0x77
+#define IDE_COMMAND_REMOVE_ELEMENT_AND_TRUNCATE 0x7C
+#define IDE_COMMAND_EXECUTE_DEVICE_DIAGNOSTIC   0x90
+#define IDE_COMMAND_SET_DRIVE_PARAMETERS        0x91
+#define IDE_COMMAND_DOWNLOAD_MICROCODE          0x92
+#define IDE_COMMAND_DOWNLOAD_MICROCODE_DMA      0x93
+#define IDE_COMMAND_ZAC_MANAGEMENT_OUT          0x9F
+#define IDE_COMMAND_ATAPI_PACKET                0xA0
+#define IDE_COMMAND_ATAPI_IDENTIFY              0xA1
+#define IDE_COMMAND_SMART                       0xB0
+#define IDE_COMMAND_READ_LOG_DMA_EXT            0xB1
+#define IDE_COMMAND_SANITIZE_DEVICE             0xB4
+#define IDE_COMMAND_READ_MULTIPLE               0xC4
+#define IDE_COMMAND_WRITE_MULTIPLE              0xC5
+#define IDE_COMMAND_SET_MULTIPLE                0xC6
+#define IDE_COMMAND_READ_DMA                    0xC8
+#define IDE_COMMAND_WRITE_DMA                   0xCA
+#define IDE_COMMAND_WRITE_DMA_QUEUED            0xCC
+#define IDE_COMMAND_WRITE_MULTIPLE_FUA_EXT      0xCE
+#define IDE_COMMAND_GET_MEDIA_STATUS            0xDA
+#define IDE_COMMAND_DOOR_LOCK                   0xDE
+#define IDE_COMMAND_DOOR_UNLOCK                 0xDF
+#define IDE_COMMAND_STANDBY_IMMEDIATE           0xE0
+#define IDE_COMMAND_IDLE_IMMEDIATE              0xE1
+#define IDE_COMMAND_CHECK_POWER                 0xE5
+#define IDE_COMMAND_SLEEP                       0xE6
+#define IDE_COMMAND_FLUSH_CACHE                 0xE7
+#define IDE_COMMAND_FLUSH_CACHE_EXT             0xEA
+#define IDE_COMMAND_IDENTIFY                    0xEC
+#define IDE_COMMAND_MEDIA_EJECT                 0xED
+#define IDE_COMMAND_SET_FEATURE                 0xEF
+#define IDE_COMMAND_SECURITY_SET_PASSWORD       0xF1
+#define IDE_COMMAND_SECURITY_UNLOCK             0xF2
+#define IDE_COMMAND_SECURITY_ERASE_PREPARE      0xF3
+#define IDE_COMMAND_SECURITY_ERASE_UNIT         0xF4
+#define IDE_COMMAND_SECURITY_FREEZE_LOCK        0xF5
+#define IDE_COMMAND_SECURITY_DISABLE_PASSWORD   0xF6
+#define IDE_COMMAND_NOT_VALID                   0xFF
+
+#define IDE_SET_DEFAULT_PIO_MODE(mode)      ((UCHAR)1)
+#define IDE_SET_ADVANCE_PIO_MODE(mode)      ((UCHAR)((1 << 3) | (mode)))
+#define IDE_SET_SWDMA_MODE(mode)            ((UCHAR)((1 << 4) | (mode)))
+#define IDE_SET_MWDMA_MODE(mode)            ((UCHAR)((1 << 5) | (mode)))
+#define IDE_SET_UDMA_MODE(mode)             ((UCHAR)((1 << 6) | (mode)))
+
+#define IDE_FEATURE_ENABLE_WRITE_CACHE          0x2
+#define IDE_FEATURE_SET_TRANSFER_MODE           0x3
+#define IDE_FEATURE_ENABLE_PUIS                 0x6
+#define IDE_FEATURE_PUIS_SPIN_UP                0x7
+#define IDE_FEATURE_ENABLE_SATA_FEATURE         0x10
+#define IDE_FEATURE_DISABLE_MSN                 0x31
+#define IDE_FEATURE_DISABLE_REVERT_TO_POWER_ON  0x66
+#define IDE_FEATURE_DISABLE_WRITE_CACHE         0x82
+#define IDE_FEATURE_DISABLE_PUIS                0x86
+#define IDE_FEATURE_DISABLE_SATA_FEATURE        0x90
+#define IDE_FEATURE_ENABLE_MSN                  0x95
+
+#define IDE_SATA_FEATURE_NON_ZERO_DMA_BUFFER_OFFSET         0x1
+#define IDE_SATA_FEATURE_DMA_SETUP_FIS_AUTO_ACTIVATE        0x2
+#define IDE_SATA_FEATURE_DEVICE_INITIATED_POWER_MANAGEMENT  0x3
+#define IDE_SATA_FEATURE_GUARANTEED_IN_ORDER_DELIVERY       0x4
+#define IDE_SATA_FEATURE_ASYNCHRONOUS_NOTIFICATION          0x5
+#define IDE_SATA_FEATURE_SOFTWARE_SETTINGS_PRESERVATION     0x6
+#define IDE_SATA_FEATURE_DEVICE_AUTO_PARTIAL_TO_SLUMBER     0x7
+#define IDE_SATA_FEATURE_ENABLE_HARDWARE_FEATURE_CONTROL    0x8
+#define IDE_SATA_FEATURE_DEVSLP                             0x9
+#define IDE_SATA_FEATURE_HYBRID_INFORMATION                 0xA
+
+#define IDE_SMART_READ_ATTRIBUTES               0xD0
+#define IDE_SMART_READ_THRESHOLDS               0xD1
+#define IDE_SMART_ENABLE_DISABLE_AUTOSAVE       0xD2
+#define IDE_SMART_SAVE_ATTRIBUTE_VALUES         0xD3
+#define IDE_SMART_EXECUTE_OFFLINE_DIAGS         0xD4
+#define IDE_SMART_READ_LOG                      0xD5
+#define IDE_SMART_WRITE_LOG                     0xD6
+#define IDE_SMART_ENABLE                        0xD8
+#define IDE_SMART_DISABLE                       0xD9
+#define IDE_SMART_RETURN_STATUS                 0xDA
+#define IDE_SMART_ENABLE_DISABLE_AUTO_OFFLINE   0xDB
+
+#define IDE_DSM_FEATURE_TRIM                  0x0001
+
+#define IDE_NCQ_NON_DATA_ABORT_NCQ_QUEUE                0x00
+#define IDE_NCQ_NON_DATA_DEADLINE_HANDLING              0x01
+#define IDE_NCQ_NON_DATA_HYBRID_CHANGE_BY_SIZE          0x02
+#define IDE_NCQ_NON_DATA_HYBRID_DEMOTE_BY_SIZE          0x02
+#define IDE_NCQ_NON_DATA_HYBRID_CHANGE_BY_LBA_RANGE     0x03
+#define IDE_NCQ_NON_DATA_HYBRID_CONTROL                 0x04
+
+#define IDE_NCQ_SEND_DATA_SET_MANAGEMENT                0x00
+#define IDE_NCQ_SEND_HYBRID_EVICT                       0x01
+
+#define ATA_DEVICE_SET_PASSWORD_MASTER       0x01
+#define ATA_DEVICE_SET_PASSWORD_USER         0x00
+
+#define IDE_GP_LOG_DIRECTORY_ADDRESS                0x00
+#define IDE_GP_SUMMARY_SMART_ERROR                  0x01
+#define IDE_GP_COMPREHENSIVE_SMART_ERROR            0x02
+#define IDE_GP_EXTENDED_COMPREHENSIVE_SMART_ERROR   0x03
+#define IDE_GP_LOG_DEVICE_STATISTICS_ADDRESS        0x04
+#define IDE_GP_SMART_SELF_TEST                      0x06
+#define IDE_GP_EXTENDED_SMART_SELF_TEST             0x07
+#define IDE_GP_LOG_POWER_CONDITIONS                 0x08
+#define IDE_GP_SELECTIVE_SELF_TEST                  0x09
+#define IDE_GP_DEVICE_STATISTICS_NOTIFICATION       0x0A
+#define IDE_GP_PENDING_DEFECTS                      0x0C
+#define IDE_GP_LPS_MISALIGNMENT                     0x0D
+#define IDE_GP_LOG_NCQ_COMMAND_ERROR_ADDRESS        0x10
+#define IDE_GP_LOG_PHY_EVENT_COUNTER_ADDRESS        0x11
+#define IDE_GP_LOG_NCQ_NON_DATA_ADDRESS             0x12
+#define IDE_GP_LOG_NCQ_SEND_RECEIVE_ADDRESS         0x13
+#define IDE_GP_LOG_HYBRID_INFO_ADDRESS              0x14
+#define IDE_GP_LOG_REBUILD_ASSIST                   0x15
+#define IDE_GP_LOG_LBA_STATUS                       0x19
+#define IDE_GP_LOG_WRITE_STREAM_ERROR               0x21
+#define IDE_GP_LOG_READ_STREAM_ERROR                0x22
+#define IDE_GP_LOG_CURRENT_DEVICE_INTERNAL_STATUS   0x24
+#define IDE_GP_LOG_SAVED_DEVICE_INTERNAL_STATUS     0x25
+#define IDE_GP_LOG_IDENTIFY_DEVICE_DATA_ADDRESS     0x30
+#define IDE_GP_LOG_SCT_COMMAND_STATUS               0xE0
+#define IDE_GP_LOG_SCT_DATA_TRANSFER                0xE1
+
+#define IDE_GP_LOG_SECTOR_SIZE                      0x200
+
+#define IDE_GP_LOG_VERSION                          0x0001
+
+#define IDE_GP_LOG_SUPPORTED_PAGES                  0x00
+
+#define IDE_GP_LOG_IDENTIFY_DEVICE_DATA_SUPPORTED_CAPABILITIES_PAGE     0x03
+#define IDE_GP_LOG_IDENTIFY_DEVICE_DATA_SATA_PAGE                       0x08
+#define IDE_GP_LOG_IDENTIFY_DEVICE_DATA_ZONED_DEVICE_INFORMATION_PAGE   0x09
+
+#define ATA_ZONED_CAPABILITIES_NOT_REPORTED       0x0
+#define ATA_ZONED_CAPABILITIES_HOST_AWARE         0x1
+#define ATA_ZONED_CAPABILITIES_DEVICE_MANAGED     0x2
+
+#define ZAC_REVISION_NOT_REPORTED_1     0x0000
+#define ZAC_REVISION_NOT_REPORTED_2     0xFFFF
+#define ZAC_REVISION_01                 0xB6E8
+#define ZAC_REVISION_04                 0xA36C
+
+#define CURRENT_DEVICE_INTERNAL_STATUS_DATA_LOG_ADDRESS     0x24
+#define SAVED_DEVICE_INTERNAL_STATUS_DATA_LOG_ADDRESS       0x25
+
+#define IDE_GP_LOG_DEVICE_STATISTICS_GENERAL_PAGE           0x01
+#define IDE_GP_LOG_DEVICE_STATISTICS_FREE_FALL_PAGE         0x02
+#define IDE_GP_LOG_DEVICE_STATISTICS_ROTATING_MEDIA_PAGE    0x03
+#define IDE_GP_LOG_DEVICE_STATISTICS_GENERAL_ERROR_PAGE     0x04
+#define IDE_GP_LOG_DEVICE_STATISTICS_TEMPERATURE_PAGE       0x05
+#define IDE_GP_LOG_DEVICE_STATISTICS_TRANSPORT_PAGE         0x06
+#define IDE_GP_LOG_DEVICE_STATISTICS_SSD_PAGE               0x07
+
+#define HYBRID_INFORMATION_DISABLED             0x00
+#define HYBRID_INFORMATION_DISABLE_IN_PROCESS   0x80
+#define HYBRID_INFORMATION_ENABLED              0xFF
+
+#define HYBRID_HEALTH_UNUSEABLE                 0x01
+#define HYBRID_HEALTH_NVM_SIZE_CHANGED          0x02
+#define HYBRID_HEALTH_READ_ONLY                 0x04
+#define HYBRID_HEALTH_DATA_LOSS                 0x08
+
+#define ATA_DEVICE_SIGNATURE_ATA                0x00000101
+#define ATA_DEVICE_SIGNATURE_ATAPI              0xEB140101
+#define ATA_DEVICE_SIGNATURE_HOST_ZONED         0xABCD0101
+#define ATA_DEVICE_SIGNATURE_ENCLOSURE          0xC33C0101
+#define ATA_DEVICE_SIGNATURE_PORT_MULTIPLIER    0x96690101
+
+#define ZM_ACTION_REPORT_ZONES          0x00
+#define ZM_ACTION_CLOSE_ZONE            0x01
+#define ZM_ACTION_FINISH_ZONE           0x02
+#define ZM_ACTION_OPEN_ZONE             0x03
+#define ZM_ACTION_RESET_WRITE_POINTER   0x04
+
+#define ZM_ALL_ZONES_BIT                (1 << 8)
+
+#define ATA_REPORT_ZONES_OPTION_LIST_ALL_ZONES                  0x00
+#define ATA_REPORT_ZONES_OPTION_LIST_EMPTY_ZONES                0x01
+#define ATA_REPORT_ZONES_OPTION_LIST_IMPLICITLY_OPENED_ZONES    0x02
+#define ATA_REPORT_ZONES_OPTION_LIST_EXPLICITLY_OPENED_ZONES    0x03
+#define ATA_REPORT_ZONES_OPTION_LIST_CLOSED_ZONES               0x04
+#define ATA_REPORT_ZONES_OPTION_LIST_FULL_ZONES                 0x05
+#define ATA_REPORT_ZONES_OPTION_LIST_READ_ONLY_ZONES            0x06
+#define ATA_REPORT_ZONES_OPTION_LIST_OFFLINE_ZONES              0x07
+
+#define ATA_REPORT_ZONES_OPTION_LIST_RWP_ZONES                                 
     0x10
+#define 
ATA_REPORT_ZONES_OPTION_LIST_NON_SEQUENTIAL_WRITE_RESOURCES_ACTIVE_ZONES    0x11
+
+#define ATA_REPORT_ZONES_OPTION_LIST_NOT_WRITE_POINTER_ZONES    0x3F
+
+#define ATA_ZONES_TYPE_AND_LENGTH_MAY_DIFFERENT          0x0
+#define ATA_ZONES_TYPE_SAME_LENGTH_SAME                  0x1
+#define ATA_ZONES_TYPE_SAME_LAST_ZONE_LENGTH_DIFFERENT   0x2
+#define ATA_ZONES_TYPE_MAY_DIFFERENT_LENGTH_SAME         0x3
+
+#define ATA_ZONE_TYPE_CONVENTIONAL                          0x1
+#define ATA_ZONE_TYPE_SEQUENTIAL_WRITE_REQUIRED             0x2
+#define ATA_ZONE_TYPE_SEQUENTIAL_WRITE_PREFERRED            0x3
+
+#define ATA_ZONE_CONDITION_NOT_WRITE_POINTER                0x0
+#define ATA_ZONE_CONDITION_EMPTY                            0x1
+#define ATA_ZONE_CONDITION_IMPLICITLY_OPENED                0x2
+#define ATA_ZONE_CONDITION_EXPLICITLY_OPENED                0x3
+#define ATA_ZONE_CONDITION_CLOSED                           0x4
+#define ATA_ZONE_CONDITION_READ_ONLY                        0xD
+#define ATA_ZONE_CONDITION_FULL                             0xE
+#define ATA_ZONE_CONDITION_OFFLINE                          0xF
+
+#endif
-- 
2.32.0



_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to