22 (
Request->Srb->SenseInfoBufferLength != 0));
36 (
Request->Srb->SenseInfoBufferLength != 0));
48 (
Request->Srb->SenseInfoBufferLength != 0));
83 (
Request->TaskFile.HighLba != 0);
88 ERR(
"Request sense failed\n");
110 DevExt->Device.LocalBuffer,
223 TaskFile->
LowLba = LogPage->LBA7_0;
224 TaskFile->
MidLba = LogPage->LBA15_8;
225 TaskFile->
HighLba = LogPage->LBA23_16;
232 TaskFile->
LowLbaEx = LogPage->LBA31_24;
233 TaskFile->
MidLbaEx = LogPage->LBA39_32;
293 AllowedModesMask = ((1 <<
Mode) - 1);
295 if ((DevExt->TransferModeSupportedBitmap &
UDMA_ALL) && !(AllowedModesMask &
UDMA_ALL))
307 else if (((DevExt->TransferModeSupportedBitmap &
MWDMA_ALL) &&
309 ((DevExt->TransferModeSupportedBitmap &
SWDMA_ALL) &&
317 if ((DevExt->TransferModeSupportedBitmap & ~
PIO_ALL) && !(AllowedModesMask & ~PIO_ALL))
319 WARN(
"Too many DMA failures, disabling DMA for '%s'\n", DevExt->FriendlyName);
324 WARN(
"Downgrading DMA speed from %lu for '%s'\n",
Mode, DevExt->FriendlyName);
326 DevExt->TransferModeAllowedMask &= AllowedModesMask;
346 WARN(
"DMA error %lu on '%s'\n", ErrorValue, DevExt->FriendlyName);
353 TimeDifferenceMs.
QuadPart = (CurrentTime.
QuadPart - DevExt->LastDmaErrorTime.QuadPart) / 10000;
354 DevExt->LastDmaErrorTime.QuadPart = CurrentTime.
QuadPart;
359 if (TimeDifferenceMs.
QuadPart >= (10LL * 60000LL))
367 DevExt->Device.DeviceFlags &= ~DEVICE_NCQ;
369 ERR(
"NCQ disabled for '%s'\n", DevExt->FriendlyName);
375 if (PortData->DowngradeInterfaceSpeed(PortData->ChannelContext))
377 WARN(
"Downgrading interface for '%s'\n", DevExt->FriendlyName);
448 Request->SrbStatus = SrbStatus;
460 ASSERT(PortData->Worker.PausedSlotsBitmap & (1 <<
Request->Slot));
461 PortData->Worker.PausedSlotsBitmap &= ~(1 <<
Request->Slot);
484 ERR(
"READ LOG EXT failure\n");
488 LogPage = DevExt->
Device.LocalBuffer;
493 ERR(
"Unexpected NQ bit in the log page 0x10 structure\n");
505 ERR(
"CRC error in the log page 0x10 structure\n");
510 if (!(PortData->Worker.PausedSlotsBitmap & (1 << LogPage->
NcqTag)))
512 ERR(
"Failed command %08lx not found in %08lx\n",
513 1 << LogPage->
NcqTag, PortData->Worker.PausedSlotsBitmap);
517 FailedRequest = PortData->Slots[LogPage->
NcqTag];
519 PortData->Worker.FailedRequest = FailedRequest;
#define IDE_GP_LOG_SECTOR_SIZE
#define IDE_ERROR_CRC_ERROR
#define IDE_GP_LOG_NCQ_COMMAND_ERROR_ADDRESS
#define REQUEST_FLAG_HAS_LOCAL_BUFFER
#define REQUEST_FLAG_DATA_IN
#define REQUEST_FLAG_PASSTHROUGH
#define REQUEST_FLAG_SAVE_TASK_FILE
#define REQUEST_FLAG_HAS_TASK_FILE
#define REQUEST_STATE_FREEZE_QUEUE
#define IDE_COMMAND_REQUEST_SENSE_DATA_EXT
#define ASSERT_REQUEST(Request)
#define PORT_FLAG_PIO_VIA_DMA
#define SRB_FLAG_PIO_RETRY
#define SRB_GET_FLAGS(Srb)
UCHAR AtaReqSetFixedSenseData(_In_ PSCSI_REQUEST_BLOCK Srb, _In_ SCSI_SENSE_CODE SenseCode)
VOID AtaReqSetLbaInformation(_In_ PSCSI_REQUEST_BLOCK Srb, _In_ ULONG64 Lba)
VOID AtaReqBuildReadLogTaskFile(_In_ PATA_DEVICE_REQUEST Request, _In_ UCHAR LogAddress, _In_ UCHAR PageNumber, _In_ USHORT LogPageCount)
#define WORKER_FLAG_NEED_RESCAN
#define DEVICE_SENSE_DATA_REPORTING
#define SRB_CLEAR_FLAGS(Srb, Flags)
UCHAR AtaReqSetFixedAtaSenseData(_In_ PATA_DEVICE_REQUEST Request)
NTSTATUS AtaPortSendRequest(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
#define SRB_SET_FLAGS(Srb, Flags)
enum _ATA_ERROR_LOG_VALUE ATA_ERROR_LOG_VALUE
#define ATA_LOCAL_BUFFER_SIZE
#define SRB_FLAG_RETRY_COUNT_MASK
_In_ PSCSI_REQUEST_BLOCK Srb
#define SCSISTAT_CHECK_CONDITION
#define SCSIOP_REQUEST_SENSE
static VOID AtaDeviceCompleteFailedRequest(_In_ PATAPORT_PORT_DATA PortData)
static BOOLEAN AtaDeviceIsDmaCrcError(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request)
static BOOLEAN AtaDeviceRequestSenseNeeded(_In_ PATA_DEVICE_REQUEST Request)
static NTSTATUS AtaDeviceSendReadNcqCommandErrorLog(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
static NTSTATUS AtaDeviceSendRequestSense(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
static BOOLEAN AtaDeviceFixedErrorNeeded(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request)
NTSTATUS AtaPortDeviceProcessError(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
static VOID AtaDeviceSaveLogPageTaskFile(_In_ GP_LOG_NCQ_COMMAND_ERROR *__restrict LogPage, _Inout_ ATA_DEVICE_REQUEST *__restrict Request)
static NTSTATUS AtaDeviceNcqRecovery(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
static NTSTATUS AtaDeviceSendRequestSenseExt(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
static BOOLEAN AtaDeviceRequestSenseNeededExt(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request)
static VOID AtaDeviceAnalyzeDmaError(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ ATA_ERROR_LOG_VALUE ErrorValue)
static NTSTATUS AtaDeviceGenericRecovery(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
static VOID AtaDeviceHandleRequestSense(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
static VOID AtaDeviceDowngradeTransferSpeed(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
static VOID AtaDeviceLogEvent(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ ATA_ERROR_LOG_VALUE ErrorValue)
#define NT_SUCCESS(StatCode)
#define SRB_STATUS_BUS_RESET
#define SRB_STATUS_DATA_OVERRUN
#define SRB_STATUS_TIMEOUT
#define SRB_STATUS_AUTOSENSE_VALID
#define SRB_FLAGS_DISABLE_AUTOSENSE
#define SRB_STATUS(Status)
#define SRB_STATUS_REQUEST_SENSE_FAILED
#define SRB_STATUS_QUEUE_FROZEN
#define SRB_STATUS_SUCCESS
#define KeQuerySystemTime(t)
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
#define REQUEST_FLAG_LBA48
#define REQUEST_FLAG_PACKET_COMMAND
FORCEINLINE BOOLEAN AtaDevHasNcqAutosense(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
_In_ NDIS_ERROR_CODE ErrorCode
#define RTL_CONTAINS_FIELD(Struct, Size, Field)
#define IO_ERR_CONTROLLER_ERROR
VOID NTAPI IoWriteErrorLogEntry(IN PVOID ElEntry)
PVOID NTAPI IoAllocateErrorLogEntry(IN PVOID IoObject, IN UCHAR EntrySize)
KIRQL NTAPI KeAcquireInterruptSpinLock(IN PKINTERRUPT Interrupt)
VOID NTAPI KeReleaseInterruptSpinLock(IN PKINTERRUPT Interrupt, IN KIRQL OldIrql)
#define STATUS_ADAPTER_HARDWARE_ERROR
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
_In_ UCHAR _Out_opt_ PUCHAR _Out_opt_ PUCHAR _Out_opt_ PUCHAR AdditionalSenseCodeQualifier
unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask)
long _InterlockedOr(_Interlocked_operand_ long volatile *_Value, long _Mask)
ATAPORT_COMMON_EXTENSION Common
ATA_TASKFILE Output
ATA normal/error outputs.
UCHAR MidLba
LBA bits 8-15.
UCHAR LowLbaEx
LBA bits 24-31.
UCHAR HighLba
LBA bits 16-23.
UCHAR HighLbaEx
LBA bits 40-47.
UCHAR LowLba
LBA bits 0-7.
UCHAR MidLbaEx
LBA bits 32-39.
UCHAR SenseInfoBufferLength
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_IO_DEVICE_ERROR
#define STATUS_IO_TIMEOUT
struct _CDB::_CDB6INQUIRY CDB6INQUIRY
UCHAR AdditionalSenseCodeQualifier
UCHAR AdditionalSenseCode
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
#define IRP_SYNCHRONOUS_PAGING_IO
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql