37#define PORT_ALIAS_STRIDE_10_BIT 0x400
38#define PORT_ALIAS_STRIDE_12_BIT 0x1000
39#define PORT_MAX_ADDRESS 0xFFFF
199 if (*OutAlignment == 0)
234 CmDescriptor->Type = IoDescriptor->Type;
235 CmDescriptor->Flags = IoDescriptor->Flags;
236 CmDescriptor->ShareDisposition = IoDescriptor->ShareDisposition;
238 CmDescriptor->u.Generic.Start.QuadPart =
Start;
239 CmDescriptor->u.Generic.Length = IoDescriptor->u.Generic.Length;
306 UINT64 Minimum, Maximum, AlignedMinimum;
318 if (AlignedMinimum < Minimum || AlignedMinimum > Maximum)
322 Span = Maximum - AlignedMinimum;
368 *OutIoDescriptor = *IoDescriptor;
370 SourceType = IoDescriptor->Type;
378 MinimumType = SourceType;
382 IoDescriptor->u.Generic.MinimumAddress,
383 &OutIoDescriptor->u.Generic.MinimumAddress,
386 IoDescriptor->u.Generic.MaximumAddress,
387 &OutIoDescriptor->u.Generic.MaximumAddress,
460 PVOID Owner = ArbState->Entry ? ArbState->Entry->PhysicalDeviceObject :
NULL;
473 ArbState->RangeAttributes,
478 if (Alternative ==
NULL)
482 Span = ArbState->End - ArbState->Start;
484 Alias = ArbState->Start;
521 PVOID Owner = ArbState->Entry ? ArbState->Entry->PhysicalDeviceObject :
NULL;
527 if (Alternative !=
NULL)
529 Span = ArbState->End - ArbState->Start;
531 Alias = ArbState->Start;
static _Out_opt_ PULONGLONG _Out_opt_ PULONGLONG MinimumAddress
static _Out_opt_ PULONGLONG Start
static _Out_opt_ PULONGLONG _Out_opt_ PULONGLONG _Out_opt_ PULONGLONG MaximumAddress
COMPILER_DEPENDENT_UINT64 UINT64
NTSTATUS NTAPI ArbiterLibInitializeInstance(_Inout_ PARBITER_INSTANCE Arbiter, _In_ PDEVICE_OBJECT BusDeviceObject, _In_ CM_RESOURCE_TYPE ResourceType, _In_ PCWSTR ArbiterName, _In_ PCWSTR OrderName, _In_ PARB_TRANSLATE_ORDERING TranslateOrderingFunction)
#define ARBITER_ALTERNATIVE_FLAG_SHARED
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.
#define ARBITER_RANGE_PORT_ALIAS
#define ARBITER_RANGE_BOOT_ALLOCATED
static VOID NTAPI IopArbPortAddAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
The Root Port arbiter's AddAllocation: records the granted range in the tentative allocation,...
static VOID NTAPI IopArbPortBacktrackAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
The Root Port arbiter's BacktrackAllocation: the exact inverse of IopArbPortAddAllocation.
static NTSTATUS NTAPI IopArbPortPackResource(_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor, _In_ UINT64 Start, _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
Materialises the arbiter's chosen placement as an assigned CM descriptor. The PackResource callback o...
static NTSTATUS NTAPI IopArbPortUnpackResource(_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor, _Out_ PUINT64 Start, _Out_ PUINT64 OutLength)
Reads the placement back out of an already-assigned descriptor (a firmware boot configuration,...
static NTSTATUS NTAPI IopArbPortTranslateOrdering(_Out_ PIO_RESOURCE_DESCRIPTOR OutIoDescriptor, _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
Translates one registry allocation-ordering window from the bus-relative addresses it is written in i...
ULONGLONG NTAPI RtlIoDecodeMemIoResource(_In_ PIO_RESOURCE_DESCRIPTOR Descriptor, _Out_opt_ PULONGLONG Alignment, _Out_opt_ PULONGLONG MinimumAddress, _Out_opt_ PULONGLONG MaximumAddress)
#define PORT_ALIAS_STRIDE_10_BIT
static BOOLEAN IopArbPortGetNextAlias(_In_ USHORT DescriptorFlags, _In_ UINT64 LastAlias, _Out_ PUINT64 NextAlias)
Walks the decode-alias chain of a port range: given the previous alias, or the granted range's start ...
ARBITER_INSTANCE IopRootPortArbiter
NTSTATUS NTAPI IopArbPortInitialize(VOID)
Initialize the RootPortArbiter.
ULONGLONG NTAPI RtlCmDecodeMemIoResource(_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor, _Out_opt_ PULONGLONG Start)
#define PORT_ALIAS_STRIDE_12_BIT
static NTSTATUS NTAPI IopArbPortUnpackRequirements(_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor, _Out_ PUINT64 OutMinimumAddress, _Out_ PUINT64 OutMaximumAddress, _Out_ PUINT64 OutLength, _Out_ PUINT64 OutAlignment)
Extracts the placement window from one I/O port requirement. The UnpackRequirement callback of the Ro...
static INT32 NTAPI IopArbPortScoreRequirement(_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
Scores how constrained a requirement is: the number of distinct aligned addresses it could be placed ...
static NTSTATUS IopArbPortTranslateAddress(_In_ UCHAR SourceType, _In_ PHYSICAL_ADDRESS SourceAddress, _Out_ PPHYSICAL_ADDRESS TranslatedAddress, _Out_ PUCHAR TranslatedType)
Translates one bus-relative address to a system-physical one on the ISA bus, and reports the space it...
static BOOLEAN NTAPI IopArbPortFindSuitableRange(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
The Root Port arbiter's FindSuitableRange: the engine search, incremented for a device asking to keep...
unsigned __int64 * PUINT64
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
#define NT_SUCCESS(StatCode)
union Alignment_ Alignment
BOOLEAN NTAPI HalTranslateBusAddress(IN INTERFACE_TYPE InterfaceType, IN ULONG BusNumber, IN PHYSICAL_ADDRESS BusAddress, IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress)
#define CM_RESOURCE_PORT_12_BIT_DECODE
#define CM_RESOURCE_PORT_10_BIT_DECODE
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ SaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ OwnerSize PSID Owner
NTSYSAPI NTSTATUS NTAPI RtlDeleteRange(_Inout_ PRTL_RANGE_LIST RangeList, _In_ ULONGLONG Start, _In_ ULONGLONG End, _In_ PVOID Owner)
NTSYSAPI NTSTATUS NTAPI RtlAddRange(_Inout_ PRTL_RANGE_LIST RangeList, _In_ ULONGLONG Start, _In_ ULONGLONG End, _In_ UCHAR Attributes, _In_ ULONG Flags, _In_opt_ PVOID UserData, _In_opt_ PVOID Owner)
#define RTL_RANGE_LIST_ADD_IF_CONFLICT
#define RTL_RANGE_LIST_ADD_SHARED
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define CmResourceTypeNull
#define CmResourceTypeMemory
#define CmResourceTypePort
STDMETHOD() Next(THIS_ ULONG celt, IAssociationElement *pElement, ULONG *pceltFetched) PURE
PIO_RESOURCE_DESCRIPTOR Descriptor
PARB_UNPACK_RESOURCE UnpackResource
PARB_SCORE_REQUIREMENT ScoreRequirement
PARB_UNPACK_REQUIREMENT UnpackRequirement
PARB_FIND_SUITABLE_RANGE FindSuitableRange
PARB_ADD_ALLOCATION AddAllocation
PARB_PACK_RESOURCE PackResource
PARB_BACKTRACK_ALLOCATION BacktrackAllocation
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
#define CmResourceTypeMemoryLarge
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG _Out_ PPHYSICAL_ADDRESS TranslatedAddress
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG AddressSpace
#define ARBITER_FLAG_BOOT_CONFIG
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS SourceAddress