ReactOS 0.4.16-dev-2633-g8dc9e50
identify_funcs.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

FORCEINLINE BOOLEAN AtaDevHasCdbInterrupt (_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
 
FORCEINLINE UCHAR AtaDevCdbSizeInWords (_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
 
FORCEINLINE BOOLEAN AtaDevMaxLun (_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
 
FORCEINLINE BOOLEAN AtaDevIsDmaDirectionRequired (_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
 
FORCEINLINE BOOLEAN AtaDevIsTape (_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
 
FORCEINLINE BOOLEAN AtaDevIsIdentifyDataValid (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasLbaTranslation (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE ULONG AtaDevUserAddressableSectors28Bit (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE ULONG64 AtaDevUserAddressableSectors48Bit (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHas48BitAddressFeature (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevIsCurrentGeometryValid (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE VOID AtaDevDefaultChsTranslation (_In_ PIDENTIFY_DEVICE_DATA IdentifyData, _Out_ PUSHORT Cylinders, _Out_ PUSHORT Heads, _Out_ PUSHORT SectorsPerTrack)
 
FORCEINLINE VOID AtaDevCurrentChsTranslation (_In_ PIDENTIFY_DEVICE_DATA IdentifyData, _Out_ PUSHORT Cylinders, _Out_ PUSHORT Heads, _Out_ PUSHORT SectorsPerTrack)
 
FORCEINLINE UCHAR AtaDevCurrentSectorsPerDrq (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE UCHAR AtaDevMaximumSectorsPerDrq (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE ULONG AtaDevBytesPerLogicalSector (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE ULONG AtaDevLogicalSectorsPerPhysicalSector (_In_ PIDENTIFY_DEVICE_DATA IdentifyData, _Out_ PULONG Exponent)
 
FORCEINLINE ULONG AtaDevLogicalSectorAlignment (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevInPuisState (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevIsIdentifyDataIncomplete (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevIsRemovable (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasRemovableMediaFeature (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE ULONG AtaDevQueueDepth (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasNcqAutosense (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasSenseDataReporting (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasRemovableMediaStatusNotification (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasIeee1667 (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasWorldWideName (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevIsZonedDevice (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE UCHAR AtaDevZonedCapabilities (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasSecurityModeFeature (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasSmartFeature (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevIsVolatileWriteCacheEnabled (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevIsReadLookAHeadEnabled (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE UCHAR AtaDevNominalFormFactor (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE USHORT AtaDevMediumRotationRate (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevIsRotatingDevice (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevIsSsd (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasTrimFunction (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasRzatFunction (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasDratFunction (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasForceUnitAccessCommands (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasFlushCache (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 
FORCEINLINE BOOLEAN AtaDevHasFlushCacheExt (_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
 

Function Documentation

◆ AtaDevBytesPerLogicalSector()

FORCEINLINE ULONG AtaDevBytesPerLogicalSector ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 223 of file identify_funcs.h.

225{
226 ULONG WordCount;
227
228 /* Word 106: 15 = 0, 14 = 1, 12 = 1 */
229 if (IdentifyData->PhysicalLogicalSectorSize.Reserved1 == 1 &&
230 IdentifyData->PhysicalLogicalSectorSize.LogicalSectorLongerThan256Words)
231 {
232 /* Words 116-117 */
233 WordCount = IdentifyData->WordsPerLogicalSector[0];
234 WordCount |= (ULONG)IdentifyData->WordsPerLogicalSector[1] << 16;
235 }
236 else
237 {
238 /* 256 words = 512 bytes */
239 WordCount = 256;
240 }
241
242 return WordCount * sizeof(USHORT);
243}
unsigned short USHORT
Definition: pedump.c:61
uint32_t ULONG
Definition: typedefs.h:59

◆ AtaDevCdbSizeInWords()

FORCEINLINE UCHAR AtaDevCdbSizeInWords ( _In_ PIDENTIFY_PACKET_DATA  IdentifyPacketData)

Definition at line 22 of file identify_funcs.h.

24{
25 /* Bits 0:2 of word 0 */
26 return (IdentifyPacketData->GeneralConfiguration.PacketType != 0) ? 8 : 6;
27}

◆ AtaDevCurrentChsTranslation()

FORCEINLINE VOID AtaDevCurrentChsTranslation ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData,
_Out_ PUSHORT  Cylinders,
_Out_ PUSHORT  Heads,
_Out_ PUSHORT  SectorsPerTrack 
)

Definition at line 173 of file identify_funcs.h.

178{
179 /* Word 54 */
180 *Cylinders = IdentifyData->NumberOfCurrentCylinders;
181 /* Word 55 */
182 *Heads = IdentifyData->NumberOfCurrentHeads;
183 /* Word 55 */
184 *SectorsPerTrack = IdentifyData->CurrentSectorsPerTrack;
185}
_In_ ULONG _In_ ULONG SectorsPerTrack
Definition: iofuncs.h:2071

◆ AtaDevCurrentSectorsPerDrq()

FORCEINLINE UCHAR AtaDevCurrentSectorsPerDrq ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 189 of file identify_funcs.h.

191{
192 UCHAR MultiSectorCurrent;
193
194 /* Bit 8 of word 59 */
195 if (!(IdentifyData->MultiSectorSettingValid))
196 return 0;
197
198 /* The word 59 should be a power of 2 */
199 MultiSectorCurrent = IdentifyData->CurrentMultiSectorSetting;
200 if ((MultiSectorCurrent > 0) && ((MultiSectorCurrent & (MultiSectorCurrent - 1)) == 0))
201 return MultiSectorCurrent;
202
203 return 0;
204}
unsigned char UCHAR
Definition: typedefs.h:53

◆ AtaDevDefaultChsTranslation()

FORCEINLINE VOID AtaDevDefaultChsTranslation ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData,
_Out_ PUSHORT  Cylinders,
_Out_ PUSHORT  Heads,
_Out_ PUSHORT  SectorsPerTrack 
)

Definition at line 157 of file identify_funcs.h.

162{
163 /* Word 1 */
164 *Cylinders = IdentifyData->NumCylinders;
165 /* Word 3 */
166 *Heads = IdentifyData->NumHeads;
167 /* Word 6 */
168 *SectorsPerTrack = IdentifyData->NumSectorsPerTrack;
169}

◆ AtaDevHas48BitAddressFeature()

FORCEINLINE BOOLEAN AtaDevHas48BitAddressFeature ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 129 of file identify_funcs.h.

131{
132 /* Word 83: 15 = 0, 14 = 1 */
133 if (IdentifyData->CommandSetSupport.WordValid83 == 1)
134 {
135 /* Bit 10 of word 83 */
136 return IdentifyData->CommandSetSupport.BigLba;
137 }
138
139 return FALSE;
140}
#define FALSE
Definition: types.h:117

◆ AtaDevHasCdbInterrupt()

FORCEINLINE BOOLEAN AtaDevHasCdbInterrupt ( _In_ PIDENTIFY_PACKET_DATA  IdentifyPacketData)

Definition at line 13 of file identify_funcs.h.

15{
16 /* Bits 5:6 of word 0 */
17 return (IdentifyPacketData->GeneralConfiguration.DrqDelay == 1);
18}

Referenced by AtaPortIdentifyDevice().

◆ AtaDevHasDratFunction()

FORCEINLINE BOOLEAN AtaDevHasDratFunction ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 545 of file identify_funcs.h.

547{
548 /* Bit 14 of word 69 */
549 return IdentifyData->AdditionalSupported.DeterministicReadAfterTrimSupported;
550}

Referenced by AtaReqCompleteReadCapacity(), and AtaReqScsiInquiryLogicalBlockProvisioning().

◆ AtaDevHasFlushCache()

FORCEINLINE BOOLEAN AtaDevHasFlushCache ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 569 of file identify_funcs.h.

571{
572 /* Word 83: 15 = 0, 14 = 1 */
573 if (IdentifyData->CommandSetSupport.WordValid == 1)
574 {
575 /* Bit 12 of word 83 */
576 return IdentifyData->CommandSetSupport.FlushCache;
577 }
578
579 return FALSE;
580}

Referenced by AtaDeviceGetFlushCacheCommand().

◆ AtaDevHasFlushCacheExt()

FORCEINLINE BOOLEAN AtaDevHasFlushCacheExt ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 584 of file identify_funcs.h.

586{
587 /* Word 83: 15 = 0, 14 = 1 */
588 if (IdentifyData->CommandSetSupport.WordValid == 1)
589 {
590 /* Bit 13 of word 83 */
591 return IdentifyData->CommandSetSupport.FlushCacheExt;
592 }
593
594 return FALSE;
595}

Referenced by AtaDeviceGetFlushCacheCommand().

◆ AtaDevHasForceUnitAccessCommands()

FORCEINLINE BOOLEAN AtaDevHasForceUnitAccessCommands ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 554 of file identify_funcs.h.

556{
557 /* Word 83: 15 = 0, 14 = 1 */
558 if (IdentifyData->CommandSetSupport.WordValid83 == 1)
559 {
560 /* Bit 6 of word 84 */
561 return IdentifyData->CommandSetSupport.WriteFua;
562 }
563
564 return FALSE;
565}

Referenced by AtaDeviceSetAddressingMode().

◆ AtaDevHasIeee1667()

FORCEINLINE BOOLEAN AtaDevHasIeee1667 ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 384 of file identify_funcs.h.

386{
387 // TODO: Verify word 48
388
389 /* Bit 0 of word 48 */
390 if (IdentifyData->TrustedComputing.FeatureSupported)
391 {
392 /* Bit 7 of word 69 */
393 return IdentifyData->AdditionalSupported.IEEE1667;
394 }
395
396 return FALSE;
397}

Referenced by AtaCreateStandardInquiryData().

◆ AtaDevHasLbaTranslation()

FORCEINLINE BOOLEAN AtaDevHasLbaTranslation ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 102 of file identify_funcs.h.

104{
105 /* Bit 9 of word 49 */
106 return IdentifyData->Capabilities.LbaSupported;
107}

◆ AtaDevHasNcqAutosense()

FORCEINLINE BOOLEAN AtaDevHasNcqAutosense ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 344 of file identify_funcs.h.

346{
347 USHORT Word76 = ((PUSHORT)IdentifyData)[76]; // IdentifyData->SerialAtaCapabilities
348
349 if (Word76 != 0x0000 && Word76 != 0xFFFF)
350 {
351 /* Bit 7 of word 78 */
352 return IdentifyData->SerialAtaFeaturesSupported.NCQAutosense;
353 }
354
355 return FALSE;
356}
uint16_t * PUSHORT
Definition: typedefs.h:56

Referenced by AtaDeviceNcqRecovery().

◆ AtaDevHasRemovableMediaFeature()

FORCEINLINE BOOLEAN AtaDevHasRemovableMediaFeature ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 311 of file identify_funcs.h.

313{
314 if (AtaDevIsRemovable(IdentifyData))
315 {
316 /* Word 83: 15 = 0, 14 = 1 */
317 if (IdentifyData->CommandSetSupport.WordValid == 1)
318 {
319 /* Bit 2 of word 82 */
320 return IdentifyData->CommandSetSupport.RemovableMediaFeature;
321 }
322 }
323
324 return FALSE;
325}
FORCEINLINE BOOLEAN AtaDevIsRemovable(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)

Referenced by AtaReqScsiMediumRemoval().

◆ AtaDevHasRemovableMediaStatusNotification()

FORCEINLINE BOOLEAN AtaDevHasRemovableMediaStatusNotification ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 375 of file identify_funcs.h.

377{
378 /* Word 127: bit 0 = 1, bit 1 = 0 */
379 return (IdentifyData->MsnSupport == 1);
380}

Referenced by AtaDeviceEnableMsnFeature().

◆ AtaDevHasRzatFunction()

FORCEINLINE BOOLEAN AtaDevHasRzatFunction ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 536 of file identify_funcs.h.

538{
539 /* Bit 5 of word 69 */
540 return IdentifyData->AdditionalSupported.ReadZeroAfterTrimSupported;
541}

Referenced by AtaReqCompleteReadCapacity(), and AtaReqScsiInquiryLogicalBlockProvisioning().

◆ AtaDevHasSecurityModeFeature()

FORCEINLINE BOOLEAN AtaDevHasSecurityModeFeature ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 434 of file identify_funcs.h.

436{
437 /* Word 83: 15 = 0, 14 = 1 */
438 if (IdentifyData->CommandSetSupport.WordValid == 1)
439 {
440 /* Bit 1 of word 82 */
441 return IdentifyData->CommandSetSupport.SecurityMode;
442 }
443
444 return FALSE;
445}

Referenced by AtaDeviceLockSecurityModeFeatureCommands().

◆ AtaDevHasSenseDataReporting()

FORCEINLINE BOOLEAN AtaDevHasSenseDataReporting ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 360 of file identify_funcs.h.

362{
363 if (IdentifyData->CommandSetActive.Words119_120Valid && // Word 86: bit 15 = 1
364 IdentifyData->CommandSetSupportExt.WordValid == 1) // Word 119: 15 = 0, 14 = 1
365 {
366 /* Bit 6 of word 119 */
367 return IdentifyData->CommandSetSupportExt.SenseDataReporting;
368 }
369
370 return FALSE;
371}

◆ AtaDevHasSmartFeature()

FORCEINLINE BOOLEAN AtaDevHasSmartFeature ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 449 of file identify_funcs.h.

451{
452 /* Bit 0 of word 82 */
453 return IdentifyData->CommandSetSupport.SmartCommands;
454}

Referenced by AtaReqScsiModeSense().

◆ AtaDevHasTrimFunction()

FORCEINLINE BOOLEAN AtaDevHasTrimFunction ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 527 of file identify_funcs.h.

529{
530 /* Bit 0 of word 169 */
531 return IdentifyData->DataSetManagementFeature.SupportsTrim;
532}

Referenced by AtaPdoQueryStorageDeviceTrimProperty(), AtaReqCompleteReadCapacity(), AtaReqScsiInquiryBlockLimits(), and AtaReqScsiInquiryLogicalBlockProvisioning().

◆ AtaDevHasWorldWideName()

FORCEINLINE BOOLEAN AtaDevHasWorldWideName ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 401 of file identify_funcs.h.

403{
404 /* Word 87: 15 = 0, 14 = 1 */
405 if (IdentifyData->CommandSetActive.Reserved4 == 1)
406 {
407 /* Bit 8 of word 87 */
408 return IdentifyData->CommandSetActive.WWN64Bit;
409 }
410
411 return FALSE;
412}

Referenced by AtaReqScsiInquiryDeviceIdentifiers().

◆ AtaDevInPuisState()

FORCEINLINE BOOLEAN AtaDevInPuisState ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 283 of file identify_funcs.h.

285{
286 /* Word 2 */
287 return (IdentifyData->SpecificConfiguration == 0x37C8) ||
288 (IdentifyData->SpecificConfiguration == 0x738C);
289}

Referenced by AtaPortIdentifyDevice().

◆ AtaDevIsCurrentGeometryValid()

FORCEINLINE BOOLEAN AtaDevIsCurrentGeometryValid ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 144 of file identify_funcs.h.

146{
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));
153}

◆ AtaDevIsDmaDirectionRequired()

FORCEINLINE BOOLEAN AtaDevIsDmaDirectionRequired ( _In_ PIDENTIFY_PACKET_DATA  IdentifyPacketData)

Definition at line 51 of file identify_funcs.h.

53{
54 /* Bit 15 of word 62 */
55 if (IdentifyPacketData->DMADIR.DMADIRBitRequired)
56 {
57 return !(IdentifyPacketData->MultiWordDMASupport & 0x7) && // Bits 0:2 of word 63
58 !IdentifyPacketData->Capabilities.DmaSupported && // Bit 8 of word 49
59 !IdentifyPacketData->Capabilities.InterleavedDmaSupported && // Bit 15 of word 49
60 !(IdentifyPacketData->UltraDMASupport & 0x7F); // Bits 0:6 of word 88
61 }
62
63 return FALSE;
64}

Referenced by AtaPortIdentifyDevice().

◆ AtaDevIsIdentifyDataIncomplete()

FORCEINLINE BOOLEAN AtaDevIsIdentifyDataIncomplete ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 293 of file identify_funcs.h.

295{
296 /* Bit 2 of word 0 */
297 return IdentifyData->GeneralConfiguration.ResponseIncomplete;
298}

Referenced by AtaPortIdentifyDevice().

◆ AtaDevIsIdentifyDataValid()

FORCEINLINE BOOLEAN AtaDevIsIdentifyDataValid ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 77 of file identify_funcs.h.

79{
80 ULONG i;
81 UCHAR Crc;
82
83 /* Bits 0:8 of word 255 */
84 if (IdentifyData->Signature != 0xA5)
85 {
86 /* The integrity word is missing, assume the data provided by the device is valid */
87 return TRUE;
88 }
89
90 /* Verify the checksum */
91 Crc = 0;
92 for (i = 0; i < sizeof(*IdentifyData); ++i)
93 {
94 Crc += ((PUCHAR)IdentifyData)[i];
95 }
96
97 return (Crc == 0);
98}
#define TRUE
Definition: types.h:120
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
Definition: glfuncs.h:248
unsigned char * PUCHAR
Definition: typedefs.h:53

◆ AtaDevIsReadLookAHeadEnabled()

FORCEINLINE BOOLEAN AtaDevIsReadLookAHeadEnabled ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 474 of file identify_funcs.h.

476{
477 /* Word 83: 15 = 0, 14 = 1 */
478 if (IdentifyData->CommandSetSupport.WordValid == 1)
479 {
480 /* Bit 6 of word 82 and bit 6 of word 85 */
481 return (IdentifyData->CommandSetSupport.LookAhead &&
482 IdentifyData->CommandSetActive.LookAhead);
483 }
484
485 return FALSE;
486}

Referenced by AtaReqCachingModePage().

◆ AtaDevIsRemovable()

FORCEINLINE BOOLEAN AtaDevIsRemovable ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 302 of file identify_funcs.h.

304{
305 /* Bit 7 of word 0 */
306 return IdentifyData->GeneralConfiguration.RemovableMedia;
307}

Referenced by AtaCreateAtapiStandardInquiryData(), AtaCreateStandardInquiryData(), and AtaDevHasRemovableMediaFeature().

◆ AtaDevIsRotatingDevice()

FORCEINLINE BOOLEAN AtaDevIsRotatingDevice ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 508 of file identify_funcs.h.

510{
511 /* Word 217 */
512 return (IdentifyData->NominalMediaRotationRate >= 0x0401 &&
513 IdentifyData->NominalMediaRotationRate <= 0xFFFE);
514}

Referenced by AtaPdoQueryStorageDeviceSeekPenaltyProperty().

◆ AtaDevIsSsd()

FORCEINLINE BOOLEAN AtaDevIsSsd ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 518 of file identify_funcs.h.

520{
521 /* Word 217 */
522 return (IdentifyData->NominalMediaRotationRate == 1);
523}

Referenced by AtaPdoInit(), and AtaPdoQueryStorageDeviceSeekPenaltyProperty().

◆ AtaDevIsTape()

FORCEINLINE BOOLEAN AtaDevIsTape ( _In_ PIDENTIFY_PACKET_DATA  IdentifyPacketData)

Definition at line 68 of file identify_funcs.h.

70{
71 /* Bits 8:12 of word 0 (sequential-access device) */
72 return (IdentifyPacketData->GeneralConfiguration.CommandPacketType == 1);
73}

Referenced by AtaPdoInit().

◆ AtaDevIsVolatileWriteCacheEnabled()

FORCEINLINE BOOLEAN AtaDevIsVolatileWriteCacheEnabled ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 458 of file identify_funcs.h.

460{
461 /* Word 83: 15 = 0, 14 = 1 */
462 if (IdentifyData->CommandSetSupport.WordValid == 1)
463 {
464 /* Bit 5 of word 82 and bit 5 of word 85 */
465 return (IdentifyData->CommandSetSupport.WriteCache &&
466 IdentifyData->CommandSetActive.WriteCache);
467 }
468
469 return FALSE;
470}

Referenced by AtaReqCachingModePage(), and AtaReqScsiSynchronizeCache().

◆ AtaDevIsZonedDevice()

FORCEINLINE BOOLEAN AtaDevIsZonedDevice ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 416 of file identify_funcs.h.

418{
419 /* Bits 0:1 of word 69 */
420 return (IdentifyData->AdditionalSupported.ZonedCapabilities != 0);
421}

◆ AtaDevLogicalSectorAlignment()

FORCEINLINE ULONG AtaDevLogicalSectorAlignment ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 267 of file identify_funcs.h.

269{
270 /* Word 209: 15 = 0, 14 = 1 */
271 if (IdentifyData->BlockAlignment.Word209Supported &&
272 IdentifyData->BlockAlignment.Reserved0 == 0)
273 {
274 /* Bits 0:13 of word 209 */
275 return IdentifyData->BlockAlignment.AlignmentOfLogicalWithinPhysical;
276 }
277
278 return 0;
279}

Referenced by AtaPdoQueryStorageAccessAlignmentProperty(), and AtaReqCompleteReadCapacity().

◆ AtaDevLogicalSectorsPerPhysicalSector()

FORCEINLINE ULONG AtaDevLogicalSectorsPerPhysicalSector ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData,
_Out_ PULONG  Exponent 
)

Definition at line 247 of file identify_funcs.h.

250{
251 /* Word 106: 15 = 0, 14 = 1, 13 = 1 */
252 if (IdentifyData->PhysicalLogicalSectorSize.Reserved1 == 1 &&
253 IdentifyData->PhysicalLogicalSectorSize.MultipleLogicalSectorsPerPhysicalSector)
254 {
255 /* Bits 0:3 of word 106 */
256 *Exponent = IdentifyData->PhysicalLogicalSectorSize.LogicalSectorsPerPhysicalSector;
257
258 return 1 << *Exponent;
259 }
260
261 *Exponent = 0;
262 return 1 << 0;
263}

Referenced by AtaPdoQueryStorageAccessAlignmentProperty(), and AtaReqCompleteReadCapacity().

◆ AtaDevMaximumSectorsPerDrq()

FORCEINLINE UCHAR AtaDevMaximumSectorsPerDrq ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 208 of file identify_funcs.h.

210{
211 UCHAR MultiSectorMax;
212
213 /* The word 47 should be a power of 2 */
214 MultiSectorMax = IdentifyData->MaximumBlockTransfer;
215 if ((MultiSectorMax > 0) && ((MultiSectorMax & (MultiSectorMax - 1)) == 0))
216 return MultiSectorMax;
217
218 return 0;
219}

◆ AtaDevMaxLun()

FORCEINLINE BOOLEAN AtaDevMaxLun ( _In_ PIDENTIFY_PACKET_DATA  IdentifyPacketData)

Definition at line 31 of file identify_funcs.h.

33{
34 /* Bits 0:2 of word 126 */
35 USHORT LastLunIdentifier = IdentifyPacketData->ReservedWord126 & 7;
36
37 /*
38 * We perform additional validation because
39 * most ATAPI devices ignore the LUN field in the CDB and respond to each LUN.
40 */
41
42 /* Make sure this field has no value that represents all bits set */
43 if (LastLunIdentifier != 7)
44 return LastLunIdentifier + 1;
45
46 return 1;
47}

◆ AtaDevMediumRotationRate()

FORCEINLINE USHORT AtaDevMediumRotationRate ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 499 of file identify_funcs.h.

501{
502 /* Word 217 */
503 return IdentifyData->NominalMediaRotationRate;
504}

Referenced by AtaReqScsiInquiryBlockDeviceCharacteristics().

◆ AtaDevNominalFormFactor()

FORCEINLINE UCHAR AtaDevNominalFormFactor ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 490 of file identify_funcs.h.

492{
493 /* Bits 0:3 of word 168 */
494 return IdentifyData->NominalFormFactor;
495}

Referenced by AtaReqScsiInquiryBlockDeviceCharacteristics().

◆ AtaDevQueueDepth()

FORCEINLINE ULONG AtaDevQueueDepth ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 329 of file identify_funcs.h.

331{
332 /* Bit 8 of word 76 */
333 if (IdentifyData->SerialAtaCapabilities.NCQ)
334 {
335 /* Bits 0:4 of word 75 */
336 return IdentifyData->QueueDepth + 1;
337 }
338
339 return 0;
340}

Referenced by AtaDeviceEnableQueuedCommands().

◆ AtaDevUserAddressableSectors28Bit()

FORCEINLINE ULONG AtaDevUserAddressableSectors28Bit ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 111 of file identify_funcs.h.

113{
114 /* Words 60-61 */
115 return IdentifyData->UserAddressableSectors;
116}

◆ AtaDevUserAddressableSectors48Bit()

FORCEINLINE ULONG64 AtaDevUserAddressableSectors48Bit ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 120 of file identify_funcs.h.

122{
123 /* Words 100-103 */
124 return ((ULONG64)IdentifyData->Max48BitLBA[1] << 32) | IdentifyData->Max48BitLBA[0];
125}
unsigned __int64 ULONG64
Definition: imports.h:198

◆ AtaDevZonedCapabilities()

FORCEINLINE UCHAR AtaDevZonedCapabilities ( _In_ PIDENTIFY_DEVICE_DATA  IdentifyData)

Definition at line 425 of file identify_funcs.h.

427{
428 /* Bits 0:1 of word 69 */
429 return IdentifyData->AdditionalSupported.ZonedCapabilities;
430}

Referenced by AtaReqScsiInquiryBlockDeviceCharacteristics().