14#define PCI_DEV_AMD_756 0x7409
15#define PCI_DEV_AMD_766 0x7411
16#define PCI_DEV_AMD_768 0x7441
17#define PCI_DEV_AMD_8111 0x7469
18#define PCI_DEV_AMD_CS5536 0x2092
19#define PCI_DEV_AMD_CS5536_2 0x209A
21#define PCI_DEV_NFORCE_IDE 0x01BC
22#define PCI_DEV_NFORCE2_IDE 0x0065
23#define PCI_DEV_NFORCE2_IDE_2 0x0085
24#define PCI_DEV_NFORCE3_IDE 0x00D5
25#define PCI_DEV_NFORCE3_IDE_2 0x00E5
26#define PCI_DEV_CK804_IDE 0x0053
27#define PCI_DEV_MCP04_IDE 0x0035
28#define PCI_DEV_MCP51_IDE 0x0265
29#define PCI_DEV_MCP55_IDE 0x036E
30#define PCI_DEV_MCP61_IDE 0x03EC
31#define PCI_DEV_MCP65_IDE 0x0448
32#define PCI_DEV_MCP67_IDE 0x0560
33#define PCI_DEV_MCP73_IDE 0x056C
34#define PCI_DEV_MCP77_IDE 0x0759
36#define PCI_DEV_NFORCE2_SATA 0x008E
37#define PCI_DEV_NFORCE3_SATA 0x00E3
38#define PCI_DEV_NFORCE3_SATA_2 0x00EE
39#define PCI_DEV_CK804_SATA 0x0054
40#define PCI_DEV_CK804_SATA_2 0x0055
41#define PCI_DEV_MCP04_SATA 0x0036
42#define PCI_DEV_MCP04_SATA_2 0x003E
43#define PCI_DEV_MCP51_SATA 0x0266
44#define PCI_DEV_MCP51_SATA_2 0x0267
45#define PCI_DEV_MCP55_SATA 0x037E
46#define PCI_DEV_MCP55_SATA_2 0x037F
47#define PCI_DEV_MCP61_SATA 0x03E7
48#define PCI_DEV_MCP61_SATA_2 0x03F6
49#define PCI_DEV_MCP61_SATA_3 0x03F7
50#define PCI_DEV_MCP89_SATA 0x0D85
52#define PCI_SUBSYSTEM_AMD_SERENADE 0x36C0
54#define AMD_CONFIG_BASE 0x40
55#define NV_CONFIG_BASE 0x50
57#define AMD_PCI_CLOCK 30000
59#define AMD_REG_CONFIG_PREFETCH(IoBase) ((IoBase) + 0x01)
60#define AMD_REG_CONFIG_CR(IoBase) ((IoBase) + 0x02)
61#define AMD_REG_TIMING_CTRL(IoBase) ((IoBase) + 0x08)
62#define AMD_REG_ADDRESS_SETUP(IoBase) ((IoBase) + 0x0C)
63#define AMD_REG_UDMA(IoBase, Channel) ((IoBase) + 0x10 + (2 - ((Channel) * 2)))
65#define AMD_CONFIG_PREFETCH(Channel) (0xC0 >> ((Channel) * 2))
66#define AMD_CONFIG_CR(Channel) (0x03 << ((Channel) * 2))
68#define AMD_UDMA_TIME(x) (x)
69#define AMD_UDMA_EN 0xC0
71#define AMD_UDMA_CTRL(Drive, Value) ((Value) << ((1 - (Drive)) * 8))
79#define HW_FLAGS_UDMA4 0x0001
80#define HW_FLAGS_UDMA5 0x0002
81#define HW_FLAGS_CHECK_SYSBOARD 0x0004
82#define HW_FLAGS_NO_PREFETCH 0x0008
83#define HW_FLAGS_SATA 0x0010
207 ConfigReg &= ~AMD_CONFIG_PREFETCH(
Channel);
225 ULONG i, DriveTimReg, PortTimReg, UdmaTimReg;
233 INFO(
"CH %lu: Config (before)\n"
238 Channel, DriveTimReg, PortTimReg, UdmaTimReg,
PciRead32(Controller, IoBase));
287 INFO(
"CH %lu: Config (after)\n"
292 Channel, DriveTimReg, PortTimReg, UdmaTimReg,
PciRead32(Controller, IoBase));
333 ULONG i, HwFlags, SupportedMode;
366 SupportedMode &= ~UDMA_MODE6;
371 SupportedMode &= ~UDMA_MODE6;
373 SupportedMode &= ~UDMA_MODES(5, 6);
387 for (
i = 0;
i < Controller->MaxChannels; ++
i)
392 ChanData->TransferModeSupported = SupportedMode;
410 INFO(
"CH %lu: BIOS detected 40-conductor cable\n",
i);
411 ChanData->TransferModeSupported &= ~UDMA_80C_ALL;
420 INFO(
"CH %lu: BIOS hasn't selected mode faster than UDMA 2, "
421 "assume 40-conductor cable\n",
423 ChanData->TransferModeSupported &= ~UDMA_80C_ALL;
#define PCI_DEV_MCP51_SATA
#define PCI_DEV_MCP61_IDE
#define PCI_DEV_NFORCE_IDE
#define PCI_DEV_AMD_CS5536_2
#define AMD_REG_CONFIG_PREFETCH(IoBase)
static PCIIDEX_PAGED_DATA const ATA_PCI_ENABLE_BITS NvEnableBits[MAX_IDE_CHANNEL]
#define PCI_DEV_CK804_IDE
#define PCI_DEV_MCP04_SATA_2
#define PCI_DEV_MCP51_IDE
#define PCI_SUBSYSTEM_AMD_SERENADE
static const ULONG AmdTimingControlShift[MAX_IDE_CHANNEL][MAX_IDE_DEVICE]
static PCIIDEX_PAGED_DATA const ATA_PCI_ENABLE_BITS AmdEnableBits[MAX_IDE_CHANNEL]
#define PCI_DEV_NFORCE3_IDE
static const ULONG AmdPortTimShift[MAX_IDE_CHANNEL]
#define PCI_DEV_NFORCE3_SATA
#define PCI_DEV_MCP55_SATA
#define PCI_DEV_MCP65_IDE
#define AMD_REG_TIMING_CTRL(IoBase)
#define AMD_REG_UDMA(IoBase, Channel)
#define PCI_DEV_MCP04_SATA
#define PCI_DEV_MCP77_IDE
static VOID AmdEnablePostedWriteBuffer(_In_ PATA_CONTROLLER Controller, _In_ PCHANNEL_DATA_PATA ChanData, _In_ ULONG Channel, _In_reads_(MAX_IDE_DEVICE) PCHANNEL_DEVICE_CONFIG *DeviceList, _In_ ULONG IoBase)
#define AMD_CONFIG_PREFETCH(Channel)
#define AMD_REG_CONFIG_CR(IoBase)
static const ULONG AmdAddressSetupShift[MAX_IDE_CHANNEL][MAX_IDE_DEVICE]
#define PCI_DEV_NFORCE2_IDE_2
static PCIIDEX_PAGED_DATA const struct @1172 AmdControllerList[]
#define PCI_DEV_MCP67_IDE
#define AMD_UDMA_CTRL(Drive, Value)
NTSTATUS AmdGetControllerProperties(_Inout_ PATA_CONTROLLER Controller)
#define PCI_DEV_CK804_SATA_2
static VOID AmdControllerStart(_In_ PATA_CONTROLLER Controller)
static const UCHAR AmdUdmaSettings[]
#define PCI_DEV_MCP61_SATA_2
static BOOLEAN NvHasUdmaCable(_In_ USHORT UdmaTimReg, _In_ ULONG Drive)
#define PCI_DEV_MCP61_SATA_3
#define PCI_DEV_NFORCE3_IDE_2
#define PCI_DEV_CK804_SATA
#define PCI_DEV_NFORCE3_SATA_2
#define PCI_DEV_MCP55_SATA_2
#define AMD_REG_ADDRESS_SETUP(IoBase)
#define PCI_DEV_MCP73_IDE
static VOID AmdSetTransferMode(_In_ PATA_CONTROLLER Controller, _In_ ULONG Channel, _In_reads_(MAX_IDE_DEVICE) PCHANNEL_DEVICE_CONFIG *DeviceList)
#define PCI_DEV_AMD_CS5536
static ULONG AmdGetPciConfigIoBase(_In_ PATA_CONTROLLER Controller)
#define PCI_DEV_MCP51_SATA_2
#define PCI_DEV_MCP04_IDE
#define PCI_DEV_NFORCE2_IDE
#define HW_FLAGS_CHECK_SYSBOARD
#define PCI_DEV_NFORCE2_SATA
#define PCI_DEV_MCP55_IDE
#define HW_FLAGS_NO_PREFETCH
#define PCI_DEV_MCP61_SATA
#define PCI_DEV_MCP89_SATA
#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
#define SHARED_CMD_TIMINGS
VOID AtaSelectTimings(_In_reads_(MAX_IDE_DEVICE) PCHANNEL_DEVICE_CONFIG *DeviceList, _Out_writes_all_(MAX_IDE_DEVICE) PATA_TIMING Timings, _In_range_(>, 0) ULONG ClockPeriodPs, _In_ ULONG Flags)
NTSTATUS PciIdeCreateChannelData(_In_ PATA_CONTROLLER Controller, _In_ ULONG HwExtensionSize)
FORCEINLINE UCHAR PciRead8(_In_ PATA_CONTROLLER Controller, _In_ ULONG ConfigDataOffset)
#define CHANNEL_FLAG_NO_SLAVE
#define PCIIDEX_PAGED_DATA
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)
CHANNEL_SET_MODE_EX SataSetTransferMode
FORCEINLINE ULONG PciRead32(_In_ PATA_CONTROLLER Controller, _In_ ULONG ConfigDataOffset)
VOID ViaClampTimings(_Inout_ PATA_TIMING Timing)
_Must_inspect_result_ _In_ WDFDEVICE Device
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value