[FORMATTING] Start Kernel Arbiter with clean instance

This commit is contained in:
Justin Miller
2025-09-28 15:10:17 -07:00
parent b37aafeed6
commit 094b7d9c79
8 changed files with 595 additions and 530 deletions

View File

@@ -0,0 +1,123 @@
/*
* PROJECT: ReactOS Kernel
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: PnP manager Root Bus Arbiter
* COPYRIGHT: Copyright 2025 Justin Miller <justin.miller@reactos.org>
*/
/* INCLUDES *****************************************************************/
#include <ntoskrnl.h>
#define NDEBUG
#include <debug.h>
/* GLOBALS *******************************************************************/
extern ARBITER_INSTANCE IopRootBusNumberArbiter;
/* FUNCTIONS *****************************************************************/
NTSTATUS
NTAPI
IopArbBusNumberUnpackRequirements(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_Out_ PUINT64 OutMinimumAddress,
_Out_ PUINT64 OutMaximumAddress,
_Out_ PUINT32 OutLength,
_Out_ PUINT32 OutAlignment)
{
PAGED_CODE();
DPRINT("IopArbBusNumberUnpackRequirements: IoDescriptor: %p, OutMinimumAddress: %p, OutMaximumAddress: %p, OutLength: %p, OutAlignment: %p\n",
IoDescriptor,
OutMinimumAddress,
OutMaximumAddress,
OutLength,
OutAlignment);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
IopArbBusNumberPackResource(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_In_ UINT64 Start,
_Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
{
PAGED_CODE();
DPRINT("IopArbBusNumberPackResource: IoDescriptor: %p, Start: %I64x, CmDescriptor: %p\n",
IoDescriptor,
Start,
CmDescriptor);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
IopArbBusNumberUnpackResource(
_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor,
_Out_ PUINT64 Start,
_Out_ PUINT32 OutLength)
{
PAGED_CODE();
DPRINT("IopArbBusNumberUnpackResource: CmDescriptor: %p, Start: %p, OutLength: %p\n",
CmDescriptor,
Start,
OutLength);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
INT32
NTAPI
IopArbBusNumberScoreRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
DPRINT("IopArbBusNumberScoreRequirement: IoDescriptor: %p\n",
IoDescriptor);
UNIMPLEMENTED;
return 0;
}
/**
* @brief Initialize the RootBusArbiter
*
* Initializes rootbus arbiter against IopRootBusNumberArbiter for use in PCI
* every "bus" gets to check against this.
* @return NTSTATUS
* @retval STATUS_SUCCESS
* @retval STATUS_UNSUCCESSFUL
* @retval STATUS_INSUFFICIENT_RESOURCES
*/
NTSTATUS
NTAPI
IopArbBusNumberInitialize(VOID)
{
NTSTATUS Status = STATUS_UNSUCCESSFUL;
PAGED_CODE();
IopRootBusNumberArbiter.Name = L"RootBusNumber";
IopRootBusNumberArbiter.UnpackRequirement = IopArbBusNumberUnpackRequirements;
IopRootBusNumberArbiter.PackResource = IopArbBusNumberPackResource;
IopRootBusNumberArbiter.UnpackResource = IopArbBusNumberUnpackResource;
IopRootBusNumberArbiter.ScoreRequirement = IopArbBusNumberScoreRequirement;
Status = ArbInitializeArbiterInstance(&IopRootBusNumberArbiter,
NULL,
CmResourceTypeBusNumber,
IopRootBusNumberArbiter.Name,
L"Root",
NULL);
if (!NT_SUCCESS(Status))
{
DPRINT1("IopArbBusNumberInitialize: Failed with %X", Status);
}
return Status;
}

View File

@@ -0,0 +1,113 @@
/*
* PROJECT: ReactOS Kernel
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: PnP manager Root DMA Arbiter
* COPYRIGHT: Copyright 2025 Justin Miller <justin.miller@reactos.org>
*/
/* INCLUDES *****************************************************************/
#include <ntoskrnl.h>
#define NDEBUG
#include <debug.h>
/* GLOBALS *******************************************************************/
extern ARBITER_INSTANCE IopRootDmaArbiter;
/* FUNCTIONS *****************************************************************/
NTSTATUS
NTAPI
IopArbDmaUnpackRequirements(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_Out_ PUINT64 OutMinimumAddress,
_Out_ PUINT64 OutMaximumAddress,
_Out_ PUINT32 OutLength,
_Out_ PUINT32 OutAlignment)
{
PAGED_CODE();
DPRINT("IopArbDmaUnpackRequirements: IoDescriptor: %p, OutMinimumAddress: %p, OutMaximumAddress: %p, OutLength: %p, OutAlignment: %p\n",
IoDescriptor,
OutMinimumAddress,
OutMaximumAddress,
OutLength,
OutAlignment);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
IopArbDmaPackResource(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_In_ UINT64 Start,
_Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
{
PAGED_CODE();
DPRINT("IopArbDmaPackResource: IoDescriptor: %p, Start: %p, CmDescriptor: %p\n",
IoDescriptor,
Start,
CmDescriptor);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
IopArbDmaUnpackResource(
_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor,
_Out_ PUINT64 Start,
_Out_ PUINT32 OutLength)
{
PAGED_CODE();
DPRINT("IopArbDmaUnpackResource: CmDescriptor: %p, Start: %p, OutLength: %p\n",
CmDescriptor,
Start,
OutLength);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
INT32
NTAPI
IopArbDmaScoreRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
DPRINT("IopArbDmaScoreRequirement: IoDescriptor: %p\n",
IoDescriptor);
UNIMPLEMENTED;
return 0;
}
NTSTATUS
NTAPI
IopArbDmaInitialize(VOID)
{
NTSTATUS Status = STATUS_UNSUCCESSFUL;
PAGED_CODE();
IopRootDmaArbiter.Name = L"RootDma";
IopRootDmaArbiter.UnpackRequirement = IopArbDmaUnpackRequirements;
IopRootDmaArbiter.PackResource = IopArbDmaPackResource;
IopRootDmaArbiter.UnpackResource = IopArbDmaUnpackResource;
IopRootDmaArbiter.ScoreRequirement = IopArbDmaScoreRequirement;
Status = ArbInitializeArbiterInstance(&IopRootDmaArbiter,
NULL,
CmResourceTypeBusNumber,
IopRootDmaArbiter.Name,
L"Root",
NULL);
if (!NT_SUCCESS(Status))
{
DPRINT1("IopArbDmaInitialize: Failed with %X", Status);
}
return Status;
}

View File

@@ -0,0 +1,113 @@
/*
* PROJECT: ReactOS Kernel
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: PnP manager Root IRQ Arbiter
* COPYRIGHT: Copyright 2025 Justin Miller <justin.miller@reactos.org>
*/
/* INCLUDES *****************************************************************/
#include <ntoskrnl.h>
#define NDEBUG
#include <debug.h>
/* GLOBALS *******************************************************************/
extern ARBITER_INSTANCE IopRootIrqArbiter;
/* FUNCTIONS *****************************************************************/
NTSTATUS
NTAPI
IopArbIrqUnpackRequirements(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_Out_ PUINT64 OutMinimumAddress,
_Out_ PUINT64 OutMaximumAddress,
_Out_ PUINT32 OutLength,
_Out_ PUINT32 OutAlignment)
{
PAGED_CODE();
DPRINT("IopArbIrqUnpackRequirements: IoDescriptor: %p, OutMinimumAddress: %p, OutMaximumAddress: %p, OutLength: %p, OutAlignment: %p\n",
IoDescriptor,
OutMinimumAddress,
OutMaximumAddress,
OutLength,
OutAlignment);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
IopArbIrqPackResource(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_In_ UINT64 Start,
_Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
{
PAGED_CODE();
DPRINT("IopArbIrqPackResource: IoDescriptor: %p, Start: %p, CmDescriptor: %p\n",
IoDescriptor,
Start,
CmDescriptor);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
IopArbIrqUnpackResource(
_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor,
_Out_ PUINT64 Start,
_Out_ PUINT32 OutLength)
{
PAGED_CODE();
DPRINT("IopArbIrqUnpackResource: CmDescriptor: %p, Start: %p, OutLength: %p\n",
CmDescriptor,
Start,
OutLength);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
INT32
NTAPI
IopArbIrqScoreRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
DPRINT("IopArbIrqScoreRequirement: IoDescriptor: %p\n",
IoDescriptor);
UNIMPLEMENTED;
return 0;
}
NTSTATUS
NTAPI
IopArbIrqInitialize(VOID)
{
NTSTATUS Status = STATUS_UNSUCCESSFUL;
PAGED_CODE();
IopRootIrqArbiter.Name = L"RootIRQ";
IopRootIrqArbiter.UnpackRequirement = IopArbIrqUnpackRequirements;
IopRootIrqArbiter.PackResource = IopArbIrqPackResource;
IopRootIrqArbiter.UnpackResource = IopArbIrqUnpackResource;
IopRootIrqArbiter.ScoreRequirement = IopArbIrqScoreRequirement;
Status = ArbInitializeArbiterInstance(&IopRootIrqArbiter,
NULL,
CmResourceTypeBusNumber,
IopRootIrqArbiter.Name,
L"Root",
NULL);
if (!NT_SUCCESS(Status))
{
DPRINT1("IopArbDmaInitialize: Failed with %X", Status);
}
return Status;
}

View File

@@ -0,0 +1,113 @@
/*
* PROJECT: ReactOS Kernel
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: PnP manager Root Memory Arbiter
* COPYRIGHT: Copyright 2025 Justin Miller <justin.miller@reactos.org>
*/
/* INCLUDES *****************************************************************/
#include <ntoskrnl.h>
#define NDEBUG
#include <debug.h>
/* GLOBALS *******************************************************************/
extern ARBITER_INSTANCE IopRootMemArbiter;
/* FUNCTIONS *****************************************************************/
NTSTATUS
NTAPI
IopArbMemUnpackRequirements(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_Out_ PUINT64 OutMinimumAddress,
_Out_ PUINT64 OutMaximumAddress,
_Out_ PUINT32 OutLength,
_Out_ PUINT32 OutAlignment)
{
PAGED_CODE();
DPRINT("IopArbMemUnpackRequirements: IoDescriptor: %p, OutMinimumAddress: %p, OutMaximumAddress: %p, OutLength: %p, OutAlignment: %p\n",
IoDescriptor,
OutMinimumAddress,
OutMaximumAddress,
OutLength,
OutAlignment);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
IopArbMemPackResource(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_In_ UINT64 Start,
_Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
{
PAGED_CODE();
DPRINT("IopArbMemPackResource: IoDescriptor: %p, Start: %p, CmDescriptor: %p\n",
IoDescriptor,
Start,
CmDescriptor);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
IopArbMemUnpackResource(
_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor,
_Out_ PUINT64 Start,
_Out_ PUINT32 OutLength)
{
PAGED_CODE();
DPRINT("IopArbMemUnpackResource: CmDescriptor: %p, Start: %p, OutLength: %p\n",
CmDescriptor,
Start,
OutLength);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
INT32
NTAPI
IopArbMemScoreRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
DPRINT("IopArbMemScoreRequirement: IoDescriptor: %p\n",
IoDescriptor);
UNIMPLEMENTED;
return 0;
}
NTSTATUS
NTAPI
IopArbMemInitialize(VOID)
{
NTSTATUS Status = STATUS_UNSUCCESSFUL;
PAGED_CODE();
IopRootMemArbiter.Name = L"RootMemory";
IopRootMemArbiter.UnpackRequirement = IopArbMemUnpackRequirements;
IopRootMemArbiter.PackResource = IopArbMemPackResource;
IopRootMemArbiter.UnpackResource = IopArbMemUnpackResource;
IopRootMemArbiter.ScoreRequirement = IopArbMemScoreRequirement;
Status = ArbInitializeArbiterInstance(&IopRootMemArbiter,
NULL,
CmResourceTypeBusNumber,
IopRootMemArbiter.Name,
L"Root",
NULL);
if (!NT_SUCCESS(Status))
{
DPRINT1("IopArbDmaInitialize: Failed with %X", Status);
}
return Status;
}

View File

@@ -0,0 +1,113 @@
/*
* PROJECT: ReactOS Kernel
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: PnP manager Root Port Arbiter
* COPYRIGHT: Copyright 2025 Justin Miller <justin.miller@reactos.org>
*/
/* INCLUDES *****************************************************************/
#include <ntoskrnl.h>
#define NDEBUG
#include <debug.h>
/* GLOBALS *******************************************************************/
extern ARBITER_INSTANCE IopRootPortArbiter;
/* FUNCTIONS *****************************************************************/
NTSTATUS
NTAPI
IopPortMemUnpackRequirements(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_Out_ PUINT64 OutMinimumAddress,
_Out_ PUINT64 OutMaximumAddress,
_Out_ PUINT32 OutLength,
_Out_ PUINT32 OutAlignment)
{
PAGED_CODE();
DPRINT("IopPortMemUnpackRequirements: IoDescriptor: %p, OutMinimumAddress: %p, OutMaximumAddress: %p, OutLength: %p, OutAlignment: %p\n",
IoDescriptor,
OutMinimumAddress,
OutMaximumAddress,
OutLength,
OutAlignment);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
IopPortMemPackResource(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_In_ UINT64 Start,
_Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
{
PAGED_CODE();
DPRINT("IopPortMemPackResource: IoDescriptor: %p, Start: %p, CmDescriptor: %p\n",
IoDescriptor,
Start,
CmDescriptor);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
IopPortMemUnpackResource(
_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor,
_Out_ PUINT64 Start,
_Out_ PUINT32 OutLength)
{
PAGED_CODE();
DPRINT("IopPortMemUnpackResource: CmDescriptor: %p, Start: %p, OutLength: %p\n",
CmDescriptor,
Start,
OutLength);
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
INT32
NTAPI
IopPortMemScoreRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
DPRINT("IopPortMemScoreRequirement: IoDescriptor: %p\n",
IoDescriptor);
UNIMPLEMENTED;
return 0;
}
NTSTATUS
NTAPI
IopArbPortInitialize(VOID)
{
NTSTATUS Status = STATUS_UNSUCCESSFUL;
PAGED_CODE();
IopRootPortArbiter.Name = L"RootPort";
IopRootPortArbiter.UnpackRequirement = IopPortMemUnpackRequirements;
IopRootPortArbiter.PackResource = IopPortMemPackResource;
IopRootPortArbiter.UnpackResource = IopPortMemUnpackResource;
IopRootPortArbiter.ScoreRequirement = IopPortMemScoreRequirement;
Status = ArbInitializeArbiterInstance(&IopRootPortArbiter,
NULL,
CmResourceTypeBusNumber,
IopRootPortArbiter.Name,
L"Root",
NULL);
if (!NT_SUCCESS(Status))
{
DPRINT1("IopArbDmaInitialize: Failed with %X", Status);
}
return Status;
}

View File

@@ -1,514 +0,0 @@
/*
* PROJECT: ReactOS Kernel
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Root arbiters of the PnP manager
* COPYRIGHT: Copyright 2020 Vadim Galyant <vgal@rambler.ru>
*/
/* 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 */
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopBusNumberUnpackRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_Out_ PUINT64 OutMinimumAddress,
_Out_ PUINT64 OutMaximumAddress,
_Out_ PUINT32 OutLength,
_Out_ PUINT32 OutAlignment)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopBusNumberPackResource(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_In_ UINT64 Start,
_Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopBusNumberUnpackResource(
_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
_Out_ PUINT64 Start,
_Out_ PUINT32 Length)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
INT32
NTAPI
IopBusNumberScoreRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
UNIMPLEMENTED;
return 0;
}
#define ARB_MAX_BUS_NUMBER 0xFF
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopBusNumberInitialize(VOID)
{
NTSTATUS Status;
PAGED_CODE();
DPRINT("IopRootBusNumberArbiter %p\n", &IopRootBusNumberArbiter);
IopRootBusNumberArbiter.UnpackRequirement = IopBusNumberUnpackRequirement;
IopRootBusNumberArbiter.PackResource = IopBusNumberPackResource;
IopRootBusNumberArbiter.UnpackResource = IopBusNumberUnpackResource;
IopRootBusNumberArbiter.ScoreRequirement = IopBusNumberScoreRequirement;
Status = ArbInitializeArbiterInstance(&IopRootBusNumberArbiter,
NULL,
CmResourceTypeBusNumber,
L"RootBusNumber",
L"Root",
NULL);
if (!NT_SUCCESS(Status))
{
DPRINT1("IopBusNumberInitialize: Status %p\n", Status);
ASSERT(FALSE);
return Status;
}
Status = RtlAddRange(IopRootBusNumberArbiter.Allocation,
(UINT64)(ARB_MAX_BUS_NUMBER + 1),
(UINT64)(-1),
0,
0,
NULL,
NULL);
return Status;
}
/* Irq arbiter */
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopIrqUnpackRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_Out_ PUINT64 OutMinimumVector,
_Out_ PUINT64 OutMaximumVector,
_Out_ PUINT32 OutParam1,
_Out_ PUINT32 OutParam2)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopIrqPackResource(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_In_ UINT64 Start,
_Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopIrqUnpackResource(
_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor,
_Out_ PUINT64 Start,
_Out_ PUINT32 OutLength)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
INT32
NTAPI
IopIrqScoreRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
UNIMPLEMENTED;
return 0;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopIrqTranslateOrdering(
_Out_ PIO_RESOURCE_DESCRIPTOR OutIoDescriptor,
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopIrqInitialize(VOID)
{
NTSTATUS Status;
PAGED_CODE();
DPRINT("IopRootIrqArbiter %p\n", &IopRootIrqArbiter);
IopRootIrqArbiter.UnpackRequirement = IopIrqUnpackRequirement;
IopRootIrqArbiter.PackResource = IopIrqPackResource;
IopRootIrqArbiter.UnpackResource = IopIrqUnpackResource;
IopRootIrqArbiter.ScoreRequirement = IopIrqScoreRequirement;
Status = ArbInitializeArbiterInstance(&IopRootIrqArbiter,
NULL,
CmResourceTypeInterrupt,
L"RootIRQ",
L"Root",
IopIrqTranslateOrdering);
return Status;
}
/* Dma arbiter */
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopDmaUnpackRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_Out_ PUINT64 OutMinimumChannel,
_Out_ PUINT64 OutMaximumChannel,
_Out_ PUINT32 OutParam1,
_Out_ PUINT32 OutParam2)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopDmaPackResource(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_In_ UINT64 Start,
_Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopDmaUnpackResource(
_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor,
_Out_ PUINT64 Start,
_Out_ PUINT32 OutLength)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
INT32
NTAPI
IopDmaScoreRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
UNIMPLEMENTED;
return 0;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopDmaOverrideConflict(
_In_ PARBITER_INSTANCE Arbiter)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopDmaInitialize(VOID)
{
NTSTATUS Status;
PAGED_CODE();
DPRINT("IopRootDmaArbiter %p\n", &IopRootDmaArbiter);
IopRootDmaArbiter.UnpackRequirement = IopDmaUnpackRequirement;
IopRootDmaArbiter.PackResource = IopDmaPackResource;
IopRootDmaArbiter.UnpackResource = IopDmaUnpackResource;
IopRootDmaArbiter.ScoreRequirement = IopDmaScoreRequirement;
IopRootDmaArbiter.OverrideConflict = IopDmaOverrideConflict;
Status = ArbInitializeArbiterInstance(&IopRootDmaArbiter,
NULL,
CmResourceTypeDma,
L"RootDMA",
L"Root",
NULL);
return Status;
}
/* Common for Memory and Port arbiters */
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopGenericUnpackRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_Out_ PUINT64 OutMinimumAddress,
_Out_ PUINT64 OutMaximumAddress,
_Out_ PUINT32 OutLength,
_Out_ PUINT32 OutAlignment)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopGenericPackResource(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
_In_ UINT64 Start,
_Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopGenericUnpackResource(
_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor,
_Out_ PUINT64 Start,
_Out_ PUINT32 OutLength)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
CODE_SEG("PAGE")
INT32
NTAPI
IopGenericScoreRequirement(
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
UNIMPLEMENTED;
return 0;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopGenericTranslateOrdering(
_Out_ PIO_RESOURCE_DESCRIPTOR OutIoDescriptor,
_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
PAGED_CODE();
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
/* Memory arbiter */
CODE_SEG("PAGE")
BOOLEAN
NTAPI
IopMemFindSuitableRange(
_In_ PARBITER_INSTANCE Arbiter,
_In_ PARBITER_ALLOCATION_STATE State)
{
PAGED_CODE();
UNIMPLEMENTED;
return FALSE;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopMemInitialize(VOID)
{
NTSTATUS Status;
PAGED_CODE();
DPRINT("IopRootMemArbiter %p\n", &IopRootMemArbiter);
IopRootMemArbiter.UnpackRequirement = IopGenericUnpackRequirement;
IopRootMemArbiter.PackResource = IopGenericPackResource;
IopRootMemArbiter.UnpackResource = IopGenericUnpackResource;
IopRootMemArbiter.ScoreRequirement = IopGenericScoreRequirement;
IopRootMemArbiter.FindSuitableRange = IopMemFindSuitableRange;
Status = ArbInitializeArbiterInstance(&IopRootMemArbiter,
NULL,
CmResourceTypeMemory,
L"RootMemory",
L"Root",
IopGenericTranslateOrdering);
if (!NT_SUCCESS(Status))
{
DPRINT1("IopMemInitialize: Status %p\n", Status);
ASSERT(FALSE);
return Status;
}
Status = RtlAddRange(IopRootMemArbiter.Allocation,
0,
(UINT64)(PAGE_SIZE - 1),
0,
0,
NULL,
NULL);
return Status;
}
/* Port arbiter */
CODE_SEG("PAGE")
BOOLEAN
NTAPI
IopPortFindSuitableRange(
_In_ PARBITER_INSTANCE Arbiter,
_In_ PARBITER_ALLOCATION_STATE State)
{
PAGED_CODE();
UNIMPLEMENTED;
return FALSE;
}
CODE_SEG("PAGE")
VOID
NTAPI
IopPortAddAllocation(
_In_ PARBITER_INSTANCE Arbiter,
_In_ PARBITER_ALLOCATION_STATE ArbState)
{
PAGED_CODE();
UNIMPLEMENTED;
}
CODE_SEG("PAGE")
VOID
NTAPI
IopPortBacktrackAllocation(
_In_ PARBITER_INSTANCE Arbiter,
_Inout_ PARBITER_ALLOCATION_STATE ArbState)
{
PAGED_CODE();
UNIMPLEMENTED;
}
CODE_SEG("PAGE")
NTSTATUS
NTAPI
IopPortInitialize(VOID)
{
NTSTATUS Status;
PAGED_CODE();
DPRINT("IopRootPortArbiter %p\n", &IopRootPortArbiter);
IopRootPortArbiter.UnpackRequirement = IopGenericUnpackRequirement;
IopRootPortArbiter.PackResource = IopGenericPackResource;
IopRootPortArbiter.UnpackResource = IopGenericUnpackResource;
IopRootPortArbiter.ScoreRequirement = IopGenericScoreRequirement;
IopRootPortArbiter.FindSuitableRange = IopPortFindSuitableRange;
IopRootPortArbiter.AddAllocation = IopPortAddAllocation;
IopRootPortArbiter.BacktrackAllocation = IopPortBacktrackAllocation;
Status = ArbInitializeArbiterInstance(&IopRootPortArbiter,
NULL,
CmResourceTypePort,
L"RootPort",
L"Root",
IopGenericTranslateOrdering);
return Status;
}

View File

@@ -28,11 +28,11 @@ ARBITER_INSTANCE IopRootPortArbiter;
extern KEVENT PiEnumerationFinished;
NTSTATUS NTAPI IopPortInitialize(VOID);
NTSTATUS NTAPI IopMemInitialize(VOID);
NTSTATUS NTAPI IopDmaInitialize(VOID);
NTSTATUS NTAPI IopIrqInitialize(VOID);
NTSTATUS NTAPI IopBusNumberInitialize(VOID);
NTSTATUS NTAPI IopArbPortInitialize(VOID);
NTSTATUS NTAPI IopArbMemInitialize(VOID);
NTSTATUS NTAPI IopArbDmaInitialize(VOID);
NTSTATUS NTAPI IopArbIrqInitialize(VOID);
NTSTATUS NTAPI IopArbBusNumberInitialize(VOID);
/* FUNCTIONS ******************************************************************/
@@ -50,38 +50,38 @@ IopInitializeArbiters(VOID)
{
NTSTATUS Status;
Status = IopPortInitialize();
Status = IopArbPortInitialize();
if (!NT_SUCCESS(Status))
{
DPRINT1("IopPortInitialize() return %X\n", Status);
DPRINT1("IopArbPortInitialize() return %X\n", Status);
return Status;
}
Status = IopMemInitialize();
Status = IopArbMemInitialize();
if (!NT_SUCCESS(Status))
{
DPRINT1("IopMemInitialize() return %X\n", Status);
DPRINT1("IopArbMemInitialize() return %X\n", Status);
return Status;
}
Status = IopDmaInitialize();
Status = IopArbDmaInitialize();
if (!NT_SUCCESS(Status))
{
DPRINT1("IopDmaInitialize() return %X\n", Status);
DPRINT1("IopArbDmaInitialize() return %X\n", Status);
return Status;
}
Status = IopIrqInitialize();
Status = IopArbIrqInitialize();
if (!NT_SUCCESS(Status))
{
DPRINT1("IopIrqInitialize() return %X\n", Status);
DPRINT1("IopArbIrqInitialize() return %X\n", Status);
return Status;
}
Status = IopBusNumberInitialize();
Status = IopArbBusNumberInitialize();
if (!NT_SUCCESS(Status))
{
DPRINT1("IopBusNumberInitialize() return %X\n", Status);
DPRINT1("IopArbBusNumberInitialize() return %X\n", Status);
}
return Status;

View File

@@ -149,7 +149,11 @@ 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/arbiters.c
${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/arb/arbbus.c
${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/arb/arbdma.c
${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/arb/arbirq.c
${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/arb/arbmem.c
${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/arb/arbport.c
${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/devaction.c
${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/devnode.c
${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/plugplay.c