12#define PCIIDEX_INTERFACE_VERSION 1
15#define ATA_MAX_DEVICE 15
24#define ATA_MIN_SECTOR_SIZE 512
25#define ATA_MAX_SECTORS_PER_IO 0x100
26#define ATA_MAX_TRANSFER_LENGTH (ATA_MAX_SECTORS_PER_IO * ATA_MIN_SECTOR_SIZE)
30#define ATA_MIN_BUFFER_ALIGNMENT FILE_WORD_ALIGNMENT
42#define IDE_ACPI_TIMING_MODE_NOT_SUPPORTED 0xFFFFFFFF
47#define IDE_ACPI_TIMING_MODE_FLAG_UDMA(Drive) (0x01 << (2 * (Drive)))
50#define IDE_ACPI_TIMING_MODE_FLAG_IORDY(Drive) (0x02 << (2 * (Drive)))
53#define IDE_ACPI_TIMING_MODE_FLAG_INDEPENDENT_TIMINGS 0x10
164#define DEVICE_NUMBER_MASK 0x0000000F
165#define DEVICE_IS_ATAPI 0x00000010
166#define DEVICE_HAS_CDB_INTERRUPT 0x00000020
167#define DEVICE_NEED_DMA_DIRECTION 0x00000040
168#define DEVICE_IS_NEC_CDR260 0x00000080
169#define DEVICE_QUEUE_DEPTH_MASK 0x0000FF00
171#define DEVICE_QUEUE_DEPTH_SHIFT 8
259#define ATA_DEVICE_REQUEST_SIGNATURE 'rATA'
264#define REQUEST_STATE_NONE 0
267#define REQUEST_STATE_NOT_STARTED 1
270#define REQUEST_STATE_REQUEUE 2
273#define REQUEST_STATE_FREEZE_QUEUE 3
278#define REQUEST_FLAG_DMA 0x00000001
281#define REQUEST_FLAG_PACKET_COMMAND 0x00000002
284#define REQUEST_FLAG_NCQ 0x00000004
287#define REQUEST_FLAG_DATA_IN 0x00000040
290#define REQUEST_FLAG_DATA_OUT 0x00000080
293#define REQUEST_FLAG_RST_COMMAND 0x00040000
297#define REQUEST_FLAG_LBA48 0x00000008
300#define REQUEST_FLAG_READ_WRITE_MULTIPLE 0x00000010
303#define REQUEST_FLAG_READ_WRITE 0x00000020
306#define REQUEST_FLAG_FUA 0x00000100
309#define REQUEST_FLAG_SAVE_TASK_FILE 0x00000200
312#define REQUEST_FLAG_HAS_TASK_FILE 0x00000400
315#define REQUEST_FLAG_SET_DEVICE_REGISTER 0x00000800
318#define REQUEST_FLAG_SET_AUXILIARY_FIELD 0x00001000
321#define REQUEST_FLAG_SET_ICC_FIELD 0x00002000
324#define REQUEST_FLAG_EXCLUSIVE 0x00004000
327#define REQUEST_FLAG_HAS_LOCAL_BUFFER 0x00008000
330#define REQUEST_FLAG_HAS_SG_LIST 0x00010000
333#define REQUEST_FLAG_HAS_MDL 0x00020000
336#define REQUEST_FLAG_HAS_RESERVED_MAPPING 0x00080000
339#define REQUEST_FLAG_NO_KEEP_AWAKE 0x00100000
342#define REQUEST_FLAG_PROGRAM_DMA 0x00200000
345#define REQUEST_FLAG_INTERNAL 0x00400000
348#define REQUEST_FLAG_PASSTHROUGH 0x00800000
350#define REQUEST_FLAG_DEVICE_EXCLUSIVE_ACCESS 0x01000000
353#define REQUEST_FLAG_POLL 0x80000000
365#define REQUEST_EXCLUSIVE_ACCESS_FLAGS \
366 (REQUEST_FLAG_SAVE_TASK_FILE | REQUEST_FLAG_EXCLUSIVE)
369#define REQUEST_DMA_FLAGS \
370 (REQUEST_FLAG_DMA | REQUEST_FLAG_PROGRAM_DMA)
434(CHANNEL_ALLOCATE_SLOT)(
442(CHANNEL_PREPARE_PRD_TABLE)(
481#define PCIIDEX_GET_CONTROLLER_INTERFACE_SIGNATURE (0xFFFFFFFF - 0x1000)
535#define ATA_CHANNEL_FLAG_PIO_VIA_DMA 0x00000001
536#define ATA_CHANNEL_FLAG_IS_EXTERNAL 0x00000002
537#define ATA_CHANNEL_FLAG_NCQ 0x00000004
538#define ATA_CHANNEL_FLAG_IS_AHCI 0x00000008
539#define ATA_CHANNEL_FLAG_PIO_FOR_LBA48_XFER 0x00000010
547 0xD677FBCF, 0xABED, 0x47C8, 0x80, 0xA3, 0xE4, 0x34, 0x7E, 0xA4, 0x96, 0x47);
CONTROLLER_PNP_START_DEVICE * PCONTROLLER_PNP_START_DEVICE
BOOLEAN() CHANNEL_DOWNGRADE_INTERFACE_SPEED(_In_ PVOID ChannelContext)
@ CONN_STATUS_DEV_UNKNOWN
enum _PORT_NOTIFICATION_TYPE PORT_NOTIFICATION_TYPE
NTSTATUS() CONTROLLER_ATTACH_CHANNEL(_In_ PVOID ChannelContext, _In_ BOOLEAN Attach)
VOID() CONTROLLER_PNP_REMOVE_DEVICE(_In_ PVOID ControllerContext)
struct _IDE_REGISTERS * PIDE_REGISTERS
enum _PORT_NOTIFICATION_TYPE * PPORT_NOTIFICATION_TYPE
VOID() CHANNEL_ABORT_CHANNEL(_In_ PVOID ChannelContext, _In_ BOOLEAN DisableInterrupts)
CHANNEL_ALLOCATE_SLOT * PCHANNEL_ALLOCATE_SLOT
struct _ATA_ACPI_TASK_FILE * PATA_ACPI_TASK_FILE
CHANNEL_IDENTIFY_DEVICE * PCHANNEL_IDENTIFY_DEVICE
NTSTATUS() CONTROLLER_PNP_START_DEVICE(_In_ PVOID ControllerContext, _In_ PCM_RESOURCE_LIST ResourcesTranslated)
_In_ PATA_DEVICE_REQUEST _In_ BOOLEAN Allocate
CHANNEL_ABORT_CHANNEL * PCHANNEL_ABORT_CHANNEL
struct _ATA_IO_CONTEXT_COMMON * PATA_IO_CONTEXT_COMMON
struct _PCIIDEX_LEGACY_CONTROLLER_INTERFACE * PPCIIDEX_LEGACY_CONTROLLER_INTERFACE
struct _IDE_REGISTERS IDE_REGISTERS
_In_ PVOID typedef PORT_NOTIFICATION * PPORT_NOTIFICATION
CHANNEL_START_IO * PCHANNEL_START_IO
struct _IDE_ACPI_TIMING_MODE_BLOCK * PIDE_ACPI_TIMING_MODE_BLOCK
enum _ATA_CONNECTION_STATUS ATA_CONNECTION_STATUS
VOID() CHANNEL_RESET_CHANNEL(_In_ PVOID ChannelContext)
struct _ATA_DEVICE_REQUEST ATA_DEVICE_REQUEST
struct _CHANNEL_DEVICE_CONFIG CHANNEL_DEVICE_CONFIG
CHANNEL_SET_MODE * PCHANNEL_SET_MODE
CONTROLLER_ATTACH_CHANNEL * PCONTROLLER_ATTACH_CHANNEL
ULONG() CHANNEL_ENUMERATE_CHANNEL(_In_ PVOID ChannelContext)
struct _ATA_ACPI_TASK_FILE ATA_ACPI_TASK_FILE
struct _IDE_ACPI_TIMING_MODE_BLOCK IDE_ACPI_TIMING_MODE_BLOCK
REQUEST_COMPLETION_ROUTINE * PREQUEST_COMPLETION_ROUTINE
NTSTATUS() CONTROLLER_PNP_ADD_DEVICE(_In_ PDRIVER_OBJECT DriverObject, _In_ PDEVICE_OBJECT PhysicalDeviceObject, _Out_ PVOID *ControllerContext)
PVOID() CHANNEL_GET_INIT_TASK_FILE(_In_ PVOID ChannelContext, _In_ PDEVICE_OBJECT DeviceObject)
struct _PCIIDEX_CHANNEL_INTERFACE * PPCIIDEX_CHANNEL_INTERFACE
struct _PCIIDEX_LEGACY_CONTROLLER_INTERFACE PCIIDEX_LEGACY_CONTROLLER_INTERFACE
Legacy detection interface with the PCIIDEX driver.
CHANNEL_PREPARE_PRD_TABLE * PCHANNEL_PREPARE_PRD_TABLE
VOID() CHANNEL_SET_DEVICE_DATA(_In_ PVOID ChannelContext, _In_ PDEVICE_OBJECT DeviceObject, _In_ PIDENTIFY_DEVICE_DATA IdentifyDeviceData)
struct _CHANNEL_DEVICE_CONFIG * PCHANNEL_DEVICE_CONFIG
CHANNEL_GET_INIT_TASK_FILE * PCHANNEL_GET_INIT_TASK_FILE
CHANNEL_RESET_CHANNEL * PCHANNEL_RESET_CHANNEL
CHANNEL_DOWNGRADE_INTERFACE_SPEED * PCHANNEL_DOWNGRADE_INTERFACE_SPEED
CONTROLLER_PNP_REMOVE_DEVICE * PCONTROLLER_PNP_REMOVE_DEVICE
_In_ PATA_DEVICE_REQUEST Request
CONTROLLER_PNP_ADD_DEVICE * PCONTROLLER_PNP_ADD_DEVICE
CHANNEL_PREPARE_IO * PCHANNEL_PREPARE_IO
ATA_COMPLETION_ACTION() REQUEST_COMPLETION_ROUTINE(_In_ PATA_DEVICE_REQUEST Request)
CHANNEL_ENUMERATE_CHANNEL * PCHANNEL_ENUMERATE_CHANNEL
CHANNEL_SET_DEVICE_DATA * PCHANNEL_SET_DEVICE_DATA
@ AtaAsyncNotificationDetected
struct _ATA_IO_CONTEXT_COMMON ATA_IO_CONTEXT_COMMON
struct _ATA_TASKFILE ATA_TASKFILE
struct _ATA_TASKFILE * PATA_TASKFILE
_In_ PATA_DEVICE_REQUEST _In_ SCATTER_GATHER_LIST *__restrict SgList
struct _PCIIDEX_CHANNEL_INTERFACE PCIIDEX_CHANNEL_INTERFACE
Channel interface with the PCIIDEX driver.
struct _ATA_DEVICE_REQUEST * PATA_DEVICE_REQUEST
ATA_CONNECTION_STATUS() CHANNEL_IDENTIFY_DEVICE(_In_ PVOID ChannelContext, _In_ ULONG DeviceNumber)
PDEVICE_OBJECT PhysicalDeviceObject
_In_ PCHAR _In_ ULONG DeviceNumber
VOID(WINAPI * PINTERFACE_DEREFERENCE)(PVOID Context)
VOID(WINAPI * PINTERFACE_REFERENCE)(PVOID Context)
static const WCHAR Signature[]
#define _IRQL_requires_(irql)
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
PSCATTER_GATHER_LIST SgList
PATA_IO_CONTEXT_COMMON Device
SLIST_ENTRY CompletionEntry
PREQUEST_COMPLETION_ROUTINE Complete
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 Icc
Isochronous Command Completion.
UCHAR HighLbaEx
LBA bits 40-47.
UCHAR LowLba
LBA bits 0-7.
UCHAR MidLbaEx
LBA bits 32-39.
PIDENTIFY_DEVICE_DATA IdentifyDeviceData
struct _IDE_ACPI_TIMING_MODE_BLOCK::@1699 Drive[2]
ULONG PioSpeed
PIO cycle timing in ns.
ULONG DmaSpeed
DMA cycle timing in ns.
PUCHAR LbaMid
LBA bits 8-15, 32-39.
PUCHAR LbaHigh
LBA bits 16-23, 40-47.
PUCHAR LbaLow
LBA bits 0-7, 24-31.
Channel interface with the PCIIDEX driver.
PPORT_NOTIFICATION * PortNotification
PCHANNEL_SET_MODE SetTransferMode
PINTERFACE_REFERENCE InterfaceReference
PCHANNEL_ALLOCATE_SLOT AllocateSlot
ULONG MaximumTransferLength
PCHANNEL_RESET_CHANNEL ResetChannel
PCHANNEL_DOWNGRADE_INTERFACE_SPEED DowngradeInterfaceSpeed
PCHANNEL_IDENTIFY_DEVICE IdentifyDevice
PCHANNEL_GET_INIT_TASK_FILE GetInitTaskFile
PCHANNEL_ABORT_CHANNEL AbortChannel
PCHANNEL_SET_DEVICE_DATA SetDeviceData
ULONG MaximumPhysicalPages
PCHANNEL_START_IO StartIo
PCONTROLLER_OBJECT HwSyncObject
PKINTERRUPT InterruptObject
PINTERFACE_DEREFERENCE InterfaceDereference
PCHANNEL_PREPARE_IO PrepareIo
PCONTROLLER_ATTACH_CHANNEL AttachChannel
PCHANNEL_PREPARE_PRD_TABLE PreparePrdTable
PATA_DEVICE_REQUEST ** Slots
PDEVICE_OBJECT ChannelObject
PCHANNEL_ENUMERATE_CHANNEL EnumerateChannel
ULONG TransferModeSupported
Legacy detection interface with the PCIIDEX driver.
PCONTROLLER_PNP_REMOVE_DEVICE RemoveDevice
PCONTROLLER_PNP_START_DEVICE StartDevice
PCONTROLLER_PNP_ADD_DEVICE AddDevice
#define SLIST_ENTRY(type)
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFCMRESLIST _In_ WDFCMRESLIST ResourcesTranslated
_In_ WDF_SPECIAL_FILE_TYPE NotificationType
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
struct _SCATTER_GATHER_LIST * PSCATTER_GATHER_LIST