19#define PCI_RANGE_FIXED_PLACEMENT 0x04
104 if (
State->CurrentAlternative &&
147 !
State->CurrentAlternative ||
158 if ((Range->
Start <=
State->CurrentMaximum) &&
159 (Range->
End >=
State->CurrentMinimum) &&
162 if ((Range->
Owner !=
State->Entry->PhysicalDeviceObject) ||
211 SecondaryExtension.Next,
215 DPRINT1(
"PCIX - FDO ext 0x%p has no %s arbiter to hand out.\n",
263 DPRINT1(
"PCIX - Not creating arbiters for subtractive bus 0x%x\n",
277 CurrentInterface = *Interfaces;
278 if (CurrentInterface->
Signature == ArbiterType)
break;
286 DPRINT1(
"PCIX - FDO ext 0x%p no %s arbiter.\n",
297 if (!ArbiterInterface)
break;
301 ArbiterInterface->
Interface = CurrentInterface;
314 &ArbiterInterface->
Header,
319 DPRINT1(
"PCIX - FDO ext 0x%p %S arbiter initialized (context 0x%p).\n",
321 L"ARBITER HEADER MISSING",
354 Size =
sizeof(*RangeList) + (5 *
sizeof(*Descriptor));
360 RangeList->
Count = 1;
362 RangeList->
List[0].
BusNumber = BridgeExtension->Dependent.type1.SecondaryBus;
369 if (BridgeExtension->Resources)
373 Window = &BridgeExtension->Resources->Current[
Index];
382 if (BridgeExtension->Dependent.type1.VgaBitSet)
386 Descriptor->u.Memory.Start.QuadPart = 0xA0000;
431 PartialList = &RangeList->List[0].PartialResourceList;
435 if ((RangeType ==
Type) ||
457 if (DeviceExtension->ArbitersInitialized)
460 DPRINT1(
"PCIX - Warning hot start FDOx %p, resource ranges not checked.\n", DeviceExtension);
478 DPRINT1(
"PCIX - Skipping arbiter initialization for subtractive bridge FDOX %p\n", DeviceExtension);
493 SecondaryExtension.Next,
502 DPRINT1(
"PCIX - FDO ext 0x%p %s arbiter failed to start: %X\n",
523 DPRINT1(
"PCIX - FDO ext 0x%p %s arbiter (REQUIRED) is missing.\n",
530 DeviceExtension->ArbitersInitialized =
TRUE;
NTSTATUS NTAPI PciInitializeArbiterRanges(IN PPCI_FDO_EXTENSION DeviceExtension, IN PCM_RESOURCE_LIST Resources)
VOID NTAPI PciArbiter_Reference(_In_ PVOID Context)
VOID NTAPI PciArbiter_Dereference(_In_ PVOID Context)
NTSTATUS NTAPI PciArbiter_PreprocessEntry(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE State)
Sets the range attributes of one arbitration entry before the engine looks for a placement for it.
static PCM_RESOURCE_LIST NTAPI PciCollectForwardedRanges(_In_ PPCI_PDO_EXTENSION BridgeExtension)
Builds a resource list of the ranges a PCI-to-PCI bridge forwards to its secondary bus.
BOOLEAN NTAPI PciArbiter_FindSuitableRange(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE State)
Searches for a placement, remembering on the range whether it came from a fixed alternative.
#define PCI_RANGE_FIXED_PLACEMENT
NTSTATUS NTAPI PciInitializeArbiters(IN PPCI_FDO_EXTENSION FdoExtension)
NTSTATUS NTAPI PciArbiterConstructor(_In_ PPCI_FDO_EXTENSION FdoExtension, _In_ PCI_SIGNATURE ArbiterType, _Out_ PARBITER_INTERFACE Interface)
VOID NTAPI PciArbiterDestructor(IN PPCI_ARBITER_INSTANCE Arbiter)
BOOLEAN NTAPI PciArbiter_OverrideConflict(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE State)
Lets a fixed requirement overlap ranges its own device was given by other fixed requirements.
static BOOLEAN NTAPI PciHasRangeOfType(_In_ PCM_RESOURCE_LIST RangeList, _In_ UCHAR Type)
Tells whether a resource list holds any range of one resource type.
VOID NTAPI ArbiterLibDeleteInstance(_In_ PARBITER_INSTANCE Arbiter)
#define ARBITER_MAXIMUM_ADDRESS
BOOLEAN NTAPI ArbiterLibFindSuitableRange(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Finds a free range of the current candidate window in the arbiter's tentative allocation list.
NTSTATUS NTAPI ArbiterLibHandler(_In_ PVOID Context, _In_ ARBITER_ACTION Action, _Inout_ PARBITER_PARAMETERS Parameters)
The single ARBITER_ACTION dispatcher every exported ARBITER_INTERFACE points its ArbiterHandler at; C...
#define ARBITER_ALTERNATIVE_FLAG_FIXED
struct _ARBITER_INSTANCE * PARBITER_INSTANCE
#define ARBITER_RANGE_PORT_ALIAS
VOID NTAPI ArbiterLibReserveRange(_In_ PARBITER_INSTANCE Arbiter, _In_ ULONGLONG Start, _In_ ULONGLONG End, _In_opt_ PVOID Owner, _In_ BOOLEAN Shared)
Commits a single [Start, End] range into the arbiter as an ordinary allocation owned by Owner.
#define ARBITER_RANGE_BOOT_ALLOCATED
#define InterlockedIncrement
#define InterlockedDecrement
#define STATUS_NOT_SUPPORTED
#define NT_SUCCESS(StatCode)
#define ARBITER_INTERFACE_VERSION
PPCI_SECONDARY_EXTENSION NTAPI PciFindNextSecondaryExtension(IN PSINGLE_LIST_ENTRY ListHead, IN PCI_SIGNATURE ExtensionType)
enum _PCI_SIGNATURE PCI_SIGNATURE
struct _PCI_PDO_EXTENSION * PPCI_PDO_EXTENSION
VOID NTAPI PcipLinkSecondaryExtension(IN PSINGLE_LIST_ENTRY List, IN PVOID Lock, IN PPCI_SECONDARY_EXTENSION SecondaryExtension, IN PCI_SIGNATURE ExtensionType, IN PVOID Destructor)
#define PCI_IS_ROOT_FDO(x)
#define ExAllocatePoolWithTag(hernya, size, tag)
PPCI_INTERFACE PciInterfaces[]
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
#define ExFreePoolWithTag(_P, _T)
#define _swprintf(buf, format,...)
#define CM_RESOURCE_PORT_POSITIVE_DECODE
#define CM_RESOURCE_MEMORY_READ_WRITE
#define CM_RESOURCE_PORT_10_BIT_DECODE
NTSYSAPI NTSTATUS NTAPI RtlGetNextRange(_Inout_ PRTL_RANGE_LIST_ITERATOR Iterator, _Outptr_ PRTL_RANGE *Range, _In_ BOOLEAN MoveForwards)
NTSYSAPI NTSTATUS NTAPI RtlGetFirstRange(_In_ PRTL_RANGE_LIST RangeList, _Out_ PRTL_RANGE_LIST_ITERATOR Iterator, _Outptr_ PRTL_RANGE *Range)
#define UNREFERENCED_PARAMETER(P)
#define CmResourceTypeNull
#define CmResourceTypeMemory
#define CmResourceTypePort
PPCI_FDO_EXTENSION BusFdoExtension
PCI_SECONDARY_EXTENSION Header
ARBITER_INSTANCE CommonInstance
CM_PARTIAL_RESOURCE_LIST PartialResourceList
INTERFACE_TYPE InterfaceType
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
CM_FULL_RESOURCE_DESCRIPTOR List[1]
PCI_INTERFACE_INITIALIZER Initializer
#define RtlZeroMemory(Destination, Length)
_In_ UCXUSBDEVICE _In_ ULONG Interface
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INSUFFICIENT_RESOURCES
_In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR Iterator
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_WMI_INSTANCE_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_opt_ WDFWMIINSTANCE * Instance
#define CmResourceTypeMemoryLarge
@ ArbiterRequestLegacyAssigned
@ ArbiterRequestLegacyReported
#define PCI_TYPE1_ADDRESSES
#define ARBITER_FLAG_BOOT_CONFIG
struct _ARBITER_INTERFACE ARBITER_INTERFACE