Go to the source code of this file.
|
| #define | TAG_ATA_DEVICE 'dATA' |
| |
| #define | ATA_STATUS_SUCCESS 0 |
| |
| #define | ATA_STATUS_PENDING 1 |
| |
| #define | ATA_STATUS_ERROR 2 |
| |
| #define | ATA_STATUS_RESET 3 |
| |
| #define | ATA_STATUS_RETRY 4 |
| |
| #define | CHANNEL_MAX_DEVICES 2 |
| |
| #define | DEV_SLAVE(DeviceNumber) (DeviceNumber) |
| |
| #define | ATA_IO_WAIT() StallExecutionProcessor(1) |
| |
| #define | ATA_MAX_LBA_28 0x0FFFFFFFULL |
| |
| #define | ATA_MAX_LBA_48 (1ULL << 48) |
| |
| #define | IDE_FEATURE_PIO 0x00 |
| |
| #define | IDE_DC_ALWAYS 0x08 |
| |
| #define | IDE_DRIVE_SELECT 0xA0 |
| |
| #define | ATAPI_INT_REASON_COD 0x01 |
| |
| #define | ATAPI_INT_REASON_IO 0x02 |
| |
| #define | ATAPI_INT_REASON_MASK (ATAPI_INT_REASON_IO | ATAPI_INT_REASON_COD) |
| |
| #define | ATAPI_INT_REASON_STATUS_NEC 0x00 |
| |
| #define | ATAPI_INT_REASON_STATUS (ATAPI_INT_REASON_IO | ATAPI_INT_REASON_COD) |
| |
| #define | ATAPI_INT_REASON_AWAIT_CDB (IDE_STATUS_DRQ | ATAPI_INT_REASON_COD) |
| |
| #define | ATAPI_INT_REASON_DATA_IN (ATAPI_INT_REASON_IO | IDE_STATUS_DRQ) |
| |
| #define | MAXIMUM_CDROM_SIZE 804 |
| |
| #define | ATA_TIME_BUSY_SELECT 2000 |
| | 20 ms
|
| |
| #define | ATA_TIME_BUSY_POLL 500000 |
| | 5 s
|
| |
| #define | ATA_TIME_BUSY_ENUM 100 |
| | 1 ms
|
| |
| #define | ATA_TIME_BUSY_RESET 1000000 |
| | 10 s
|
| |
| #define | ATA_TIME_RESET_SELECT 200000 |
| | 2 s
|
| |
| #define | ATA_TIME_DRQ_CLEAR 1000 |
| | 10 ms
|
| |
| #define | ATA_TIME_PHASE_CHANGE 100 |
| | 1 ms
|
| |
| #define | ATA_TIME_DRQ_ASSERT 15 |
| | 150 us
|
| |
| #define | ATA_WRITE(Port, Value) WRITE_PORT_UCHAR((PUCHAR)(ULONG_PTR)(Port), (Value)) |
| |
| #define | ATA_WRITE_BLOCK_16(Port, Buffer, Count) WRITE_PORT_BUFFER_USHORT((PUSHORT)(ULONG_PTR)(Port), (PUSHORT)(Buffer), (Count)) |
| |
| #define | ATA_WRITE_BLOCK_32(Port, Buffer, Count) WRITE_PORT_BUFFER_ULONG((PULONG)(ULONG_PTR)(Port), (PULONG)(Buffer), (Count)) |
| |
| #define | ATA_READ(Port) READ_PORT_UCHAR((PUCHAR)(ULONG_PTR)(Port)) |
| |
| #define | ATA_READ_BLOCK_16(Port, Buffer, Count) READ_PORT_BUFFER_USHORT((PUSHORT)(ULONG_PTR)(Port), (PUSHORT)(Buffer), (Count)) |
| |
| #define | ATA_READ_BLOCK_32(Port, Buffer, Count) READ_PORT_BUFFER_ULONG((PULONG)(ULONG_PTR)(Port), (PULONG)(Buffer), (Count)) |
| |
| #define | REQUEST_FLAG_LBA48 0x00000001 |
| |
| #define | REQUEST_FLAG_READ_WRITE_MULTIPLE 0x00000002 |
| |
| #define | REQUEST_FLAG_PACKET_COMMAND 0x00000004 |
| |
| #define | REQUEST_FLAG_SET_DEVICE_REGISTER 0x00000008 |
| |
| #define | REQUEST_FLAG_AWAIT_CDB 0x00000010 |
| |
| #define | REQUEST_FLAG_READ_COMMAND 0x00000020 |
| |
| #define | REQUEST_FLAG_IDENTIFY_COMMAND 0x00000040 |
| |
◆ ATA_IO_WAIT
◆ ATA_MAX_LBA_28
| #define ATA_MAX_LBA_28 0x0FFFFFFFULL |
◆ ATA_MAX_LBA_48
◆ ATA_READ
◆ ATA_READ_BLOCK_16
◆ ATA_READ_BLOCK_32
◆ ATA_STATUS_ERROR
◆ ATA_STATUS_PENDING
◆ ATA_STATUS_RESET
◆ ATA_STATUS_RETRY
◆ ATA_STATUS_SUCCESS
◆ ATA_TIME_BUSY_ENUM
| #define ATA_TIME_BUSY_ENUM 100 |
◆ ATA_TIME_BUSY_POLL
| #define ATA_TIME_BUSY_POLL 500000 |
◆ ATA_TIME_BUSY_RESET
| #define ATA_TIME_BUSY_RESET 1000000 |
◆ ATA_TIME_BUSY_SELECT
| #define ATA_TIME_BUSY_SELECT 2000 |
◆ ATA_TIME_DRQ_ASSERT
| #define ATA_TIME_DRQ_ASSERT 15 |
◆ ATA_TIME_DRQ_CLEAR
| #define ATA_TIME_DRQ_CLEAR 1000 |
◆ ATA_TIME_PHASE_CHANGE
| #define ATA_TIME_PHASE_CHANGE 100 |
◆ ATA_TIME_RESET_SELECT
| #define ATA_TIME_RESET_SELECT 200000 |
◆ ATA_WRITE
◆ ATA_WRITE_BLOCK_16
◆ ATA_WRITE_BLOCK_32
◆ ATAPI_INT_REASON_AWAIT_CDB
◆ ATAPI_INT_REASON_COD
| #define ATAPI_INT_REASON_COD 0x01 |
◆ ATAPI_INT_REASON_DATA_IN
◆ ATAPI_INT_REASON_IO
| #define ATAPI_INT_REASON_IO 0x02 |
◆ ATAPI_INT_REASON_MASK
◆ ATAPI_INT_REASON_STATUS
◆ ATAPI_INT_REASON_STATUS_NEC
| #define ATAPI_INT_REASON_STATUS_NEC 0x00 |
◆ CHANNEL_MAX_DEVICES
◆ DEV_SLAVE
◆ IDE_DC_ALWAYS
◆ IDE_DRIVE_SELECT
◆ IDE_FEATURE_PIO
◆ MAXIMUM_CDROM_SIZE
| #define MAXIMUM_CDROM_SIZE 804 |
◆ REQUEST_FLAG_AWAIT_CDB
| #define REQUEST_FLAG_AWAIT_CDB 0x00000010 |
◆ REQUEST_FLAG_IDENTIFY_COMMAND
| #define REQUEST_FLAG_IDENTIFY_COMMAND 0x00000040 |
◆ REQUEST_FLAG_LBA48
| #define REQUEST_FLAG_LBA48 0x00000001 |
◆ REQUEST_FLAG_PACKET_COMMAND
| #define REQUEST_FLAG_PACKET_COMMAND 0x00000004 |
◆ REQUEST_FLAG_READ_COMMAND
| #define REQUEST_FLAG_READ_COMMAND 0x00000020 |
◆ REQUEST_FLAG_READ_WRITE_MULTIPLE
| #define REQUEST_FLAG_READ_WRITE_MULTIPLE 0x00000002 |
◆ REQUEST_FLAG_SET_DEVICE_REGISTER
| #define REQUEST_FLAG_SET_DEVICE_REGISTER 0x00000008 |
◆ TAG_ATA_DEVICE
◆ ATA_DEVICE_CLASS
◆ ATA_DEVICE_REQUEST
◆ ATA_TASKFILE
◆ HW_DEVICE_UNIT
◆ IDE_REG
◆ IDE_REGISTERS
◆ PATA_DEVICE_CLASS
◆ PATA_DEVICE_REQUEST
◆ PATA_TASKFILE
◆ PHW_DEVICE_UNIT
◆ PIDE_REGISTERS
◆ _ATA_DEVICE_CLASS
| Enumerator |
|---|
| DEV_ATA | |
| DEV_ATAPI | |
| DEV_NONE | |
Definition at line 98 of file hwidep.h.
99{
enum _ATA_DEVICE_CLASS ATA_DEVICE_CLASS
enum _ATA_DEVICE_CLASS * PATA_DEVICE_CLASS
◆ AtaCommandUseLba48()
◆ AtaDevBytesPerLogicalSector()
Definition at line 362 of file hwidep.h.
364{
366
367
368 if (IdentifyData->PhysicalLogicalSectorSize.Reserved1 == 1 &&
369 IdentifyData->PhysicalLogicalSectorSize.LogicalSectorLongerThan256Words)
370 {
371
372 WordCount = IdentifyData->WordsPerLogicalSector[0];
373 WordCount |= (
ULONG)IdentifyData->WordsPerLogicalSector[1] << 16;
374 }
375 else
376 {
377
378 WordCount = 256;
379 }
380
381 return WordCount *
sizeof(
USHORT);
382}
Referenced by AtapAtaInitDevice().
◆ AtaDevCdbSizeInWords()
Definition at line 226 of file hwidep.h.
228{
229
230 return (IdentifyPacketData->GeneralConfiguration.PacketType != 0) ? 8 : 6;
231}
Referenced by AtapAtapiInitDevice().
◆ AtaDevCurrentChsTranslation()
Definition at line 308 of file hwidep.h.
313{
314
315 *Cylinders = IdentifyData->NumberOfCurrentCylinders;
316
317
318 *Heads = IdentifyData->NumberOfCurrentHeads;
319
320
322}
_In_ ULONG _In_ ULONG SectorsPerTrack
Referenced by AtapAtaInitDevice().
◆ AtaDevCurrentSectorsPerDrq()
Definition at line 326 of file hwidep.h.
328{
329 UCHAR MultiSectorCurrent;
330
331
332 if (!(IdentifyData->MultiSectorSettingValid))
333 return 0;
334
335
336 MultiSectorCurrent = IdentifyData->CurrentMultiSectorSetting;
337
338 if ((MultiSectorCurrent > 0) && ((MultiSectorCurrent & (MultiSectorCurrent - 1)) == 0))
339 return MultiSectorCurrent;
340
341 return 0;
342}
Referenced by AtapAtaSetMultipleMode().
◆ AtaDevDefaultChsTranslation()
Definition at line 290 of file hwidep.h.
295{
296
297 *Cylinders = IdentifyData->NumCylinders;
298
299
300 *Heads = IdentifyData->NumHeads;
301
302
304}
Referenced by AtapAtaInitDevice().
◆ AtaDevHas48BitAddressFeature()
Definition at line 262 of file hwidep.h.
264{
265
266 if (IdentifyData->CommandSetSupport.WordValid83 == 1)
267 {
268
269 return IdentifyData->CommandSetSupport.BigLba;
270 }
271
273}
Referenced by AtapAtaInitDevice().
◆ AtaDevHasLbaTranslation()
◆ AtaDevIsCurrentGeometryValid()
Definition at line 277 of file hwidep.h.
279{
280 return ((IdentifyData->TranslationFieldsValid & 1) &&
281 (IdentifyData->NumberOfCurrentCylinders != 0) &&
282 (IdentifyData->NumberOfCurrentCylinders <= 63) &&
283 (IdentifyData->NumberOfCurrentHeads != 0) &&
284 (IdentifyData->NumberOfCurrentHeads <= 16) &&
285 (IdentifyData->CurrentSectorsPerTrack != 0));
286}
Referenced by AtapAtaInitDevice().
◆ AtaDevIsIdentifyDataValid()
Definition at line 201 of file hwidep.h.
203{
206
207
208 if (IdentifyData->Signature != 0xA5)
209 {
210
212 }
213
214
215 Crc = 0;
216 for (
i = 0;
i <
sizeof(*IdentifyData); ++
i)
217 {
218 Crc += ((
PUCHAR)IdentifyData)[
i];
219 }
220
221 return (Crc == 0);
222}
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
Referenced by AtapAnalyzeIdentifyData().
◆ AtaDevMaximumSectorsPerDrq()
Definition at line 346 of file hwidep.h.
348{
349 UCHAR MultiSectorMax;
350
351
352 MultiSectorMax = IdentifyData->MaximumBlockTransfer;
353
354 if ((MultiSectorMax > 0) && ((MultiSectorMax & (MultiSectorMax - 1)) == 0))
355 return MultiSectorMax;
356
357 return 0;
358}
Referenced by AtapAtaSetMultipleMode().
◆ AtaDevUserAddressableSectors28Bit()
◆ AtaDevUserAddressableSectors48Bit()