ReactOS 0.4.17-dev-806-gffa4164
arbiter.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Arbitration Library
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Generic Arbiter Library
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
10#define TAG_ARBITER 'ibrA'
11
12/* The top of the space an arbiter addresses; ranges are inclusive */
13#define ARBITER_MAXIMUM_ADDRESS ((ULONGLONG)~0ULL)
14
15/*
16 * ARBITER_ALTERNATIVE.Priority:
17 * The arbiter allocation engine walks the alternatives in increasing priority.
18 * An ordinary alternative's priority is its ordering-list index biased by one
19 * (except for IO_RESOURCE_PREFERRED, so preferred ranges sort first).
20 * Once the orderings are exhausted it gets one final whole-window pass
21 * at (PREFERRED_)RESERVED before getting set to EXHAUSTED.
22 *
23 * Public as any driver can modify these of any range that's passed down.
24 */
25#define ARBITER_PRIORITY_NULL 0x00000000
26#define ARBITER_PRIORITY_PREFERRED_RESERVED 0x7FFFFFFD
27#define ARBITER_PRIORITY_RESERVED 0x7FFFFFFE
28#define ARBITER_PRIORITY_EXHAUSTED 0x7FFFFFFF
29
30/* ARBITER_ALTERNATIVE.Flags */
31#define ARBITER_ALTERNATIVE_FLAG_SHARED 0x00000001 // CmResourceShareShared
32#define ARBITER_ALTERNATIVE_FLAG_FIXED 0x00000002 // one placement only
33#define ARBITER_ALTERNATIVE_FLAG_BADRANGE 0x00000004 // Maximum < Minimum
34#define ARBITER_ALTERNATIVE_FLAG_INACCESSIBLE_OK 0x00000008 // can be placed over inaccessible ranges
35
36/*
37 * Range attribute bits
38 *
39 * ARBITER_RANGE_BOOT_ALLOCATED:
40 * Marks a firmware boot configuration
41
42 * ARBITER_RANGE_SHARED_DRIVER:
43 * Marks a range with a CmResourceShareDriverExclusive
44 *
45 * ARBITER_RANGE_PORT_ALIAS:
46 * Marks a phantom I/O-port range that a partially-decoding ISA card shadows,
47 * rather than one the device asked for. Set by the root port arbiter.
48 *
49 * ARBITER_RANGE_INACCESSIBLE:
50 * Marks a range the firmware reported as inaccessible
51 * CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE
52 */
53#define ARBITER_RANGE_BOOT_ALLOCATED 0x01
54#define ARBITER_RANGE_SHARED_DRIVER 0x02
55#define ARBITER_RANGE_PORT_ALIAS 0x10
56#define ARBITER_RANGE_INACCESSIBLE 0x40
57
58/* ARBITER_ALLOCATION_STATE.Flags */
59#define ARBITER_STATE_FLAG_BOOT 0x0004 // reserving a firmware boot config
60#define ARBITER_STATE_FLAG_NULL_CONFLICT_OK 0x0008 // a NULL-owner conflict is OK
61#define ARBITER_STATE_FLAG_WORKSPACE 0x0010 // WorkSpace holds a pool block to free
62#define ARBITER_STATE_FLAG_MCFG_CONFLICT 0x0020 // blocked by the MMCONFIG window
63
65{
68#if (NTDDI_VERSION >= NTDDI_VISTA) || defined(__REACTOS__)
71#else
74#endif
80
82{
96
97typedef struct _ARBITER_ORDERING
98{
102
104{
109
111
112typedef NTSTATUS
114 _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
115 _Out_ PUINT64 OutMinimumAddress,
116 _Out_ PUINT64 OutMaximumAddress,
117 _Out_ PUINT64 OutLength,
118 _Out_ PUINT64 OutAlignment
119);
120
121typedef NTSTATUS
123 _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
126);
127
128typedef NTSTATUS
132 _Out_ PUINT64 OutLength
133);
134
135typedef INT32
137 _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor
138);
139
140#if (NTDDI_VERSION >= NTDDI_VISTA)
141typedef NTSTATUS
143 _In_ PARBITER_INSTANCE Arbiter,
145);
146
147typedef NTSTATUS
149 _In_ PARBITER_INSTANCE Arbiter,
151);
152
153typedef NTSTATUS
155 _In_ PARBITER_INSTANCE Arbiter,
157);
158
159typedef NTSTATUS
161 _In_ PARBITER_INSTANCE Arbiter,
163);
164
165typedef NTSTATUS
167 _In_ PARBITER_INSTANCE Arbiter,
169);
170
171typedef NTSTATUS
173 _In_ PARBITER_INSTANCE Arbiter,
175);
176
177#else
178typedef NTSTATUS
180 _In_ PARBITER_INSTANCE Arbiter,
181 _Inout_ PLIST_ENTRY ArbitrationList
182);
183
184typedef NTSTATUS
186 _In_ PARBITER_INSTANCE Arbiter,
187 _Inout_ PLIST_ENTRY ArbitrationList
188);
189
190typedef NTSTATUS
192 _In_ PARBITER_INSTANCE Arbiter,
193 _Inout_ PLIST_ENTRY ArbitrationList
194);
195
196typedef NTSTATUS
198 _In_ PARBITER_INSTANCE Arbiter,
199 _In_ PLIST_ENTRY ArbitrationList
200);
201
202typedef NTSTATUS
204 _In_ PARBITER_INSTANCE Arbiter,
206 _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource,
207 _Out_ PULONG ConflictCount,
209);
210
211typedef NTSTATUS
213 _In_ PARBITER_INSTANCE Arbiter,
216);
217#endif // (NTDDI_VERSION >= NTDDI_VISTA)
218
219typedef NTSTATUS
221 _In_ PARBITER_INSTANCE Arbiter
222);
223
224typedef NTSTATUS
226 _In_ PARBITER_INSTANCE Arbiter
227);
228
229typedef NTSTATUS
231 _In_ PARBITER_INSTANCE Arbiter,
232 _In_ PCM_RESOURCE_LIST StartResources
233);
234
235typedef NTSTATUS
237 _In_ PARBITER_INSTANCE Arbiter,
239);
240
241typedef NTSTATUS
243 _In_ PARBITER_INSTANCE Arbiter,
245);
246
247typedef BOOLEAN
249 _In_ PARBITER_INSTANCE Arbiter,
251);
252
253typedef BOOLEAN
255 _In_ PARBITER_INSTANCE Arbiter,
257);
258
259typedef VOID
261 _In_ PARBITER_INSTANCE Arbiter,
263);
264
265typedef VOID
267 _In_ PARBITER_INSTANCE Arbiter,
269);
270
271typedef BOOLEAN
273 _In_ PARBITER_INSTANCE Arbiter,
275);
276
277typedef NTSTATUS
279 _Out_ PIO_RESOURCE_DESCRIPTOR OutIoDescriptor,
280 _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor
281);
282
283#if (NTDDI_VERSION >= NTDDI_VISTA)
284typedef NTSTATUS
286 _In_ PARBITER_INSTANCE Arbiter,
287 _In_ ULONG DescriptorCount,
289 _Inout_ PRTL_RANGE_LIST RangeList
290);
291#endif
292
293typedef struct _ARBITER_INSTANCE
294{
298#if (NTDDI_VERSION >= NTDDI_VISTA)
299 PCWSTR OrderingName; // Vista+: selects registry AllocationOrder<OrderingName>
300#endif
301 CM_RESOURCE_TYPE ResourceType;
330#if (NTDDI_VERSION >= NTDDI_VISTA)
332#endif
334#if (NTDDI_VERSION >= NTDDI_VISTA)
336#endif
341#if (NTDDI_VERSION >= NTDDI_VISTA) && (NTDDI_VERSION < NTDDI_WINBLUE)
342 WCHAR PdoDescriptionString[336];
343 CHAR PdoSymbolicNameString[672];
344 WCHAR PdoAddressString[1];
345#endif
347
348CODE_SEG("PAGE")
350NTAPI
353 _In_ PDEVICE_OBJECT BusDeviceObject,
354 _In_ CM_RESOURCE_TYPE ResourceType,
355 _In_ PCWSTR ArbiterName,
356 _In_ PCWSTR OrderName,
357 _In_ PARB_TRANSLATE_ORDERING TranslateOrderingFunction
358);
359
360CODE_SEG("PAGE")
361VOID
362NTAPI
364 _In_ PARBITER_INSTANCE Arbiter
365);
366
367CODE_SEG("PAGE")
368VOID
369NTAPI
372);
373
374CODE_SEG("PAGE")
376NTAPI
378 _Inout_ PARBITER_ORDERING_LIST OrderingList,
380 _In_ UINT64 End
381);
382
383CODE_SEG("PAGE")
385NTAPI
388 _In_ PCWSTR AllocationOrderName,
389 _In_ PCWSTR ReservedResourcesName,
390 _In_opt_ PARB_TRANSLATE_ORDERING TranslateOrderingFunction
391);
392
393/* The generic dispatch entry point (installed as ARBITER_INTERFACE.ArbiterHandler). */
394CODE_SEG("PAGE")
396NTAPI
401);
402
403#if (NTDDI_VERSION >= NTDDI_VISTA)
404CODE_SEG("PAGE")
406NTAPI
408 _In_ PARBITER_INSTANCE Arbiter,
410);
411
412CODE_SEG("PAGE")
414NTAPI
416 _In_ PARBITER_INSTANCE Arbiter,
418);
419
420CODE_SEG("PAGE")
422NTAPI
424 _In_ PARBITER_INSTANCE Arbiter,
426);
427
428CODE_SEG("PAGE")
430NTAPI
432 _In_ PARBITER_INSTANCE Arbiter,
434);
435
436#else // (NTDDI_VERSION < NTDDI_VISTA)
437
438CODE_SEG("PAGE")
440NTAPI
442 _In_ PARBITER_INSTANCE Arbiter,
443 _Inout_ PLIST_ENTRY ArbitrationList
444);
445
446CODE_SEG("PAGE")
448NTAPI
450 _In_ PARBITER_INSTANCE Arbiter,
451 _Inout_ PLIST_ENTRY ArbitrationList
452);
453
454CODE_SEG("PAGE")
456NTAPI
458 _In_ PARBITER_INSTANCE Arbiter,
459 _Inout_ PLIST_ENTRY ArbitrationList
460);
461
462CODE_SEG("PAGE")
464NTAPI
466 _In_ PARBITER_INSTANCE Arbiter,
468 _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource,
469 _Out_ PULONG ConflictCount,
471);
472#endif // (NTDDI_VERSION >= NTDDI_VISTA)
473
474CODE_SEG("PAGE")
476NTAPI
478 _In_ PARBITER_INSTANCE Arbiter
479);
480
481CODE_SEG("PAGE")
483NTAPI
485 _In_ PARBITER_INSTANCE Arbiter
486);
487
488CODE_SEG("PAGE")
490NTAPI
492 _In_ PARBITER_INSTANCE Arbiter,
494);
495
496CODE_SEG("PAGE")
498NTAPI
500 _In_ PARBITER_INSTANCE Arbiter,
502);
503
504CODE_SEG("PAGE")
505VOID
506NTAPI
508 _In_ PARBITER_INSTANCE Arbiter,
510);
511
512CODE_SEG("PAGE")
513VOID
514NTAPI
516 _In_ PARBITER_INSTANCE Arbiter,
518);
519
520CODE_SEG("PAGE")
522NTAPI
524 _In_ PARBITER_INSTANCE Arbiter,
526);
527
528CODE_SEG("PAGE")
530NTAPI
532 _Inout_ PLIST_ENTRY ArbitrationList);
533
534CODE_SEG("PAGE")
536NTAPI
538 _In_ PARBITER_INSTANCE Arbiter,
540);
541
542CODE_SEG("PAGE")
544NTAPI
546 _In_ PARBITER_INSTANCE Arbiter,
547 _In_ PCM_RESOURCE_LIST StartResources
548);
549
550CODE_SEG("PAGE")
552NTAPI
554 _In_ PARBITER_INSTANCE Arbiter,
556);
557
558CODE_SEG("PAGE")
560NTAPI
562 _In_ PARBITER_INSTANCE Arbiter,
563 _In_ PCWSTR OrderingName,
564 _Inout_ PRTL_RANGE_LIST RangeList
565);
566
567CODE_SEG("PAGE")
569NTAPI
571 _In_ PARBITER_INSTANCE Arbiter,
572 _Inout_ PRTL_RANGE_LIST RangeList
573);
574
576NTAPI
579 _In_ ULONGLONG End
580);
581
582CODE_SEG("PAGE")
583VOID
584NTAPI
586 _In_ PARBITER_INSTANCE Arbiter,
588 _In_ ULONGLONG End,
590 _In_ BOOLEAN Shared
591);
592
593CODE_SEG("PAGE")
594VOID
595NTAPI
597 _In_ PARBITER_INSTANCE Arbiter,
599);
600
601#if (NTDDI_VERSION >= NTDDI_VISTA)
602CODE_SEG("PAGE")
604NTAPI
606 _In_ PARBITER_INSTANCE Arbiter,
608);
609
610CODE_SEG("PAGE")
612NTAPI
614 _In_ PARBITER_INSTANCE Arbiter,
616);
617
618CODE_SEG("PAGE")
620NTAPI
622 _In_ PARBITER_INSTANCE Arbiter,
625 _Inout_ PRTL_RANGE_LIST RangeList
626);
627#else
628CODE_SEG("PAGE")
630NTAPI
632 _In_ PARBITER_INSTANCE Arbiter,
633 _In_ PLIST_ENTRY ArbitrationList
634);
635
636CODE_SEG("PAGE")
638NTAPI
640 _In_ PARBITER_INSTANCE Arbiter,
643);
644#endif
#define CODE_SEG(...)
static _Out_opt_ PULONGLONG Start
#define VOID
Definition: acefi.h:82
unsigned short UINT16
Definition: actypes.h:129
unsigned char BOOLEAN
Definition: actypes.h:127
COMPILER_DEPENDENT_UINT64 UINT64
Definition: actypes.h:131
NTSTATUS NTAPI ArbiterLibBootAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_BOOT_ALLOCATION_PARAMETERS Parameters)
The BootAllocation action: records every entry's firmware boot configuration in the committed allocat...
Definition: transaction.c:684
BOOLEAN(NTAPI * PARB_FIND_SUITABLE_RANGE)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:254
NTSTATUS(NTAPI * PARB_ALLOCATE_ENTRY)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:242
BOOLEAN NTAPI ArbiterLibGetNextAllocationRange(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Moves the working window to the next candidate range, walking the entry's alternatives in priority or...
Definition: range.c:562
NTSTATUS NTAPI ArbiterLibInitializeRangeList(_In_ PARBITER_INSTANCE Arbiter, _In_ ULONG ResourceCount, _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Resources, _Inout_ PRTL_RANGE_LIST RangeList)
The InitializeRangeList callback default.
Definition: handler.c:440
struct _ARBITER_ORDERING_LIST * PARBITER_ORDERING_LIST
NTSTATUS(NTAPI * PARB_ADD_RESERVED)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ADD_RESERVED_PARAMETERS Parameters)
Definition: arbiter.h:172
NTSTATUS(NTAPI * PARB_ROLLBACK_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter)
Definition: arbiter.h:225
NTSTATUS NTAPI ArbiterLibAllocateEntry(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Places the whole stack of entries with backtracking: when an entry cannot be placed,...
Definition: entry.c:223
VOID(NTAPI * PARB_ADD_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:260
struct _ARBITER_ALTERNATIVE * PARBITER_ALTERNATIVE
struct _ARBITER_ALLOCATION_STATE ARBITER_ALLOCATION_STATE
NTSTATUS NTAPI ArbiterLibAddInaccessibleAllocationRange(_In_ PARBITER_INSTANCE Arbiter, _In_ PCWSTR OrderingName, _Inout_ PRTL_RANGE_LIST RangeList)
Carves the firmware-reported inaccessible ranges (Arbiters\InaccessibleRange<OrderingName>) out of a ...
Definition: ordering.c:634
NTSTATUS NTAPI ArbiterLibRetestAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_RETEST_ALLOCATION_PARAMETERS Parameters)
The RetestAllocation action: deterministically re-establishes the placements a previous test chose,...
Definition: transaction.c:483
NTSTATUS(NTAPI * PARB_TRANSLATE_ORDERING)(_Out_ PIO_RESOURCE_DESCRIPTOR OutIoDescriptor, _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
Definition: arbiter.h:278
struct _ARBITER_ALLOCATION_STATE * PARBITER_ALLOCATION_STATE
NTSTATUS(NTAPI * PARB_INITIALIZE_RANGE_LIST)(_In_ PARBITER_INSTANCE Arbiter, _In_ ULONG DescriptorCount, _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptors, _Inout_ PRTL_RANGE_LIST RangeList)
Definition: arbiter.h:285
NTSTATUS NTAPI ArbiterLibTestAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_TEST_ALLOCATION_PARAMETERS Parameters)
The TestAllocation action: tentatively places every entry of the arbitration list,...
Definition: transaction.c:447
NTSTATUS NTAPI ArbiterLibAddReserved(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ADD_RESERVED_PARAMETERS Parameters)
The AddReserved action default: nothing to reserve.
Definition: handler.c:112
BOOLEAN(NTAPI * PARB_OVERRIDE_CONFLICT)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:272
NTSTATUS(NTAPI * PARB_PREPROCESS_ENTRY)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:236
VOID NTAPI ArbiterLibBacktrackAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Undoes the last AddAllocation performed for this entry.
Definition: range.c:866
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.
Definition: range.c:717
NTSTATUS NTAPI ArbiterLibQueryArbitrate(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_QUERY_ARBITRATE_PARAMETERS Parameters)
The QueryArbitrate action default: reports that this arbiter is willing to arbitrate the given list.
Definition: handler.c:73
struct _ARBITER_ORDERING * PARBITER_ORDERING
NTSTATUS(NTAPI * PARB_RETEST_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_RETEST_ALLOCATION_PARAMETERS Parameters)
Definition: arbiter.h:148
NTSTATUS(NTAPI * PARB_QUERY_ARBITRATE)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_QUERY_ARBITRATE_PARAMETERS Parameters)
Definition: arbiter.h:160
BOOLEAN(NTAPI * PARB_GET_NEXT_ALLOCATION_RANGE)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:248
NTSTATUS NTAPI ArbiterLibCommitAllocation(_In_ PARBITER_INSTANCE Arbiter)
The CommitAllocation action: the tentative PossibleAllocation becomes the committed Allocation,...
Definition: transaction.c:515
VOID NTAPI ArbiterLibDeleteInstance(_In_ PARBITER_INSTANCE Arbiter)
Definition: arbiter.c:22
NTSTATUS NTAPI ArbiterLibRollbackAllocation(_In_ PARBITER_INSTANCE Arbiter)
The RollbackAllocation action: discards the tentative allocation; the committed one is untouched.
Definition: transaction.c:543
NTSTATUS NTAPI ArbiterLibSortArbitrationList(_Inout_ PLIST_ENTRY ArbitrationList)
Orders an arbitration list most-constrained first, so fixed requirements are placed before flexible o...
Definition: entry.c:71
NTSTATUS(NTAPI * PARB_PACK_RESOURCE)(_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor, _In_ UINT64 Start, _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
Definition: arbiter.h:122
NTSTATUS NTAPI ArbiterLibPreprocessEntry(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Per-entry hook invoked before each placement attempt. The library default does nothing and succeeds.
Definition: entry.c:38
NTSTATUS NTAPI ArbiterLibStartArbiter(_In_ PARBITER_INSTANCE Arbiter, _In_ PCM_RESOURCE_LIST StartResources)
The StartArbiter action default: seeds the committed allocation with the windows the bus decodes,...
Definition: handler.c:470
NTSTATUS NTAPI ArbiterLibAddMmConfigRangeAsBootReserved(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PRTL_RANGE_LIST RangeList)
Reserves the PCI-Express enhanced-config (MMCONFIG / ECAM) MMIO window (Arbiters\ReservedResources\Mm...
Definition: ordering.c:663
NTSTATUS NTAPI ArbiterLibDefaultAssignmentOrdering(_Inout_ PARBITER_INSTANCE Arbiter, _In_ PCWSTR AllocationOrderName, _In_ PCWSTR ReservedResourcesName, _In_opt_ PARB_TRANSLATE_ORDERING TranslateOrderingFunction)
Builds the arbiter's allocation ordering from the registry policy, most-preferred window first.
Definition: ordering.c:571
BOOLEAN NTAPI ArbiterLibOverrideConflict(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
The OverrideConflict default, the last of the conflict escapes: grants a FIXED requirement whose wind...
Definition: range.c:48
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...
Definition: handler.c:164
struct _ARBITER_ORDERING ARBITER_ORDERING
struct _ARBITER_INSTANCE ARBITER_INSTANCE
VOID NTAPI ArbiterLibReleaseResources(_In_ PARBITER_INSTANCE Arbiter, _In_ PVOID Owner)
Releases every committed range owned by Owner.
Definition: handler.c:561
BOOLEAN NTAPI ArbiterLibIsConflictWithMmConfigRange(_In_ ULONGLONG Start, _In_ ULONGLONG End)
Determines whether a range overlaps the recorded MMCONFIG window.
Definition: ordering.c:689
struct _ARBITER_INSTANCE * PARBITER_INSTANCE
Definition: arbiter.h:110
NTSTATUS(NTAPI * PARB_UNPACK_RESOURCE)(_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor, _Out_ PUINT64 Start, _Out_ PUINT64 OutLength)
Definition: arbiter.h:129
NTSTATUS(NTAPI * PARB_BOOT_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_BOOT_ALLOCATION_PARAMETERS Parameters)
Definition: arbiter.h:154
VOID NTAPI ArbiterLibAddAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Records the chosen placement in the arbiter's tentative allocation list, owned by the requesting devi...
Definition: range.c:828
struct _ARBITER_ALTERNATIVE ARBITER_ALTERNATIVE
VOID(NTAPI * PARB_BACKTRACK_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:266
VOID NTAPI ArbiterLibFreeOrderingList(_Inout_ PARBITER_ORDERING_LIST OrderingList)
Definition: ordering.c:60
NTSTATUS(NTAPI * PARB_UNPACK_REQUIREMENT)(_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor, _Out_ PUINT64 OutMinimumAddress, _Out_ PUINT64 OutMaximumAddress, _Out_ PUINT64 OutLength, _Out_ PUINT64 OutAlignment)
Definition: arbiter.h:113
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.
Definition: handler.c:528
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)
Definition: arbiter.c:69
NTSTATUS(NTAPI * PARB_QUERY_CONFLICT)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_QUERY_CONFLICT_PARAMETERS Parameters)
Definition: arbiter.h:166
NTSTATUS(NTAPI * PARB_START_ARBITER)(_In_ PARBITER_INSTANCE Arbiter, _In_ PCM_RESOURCE_LIST StartResources)
Definition: arbiter.h:230
NTSTATUS NTAPI ArbiterLibAddOrdering(_Inout_ PARBITER_ORDERING_LIST OrderingList, _In_ UINT64 Start, _In_ UINT64 End)
Definition: ordering.c:78
INT32(NTAPI * PARB_SCORE_REQUIREMENT)(_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
Definition: arbiter.h:136
NTSTATUS NTAPI ArbiterLibQueryConflict(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_QUERY_CONFLICT_PARAMETERS Parameters)
The QueryConflict action: reports which devices' committed ranges collide with a candidate resource.
Definition: transaction.c:937
NTSTATUS(NTAPI * PARB_COMMIT_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter)
Definition: arbiter.h:220
NTSTATUS(NTAPI * PARB_TEST_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_TEST_ALLOCATION_PARAMETERS Parameters)
Definition: arbiter.h:142
struct _ARBITER_ORDERING_LIST ARBITER_ORDERING_LIST
LONG NTSTATUS
Definition: precomp.h:26
unsigned __int64 * PUINT64
Definition: basetsd.h:181
PDEVICE_OBJECT PhysicalDeviceObject
Definition: btrfs_drv.h:1157
_Acquires_exclusive_lock_ Resource _Acquires_shared_lock_ Resource _Inout_ PERESOURCE Resource
Definition: cdprocs.h:843
_In_ HANDLE _In_ CONST PDXGKMDT_OPM_GET_INFO_PARAMETERS Parameters
Definition: dispmprt.h:321
#define NTSTATUS
Definition: precomp.h:19
static ULONG ResourceCount
Definition: inbv.c:50
_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
Definition: rtlfuncs.h:1629
BOOLEAN(NTAPI * PRTL_CONFLICT_RANGE_CALLBACK)(PVOID Context, struct _RTL_RANGE *Range)
Definition: rtltypes.h:705
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
short WCHAR
Definition: pedump.c:58
#define BOOLEAN
Definition: pedump.c:73
char CHAR
Definition: pedump.c:57
_In_ PVOID Context
Definition: storport.h:2269
PARBITER_ALTERNATIVE CurrentAlternative
Definition: arbiter.h:88
UCHAR RangeAvailableAttributes
Definition: arbiter.h:93
PARBITER_ALTERNATIVE Alternatives
Definition: arbiter.h:90
PARBITER_LIST_ENTRY Entry
Definition: arbiter.h:87
PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: arbiter.h:77
PARB_RETEST_ALLOCATION RetestAllocation
Definition: arbiter.h:315
BOOLEAN TransactionInProgress
Definition: arbiter.h:333
PARB_UNPACK_RESOURCE UnpackResource
Definition: arbiter.h:312
ULONG ReferenceCount
Definition: arbiter.h:306
PARB_OVERRIDE_CONFLICT OverrideConflict
Definition: arbiter.h:329
PARB_SCORE_REQUIREMENT ScoreRequirement
Definition: arbiter.h:313
PRTL_RANGE_LIST Allocation
Definition: arbiter.h:302
PKEVENT MutexEvent
Definition: arbiter.h:296
PARB_START_ARBITER StartArbiter
Definition: arbiter.h:322
PARBITER_INTERFACE Interface
Definition: arbiter.h:307
PARB_ALLOCATE_ENTRY AllocateEntry
Definition: arbiter.h:324
PRTL_CONFLICT_RANGE_CALLBACK ConflictCallback
Definition: arbiter.h:340
PDEVICE_OBJECT BusDeviceObject
Definition: arbiter.h:338
CM_RESOURCE_TYPE ResourceType
Definition: arbiter.h:301
PARB_UNPACK_REQUIREMENT UnpackRequirement
Definition: arbiter.h:310
ARBITER_ORDERING_LIST ReservedList
Definition: arbiter.h:305
PARB_QUERY_ARBITRATE QueryArbitrate
Definition: arbiter.h:319
PARB_INITIALIZE_RANGE_LIST InitializeRangeList
Definition: arbiter.h:331
PARB_PREPROCESS_ENTRY PreprocessEntry
Definition: arbiter.h:323
PARB_FIND_SUITABLE_RANGE FindSuitableRange
Definition: arbiter.h:326
PARBITER_ALLOCATION_STATE AllocationStack
Definition: arbiter.h:309
UINT32 Signature
Definition: arbiter.h:295
PARB_GET_NEXT_ALLOCATION_RANGE GetNextAllocationRange
Definition: arbiter.h:325
PARB_BOOT_ALLOCATION BootAllocation
Definition: arbiter.h:318
PVOID ConflictCallbackContext
Definition: arbiter.h:339
ULONG AllocationStackMaxSize
Definition: arbiter.h:308
PARB_ADD_RESERVED AddReserved
Definition: arbiter.h:321
PARB_TEST_ALLOCATION TestAllocation
Definition: arbiter.h:314
PARB_ADD_ALLOCATION AddAllocation
Definition: arbiter.h:327
PCWSTR OrderingName
Definition: arbiter.h:299
PARB_QUERY_CONFLICT QueryConflict
Definition: arbiter.h:320
PRTL_RANGE_LIST PossibleAllocation
Definition: arbiter.h:303
PKEVENT TransactionEvent
Definition: arbiter.h:335
PARB_COMMIT_ALLOCATION CommitAllocation
Definition: arbiter.h:316
ARBITER_ORDERING_LIST OrderingList
Definition: arbiter.h:304
PARB_PACK_RESOURCE PackResource
Definition: arbiter.h:311
PARB_BACKTRACK_ALLOCATION BacktrackAllocation
Definition: arbiter.h:328
PARB_ROLLBACK_ALLOCATION RollbackAllocation
Definition: arbiter.h:317
Definition: iotypes.h:4633
PARBITER_ORDERING Orderings
Definition: arbiter.h:107
UINT64 Start
Definition: arbiter.h:99
Definition: typedefs.h:120
int32_t INT32
Definition: typedefs.h:58
uint32_t * PULONG
Definition: typedefs.h:59
const uint16_t * PCWSTR
Definition: typedefs.h:57
unsigned char UCHAR
Definition: typedefs.h:53
#define NTAPI
Definition: typedefs.h:36
uint64_t ULONGLONG
Definition: typedefs.h:67
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t UINT32
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
Definition: wdfiotarget.h:510
_Reserved_ PVOID Reserved
Definition: winddi.h:3974
enum _ARBITER_ACTION ARBITER_ACTION