17 return (IdentifyPacketData->GeneralConfiguration.DrqDelay == 1);
26 return (IdentifyPacketData->GeneralConfiguration.PacketType != 0) ? 8 : 6;
35 USHORT LastLunIdentifier = IdentifyPacketData->ReservedWord126 & 7;
43 if (LastLunIdentifier != 7)
44 return LastLunIdentifier + 1;
55 if (IdentifyPacketData->DMADIR.DMADIRBitRequired)
57 return !(IdentifyPacketData->MultiWordDMASupport & 0x7) &&
58 !IdentifyPacketData->Capabilities.DmaSupported &&
59 !IdentifyPacketData->Capabilities.InterleavedDmaSupported &&
60 !(IdentifyPacketData->UltraDMASupport & 0x7F);
72 return (IdentifyPacketData->GeneralConfiguration.CommandPacketType == 1);
84 if (IdentifyData->Signature != 0xA5)
92 for (
i = 0;
i <
sizeof(*IdentifyData); ++
i)
94 Crc += ((
PUCHAR)IdentifyData)[
i];
106 return IdentifyData->Capabilities.LbaSupported;
115 return IdentifyData->UserAddressableSectors;
124 return ((
ULONG64)IdentifyData->Max48BitLBA[1] << 32) | IdentifyData->Max48BitLBA[0];
133 if (IdentifyData->CommandSetSupport.WordValid83 == 1)
136 return IdentifyData->CommandSetSupport.BigLba;
147 return ((IdentifyData->TranslationFieldsValid & 1) &&
148 (IdentifyData->NumberOfCurrentCylinders != 0) &&
149 (IdentifyData->NumberOfCurrentCylinders <= 63) &&
150 (IdentifyData->NumberOfCurrentHeads != 0) &&
151 (IdentifyData->NumberOfCurrentHeads <= 16) &&
152 (IdentifyData->CurrentSectorsPerTrack != 0));
164 *Cylinders = IdentifyData->NumCylinders;
166 *Heads = IdentifyData->NumHeads;
180 *Cylinders = IdentifyData->NumberOfCurrentCylinders;
182 *Heads = IdentifyData->NumberOfCurrentHeads;
192 UCHAR MultiSectorCurrent;
195 if (!(IdentifyData->MultiSectorSettingValid))
199 MultiSectorCurrent = IdentifyData->CurrentMultiSectorSetting;
200 if ((MultiSectorCurrent > 0) && ((MultiSectorCurrent & (MultiSectorCurrent - 1)) == 0))
201 return MultiSectorCurrent;
211 UCHAR MultiSectorMax;
214 MultiSectorMax = IdentifyData->MaximumBlockTransfer;
215 if ((MultiSectorMax > 0) && ((MultiSectorMax & (MultiSectorMax - 1)) == 0))
216 return MultiSectorMax;
229 if (IdentifyData->PhysicalLogicalSectorSize.Reserved1 == 1 &&
230 IdentifyData->PhysicalLogicalSectorSize.LogicalSectorLongerThan256Words)
233 WordCount = IdentifyData->WordsPerLogicalSector[0];
234 WordCount |= (
ULONG)IdentifyData->WordsPerLogicalSector[1] << 16;
242 return WordCount *
sizeof(
USHORT);
252 if (IdentifyData->PhysicalLogicalSectorSize.Reserved1 == 1 &&
253 IdentifyData->PhysicalLogicalSectorSize.MultipleLogicalSectorsPerPhysicalSector)
256 *Exponent = IdentifyData->PhysicalLogicalSectorSize.LogicalSectorsPerPhysicalSector;
258 return 1 << *Exponent;
271 if (IdentifyData->BlockAlignment.Word209Supported &&
272 IdentifyData->BlockAlignment.Reserved0 == 0)
275 return IdentifyData->BlockAlignment.AlignmentOfLogicalWithinPhysical;
287 return (IdentifyData->SpecificConfiguration == 0x37C8) ||
288 (IdentifyData->SpecificConfiguration == 0x738C);
297 return IdentifyData->GeneralConfiguration.ResponseIncomplete;
306 return IdentifyData->GeneralConfiguration.RemovableMedia;
317 if (IdentifyData->CommandSetSupport.WordValid == 1)
320 return IdentifyData->CommandSetSupport.RemovableMediaFeature;
333 if (IdentifyData->SerialAtaCapabilities.NCQ)
336 return IdentifyData->QueueDepth + 1;
349 if (Word76 != 0x0000 && Word76 != 0xFFFF)
352 return IdentifyData->SerialAtaFeaturesSupported.NCQAutosense;
363 if (IdentifyData->CommandSetActive.Words119_120Valid &&
364 IdentifyData->CommandSetSupportExt.WordValid == 1)
367 return IdentifyData->CommandSetSupportExt.SenseDataReporting;
379 return (IdentifyData->MsnSupport == 1);
390 if (IdentifyData->TrustedComputing.FeatureSupported)
393 return IdentifyData->AdditionalSupported.IEEE1667;
405 if (IdentifyData->CommandSetActive.Reserved4 == 1)
408 return IdentifyData->CommandSetActive.WWN64Bit;
420 return (IdentifyData->AdditionalSupported.ZonedCapabilities != 0);
429 return IdentifyData->AdditionalSupported.ZonedCapabilities;
438 if (IdentifyData->CommandSetSupport.WordValid == 1)
441 return IdentifyData->CommandSetSupport.SecurityMode;
453 return IdentifyData->CommandSetSupport.SmartCommands;
462 if (IdentifyData->CommandSetSupport.WordValid == 1)
465 return (IdentifyData->CommandSetSupport.WriteCache &&
466 IdentifyData->CommandSetActive.WriteCache);
478 if (IdentifyData->CommandSetSupport.WordValid == 1)
481 return (IdentifyData->CommandSetSupport.LookAhead &&
482 IdentifyData->CommandSetActive.LookAhead);
494 return IdentifyData->NominalFormFactor;
503 return IdentifyData->NominalMediaRotationRate;
512 return (IdentifyData->NominalMediaRotationRate >= 0x0401 &&
513 IdentifyData->NominalMediaRotationRate <= 0xFFFE);
522 return (IdentifyData->NominalMediaRotationRate == 1);
531 return IdentifyData->DataSetManagementFeature.SupportsTrim;
540 return IdentifyData->AdditionalSupported.ReadZeroAfterTrimSupported;
549 return IdentifyData->AdditionalSupported.DeterministicReadAfterTrimSupported;
558 if (IdentifyData->CommandSetSupport.WordValid83 == 1)
561 return IdentifyData->CommandSetSupport.WriteFua;
573 if (IdentifyData->CommandSetSupport.WordValid == 1)
576 return IdentifyData->CommandSetSupport.FlushCache;
588 if (IdentifyData->CommandSetSupport.WordValid == 1)
591 return IdentifyData->CommandSetSupport.FlushCacheExt;
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
FORCEINLINE BOOLEAN AtaDevIsIdentifyDataIncomplete(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE UCHAR AtaDevNominalFormFactor(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE VOID AtaDevDefaultChsTranslation(_In_ PIDENTIFY_DEVICE_DATA IdentifyData, _Out_ PUSHORT Cylinders, _Out_ PUSHORT Heads, _Out_ PUSHORT SectorsPerTrack)
FORCEINLINE ULONG AtaDevBytesPerLogicalSector(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsReadLookAHeadEnabled(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasIeee1667(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasSmartFeature(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasCdbInterrupt(_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
FORCEINLINE BOOLEAN AtaDevHasFlushCache(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevInPuisState(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE ULONG AtaDevLogicalSectorsPerPhysicalSector(_In_ PIDENTIFY_DEVICE_DATA IdentifyData, _Out_ PULONG Exponent)
FORCEINLINE BOOLEAN AtaDevIsIdentifyDataValid(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE UCHAR AtaDevCurrentSectorsPerDrq(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE UCHAR AtaDevZonedCapabilities(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasRemovableMediaStatusNotification(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasRzatFunction(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasRemovableMediaFeature(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasForceUnitAccessCommands(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasTrimFunction(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasWorldWideName(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHas48BitAddressFeature(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsRotatingDevice(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE USHORT AtaDevMediumRotationRate(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE ULONG64 AtaDevUserAddressableSectors48Bit(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsSsd(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasSenseDataReporting(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasNcqAutosense(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsRemovable(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasLbaTranslation(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsVolatileWriteCacheEnabled(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE ULONG AtaDevLogicalSectorAlignment(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsTape(_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
FORCEINLINE ULONG AtaDevUserAddressableSectors28Bit(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE UCHAR AtaDevMaximumSectorsPerDrq(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsDmaDirectionRequired(_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
FORCEINLINE BOOLEAN AtaDevHasDratFunction(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE ULONG AtaDevQueueDepth(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsCurrentGeometryValid(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE VOID AtaDevCurrentChsTranslation(_In_ PIDENTIFY_DEVICE_DATA IdentifyData, _Out_ PUSHORT Cylinders, _Out_ PUSHORT Heads, _Out_ PUSHORT SectorsPerTrack)
FORCEINLINE BOOLEAN AtaDevMaxLun(_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
FORCEINLINE BOOLEAN AtaDevHasFlushCacheExt(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasSecurityModeFeature(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE UCHAR AtaDevCdbSizeInWords(_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
FORCEINLINE BOOLEAN AtaDevIsZonedDevice(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
_In_ ULONG _In_ ULONG SectorsPerTrack