19#define PCI_DEV_OSB4_IDE 0x0211
20#define PCI_DEV_CSB5_IDE 0x0212
21#define PCI_DEV_CSB6_IDE 0x0213
22#define PCI_DEV_CSB6_IDE_THIRD 0x0217
23#define PCI_DEV_HT1000_IDE 0x0214
25#define PCI_DEV_OSB4_BRIDGE 0x0210
27#define SVW_REG_PIO_TIMING 0x40
28#define SVW_REG_DMA_TIMING 0x44
29#define SVW_REG_PIO_MODE 0x4A
30#define SVW_REG_UDMA_ENABLE 0x54
31#define SVW_REG_UDMA_MODE 0x56
32#define SVW_REG_UDMA_CONTROL 0x5A
34#define SVW_UDMA_CTRL_MODE_MASK 0x03
35#define SVW_UDMA_CTRL_DISABLE 0x40
37#define SVW_UDMA_CTRL_MODE_UDMA4 0x02
38#define SVW_UDMA_CTRL_MODE_UDMA5 0x03
105 WARN(
"CH %lu: Too slow device '%s', disabling DMA\n",
Channel,
Device->FriendlyName);
118 USHORT PioModeReg, UdmaModeReg;
120 ULONG i, PioTimReg, DmaTimReg;
132 INFO(
"CH %lu: Config (before)\n"
137 "UDMA Enable %02X\n",
151 UdmaModeReg &= ~(0x0F << (DeviceIndex << 2));
152 UdmaEnableReg &= ~(0x01 << DeviceIndex);
165 UdmaModeReg |= ModeIndex << (DeviceIndex << 2);
166 UdmaEnableReg |= 1 << DeviceIndex;
168 DmaTimReg &= ~(0xFF <<
Shift);
176 DmaTimReg &= ~(0xFF <<
Shift);
181 PioModeReg &= ~(0x0F << (DeviceIndex << 2));
182 PioModeReg |=
Device->PioMode << (DeviceIndex << 2);
184 PioTimReg &= ~(0xFF <<
Shift);
197 INFO(
"CH %lu: Config (after)\n"
202 "UDMA Enable %02X\n",
224 return ((UdmaModeReg & 0x07) > 2) || ((UdmaModeReg & 0x70) > 0x20);
251 Value &= ~0x00002000;
298 switch (Controller->Pci.DeviceID)
308 if (Controller->Pci.RevisionID < 0x92)
317 Controller->MaxChannels = 1;
326 Controller->MaxChannels = 1;
340 for (
i = 0;
i < Controller->MaxChannels; ++
i)
348 ChanData->TransferModeSupported = SupportedMode;
353 INFO(
"CH %lu: BIOS hasn't selected mode faster than UDMA 2, "
354 "assume 40-conductor cable\n",
356 ChanData->TransferModeSupported &= ~UDMA_80C_ALL;
#define NT_SUCCESS(StatCode)
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
ULONG NTAPI HalSetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
ULONG NTAPI HalGetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
#define UNREFERENCED_PARAMETER(P)
#define UDMA_MODES(MinMode, MaxMode)
#define PCI_VEN_SERVERWORKS
NTSTATUS PciIdeCreateChannelData(_In_ PATA_CONTROLLER Controller, _In_ ULONG HwExtensionSize)
BOOLEAN PciFindDevice(_In_ __callback PATA_PCI_MATCH_FN MatchFunction, _In_ PVOID Context)
FORCEINLINE UCHAR PciRead8(_In_ PATA_CONTROLLER Controller, _In_ ULONG ConfigDataOffset)
_In_ ULONG _In_ PCI_SLOT_NUMBER PciSlot
FORCEINLINE VOID PciWrite16(_In_ PATA_CONTROLLER Controller, _In_ ULONG ConfigDataOffset, _In_ USHORT Value)
FORCEINLINE VOID PciWrite8(_In_ PATA_CONTROLLER Controller, _In_ ULONG ConfigDataOffset, _In_ UCHAR Value)
FORCEINLINE VOID PciWrite32(_In_ PATA_CONTROLLER Controller, _In_ ULONG ConfigDataOffset, _In_ ULONG Value)
FORCEINLINE USHORT PciRead16(_In_ PATA_CONTROLLER Controller, _In_ ULONG ConfigDataOffset)
#define CTRL_FLAG_DMA_INTERRUPT
CHANNEL_SET_MODE_EX SvwSetTransferMode
_In_ ULONG _In_ PCI_SLOT_NUMBER _In_ PPCI_COMMON_HEADER PciConfig
FORCEINLINE ULONG PciRead32(_In_ PATA_CONTROLLER Controller, _In_ ULONG ConfigDataOffset)
ULONG TransferModeSupported
union _PCI_SLOT_NUMBER::@4410 u
#define PCI_DEV_HT1000_IDE
#define SVW_UDMA_CTRL_MODE_UDMA4
static VOID SvwPataControllerStart(_In_ PATA_CONTROLLER Controller)
#define SVW_UDMA_CTRL_DISABLE
static const struct @1175 SvwMwDmaTimings[]
#define SVW_UDMA_CTRL_MODE_UDMA5
static const struct @1174 SvwPioTimings[]
#define SVW_REG_UDMA_CONTROL
#define SVW_REG_UDMA_MODE
static BOOLEAN SvwOsb4PciBridgeInit(_In_ PVOID Context, _In_ ULONG BusNumber, _In_ PCI_SLOT_NUMBER PciSlot, _In_ PPCI_COMMON_HEADER PciConfig)
#define SVW_REG_DMA_TIMING
BOOLEAN SvwHasUdmaCable(_In_ PATA_CONTROLLER Controller, _In_ ULONG Channel)
NTSTATUS SvwPataGetControllerProperties(_Inout_ PATA_CONTROLLER Controller)
#define SVW_REG_UDMA_ENABLE
#define PCI_DEV_CSB6_IDE_THIRD
#define PCI_DEV_OSB4_BRIDGE
#define SVW_REG_PIO_TIMING
#define SVW_UDMA_CTRL_MODE_MASK
static VOID SvwChooseDeviceSpeed(_In_ ULONG Channel, _In_ PCHANNEL_DEVICE_CONFIG Device)
_Must_inspect_result_ _In_ WDFDEVICE Device
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value