27 Base = PciData->u.type1.IOLimit;
30 Is32Bit = (
Base & 0xF) == 1;
31 IoBase = (
Base & 0xF0) << 8;
37 IoBase |= PciData->u.type1.IOBaseUpper16 << 16;
38 ASSERT(PciData->u.type1.IOLimit & 0x1);
54 Limit = PciData->u.type1.IOLimit;
57 Is32Bit = (
Limit & 0xF) == 1;
58 IoLimit = (
Limit & 0xF0) << 8;
64 IoLimit |= PciData->u.type1.IOLimitUpper16 << 16;
65 ASSERT(PciData->u.type1.IOBase & 0x1);
69 return IoLimit | 0xFFF;
79 return (PciData->u.type1.MemoryBase << 16);
89 return (PciData->u.type1.MemoryLimit << 16) | 0xFFFFF;
102 PrefetchBase = PciData->u.type1.PrefetchBase;
105 Is64Bit = (PrefetchBase & 0xF) == 1;
106 Base.LowPart = ((PrefetchBase & 0xFFF0) << 16);
112 Base.HighPart = PciData->u.type1.PrefetchBaseUpper32;
129 PrefetchLimit = PciData->u.type1.PrefetchLimit;
132 Is64Bit = (PrefetchLimit & 0xF) == 1;
133 Limit.LowPart = (PrefetchLimit << 16) | 0xFFFFF;
139 Limit.HighPart = PciData->u.type1.PrefetchLimitUpper32;
189 (Current->ProgIf != 1) &&
190 ((PciData->u.type1.IOLimit & 0xF0) == 0xF0))
193 DPRINT(
"Subtractive decode does not seem to be enabled\n");
212 DPRINT1(
"Putting bridge in positive decode because of PDEC\n");
218 DPRINT1(
"PCI : Subtractive decode on 0x%x\n", Current->u.type1.SecondaryBus);
254 BarArray = Current->u.type1.BaseAddresses;
255 for (
i = 0;
i < 6;
i++)
262 CmDescriptor->
Type = IoDescriptor->
Type;
277 Bar = Current->u.type1.ROMBaseAddress;
308 Base.HighPart = BarArray[
i + 1];
330 DPRINT1(
"Bridge I/O Base and Limit: %lx %lx\n",
334 if (!(
Base.LowPart) && (Current->u.type1.IOLimit))
347 DPRINT1(
"Bridge MEM Base and Limit: %lx %lx\n",
373 if (!(
Base.LowPart) && !(HaveIoLimit))
390 IoDescriptor->
u.
Memory.Alignment =
400 PdoExtension->Dependent.type1.PrimaryBus = Current->u.type1.PrimaryBus;
401 PdoExtension->Dependent.type1.SecondaryBus = Current->u.type1.SecondaryBus;
402 PdoExtension->Dependent.type1.SubordinateBus = Current->u.type1.SubordinateBus;
408 DPRINT1(
"Subtractive decode bridge\n");
456 DPRINT1(
"apply config save hack to ICH subtractive decode\n");
458 PdoExtension->ParentFdoExtension->PreservedConfig = SavedConfig;
480 BarArray =
Working->u.type1.BaseAddresses;
519 (&
Limit[
i])->
u.Port.MinimumAddress.QuadPart = 0;
533 (&
Limit[
i])->
u.Port.Alignment = 0x1000;
534 (&
Limit[
i])->u.Port.MinimumAddress.QuadPart = 0;
535 (&
Limit[
i])->
u.Port.MaximumAddress = MemoryLimit;
536 (&
Limit[
i])->
u.Port.Length = 0;
547 (&
Limit[
i])->
u.Memory.Alignment = 0x100000;
548 (&
Limit[
i])->u.Memory.MinimumAddress.QuadPart = 0;
549 (&
Limit[
i])->
u.Memory.MaximumAddress = MemoryLimit;
550 (&
Limit[
i])->
u.Memory.Length = 0;
552 else if (
Working->u.type1.PrefetchLimit)
560 (&
Limit[
i])->
u.Memory.Alignment = 0x100000;
561 (&
Limit[
i])->u.Memory.MinimumAddress.QuadPart = 0;
562 (&
Limit[
i])->
u.Memory.MaximumAddress = MemoryLimit;
563 (&
Limit[
i])->
u.Memory.Length = 0;
602 PciData->u.type1.PrimaryBus = Current->u.type1.PrimaryBus;
603 PciData->u.type1.SecondaryBus = Current->u.type1.SecondaryBus;
604 PciData->u.type1.SubordinateBus = Current->u.type1.SubordinateBus;
605 PciData->u.type1.SecondaryLatency = Current->u.type1.SecondaryLatency;
608 PciData->u.type1.IOBaseUpper16 = 0xFFFE;
609 PciData->u.type1.IOLimitUpper16 = 0xFFFF;
612 Context->SecondaryStatus = Current->u.type1.SecondaryStatus;
615 Current->u.type1.SecondaryStatus = 0;
616 PciData->u.type1.SecondaryStatus = 0;
624 Context->Current->u.type1.SecondaryStatus =
Context->SecondaryStatus;
641 IoDescriptor->u.DevicePrivate.Data[0] = 3;
642 IoDescriptor->u.DevicePrivate.Data[1] = 3;
647 IoDescriptor[1].u.Port.Length = 0x20000;
648 IoDescriptor[1].u.Port.Alignment = 1;
649 IoDescriptor[1].u.Port.MinimumAddress.QuadPart = 0xA0000;
650 IoDescriptor[1].u.Port.MaximumAddress.QuadPart = 0xBFFFF;
656 IoDescriptor[2].u.Port.Length = 12;
657 IoDescriptor[2].u.Port.Alignment = 1;
658 IoDescriptor[2].u.Port.MinimumAddress.QuadPart = 0x3B0;
659 IoDescriptor[2].u.Port.MaximumAddress.QuadPart = 0x3BB;
665 IoDescriptor[3].u.Port.Length = 32;
666 IoDescriptor[3].u.Port.Alignment = 1;
667 IoDescriptor[3].u.Port.MinimumAddress.QuadPart = 0x3C0;
668 IoDescriptor[3].u.Port.MaximumAddress.QuadPart = 0x3DF;
711 PciData->u.type1.MemoryBase = 0xFFFF;
712 PciData->u.type1.PrefetchBase = 0xFFFF;
713 PciData->u.type1.IOBase = 0xFF;
714 PciData->u.type1.IOLimit = 0;
715 PciData->u.type1.MemoryLimit = 0;
716 PciData->u.type1.PrefetchLimit = 0;
717 PciData->u.type1.PrefetchBaseUpper32 = 0;
718 PciData->u.type1.PrefetchLimitUpper32 = 0;
719 PciData->u.type1.IOBaseUpper16 = 0;
720 PciData->u.type1.IOLimitUpper16 = 0;
732 PciData->u.type1.IOBase =
FdoExtension->PreservedConfig->u.type1.IOBase;
733 PciData->u.type1.IOLimit =
FdoExtension->PreservedConfig->u.type1.IOLimit;
734 PciData->u.type1.MemoryBase =
FdoExtension->PreservedConfig->u.type1.MemoryBase;
735 PciData->u.type1.MemoryLimit =
FdoExtension->PreservedConfig->u.type1.MemoryLimit;
736 PciData->u.type1.PrefetchBase =
FdoExtension->PreservedConfig->u.type1.PrefetchBase;
737 PciData->u.type1.PrefetchLimit =
FdoExtension->PreservedConfig->u.type1.PrefetchLimit;
738 PciData->u.type1.PrefetchBaseUpper32 =
FdoExtension->PreservedConfig->u.type1.PrefetchBaseUpper32;
739 PciData->u.type1.PrefetchLimitUpper32 =
FdoExtension->PreservedConfig->u.type1.PrefetchLimitUpper32;
740 PciData->u.type1.IOBaseUpper16 =
FdoExtension->PreservedConfig->u.type1.IOBaseUpper16;
741 PciData->u.type1.IOLimitUpper16 =
FdoExtension->PreservedConfig->u.type1.IOLimitUpper16;
749 for (
i = 0;
i < 6;
i++)
756 PciData->u.type1.PrimaryBus =
PdoExtension->Dependent.type1.PrimaryBus;
757 PciData->u.type1.SecondaryBus =
PdoExtension->Dependent.type1.SecondaryBus;
758 PciData->u.type1.SubordinateBus =
PdoExtension->Dependent.type1.SubordinateBus;
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
#define NT_SUCCESS(StatCode)
BOOLEAN NTAPI PciIsSlotPresentInParentMethod(IN PPCI_PDO_EXTENSION PdoExtension, IN ULONG Method)
NTSTATUS NTAPI PciGetBiosConfig(IN PPCI_PDO_EXTENSION DeviceExtension, OUT PPCI_COMMON_HEADER PciData)
BOOLEAN NTAPI PciCreateIoDescriptorFromBarLimit(_Out_ PIO_RESOURCE_DESCRIPTOR ResourceDescriptor, _In_ ULONG Bar, _In_ ULONG NextBar, _In_ BOOLEAN Rom)
Builds the requirement of a BAR from the value it reads back after all ones were written to it.
#define UNIMPLEMENTED_DBGBREAK(...)
#define ExAllocatePoolWithTag(hernya, size, tag)
union Alignment_ Alignment
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
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 * u
#define CM_RESOURCE_PORT_POSITIVE_DECODE
#define CM_RESOURCE_MEMORY_PREFETCHABLE
#define CM_RESOURCE_PORT_WINDOW_DECODE
#define CM_RESOURCE_MEMORY_READ_WRITE
#define CM_RESOURCE_PORT_10_BIT_DECODE
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG _In_ ULONG Length
VOID NTAPI PPBridge_SaveCurrentSettings(IN PPCI_CONFIGURATOR_CONTEXT Context)
PHYSICAL_ADDRESS NTAPI PciBridgePrefetchMemoryBase(IN PPCI_COMMON_HEADER PciData)
VOID NTAPI PPBridge_GetAdditionalResourceDescriptors(IN PPCI_CONFIGURATOR_CONTEXT Context, IN PPCI_COMMON_HEADER PciData, IN PIO_RESOURCE_DESCRIPTOR IoDescriptor)
BOOLEAN NTAPI PciBridgeIsSubtractiveDecode(IN PPCI_CONFIGURATOR_CONTEXT Context)
ULONG NTAPI PciBridgeMemoryWorstCaseAlignment(IN ULONG Length)
PHYSICAL_ADDRESS NTAPI PciBridgePrefetchMemoryLimit(IN PPCI_COMMON_HEADER PciData)
VOID NTAPI PPBridge_RestoreCurrent(IN PPCI_CONFIGURATOR_CONTEXT Context)
VOID NTAPI PPBridge_MassageHeaderForLimitsDetermination(IN PPCI_CONFIGURATOR_CONTEXT Context)
VOID NTAPI PPBridge_ChangeResourceSettings(IN PPCI_PDO_EXTENSION PdoExtension, IN PPCI_COMMON_HEADER PciData)
BOOLEAN NTAPI PciBridgeIsPositiveDecode(IN PPCI_PDO_EXTENSION PdoExtension)
VOID NTAPI PPBridge_SaveLimits(IN PPCI_CONFIGURATOR_CONTEXT Context)
ULONG NTAPI PciBridgeIoBase(IN PPCI_COMMON_HEADER PciData)
ULONG NTAPI PciBridgeMemoryLimit(IN PPCI_COMMON_HEADER PciData)
VOID NTAPI PPBridge_ResetDevice(IN PPCI_PDO_EXTENSION PdoExtension, IN PPCI_COMMON_HEADER PciData)
ULONG NTAPI PciBridgeIoLimit(IN PPCI_COMMON_HEADER PciData)
ULONG NTAPI PciBridgeMemoryBase(IN PPCI_COMMON_HEADER PciData)
#define RtlFillMemory(Dest, Length, Fill)
#define CmResourceTypeNull
#define CmResourceTypeMemory
#define CmResourceTypeDevicePrivate
#define CmResourceTypePort
#define PCI_ENABLE_BRIDGE_VGA
#define PCI_HACK_SUBTRACTIVE_DECODE
#define PCI_ENABLE_BRIDGE_ISA
#define PCI_HACK_BROKEN_SUBTRACTIVE_DECODE
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@486::@487 Generic
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@486 u
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@486::@491 Memory
struct _IO_RESOURCE_DESCRIPTOR::@2481::@2486 Generic
struct _IO_RESOURCE_DESCRIPTOR::@2481::@2483 Memory
union _IO_RESOURCE_DESCRIPTOR::@2481 u
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
struct _LARGE_INTEGER::@2736 u
#define CmResourceTypeMemoryLarge
#define PCI_ADDRESS_IO_ADDRESS_MASK
#define PCI_ENABLE_IO_SPACE
#define PCI_SUBCLASS_BR_PCI_TO_PCI
#define PCI_ADDRESS_IO_SPACE
#define PCI_CONFIGURATION_TYPE(PciData)
#define PCI_ENABLE_MEMORY_SPACE
#define PCI_TYPE1_ADDRESSES
#define PCI_ADDRESS_ROM_ADDRESS_MASK
#define PCI_ADDRESS_MEMORY_ADDRESS_MASK
#define PCI_COMMON_HDR_LENGTH
#define PCI_CLASS_BRIDGE_DEV
#define PCI_ROMADDRESS_ENABLED
#define PCI_ADDRESS_MEMORY_TYPE_MASK
_In_ LONG _In_ LONG Limit