From 094b7d9c796f07263b38933af901cc7ce21cd642 Mon Sep 17 00:00:00 2001 From: Justin Miller Date: Sun, 28 Sep 2025 15:10:17 -0700 Subject: [PATCH] [FORMATTING] Start Kernel Arbiter with clean instance --- ntoskrnl/io/pnpmgr/arb/arbbus.c | 123 ++++++++ ntoskrnl/io/pnpmgr/arb/arbdma.c | 113 +++++++ ntoskrnl/io/pnpmgr/arb/arbirq.c | 113 +++++++ ntoskrnl/io/pnpmgr/arb/arbmem.c | 113 +++++++ ntoskrnl/io/pnpmgr/arb/arbport.c | 113 +++++++ ntoskrnl/io/pnpmgr/arbiters.c | 514 ------------------------------- ntoskrnl/io/pnpmgr/pnpinit.c | 30 +- ntoskrnl/ntos.cmake | 6 +- 8 files changed, 595 insertions(+), 530 deletions(-) create mode 100644 ntoskrnl/io/pnpmgr/arb/arbbus.c create mode 100644 ntoskrnl/io/pnpmgr/arb/arbdma.c create mode 100644 ntoskrnl/io/pnpmgr/arb/arbirq.c create mode 100644 ntoskrnl/io/pnpmgr/arb/arbmem.c create mode 100644 ntoskrnl/io/pnpmgr/arb/arbport.c delete mode 100644 ntoskrnl/io/pnpmgr/arbiters.c diff --git a/ntoskrnl/io/pnpmgr/arb/arbbus.c b/ntoskrnl/io/pnpmgr/arb/arbbus.c new file mode 100644 index 00000000000..72269064838 --- /dev/null +++ b/ntoskrnl/io/pnpmgr/arb/arbbus.c @@ -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 + */ + +/* INCLUDES *****************************************************************/ + +#include +#define NDEBUG +#include + +/* 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; +} diff --git a/ntoskrnl/io/pnpmgr/arb/arbdma.c b/ntoskrnl/io/pnpmgr/arb/arbdma.c new file mode 100644 index 00000000000..752eab51c43 --- /dev/null +++ b/ntoskrnl/io/pnpmgr/arb/arbdma.c @@ -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 + */ + +/* INCLUDES *****************************************************************/ + +#include +#define NDEBUG +#include + +/* 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; +} diff --git a/ntoskrnl/io/pnpmgr/arb/arbirq.c b/ntoskrnl/io/pnpmgr/arb/arbirq.c new file mode 100644 index 00000000000..d3a54247478 --- /dev/null +++ b/ntoskrnl/io/pnpmgr/arb/arbirq.c @@ -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 + */ + +/* INCLUDES *****************************************************************/ + +#include +#define NDEBUG +#include + +/* 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; +} diff --git a/ntoskrnl/io/pnpmgr/arb/arbmem.c b/ntoskrnl/io/pnpmgr/arb/arbmem.c new file mode 100644 index 00000000000..43dec6ff781 --- /dev/null +++ b/ntoskrnl/io/pnpmgr/arb/arbmem.c @@ -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 + */ + +/* INCLUDES *****************************************************************/ + +#include +#define NDEBUG +#include + +/* 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; +} diff --git a/ntoskrnl/io/pnpmgr/arb/arbport.c b/ntoskrnl/io/pnpmgr/arb/arbport.c new file mode 100644 index 00000000000..1af44f05388 --- /dev/null +++ b/ntoskrnl/io/pnpmgr/arb/arbport.c @@ -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 + */ + +/* INCLUDES *****************************************************************/ + +#include +#define NDEBUG +#include + +/* 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; +} diff --git a/ntoskrnl/io/pnpmgr/arbiters.c b/ntoskrnl/io/pnpmgr/arbiters.c deleted file mode 100644 index 9a299c08ac6..00000000000 --- a/ntoskrnl/io/pnpmgr/arbiters.c +++ /dev/null @@ -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 - */ - -/* INCLUDES ******************************************************************/ - -#include - -#define NDEBUG -#include - -/* 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; -} diff --git a/ntoskrnl/io/pnpmgr/pnpinit.c b/ntoskrnl/io/pnpmgr/pnpinit.c index 7c7c1209fd2..258527be5de 100644 --- a/ntoskrnl/io/pnpmgr/pnpinit.c +++ b/ntoskrnl/io/pnpmgr/pnpinit.c @@ -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; diff --git a/ntoskrnl/ntos.cmake b/ntoskrnl/ntos.cmake index 249ce3c11c8..00f62b677f1 100644 --- a/ntoskrnl/ntos.cmake +++ b/ntoskrnl/ntos.cmake @@ -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