[ros-diffs] [hpoussin] 22518: Don't enumerate the serial port used for debugging

hpoussin at svn.reactos.org hpoussin at svn.reactos.org
Fri Jun 23 00:57:32 CEST 2006


Author: hpoussin
Date: Fri Jun 23 02:57:32 2006
New Revision: 22518

URL: http://svn.reactos.ru/svn/reactos?rev=22518&view=rev
Log:
Don't enumerate the serial port used for debugging

Modified:
    trunk/reactos/drivers/bus/acpi/include/acpi.h
    trunk/reactos/drivers/bus/acpi/ospm/fdo.c

Modified: trunk/reactos/drivers/bus/acpi/include/acpi.h
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/drivers/bus/acpi/include/acpi.h?rev=22518&r1=22517&r2=22518&view=diff
==============================================================================
--- trunk/reactos/drivers/bus/acpi/include/acpi.h (original)
+++ trunk/reactos/drivers/bus/acpi/include/acpi.h Fri Jun 23 02:57:32 2006
@@ -60,6 +60,7 @@
 #include "actables.h"
 #include "acdispat.h"
 #include <ntddk.h>
+#include <ndk/haltypes.h>
 #include <bm.h>
 #include <bn.h>
 #include <bmpower.h>

Modified: trunk/reactos/drivers/bus/acpi/ospm/fdo.c
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/drivers/bus/acpi/ospm/fdo.c?rev=22518&r1=22517&r2=22518&view=diff
==============================================================================
--- trunk/reactos/drivers/bus/acpi/ospm/fdo.c (original)
+++ trunk/reactos/drivers/bus/acpi/ospm/fdo.c Fri Jun 23 02:57:32 2006
@@ -361,6 +361,77 @@
 }
 
 
+static BOOLEAN
+AcpiCheckIfIsSerialDebugPort(
+  IN PACPI_DEVICE Device)
+{
+  ACPI_STATUS AcpiStatus;
+  BM_NODE *Node;
+  ACPI_BUFFER Buffer;
+  BOOLEAN Done;
+  RESOURCE* resource;
+
+  if (!KdComPortInUse)
+    return FALSE;
+
+  AcpiStatus = bm_get_node(Device->BmHandle, 0, &Node);
+  if (!ACPI_SUCCESS(AcpiStatus))
+    return FALSE;
+
+  /* Get current resources */
+  Buffer.length = 0;
+  AcpiStatus = acpi_get_current_resources(Node->device.acpi_handle, &Buffer);
+  if ((AcpiStatus & ACPI_OK) == 0)
+    return FALSE;
+  if (Buffer.length == 0)
+    return FALSE;
+
+  Buffer.pointer = ExAllocatePool(PagedPool, Buffer.length);
+  if (!Buffer.pointer)
+    return FALSE;
+  AcpiStatus = acpi_get_current_resources(Node->device.acpi_handle, &Buffer);
+  if (!ACPI_SUCCESS(AcpiStatus))
+  {
+    ExFreePool(Buffer.pointer);
+    return FALSE;
+  }
+
+  /* Loop through the list of resources to see if the
+   * device is using the serial port address
+   */
+  Done = FALSE;
+  resource = (RESOURCE*)Buffer.pointer;
+  while (!Done)
+  {
+    switch (resource->id)
+    {
+      case io:
+      {
+        IO_RESOURCE *io_data = (IO_RESOURCE*) &resource->data;
+        if (*KdComPortInUse == ULongToPtr(io_data->min_base_address))
+        {
+          ExFreePool(Buffer.pointer);
+          return TRUE;
+        }
+        break;
+      }
+      case end_tag:
+      {
+        Done = TRUE;
+        break;
+      }
+      default:
+      {
+        break;
+      }
+    }
+    resource = (RESOURCE *) ((NATIVE_UINT) resource + (NATIVE_UINT) resource->length);
+  }
+
+  ExFreePool(Buffer.pointer);
+  return FALSE;
+}
+
 static NTSTATUS
 FdoQueryBusRelations(
   IN PDEVICE_OBJECT DeviceObject,
@@ -396,6 +467,15 @@
   {
     ACPI_BUFFER Buffer;
     Device = CONTAINING_RECORD(CurrentEntry, ACPI_DEVICE, DeviceListEntry);
+
+    if (AcpiCheckIfIsSerialDebugPort(Device))
+    {
+      /* Skip this device */
+      DPRINT("Found debug serial port ; skipping it\n");
+      Relations->Count--;
+      CurrentEntry = CurrentEntry->Flink;
+      continue;
+    }
 
     /* FIXME: For ACPI namespace devices on the motherboard create filter DOs
        and attach them just above the ACPI bus device object (PDO) */




More information about the Ros-diffs mailing list