https://git.reactos.org/?p=reactos.git;a=commitdiff;h=374f2b4d986c90610bc1f144e99ae395cca72837

commit 374f2b4d986c90610bc1f144e99ae395cca72837
Author:     Vadim Galyant <[email protected]>
AuthorDate: Thu Mar 26 18:45:59 2020 +0400
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Thu Apr 9 19:41:11 2020 +0200

    [NTOS][SDK:LIB] Add a Resources Arbiter library, to be used by bus drivers 
(acpi, pci), kernel and legacy hal (PIC HAL). (#2471)
---
 ntoskrnl/CMakeLists.txt                |   2 +-
 ntoskrnl/include/internal/ntoskrnl.h   |   1 +
 ntoskrnl/io/pnpmgr/arbs.c              | 123 +++++++++++++++++
 ntoskrnl/io/pnpmgr/pnpinit.c           |  52 ++++++-
 ntoskrnl/ntkrnlmp/CMakeLists.txt       |   2 +-
 ntoskrnl/ntos.cmake                    |   2 +
 sdk/lib/drivers/CMakeLists.txt         |   1 +
 sdk/lib/drivers/arbiter/CMakeLists.txt |  10 ++
 sdk/lib/drivers/arbiter/arbiter.c      |  41 ++++++
 sdk/lib/drivers/arbiter/arbiter.h      | 240 +++++++++++++++++++++++++++++++++
 10 files changed, 470 insertions(+), 4 deletions(-)

diff --git a/ntoskrnl/CMakeLists.txt b/ntoskrnl/CMakeLists.txt
index 7f301afef9b..96fcab407d9 100644
--- a/ntoskrnl/CMakeLists.txt
+++ b/ntoskrnl/CMakeLists.txt
@@ -42,7 +42,7 @@ else()
     #add_linker_script(ntoskrnl 
${REACTOS_SOURCE_DIR}/sdk/cmake/init-section.lds)
 endif()
 
-target_link_libraries(ntoskrnl cportlib csq ${PSEH_LIB} cmlib ntlsalib rtl 
${ROSSYM_LIB} libcntpr wdmguid ioevent)
+target_link_libraries(ntoskrnl cportlib csq ${PSEH_LIB} arbiter cmlib ntlsalib 
rtl ${ROSSYM_LIB} libcntpr wdmguid ioevent)
 
 if(STACK_PROTECTOR)
     target_link_libraries(ntoskrnl gcc_ssp)
diff --git a/ntoskrnl/include/internal/ntoskrnl.h 
b/ntoskrnl/include/internal/ntoskrnl.h
index 1fd0d8379c3..f0c754ffa40 100644
--- a/ntoskrnl/include/internal/ntoskrnl.h
+++ b/ntoskrnl/include/internal/ntoskrnl.h
@@ -79,6 +79,7 @@
 #include "hal.h"
 #include "hdl.h"
 #include "arch/intrin_i.h"
+#include <arbiter.h>
 
 /*
  * generic information class probing code
diff --git a/ntoskrnl/io/pnpmgr/arbs.c b/ntoskrnl/io/pnpmgr/arbs.c
new file mode 100644
index 00000000000..09bab2ad735
--- /dev/null
+++ b/ntoskrnl/io/pnpmgr/arbs.c
@@ -0,0 +1,123 @@
+/*
+ * PROJECT:         ReactOS Kernel
+ * COPYRIGHT:       GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
+ * FILE:            ntoskrnl/io/pnpmgr/arbs.c
+ * PURPOSE:         Root arbiters of the PnP manager
+ * PROGRAMMERS:     Copyright 2020 Vadim Galyant <[email protected]>
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <ntoskrnl.h>
+
+#define NDEBUG
+#include <debug.h>
+
+/* GLOBALS *******************************************************************/
+
+extern ARBITER_INSTANCE IopRootBusNumberArbiter;
+extern ARBITER_INSTANCE IopRootIrqArbiter;
+extern ARBITER_INSTANCE IopRootDmaArbiter;
+extern ARBITER_INSTANCE IopRootMemArbiter;
+extern ARBITER_INSTANCE IopRootPortArbiter;
+
+/* DATA **********************************************************************/
+
+/* FUNCTIONS *****************************************************************/
+
+/* BusNumber arbiter */
+
+NTSTATUS
+NTAPI
+IopBusNumberInitialize(VOID)
+{
+    NTSTATUS Status;
+
+    DPRINT("IopRootBusNumberArbiter %p\n", &IopRootBusNumberArbiter);
+
+    Status = ArbInitializeArbiterInstance(&IopRootBusNumberArbiter,
+                                          NULL,
+                                          CmResourceTypeBusNumber,
+                                          L"RootBusNumber",
+                                          L"Root",
+                                          NULL);
+    return Status;
+}
+
+/* Irq arbiter */
+
+NTSTATUS
+NTAPI
+IopIrqInitialize(VOID)
+{
+    NTSTATUS Status;
+
+    DPRINT("IopRootIrqArbiter %p\n", &IopRootIrqArbiter);
+
+    Status = ArbInitializeArbiterInstance(&IopRootIrqArbiter,
+                                          NULL,
+                                          CmResourceTypeInterrupt,
+                                          L"RootIRQ",
+                                          L"Root",
+                                          NULL);
+    return Status;
+}
+
+/* Dma arbiter */
+
+NTSTATUS
+NTAPI
+IopDmaInitialize(VOID)
+{
+    NTSTATUS Status;
+
+    DPRINT("IopRootDmaArbiter %p\n", &IopRootDmaArbiter);
+
+    Status = ArbInitializeArbiterInstance(&IopRootDmaArbiter,
+                                          NULL,
+                                          CmResourceTypeDma,
+                                          L"RootDMA",
+                                          L"Root",
+                                          NULL);
+    return Status;
+}
+
+/* Memory arbiter */
+
+NTSTATUS
+NTAPI
+IopMemInitialize(VOID)
+{
+    NTSTATUS Status;
+
+    DPRINT("IopRootMemArbiter %p\n", &IopRootMemArbiter);
+
+    Status = ArbInitializeArbiterInstance(&IopRootMemArbiter,
+                                          NULL,
+                                          CmResourceTypeMemory,
+                                          L"RootMemory",
+                                          L"Root",
+                                          NULL);
+    return Status;
+}
+
+/* Port arbiter */
+
+NTSTATUS
+NTAPI
+IopPortInitialize(VOID)
+{
+    NTSTATUS Status;
+
+    DPRINT("IopRootPortArbiter %p\n", &IopRootPortArbiter);
+
+    Status = ArbInitializeArbiterInstance(&IopRootPortArbiter,
+                                          NULL,
+                                          CmResourceTypePort,
+                                          L"RootPort",
+                                          L"Root",
+                                          NULL);
+    return Status;
+}
+
+/* EOF */
diff --git a/ntoskrnl/io/pnpmgr/pnpinit.c b/ntoskrnl/io/pnpmgr/pnpinit.c
index 944704aa3bd..a32192bcc39 100644
--- a/ntoskrnl/io/pnpmgr/pnpinit.c
+++ b/ntoskrnl/io/pnpmgr/pnpinit.c
@@ -24,6 +24,18 @@ PUNICODE_STRING PiInitGroupOrderTable;
 USHORT PiInitGroupOrderTableCount;
 INTERFACE_TYPE PnpDefaultInterfaceType;
 
+ARBITER_INSTANCE IopRootBusNumberArbiter;
+ARBITER_INSTANCE IopRootIrqArbiter;
+ARBITER_INSTANCE IopRootDmaArbiter;
+ARBITER_INSTANCE IopRootMemArbiter;
+ARBITER_INSTANCE IopRootPortArbiter;
+
+NTSTATUS NTAPI IopPortInitialize(VOID);
+NTSTATUS NTAPI IopMemInitialize(VOID);
+NTSTATUS NTAPI IopDmaInitialize(VOID);
+NTSTATUS NTAPI IopIrqInitialize(VOID);
+NTSTATUS NTAPI IopBusNumberInitialize(VOID);
+
 /* FUNCTIONS 
******************************************************************/
 
 INTERFACE_TYPE
@@ -38,10 +50,46 @@ NTSTATUS
 NTAPI
 IopInitializeArbiters(VOID)
 {
-     /* FIXME: TODO */
-    return STATUS_SUCCESS;
+    NTSTATUS Status;
+
+    Status = IopPortInitialize();
+    if (!NT_SUCCESS(Status))
+    {
+        DPRINT1("IopPortInitialize() return %X\n", Status);
+        return Status;
+    }
+
+    Status = IopMemInitialize();
+    if (!NT_SUCCESS(Status))
+    {
+        DPRINT1("IopMemInitialize() return %X\n", Status);
+        return Status;
+    }
+
+    Status = IopDmaInitialize();
+    if (!NT_SUCCESS(Status))
+    {
+        DPRINT1("IopDmaInitialize() return %X\n", Status);
+        return Status;
+    }
+
+    Status = IopIrqInitialize();
+    if (!NT_SUCCESS(Status))
+    {
+        DPRINT1("IopIrqInitialize() return %X\n", Status);
+        return Status;
+    }
+
+    Status = IopBusNumberInitialize();
+    if (!NT_SUCCESS(Status))
+    {
+        DPRINT1("IopBusNumberInitialize() return %X\n", Status);
+    }
+
+    return Status;
 }
 
+
 INIT_FUNCTION
 NTSTATUS
 NTAPI
diff --git a/ntoskrnl/ntkrnlmp/CMakeLists.txt b/ntoskrnl/ntkrnlmp/CMakeLists.txt
index eebdd075102..5807f794ff8 100644
--- a/ntoskrnl/ntkrnlmp/CMakeLists.txt
+++ b/ntoskrnl/ntkrnlmp/CMakeLists.txt
@@ -40,7 +40,7 @@ elseif(RUNTIME_CHECKS)
     target_link_libraries(ntkrnlmp runtmchk)
 endif()
 
-target_link_libraries(ntkrnlmp cportlib csq ${PSEH_LIB} cmlib ntlsalib rtl 
${ROSSYM_LIB} libcntpr wdmguid ioevent)
+target_link_libraries(ntkrnlmp cportlib csq ${PSEH_LIB} arbiter cmlib ntlsalib 
rtl ${ROSSYM_LIB} libcntpr wdmguid ioevent)
 add_importlibs(ntkrnlmp hal kdcom bootvid)
 add_pch(ntkrnlmp ${REACTOS_SOURCE_DIR}/ntoskrnl/include/ntoskrnl.h 
NTKRNLMP_SOURCE)
 add_dependencies(ntkrnlmp psdk bugcodes asm)
diff --git a/ntoskrnl/ntos.cmake b/ntoskrnl/ntos.cmake
index 98fb4670142..7cc68d8ac06 100644
--- a/ntoskrnl/ntos.cmake
+++ b/ntoskrnl/ntos.cmake
@@ -1,6 +1,7 @@
 
 include_directories(
     ${REACTOS_SOURCE_DIR}
+    ${REACTOS_SOURCE_DIR}/sdk/lib/drivers/arbiter
     ${REACTOS_SOURCE_DIR}/sdk/lib/cmlib
     include
     ${CMAKE_CURRENT_BINARY_DIR}/include
@@ -151,6 +152,7 @@ list(APPEND SOURCE
     ${REACTOS_SOURCE_DIR}/ntoskrnl/io/iomgr/symlink.c
     ${REACTOS_SOURCE_DIR}/ntoskrnl/io/iomgr/util.c
     ${REACTOS_SOURCE_DIR}/ntoskrnl/io/iomgr/volume.c
+    ${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/arbs.c
     ${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/plugplay.c
     ${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/pnpdma.c
     ${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/pnpinit.c
diff --git a/sdk/lib/drivers/CMakeLists.txt b/sdk/lib/drivers/CMakeLists.txt
index ec8f9317d1c..7f63a0026cb 100644
--- a/sdk/lib/drivers/CMakeLists.txt
+++ b/sdk/lib/drivers/CMakeLists.txt
@@ -1,4 +1,5 @@
 
+add_subdirectory(arbiter)
 add_subdirectory(chew)
 add_subdirectory(copysup)
 add_subdirectory(csq)
diff --git a/sdk/lib/drivers/arbiter/CMakeLists.txt 
b/sdk/lib/drivers/arbiter/CMakeLists.txt
new file mode 100644
index 00000000000..2bf4e36025f
--- /dev/null
+++ b/sdk/lib/drivers/arbiter/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/rtl)
+
+list(APPEND SOURCE
+    arbiter.c
+    arbiter.h)
+
+add_library(arbiter ${SOURCE})
+add_dependencies(arbiter bugcodes xdk)
+add_pch(arbiter arbiter.h SOURCE)
diff --git a/sdk/lib/drivers/arbiter/arbiter.c 
b/sdk/lib/drivers/arbiter/arbiter.c
new file mode 100644
index 00000000000..fc85159b69b
--- /dev/null
+++ b/sdk/lib/drivers/arbiter/arbiter.c
@@ -0,0 +1,41 @@
+/*
+ * PROJECT:         ReactOS Kernel
+ * COPYRIGHT:       GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
+ * FILE:            lib/drivers/arbiter/arbiter.c
+ * PURPOSE:         Hardware Resources Arbiter Library
+ * PROGRAMMERS:     Copyright 2020 Vadim Galyant <[email protected]>
+ */
+
+/* INCLUDES 
*******************************************************************/
+
+#define NDEBUG
+#include <debug.h>
+
+#include "arbiter.h"
+
+/* GLOBALS 
********************************************************************/
+
+/* DATA **********************************************************************/
+
+/* FUNCTIONS 
******************************************************************/
+
+NTSTATUS
+NTAPI
+ArbInitializeArbiterInstance(
+    _Inout_ PARBITER_INSTANCE Arbiter,
+    _In_ PDEVICE_OBJECT BusDeviceObject,
+    _In_ CM_RESOURCE_TYPE ResourceType,
+    _In_ PCWSTR ArbiterName,
+    _In_ PCWSTR OrderName,
+    _In_ PARB_TRANSLATE_ORDERING TranslateOrderingFunction)
+{
+    NTSTATUS Status;
+
+    DPRINT("ArbInitializeArbiterInstance: Initializing %S Arbiter\n", 
ArbiterName);
+    UNIMPLEMENTED;
+
+    Status = STATUS_SUCCESS;
+    return Status;
+}
+
+/* EOF */
diff --git a/sdk/lib/drivers/arbiter/arbiter.h 
b/sdk/lib/drivers/arbiter/arbiter.h
new file mode 100644
index 00000000000..c4a51623e52
--- /dev/null
+++ b/sdk/lib/drivers/arbiter/arbiter.h
@@ -0,0 +1,240 @@
+/*
+ * PROJECT:         ReactOS Kernel
+ * COPYRIGHT:       GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
+ * FILE:            lib/drivers/arbiter/arbiter.h
+ * PURPOSE:         Hardware Resources Arbiter Library
+ * PROGRAMMERS:     Copyright 2020 Vadim Galyant <[email protected]>
+ */
+
+#ifndef _ARBITER_H
+#define _ARBITER_H
+
+#ifndef _NTOSKRNL_
+#include <ntifs.h>
+#include <ndk/rtlfuncs.h>
+#endif
+
+typedef struct _ARBITER_ORDERING
+{
+    ULONGLONG Start;
+    ULONGLONG End;
+} ARBITER_ORDERING, *PARBITER_ORDERING;
+
+typedef struct _ARBITER_ORDERING_LIST
+{
+    USHORT Count;
+    USHORT Maximum;
+    PARBITER_ORDERING Orderings;
+} ARBITER_ORDERING_LIST, *PARBITER_ORDERING_LIST;
+
+typedef struct _ARBITER_ALTERNATIVE
+{
+    ULONGLONG Minimum;
+    ULONGLONG Maximum;
+    ULONG Length;
+    ULONG Alignment;
+    LONG Priority;
+    ULONG Flags;
+    PIO_RESOURCE_DESCRIPTOR Descriptor;
+    ULONG Reserved[3];
+} ARBITER_ALTERNATIVE, *PARBITER_ALTERNATIVE;
+
+typedef struct _ARBITER_ALLOCATION_STATE
+{
+    ULONGLONG Start;
+    ULONGLONG End;
+    ULONGLONG CurrentMinimum;
+    ULONGLONG CurrentMaximum;
+    PARBITER_LIST_ENTRY Entry;
+    PARBITER_ALTERNATIVE CurrentAlternative;
+    ULONG AlternativeCount;
+    PARBITER_ALTERNATIVE Alternatives;
+    USHORT Flags;
+    UCHAR RangeAttributes;
+    UCHAR RangeAvailableAttributes;
+    ULONG_PTR WorkSpace;
+} ARBITER_ALLOCATION_STATE, *PARBITER_ALLOCATION_STATE;
+
+typedef struct _ARBITER_INSTANCE *PARBITER_INSTANCE;
+
+typedef NTSTATUS
+(NTAPI * PARB_UNPACK_REQUIREMENT)(
+    _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
+    _Out_ PULONGLONG OutMinimumAddress,
+    _Out_ PULONGLONG OutMaximumAddress,
+    _Out_ PULONG OutLength,
+    _Out_ PULONG OutAlignment
+);
+
+typedef NTSTATUS
+(NTAPI * PARB_PACK_RESOURCE)(
+    _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
+    _In_ ULONGLONG Start,
+    _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor
+);
+
+typedef NTSTATUS
+(NTAPI * PARB_UNPACK_RESOURCE)(
+    _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor,
+    _Out_ PULONGLONG Start,
+    _Out_ PULONG OutLength
+);
+
+typedef LONG
+(NTAPI * PARB_SCORE_REQUIREMENT)(
+    _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor
+);
+
+typedef NTSTATUS
+(NTAPI * PARB_TEST_ALLOCATION)(
+    _In_ PARBITER_INSTANCE Arbiter,
+    _In_ PLIST_ENTRY ArbitrationList
+);
+
+typedef NTSTATUS
+(NTAPI * PARB_RETEST_ALLOCATION)(
+    _In_ PARBITER_INSTANCE Arbiter,
+    _In_ PLIST_ENTRY ArbitrationList
+);
+
+typedef NTSTATUS
+(NTAPI * PARB_COMMIT_ALLOCATION)(
+    _In_ PARBITER_INSTANCE Arbiter
+);
+
+typedef NTSTATUS
+(NTAPI * PARB_ROLLBACK_ALLOCATION)(
+    _In_ PARBITER_INSTANCE Arbiter
+);
+
+typedef NTSTATUS
+(NTAPI * PARB_BOOT_ALLOCATION)(
+    _In_ PARBITER_INSTANCE Arbiter,
+    _In_ PLIST_ENTRY ArbitrationList
+);
+
+/*  Not correct yet, FIXME! */
+typedef NTSTATUS
+(NTAPI * PARB_QUERY_ARBITRATE)(
+    _In_ PARBITER_INSTANCE Arbiter
+);
+
+/*  Not correct yet, FIXME! */
+typedef NTSTATUS
+(NTAPI * PARB_QUERY_CONFLICT)(
+    _In_ PARBITER_INSTANCE Arbiter
+);
+
+/*  Not correct yet, FIXME! */
+typedef NTSTATUS
+(NTAPI * PARB_ADD_RESERVED)(
+    _In_ PARBITER_INSTANCE Arbiter
+);
+
+/*  Not correct yet, FIXME! */
+typedef NTSTATUS
+(NTAPI * PARB_START_ARBITER)(
+    _In_ PARBITER_INSTANCE Arbiter
+);
+
+typedef NTSTATUS
+(NTAPI * PARB_PREPROCESS_ENTRY)(
+    _In_ PARBITER_INSTANCE Arbiter,
+    _Inout_ PARBITER_ALLOCATION_STATE ArbState
+);
+
+typedef NTSTATUS
+(NTAPI * PARB_ALLOCATE_ENTRY)(
+    _In_ PARBITER_INSTANCE Arbiter,
+    _Inout_ PARBITER_ALLOCATION_STATE ArbState
+);
+
+typedef BOOLEAN
+(NTAPI * PARB_GET_NEXT_ALLOCATION_RANGE)(
+    _In_ PARBITER_INSTANCE Arbiter,
+    _Inout_ PARBITER_ALLOCATION_STATE ArbState
+);
+
+typedef BOOLEAN
+(NTAPI * PARB_FIND_SUITABLE_RANGE)(
+    _In_ PARBITER_INSTANCE Arbiter,
+    _Inout_ PARBITER_ALLOCATION_STATE ArbState
+);
+
+typedef VOID
+(NTAPI * PARB_ADD_ALLOCATION)(
+    _In_ PARBITER_INSTANCE Arbiter,
+    _Inout_ PARBITER_ALLOCATION_STATE ArbState
+);
+
+typedef VOID
+(NTAPI * PARB_BACKTRACK_ALLOCATION)(
+    _In_ PARBITER_INSTANCE Arbiter,
+    _Inout_ PARBITER_ALLOCATION_STATE ArbState
+);
+
+/*  Not correct yet, FIXME! */
+typedef NTSTATUS
+(NTAPI * PARB_OVERRIDE_CONFLICT)(
+    _In_ PARBITER_INSTANCE Arbiter
+);
+
+typedef struct _ARBITER_INSTANCE
+{
+    ULONG Signature;
+    PKEVENT MutexEvent;
+    PCWSTR Name;
+    CM_RESOURCE_TYPE ResourceType;
+    PRTL_RANGE_LIST Allocation;
+    PRTL_RANGE_LIST PossibleAllocation;
+    ARBITER_ORDERING_LIST OrderingList;
+    ARBITER_ORDERING_LIST ReservedList;
+    LONG ReferenceCount;
+    PARBITER_INTERFACE Interface;
+    ULONG AllocationStackMaxSize;
+    PARBITER_ALLOCATION_STATE AllocationStack;
+    PARB_UNPACK_REQUIREMENT UnpackRequirement;
+    PARB_PACK_RESOURCE PackResource;
+    PARB_UNPACK_RESOURCE UnpackResource;
+    PARB_SCORE_REQUIREMENT ScoreRequirement;
+    PARB_TEST_ALLOCATION TestAllocation;
+    PARB_RETEST_ALLOCATION RetestAllocation;
+    PARB_COMMIT_ALLOCATION CommitAllocation;
+    PARB_ROLLBACK_ALLOCATION RollbackAllocation;
+    PARB_BOOT_ALLOCATION BootAllocation;
+    PARB_QUERY_ARBITRATE QueryArbitrate; // Not used yet
+    PARB_QUERY_CONFLICT QueryConflict; // Not used yet
+    PARB_ADD_RESERVED AddReserved; // Not used yet
+    PARB_START_ARBITER StartArbiter; // Not used yet
+    PARB_PREPROCESS_ENTRY PreprocessEntry;
+    PARB_ALLOCATE_ENTRY AllocateEntry;
+    PARB_GET_NEXT_ALLOCATION_RANGE GetNextAllocationRange;
+    PARB_FIND_SUITABLE_RANGE FindSuitableRange;
+    PARB_ADD_ALLOCATION AddAllocation;
+    PARB_BACKTRACK_ALLOCATION BacktrackAllocation;
+    PARB_OVERRIDE_CONFLICT OverrideConflict; // Not used yet
+    BOOLEAN TransactionInProgress;
+    PVOID Extension;
+    PDEVICE_OBJECT BusDeviceObject;
+    PVOID ConflictCallbackContext;
+    PVOID ConflictCallback;
+} ARBITER_INSTANCE, *PARBITER_INSTANCE;
+
+typedef NTSTATUS
+(NTAPI * PARB_TRANSLATE_ORDERING)(
+    _Out_ PIO_RESOURCE_DESCRIPTOR OutIoDescriptor,
+    _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor
+);
+
+NTSTATUS
+NTAPI
+ArbInitializeArbiterInstance(
+    _Inout_ PARBITER_INSTANCE Arbiter,
+    _In_ PDEVICE_OBJECT BusDeviceObject,
+    _In_ CM_RESOURCE_TYPE ResourceType,
+    _In_ PCWSTR ArbiterName,
+    _In_ PCWSTR OrderName,
+    _In_ PARB_TRANSLATE_ORDERING TranslateOrderingFunction
+);
+
+#endif  /* _ARBITER_H */

Reply via email to