21 IdentifyData2->SerialNumber,
28 IdentifyData2->FirmwareRevision,
35 IdentifyData2->ModelNumber,
52 TRACE(
"CH %lu: Send %s identify device %u\n",
55 DevExt->Device.AtaScsiAddress.TargetId);
70 Request->DataTransferLength =
sizeof(DevExt->IdentifyDeviceData);
86 TRACE(
"CH %lu: Spin-up device %u\n",
88 DevExt->Device.AtaScsiAddress.TargetId);
104 static const PCSTR AtapBrokenInquiryDrive[] =
107 "PHILIPS XBOX DVD DRIVE",
109 "SAMSUNG DVD-ROM SDG-605B"
112 CHAR ModelNumber[26];
117 DevExt->IdentifyDeviceData.ModelNumber,
118 sizeof(ModelNumber));
123 if (
strcmp(ModelNumber, AtapBrokenInquiryDrive[
i]) == 0)
138 InquiryData->Versions = 0x04;
139 InquiryData->ResponseDataFormat = 2;
140 InquiryData->AdditionalLength =
145 IdentifyData->ModelNumber,
146 sizeof(IdentifyData->ModelNumber),
148 AtaSwapIdString(InquiryData->VendorId,
sizeof(IdentifyData->ModelNumber) / 2);
152 IdentifyData->FirmwareRevision,
153 sizeof(InquiryData->ProductRevisionLevel),
156 sizeof(InquiryData->ProductRevisionLevel) / 2);
169 TRACE(
"CH %lx: Send inquiry device %u\n",
170 PortData->PortNumber,
171 DevExt->Device.AtaScsiAddress.TargetId);
182 Cdb->
CDB6INQUIRY.LogicalUnitNumber = DevExt->Device.AtaScsiAddress.Lun;
200 DevExt->Device.LocalBuffer);
220 BOOLEAN StartFromAtapi, IsSameDevice;
221 ULONG Attempt, RetryCount;
226 ConnectionStatus = PortData->IdentifyDevice(PortData->ChannelContext,
227 DevExt->Device.AtaScsiAddress.TargetId);
249 StartFromAtapi =
IS_ATAPI(&DevExt->Device);
252 for (RetryCount = 0; RetryCount < 2; ++RetryCount)
255 for (Attempt = 0; Attempt < 2; ++Attempt)
291 ERR(
"Failed to spin-up device\n");
299 ERR(
"Identify data CRC error\n");
305 IsSameDevice =
FALSE;
309 IsSameDevice = (
DeviceType == DevExt->DeviceType) &&
311 DevExt->Device.LocalBuffer));
316 DevExt->Device.LocalBuffer,
317 sizeof(DevExt->IdentifyDeviceData));
333 TRACE(
"Device has CDB size of %u bytes\n", DevExt->Device.CdbSize * 2);
337 TRACE(
"Device has CDB interrupt\n");
343 TRACE(
"Device needs DMA DIR\n");
348 if (DevExt->IdentifyPacketData.ModelNumber[0] ==
'N' &&
349 DevExt->IdentifyPacketData.ModelNumber[1] ==
'E' &&
350 DevExt->IdentifyPacketData.ModelNumber[2] ==
'C')
352 TRACE(
"Device is a NEC CDR-260 drive\n");
362 DevExt->Device.LocalBuffer,
363 sizeof(DevExt->InquiryData));
#define IDE_FEATURE_PUIS_SPIN_UP
#define IDE_COMMAND_SET_FEATURE
#define REQUEST_FLAG_HAS_LOCAL_BUFFER
#define REQUEST_FLAG_DATA_IN
#define DEVICE_IS_NEC_CDR260
#define DEVICE_HAS_CDB_INTERRUPT
enum _ATA_CONNECTION_STATUS ATA_CONNECTION_STATUS
#define DEVICE_NEED_DMA_DIRECTION
#define REQUEST_FLAG_POLL
enum _ATA_DEVICE_TYPE ATA_DEVICE_TYPE
Private enum between the ATA driver and storprop.dll.
PCHAR AtaCopyIdStringSafe(_Out_writes_bytes_all_(MaxLength) PCHAR Destination, _In_reads_bytes_(MaxLength) PUCHAR Source, _In_ ULONG MaxLength, _In_ CHAR DefaultCharacter)
VOID AtaSwapIdString(_Inout_updates_bytes_(WordCount *sizeof(USHORT)) PVOID Buffer, _In_range_(>, 0) ULONG WordCount)
#define PORT_INT_FLAG_IGNORE_LINK_IRQ
NTSTATUS AtaPortCheckDevicePowerState(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
enum _ATA_DEVICE_STATUS ATA_DEVICE_STATUS
NTSTATUS AtaPortSendRequest(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
#define DEVICE_UNINITIALIZED
#define DEVICE_CACHE_INQUIRY
PUCHAR AtaCopyIdStringUnsafe(_Out_writes_bytes_all_(Length) PUCHAR Destination, _In_reads_bytes_(Length) PUCHAR Source, _In_ ULONG Length)
#define IDE_COMMAND_ATAPI_IDENTIFY
#define IDE_COMMAND_IDENTIFY
#define READ_ONLY_DIRECT_ACCESS_DEVICE
#define INQUIRYDATABUFFERSIZE
static BOOLEAN AtaDeviceIsXboxDrive(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
static BOOLEAN AtaDeviceIdentifyDataEqual(_In_ PIDENTIFY_DEVICE_DATA IdentifyData1, _In_ PIDENTIFY_DEVICE_DATA IdentifyData2)
static NTSTATUS AtaDeviceSendInquiry(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
static NTSTATUS AtaDeviceSpinUp(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
static VOID AtaCreateAtapiStandardInquiryData(_In_ PIDENTIFY_DEVICE_DATA IdentifyData, _Out_ PINQUIRYDATA InquiryData)
NTSTATUS AtaDeviceSendIdentify(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ UCHAR Command)
ATA_DEVICE_STATUS AtaPortIdentifyDevice(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
#define NT_SUCCESS(StatCode)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
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 AtaDevIsIdentifyDataValid(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
#define REQUEST_FLAG_PACKET_COMMAND
FORCEINLINE UCHAR AtaDevCdbSizeInWords(_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
FORCEINLINE BOOLEAN AtaDevIsIdentifyDataIncomplete(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasCdbInterrupt(_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
FORCEINLINE BOOLEAN AtaDevInPuisState(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsRemovable(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsDmaDirectionRequired(_In_ PIDENTIFY_PACKET_DATA IdentifyPacketData)
volatile char *const const char modify _InterlockedAnd
#define RTL_FIELD_SIZE(type, field)
#define RtlEqualMemory(dst, src, len)
#define RTL_SIZEOF_THROUGH_FIELD(type, field)
#define STATUS_ADAPTER_HARDWARE_ERROR
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
long _InterlockedOr(_Interlocked_operand_ long volatile *_Value, long _Mask)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
struct _CDB::_CDB6INQUIRY CDB6INQUIRY