10#define PCI_VEN_ATI 0x1002
11#define PCI_VEN_AMD 0x1022
12#define PCI_VEN_NVIDIA 0x10DE
13#define PCI_VEN_PC_TECH 0x1042
14#define PCI_VEN_CMD 0x1095
15#define PCI_VEN_HIGHPOINT 0x1103
16#define PCI_VEN_VIA 0x1106
17#define PCI_VEN_SERVERWORKS 0x1166
18#define PCI_VEN_TOSHIBA 0x1179
19#define PCI_VEN_CAVIUM 0x177D
20#define PCI_VEN_INTEL 0x8086
23#define CHANNEL_PCAT_MAX_DEVICES 2
26#define CHANNEL_PC98_MAX_DEVICES 4
29#define PC98_ATA_BANK 0x432
30#define PC98_ATA_BANK_32BIT_PORT 0x08
33#define ATA_IO_WAIT() KeStallExecutionProcessor(1)
35#define NUM_TO_BITMAP(num) (0xFFFFFFFF >> (RTL_BITS_OF(ULONG) - (num)))
39 (PIO_ALL | MWDMA_ALL | UDMA_ALL)
43 (UDMA_MODE3 | UDMA_MODE4 | UDMA_MODE5 | UDMA_MODE6)
46#define MWDMA_MODES(MinMode, MaxMode) \
47 (NUM_TO_BITMAP(MWDMA_MODE((MaxMode) + 1)) & ~NUM_TO_BITMAP(MWDMA_MODE(MinMode)))
50#define UDMA_MODES(MinMode, MaxMode) \
51 (NUM_TO_BITMAP(UDMA_MODE((MaxMode) + 1)) & ~NUM_TO_BITMAP(UDMA_MODE(MinMode)))
53#define IDE_DC_ALWAYS 0x08
54#define IDE_DRIVE_SELECT 0xA0
56#define IDE_HIGH_ORDER_BYTE 0x80
58#define IDE_FEATURE_PIO 0x00
59#define IDE_FEATURE_DMA 0x01
60#define IDE_FEATURE_DMADIR 0x04
66#define ATAPI_MAX_DRQ_DATA_BLOCK 0xFFFE
72#define PCIIDE_LEGACY_RESOURCE_COUNT 3
73#define PCIIDE_LEGACY_COMMAND_IO_RANGE_LENGTH 8
74#define PCIIDE_LEGACY_CONTROL_IO_RANGE_LENGTH 1
75#define PCIIDE_LEGACY_PRIMARY_COMMAND_BASE 0x1F0
76#define PCIIDE_LEGACY_PRIMARY_CONTROL_BASE 0x3F6
77#define PCIIDE_LEGACY_PRIMARY_IRQ 14
78#define PCIIDE_LEGACY_SECONDARY_COMMAND_BASE 0x170
79#define PCIIDE_LEGACY_SECONDARY_CONTROL_BASE 0x376
80#define PCIIDE_LEGACY_SECONDARY_IRQ 15
83#define PCIIDE_COMMAND_IO_RANGE_LENGTH 8
84#define PCIIDE_CONTROL_IO_RANGE_LENGTH 4
85#define PCIIDE_CONTROL_IO_BAR_OFFSET 2
86#define PCIIDE_DMA_IO_BAR 4
87#define PCIIDE_DMA_IO_RANGE_LENGTH 16
90#define PCIIDE_DMA_SECONDARY_CHANNEL_OFFSET 8
96#define PCIIDE_PROGIF_PRIMARY_CHANNEL_NATIVE_MODE 0x01
97#define PCIIDE_PROGIF_PRIMARY_CHANNEL_NATIVE_MODE_CAPABLE 0x02
98#define PCIIDE_PROGIF_SECONDARY_CHANNEL_NATIVE_MODE 0x04
99#define PCIIDE_PROGIF_SECONDARY_CHANNEL_NATIVE_MODE_CAPABLE 0x08
100#define PCIIDE_PROGIF_DMA_CAPABLE 0x80
107#define PCIIDE_DMA_COMMAND 0
108#define PCIIDE_DMA_STATUS 2
109#define PCIIDE_DMA_PRDT_PHYSICAL_ADDRESS 4
116#define PCIIDE_DMA_COMMAND_STOP 0x00
117#define PCIIDE_DMA_COMMAND_START 0x01
118#define PCIIDE_DMA_COMMAND_READ_FROM_SYSTEM_MEMORY 0x00
119#define PCIIDE_DMA_COMMAND_WRITE_TO_SYSTEM_MEMORY 0x08
126#define PCIIDE_DMA_STATUS_ACTIVE 0x01
127#define PCIIDE_DMA_STATUS_ERROR 0x02
128#define PCIIDE_DMA_STATUS_INTERRUPT 0x04
129#define PCIIDE_DMA_STATUS_RESERVED1 0x08
130#define PCIIDE_DMA_STATUS_RESERVED2 0x10
131#define PCIIDE_DMA_STATUS_DRIVE0_DMA_CAPABLE 0x20
132#define PCIIDE_DMA_STATUS_DRIVE1_DMA_CAPABLE 0x40
133#define PCIIDE_DMA_STATUS_SIMPLEX 0x80
141#define ATAPI_INT_REASON_COD 0x01
144#define ATAPI_INT_REASON_IO 0x02
147#define ATAPI_INT_REASON_RELEASE 0x04
150#define ATAPI_INT_REASON_TAG 0xF8
152#define ATAPI_INT_REASON_MASK (ATAPI_INT_REASON_IO | ATAPI_INT_REASON_COD)
155#define ATAPI_INT_REASON_STATUS_NEC 0x00
158#define ATAPI_INT_REASON_STATUS (ATAPI_INT_REASON_IO | ATAPI_INT_REASON_COD)
161#define ATAPI_INT_REASON_DATA_OUT IDE_STATUS_DRQ
164#define ATAPI_INT_REASON_AWAIT_CDB (IDE_STATUS_DRQ | ATAPI_INT_REASON_COD)
167#define ATAPI_INT_REASON_DATA_IN (ATAPI_INT_REASON_IO | IDE_STATUS_DRQ)
170#define ATA_TIME_BUSY_SELECT 3000
171#define ATA_TIME_BUSY_NORMAL 50000
172#define ATA_TIME_BUSY_POLL 5
173#define ATA_TIME_DRQ_CLEAR 1000
174#define ATA_TIME_PHASE_CHANGE 100
177#define ATA_TIME_DRQ_ASSERT 15
179#define ATA_TIME_RESET_SELECT (2000 / PORT_TIMER_TICK_MS)
180#define ATA_TIME_BUSY_RESET (10000 / PORT_TIMER_TICK_MS)
182#define CMD_FLAG_NONE 0x00000000
183#define CMD_FLAG_TRANSFER_MASK 0x00000003
184#define CMD_FLAG_AWAIT_CDB 0x00000004
185#define CMD_FLAG_DATA_IN 0x00000040
186#define CMD_FLAG_DATA_OUT 0x00000080
187#define CMD_FLAG_AWAIT_INTERRUPT 0x80000000
189#define CMD_FLAG_ATAPI_PIO_TRANSFER 0x00000001
190#define CMD_FLAG_ATA_PIO_TRANSFER 0x00000002
191#define CMD_FLAG_DMA_TRANSFER 0x00000003
194#define PATA_CHANNEL_SLOT 0
195#define PATA_CHANNEL_QUEUE_DEPTH 1
210#define PCIIDE_PRD_LENGTH_MASK 0xFFFF
211#define PCIIDE_PRD_END_OF_TABLE 0x80000000
216#define PCIIDE_PRD_LIMIT 0x10000
231#define SHARED_CMD_TIMINGS 0x00000001
232#define SHARED_DATA_TIMINGS 0x00000002
233#define SHARED_ADDR_TIMINGS 0x00000004
249#define ATA_READ_BLOCK_16(Port, Buffer, Count, Ctx, MmioFlag) \
250 AtaReadBlock16(Port, Buffer, Count, (Ctx)->ChanInfo & CHANNEL_FLAG_##MmioFlag)
252#define ATA_WRITE_BLOCK_16(Port, Buffer, Count, Ctx, MmioFlag) \
253 AtaWriteBlock16(Port, Buffer, Count, (Ctx)->ChanInfo & CHANNEL_FLAG_##MmioFlag)
255#define ATA_READ_BLOCK_32(Port, Buffer, Count, Ctx, MmioFlag) \
256 AtaReadBlock32(Port, Buffer, Count, (Ctx)->ChanInfo & CHANNEL_FLAG_##MmioFlag)
258#define ATA_WRITE_BLOCK_32(Port, Buffer, Count, Ctx, MmioFlag) \
259 AtaWriteBlock32(Port, Buffer, Count, (Ctx)->ChanInfo & CHANNEL_FLAG_##MmioFlag)
261#define ATA_READ(Port, Ctx, MmioFlag) \
262 AtaReadPortUchar(Port, (Ctx)->ChanInfo & CHANNEL_FLAG_##MmioFlag)
264#define ATA_WRITE(Port, Value, Ctx, MmioFlag) \
265 AtaWritePortUchar(Port, Value, (Ctx)->ChanInfo & CHANNEL_FLAG_##MmioFlag)
267#define ATA_WRITE_ULONG(Port, Value, Ctx, MmioFlag) \
268 AtaWritePortUlong(Port, Value, (Ctx)->ChanInfo & CHANNEL_FLAG_##MmioFlag)
296 ATA_WRITE(ChanData->Regs.Device, DeviceSelect, ChanData, MRES_TF);
313 IdeStatus = ChanData->ReadStatus(ChanData);
317 if (IdeStatus == 0xFF)
#define REQUEST_FLAG_DATA_IN
#define REQUEST_FLAG_DATA_OUT
#define REQUEST_FLAG_POLL
_In_ PCHAR _In_ ULONG DeviceNumber
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 KeStallExecutionProcessor(MicroSeconds)
struct _ATA_TIMING ATA_TIMING
#define ATA_WRITE(Port, Value, Ctx, MmioFlag)
#define CMD_FLAG_ATAPI_PIO_TRANSFER
#define CMD_FLAG_ATA_PIO_TRANSFER
FORCEINLINE ATATIM CLAMP_TIMING(_In_ ATATIM Value, _In_ ATATIM Minimum, _In_ ATATIM Maximum)
#define CMD_FLAG_DMA_TRANSFER
#define PC98_ATA_BANK_32BIT_PORT
struct _PCIIDE_PRD_TABLE_ENTRY * PPCIIDE_PRD_TABLE_ENTRY
FORCEINLINE VOID ATA_SELECT_DEVICE(_In_ PCHANNEL_DATA_PATA ChanData, _In_ UCHAR DeviceNumber, _In_ UCHAR DeviceSelect)
FORCEINLINE UCHAR ATA_WAIT(_In_ PCHANNEL_DATA_PATA ChanData, _In_range_(>, 0) ULONG Timeout, _In_ UCHAR Mask, _In_ UCHAR Value)
struct _ATA_TIMING * PATA_TIMING
struct _PCIIDE_PRD_TABLE_ENTRY PCIIDE_PRD_TABLE_ENTRY
#define CMD_FLAG_DATA_OUT
#define CMD_FLAG_AWAIT_INTERRUPT
#define WRITE_PORT_UCHAR(p, d)
#define CHANNEL_FLAG_IO32
#define CHANNEL_FLAG_CBUS
ULONG Length
0 means 0x10000 bytes
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value