https://git.reactos.org/?p=reactos.git;a=commitdiff;h=016d01e5d1f7d7817fe6f…
commit 016d01e5d1f7d7817fe6f270a8246e695cd4f13d
Author: Dmitry Borisov <di.sean(a)protonmail.com>
AuthorDate: Fri May 3 19:08:09 2024 +0600
Commit: Dmitry Borisov <di.sean(a)protonmail.com>
CommitDate: Sat Aug 3 17:08:43 2024 +0600
[ISAPNP] Extract resource definitions
Prepare the driver for upcoming API tests
CORE-18562
---
drivers/bus/isapnp/isapnp.c | 112 ++++++++++++++--------------
drivers/bus/isapnp/isapnp.h | 151 +-------------------------------------
drivers/bus/isapnp/isapnpres.h | 162 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 220 insertions(+), 205 deletions(-)
diff --git a/drivers/bus/isapnp/isapnp.c b/drivers/bus/isapnp/isapnp.c
index 514322c69c0..0d939a300ea 100644
--- a/drivers/bus/isapnp/isapnp.c
+++ b/drivers/bus/isapnp/isapnp.c
@@ -981,62 +981,6 @@ InvalidBiosResources:
return STATUS_SUCCESS;
}
-_Dispatch_type_(IRP_MJ_CREATE)
-_Dispatch_type_(IRP_MJ_CLOSE)
-static CODE_SEG("PAGE") DRIVER_DISPATCH_PAGED IsaCreateClose;
-
-static
-CODE_SEG("PAGE")
-NTSTATUS
-NTAPI
-IsaCreateClose(
- _In_ PDEVICE_OBJECT DeviceObject,
- _Inout_ PIRP Irp)
-{
- PAGED_CODE();
-
- Irp->IoStatus.Status = STATUS_SUCCESS;
-
- DPRINT("%s(%p, %p)\n", __FUNCTION__, DeviceObject, Irp);
-
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
- return STATUS_SUCCESS;
-}
-
-_Dispatch_type_(IRP_MJ_DEVICE_CONTROL)
-_Dispatch_type_(IRP_MJ_SYSTEM_CONTROL)
-static CODE_SEG("PAGE") DRIVER_DISPATCH_PAGED IsaForwardOrIgnore;
-
-static
-CODE_SEG("PAGE")
-NTSTATUS
-NTAPI
-IsaForwardOrIgnore(
- _In_ PDEVICE_OBJECT DeviceObject,
- _Inout_ PIRP Irp)
-{
- PISAPNP_COMMON_EXTENSION CommonExt = DeviceObject->DeviceExtension;
-
- PAGED_CODE();
-
- DPRINT("%s(%p, %p) Minor - %X\n", __FUNCTION__, DeviceObject, Irp,
- IoGetCurrentIrpStackLocation(Irp)->MinorFunction);
-
- if (CommonExt->Signature == IsaPnpBus)
- {
- IoSkipCurrentIrpStackLocation(Irp);
- return IoCallDriver(((PISAPNP_FDO_EXTENSION)CommonExt)->Ldo, Irp);
- }
- else
- {
- NTSTATUS Status = Irp->IoStatus.Status;
-
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return Status;
- }
-}
-
CODE_SEG("PAGE")
PIO_RESOURCE_REQUIREMENTS_LIST
IsaPnpCreateReadPortDORequirements(
@@ -1571,6 +1515,62 @@ IsaPnp(
return IsaPdoPnp((PISAPNP_PDO_EXTENSION)DevExt, Irp, IrpSp);
}
+_Dispatch_type_(IRP_MJ_CREATE)
+_Dispatch_type_(IRP_MJ_CLOSE)
+static CODE_SEG("PAGE") DRIVER_DISPATCH_PAGED IsaCreateClose;
+
+static
+CODE_SEG("PAGE")
+NTSTATUS
+NTAPI
+IsaCreateClose(
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _Inout_ PIRP Irp)
+{
+ PAGED_CODE();
+
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+
+ DPRINT("%s(%p, %p)\n", __FUNCTION__, DeviceObject, Irp);
+
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+ return STATUS_SUCCESS;
+}
+
+_Dispatch_type_(IRP_MJ_DEVICE_CONTROL)
+_Dispatch_type_(IRP_MJ_SYSTEM_CONTROL)
+static CODE_SEG("PAGE") DRIVER_DISPATCH_PAGED IsaForwardOrIgnore;
+
+static
+CODE_SEG("PAGE")
+NTSTATUS
+NTAPI
+IsaForwardOrIgnore(
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _Inout_ PIRP Irp)
+{
+ PISAPNP_COMMON_EXTENSION CommonExt = DeviceObject->DeviceExtension;
+
+ PAGED_CODE();
+
+ DPRINT("%s(%p, %p) Minor - %X\n", __FUNCTION__, DeviceObject, Irp,
+ IoGetCurrentIrpStackLocation(Irp)->MinorFunction);
+
+ if (CommonExt->Signature == IsaPnpBus)
+ {
+ IoSkipCurrentIrpStackLocation(Irp);
+ return IoCallDriver(((PISAPNP_FDO_EXTENSION)CommonExt)->Ldo, Irp);
+ }
+ else
+ {
+ NTSTATUS Status = Irp->IoStatus.Status;
+
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return Status;
+ }
+}
+
CODE_SEG("INIT")
NTSTATUS
NTAPI
diff --git a/drivers/bus/isapnp/isapnp.h b/drivers/bus/isapnp/isapnp.h
index ea84d2d5148..17945dbe06a 100644
--- a/drivers/bus/isapnp/isapnp.h
+++ b/drivers/bus/isapnp/isapnp.h
@@ -12,7 +12,9 @@
#include <ntddk.h>
#include <ntstrsafe.h>
#include <section_attribs.h>
+
#include "isapnphw.h"
+#include "isapnpres.h"
#include <initguid.h>
#include <wdmguid.h>
@@ -23,121 +25,12 @@ extern "C" {
#define TAG_ISAPNP 'pasI'
-/** @brief Maximum size of resource data structure supported by the driver. */
-#define ISAPNP_MAX_RESOURCEDATA 0x1000
-
-/** @brief Maximum number of Start DF tags supported by the driver. */
-#define ISAPNP_MAX_ALTERNATIVES 8
-
typedef enum
{
dsStopped,
dsStarted
} ISAPNP_DEVICE_STATE;
-typedef struct _ISAPNP_IO
-{
- USHORT CurrentBase;
- ISAPNP_IO_DESCRIPTION Description;
- UCHAR Index;
-} ISAPNP_IO, *PISAPNP_IO;
-
-typedef struct _ISAPNP_IRQ
-{
- UCHAR CurrentNo;
- UCHAR CurrentType;
- ISAPNP_IRQ_DESCRIPTION Description;
- UCHAR Index;
-} ISAPNP_IRQ, *PISAPNP_IRQ;
-
-typedef struct _ISAPNP_DMA
-{
- UCHAR CurrentChannel;
- ISAPNP_DMA_DESCRIPTION Description;
- UCHAR Index;
-} ISAPNP_DMA, *PISAPNP_DMA;
-
-typedef struct _ISAPNP_MEMRANGE
-{
- ULONG CurrentBase;
- ULONG CurrentLength;
- ISAPNP_MEMRANGE_DESCRIPTION Description;
- UCHAR Index;
-} ISAPNP_MEMRANGE, *PISAPNP_MEMRANGE;
-
-typedef struct _ISAPNP_MEMRANGE32
-{
- ULONG CurrentBase;
- ULONG CurrentLength;
- ISAPNP_MEMRANGE32_DESCRIPTION Description;
- UCHAR Index;
-} ISAPNP_MEMRANGE32, *PISAPNP_MEMRANGE32;
-
-typedef struct _ISAPNP_COMPATIBLE_ID_ENTRY
-{
- UCHAR VendorId[3];
- USHORT ProdId;
- LIST_ENTRY IdLink;
-} ISAPNP_COMPATIBLE_ID_ENTRY, *PISAPNP_COMPATIBLE_ID_ENTRY;
-
-typedef struct _ISAPNP_ALTERNATIVES
-{
- ISAPNP_IO_DESCRIPTION Io[ISAPNP_MAX_ALTERNATIVES];
- ISAPNP_IRQ_DESCRIPTION Irq[ISAPNP_MAX_ALTERNATIVES];
- ISAPNP_DMA_DESCRIPTION Dma[ISAPNP_MAX_ALTERNATIVES];
- ISAPNP_MEMRANGE_DESCRIPTION MemRange[ISAPNP_MAX_ALTERNATIVES];
- ISAPNP_MEMRANGE32_DESCRIPTION MemRange32[ISAPNP_MAX_ALTERNATIVES];
- UCHAR Priority[ISAPNP_MAX_ALTERNATIVES];
- UCHAR IoIndex;
- UCHAR IrqIndex;
- UCHAR DmaIndex;
- UCHAR MemRangeIndex;
- UCHAR MemRange32Index;
-
- _Field_range_(0, ISAPNP_MAX_ALTERNATIVES)
- UCHAR Count;
-} ISAPNP_ALTERNATIVES, *PISAPNP_ALTERNATIVES;
-
-typedef struct _ISAPNP_LOGICAL_DEVICE
-{
- PDEVICE_OBJECT Pdo;
-
- /**
- * @name The card data.
- * @{
- */
- UCHAR CSN;
- UCHAR VendorId[3];
- USHORT ProdId;
- ULONG SerialNumber;
- /**@}*/
-
- /**
- * @name The logical device data.
- * @{
- */
- UCHAR LDN;
- UCHAR LogVendorId[3];
- USHORT LogProdId;
- LIST_ENTRY CompatibleIdList;
- PSTR FriendlyName;
- PISAPNP_ALTERNATIVES Alternatives;
-
- ISAPNP_IO Io[8];
- ISAPNP_IRQ Irq[2];
- ISAPNP_DMA Dma[2];
- ISAPNP_MEMRANGE MemRange[4];
- ISAPNP_MEMRANGE32 MemRange32[4];
- /**@}*/
-
- ULONG Flags;
-#define ISAPNP_PRESENT 0x00000001 /**< @brief Cleared when the device is
physically removed. */
-#define ISAPNP_HAS_MULTIPLE_LOGDEVS 0x00000002 /**< @brief Indicates if the parent
card has multiple logical devices. */
-#define ISAPNP_HAS_RESOURCES 0x00000004 /**< @brief Cleared when the device has
no boot resources. */
-
- LIST_ENTRY DeviceLink;
-} ISAPNP_LOGICAL_DEVICE, *PISAPNP_LOGICAL_DEVICE;
-
typedef enum _ISAPNP_SIGNATURE
{
IsaPnpBus = 'odFI',
@@ -248,46 +141,6 @@ IsaPnpReleaseDeviceDataLock(
KeSetEvent(&FdoExt->DeviceSyncEvent, IO_NO_INCREMENT, FALSE);
}
-FORCEINLINE
-BOOLEAN
-HasIoAlternatives(
- _In_ PISAPNP_ALTERNATIVES Alternatives)
-{
- return (Alternatives->Io[0].Length != 0);
-}
-
-FORCEINLINE
-BOOLEAN
-HasIrqAlternatives(
- _In_ PISAPNP_ALTERNATIVES Alternatives)
-{
- return (Alternatives->Irq[0].Mask != 0);
-}
-
-FORCEINLINE
-BOOLEAN
-HasDmaAlternatives(
- _In_ PISAPNP_ALTERNATIVES Alternatives)
-{
- return (Alternatives->Dma[0].Mask != 0);
-}
-
-FORCEINLINE
-BOOLEAN
-HasMemoryAlternatives(
- _In_ PISAPNP_ALTERNATIVES Alternatives)
-{
- return (Alternatives->MemRange[0].Length != 0);
-}
-
-FORCEINLINE
-BOOLEAN
-HasMemory32Alternatives(
- _In_ PISAPNP_ALTERNATIVES Alternatives)
-{
- return (Alternatives->MemRange32[0].Length != 0);
-}
-
/* isapnp.c */
CODE_SEG("PAGE")
diff --git a/drivers/bus/isapnp/isapnpres.h b/drivers/bus/isapnp/isapnpres.h
new file mode 100644
index 00000000000..16c21646a0f
--- /dev/null
+++ b/drivers/bus/isapnp/isapnpres.h
@@ -0,0 +1,162 @@
+/*
+ * PROJECT: ReactOS ISA PnP Bus driver
+ * LICENSE: GPL-2.0-or-later (
https://spdx.org/licenses/GPL-2.0-or-later)
+ * PURPOSE: Resource management header file
+ * COPYRIGHT: Copyright 2010 Cameron Gutman <cameron.gutman(a)reactos.org>
+ * Copyright 2020 Hervé Poussineau <hpoussin(a)reactos.org>
+ */
+
+#pragma once
+
+/** @brief Maximum size of resource data structure supported by the driver. */
+#define ISAPNP_MAX_RESOURCEDATA 0x1000
+
+/** @brief Maximum number of Start DF tags supported by the driver. */
+#define ISAPNP_MAX_ALTERNATIVES 8
+
+typedef struct _ISAPNP_IO
+{
+ USHORT CurrentBase;
+ ISAPNP_IO_DESCRIPTION Description;
+ UCHAR Index;
+} ISAPNP_IO, *PISAPNP_IO;
+
+typedef struct _ISAPNP_IRQ
+{
+ UCHAR CurrentNo;
+ UCHAR CurrentType;
+ ISAPNP_IRQ_DESCRIPTION Description;
+ UCHAR Index;
+} ISAPNP_IRQ, *PISAPNP_IRQ;
+
+typedef struct _ISAPNP_DMA
+{
+ UCHAR CurrentChannel;
+ ISAPNP_DMA_DESCRIPTION Description;
+ UCHAR Index;
+} ISAPNP_DMA, *PISAPNP_DMA;
+
+typedef struct _ISAPNP_MEMRANGE
+{
+ ULONG CurrentBase;
+ ULONG CurrentLength;
+ ISAPNP_MEMRANGE_DESCRIPTION Description;
+ UCHAR Index;
+} ISAPNP_MEMRANGE, *PISAPNP_MEMRANGE;
+
+typedef struct _ISAPNP_MEMRANGE32
+{
+ ULONG CurrentBase;
+ ULONG CurrentLength;
+ ISAPNP_MEMRANGE32_DESCRIPTION Description;
+ UCHAR Index;
+} ISAPNP_MEMRANGE32, *PISAPNP_MEMRANGE32;
+
+typedef struct _ISAPNP_COMPATIBLE_ID_ENTRY
+{
+ UCHAR VendorId[3];
+ USHORT ProdId;
+ LIST_ENTRY IdLink;
+} ISAPNP_COMPATIBLE_ID_ENTRY, *PISAPNP_COMPATIBLE_ID_ENTRY;
+
+typedef struct _ISAPNP_ALTERNATIVES
+{
+ ISAPNP_IO_DESCRIPTION Io[ISAPNP_MAX_ALTERNATIVES];
+ ISAPNP_IRQ_DESCRIPTION Irq[ISAPNP_MAX_ALTERNATIVES];
+ ISAPNP_DMA_DESCRIPTION Dma[ISAPNP_MAX_ALTERNATIVES];
+ ISAPNP_MEMRANGE_DESCRIPTION MemRange[ISAPNP_MAX_ALTERNATIVES];
+ ISAPNP_MEMRANGE32_DESCRIPTION MemRange32[ISAPNP_MAX_ALTERNATIVES];
+ UCHAR Priority[ISAPNP_MAX_ALTERNATIVES];
+ UCHAR IoIndex;
+ UCHAR IrqIndex;
+ UCHAR DmaIndex;
+ UCHAR MemRangeIndex;
+ UCHAR MemRange32Index;
+
+ _Field_range_(0, ISAPNP_MAX_ALTERNATIVES)
+ UCHAR Count;
+} ISAPNP_ALTERNATIVES, *PISAPNP_ALTERNATIVES;
+
+typedef struct _ISAPNP_LOGICAL_DEVICE
+{
+ LIST_ENTRY DeviceLink;
+ PDEVICE_OBJECT Pdo;
+
+ ULONG Flags;
+/** Cleared when the device is physically removed */
+#define ISAPNP_PRESENT 0x00000001
+
+/** Indicates if the parent card has multiple logical devices */
+#define ISAPNP_HAS_MULTIPLE_LOGDEVS 0x00000002
+
+/** Cleared when the device has no boot resources */
+#define ISAPNP_HAS_RESOURCES 0x00000004
+
+ /**
+ * @name The card data.
+ * @{
+ */
+ UCHAR CSN;
+ UCHAR VendorId[3];
+ USHORT ProdId;
+ ULONG SerialNumber;
+ /**@}*/
+
+ /**
+ * @name The logical device data.
+ * @{
+ */
+ UCHAR LDN;
+ UCHAR LogVendorId[3];
+ USHORT LogProdId;
+ PISAPNP_ALTERNATIVES Alternatives;
+ PSTR FriendlyName;
+ LIST_ENTRY CompatibleIdList;
+
+ ISAPNP_IO Io[8];
+ ISAPNP_IRQ Irq[2];
+ ISAPNP_DMA Dma[2];
+ ISAPNP_MEMRANGE MemRange[4];
+ ISAPNP_MEMRANGE32 MemRange32[4];
+ /**@}*/
+} ISAPNP_LOGICAL_DEVICE, *PISAPNP_LOGICAL_DEVICE;
+
+FORCEINLINE
+BOOLEAN
+HasIoAlternatives(
+ _In_ PISAPNP_ALTERNATIVES Alternatives)
+{
+ return (Alternatives->Io[0].Length != 0);
+}
+
+FORCEINLINE
+BOOLEAN
+HasIrqAlternatives(
+ _In_ PISAPNP_ALTERNATIVES Alternatives)
+{
+ return (Alternatives->Irq[0].Mask != 0);
+}
+
+FORCEINLINE
+BOOLEAN
+HasDmaAlternatives(
+ _In_ PISAPNP_ALTERNATIVES Alternatives)
+{
+ return (Alternatives->Dma[0].Mask != 0);
+}
+
+FORCEINLINE
+BOOLEAN
+HasMemoryAlternatives(
+ _In_ PISAPNP_ALTERNATIVES Alternatives)
+{
+ return (Alternatives->MemRange[0].Length != 0);
+}
+
+FORCEINLINE
+BOOLEAN
+HasMemory32Alternatives(
+ _In_ PISAPNP_ALTERNATIVES Alternatives)
+{
+ return (Alternatives->MemRange32[0].Length != 0);
+}