Cleanup IoGetDmaAdapter and use HalGetDmaAdapter instead of HalGetAdapter.
[reactos.git] / reactos / ntoskrnl / io / pnpdma.c
index c3f1fcd..9dd01f5 100644 (file)
-/* $Id: pnpdma.c,v 1.4 2003/10/20 06:03:29 vizzini Exp $
+/* $Id$
  *
- * COPYRIGHT:      See COPYING in the top level directory
- * PROJECT:        ReactOS kernel
- * FILE:           ntoskrnl/io/pnpmgr.c
- * PURPOSE:        PnP manager DMA routines
- * PROGRAMMER:     Filip Navara (xnavara@volny.cz)
- * UPDATE HISTORY:
- *   22/09/2003 FiN Created
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            ntoskrnl/io/pnpdma.c
+ * PURPOSE:         PnP manager DMA routines
+ *
+ * PROGRAMMERS:     Filip Navara (xnavara@volny.cz)
  */
 
 /* INCLUDES ******************************************************************/
 
-#include <ddk/ntddk.h>
-#include <ddk/pnptypes.h>
-#include <ddk/pnpfuncs.h>
-#include <reactos/bugcodes.h>
-#include <internal/io.h>
-#include <internal/po.h>
-#include <internal/ldr.h>
-#include <internal/module.h>
-
-//#define NDEBUG
+#include <ntoskrnl.h>
+#define NDEBUG
 #include <internal/debug.h>
-
-#ifdef __USE_W32API
-#include <initguid.h>
-#else
-#include <ole32/guiddef.h>
-#endif
-DEFINE_GUID(GUID_BUS_INTERFACE_STANDARD, 0x496B8280L, 0x6F25, 0x11D0, 0xBE, 0xAF, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F);
-
-typedef struct _DMA_ADAPTER_INTERNAL {
-  USHORT Version;
-  USHORT Size;
-  PDMA_OPERATIONS DmaOperations;
-  PADAPTER_OBJECT HalAdapter;
-} DMA_ADAPTER_INTERNAL, *PDMA_ADAPTER_INTERNAL;
+#include <ddk/wdmguid.h>
 
 /* FUNCTIONS *****************************************************************/
 
-VOID
-IopPutDmaAdapter(
-  PDMA_ADAPTER DmaAdapter)
-{
-  ExFreePool(DmaAdapter);
-}
-
-
-PVOID
-IopAllocateCommonBuffer(
-  IN PDMA_ADAPTER DmaAdapter,
-  IN ULONG Length,
-  OUT PPHYSICAL_ADDRESS LogicalAddress,
-  IN BOOLEAN CacheEnabled)
-{
-  return HalAllocateCommonBuffer(
-    ((PDMA_ADAPTER_INTERNAL)DmaAdapter)->HalAdapter,
-    Length, LogicalAddress, CacheEnabled);
-}
-
-
-VOID
-IopFreeCommonBuffer(
-  IN PDMA_ADAPTER DmaAdapter,
-  IN ULONG Length,
-  IN PHYSICAL_ADDRESS LogicalAddress,
-  IN PVOID VirtualAddress,
-  IN BOOLEAN CacheEnabled)
-{
-  HalFreeCommonBuffer(
-    ((PDMA_ADAPTER_INTERNAL)DmaAdapter)->HalAdapter,
-    Length, LogicalAddress, VirtualAddress, CacheEnabled);
-}
-
-
-NTSTATUS
-IopAllocateAdapterChannel(
-  IN PDMA_ADAPTER DmaAdapter,
-  IN PDEVICE_OBJECT DeviceObject,
-  IN ULONG NumberOfMapRegisters,
-  IN PDRIVER_CONTROL ExecutionRoutine,
-  IN PVOID Context)
-{
-  return IoAllocateAdapterChannel(
-    ((PDMA_ADAPTER_INTERNAL)DmaAdapter)->HalAdapter,
-    DeviceObject, NumberOfMapRegisters, ExecutionRoutine, Context);
-}
-
-
-BOOLEAN
-IopFlushAdapterBuffers(
-  IN PDMA_ADAPTER DmaAdapter,
-  IN PMDL Mdl,
-  IN PVOID MapRegisterBase,
-  IN PVOID CurrentVa,
-  IN ULONG Length,
-  IN BOOLEAN WriteToDevice)
-{
-  return IoFlushAdapterBuffers(
-    ((PDMA_ADAPTER_INTERNAL)DmaAdapter)->HalAdapter,
-    Mdl, MapRegisterBase, CurrentVa, Length, WriteToDevice);
-}
-
-
-VOID
-IopFreeAdapterChannel(
-  IN PDMA_ADAPTER DmaAdapter)
-{
-  IoFreeAdapterChannel(((PDMA_ADAPTER_INTERNAL)DmaAdapter)->HalAdapter);
-}
-
-
-VOID
-IopFreeMapRegisters(
-  IN PDMA_ADAPTER DmaAdapter,
-  PVOID MapRegisterBase,
-  ULONG NumberOfMapRegisters)
-{
-  IoFreeMapRegisters(
-    ((PDMA_ADAPTER_INTERNAL)DmaAdapter)->HalAdapter,
-    MapRegisterBase, NumberOfMapRegisters);
-}
-
-
-PHYSICAL_ADDRESS
-IopMapTransfer(
-  IN PDMA_ADAPTER DmaAdapter,
-  IN PMDL Mdl,
-  IN PVOID MapRegisterBase,
-  IN PVOID CurrentVa,
-  IN OUT PULONG Length,
-  IN BOOLEAN WriteToDevice)
-{
-  return IoMapTransfer(
-    ((PDMA_ADAPTER_INTERNAL)DmaAdapter)->HalAdapter,
-    Mdl, MapRegisterBase, CurrentVa, Length, WriteToDevice);
-}
-
-
-ULONG
-IopGetDmaAlignment(
-  IN PDMA_ADAPTER DmaAdapter)
-{
-  /* FIXME: This is actually true only on i386 and Amd64 */
-  return 1L;
-}
-
-
-ULONG
-IopReadDmaCounter(
-  IN PDMA_ADAPTER DmaAdapter)
-{
-  return HalReadDmaCounter(((PDMA_ADAPTER_INTERNAL)DmaAdapter)->HalAdapter);
-}
-
-
-NTSTATUS
-IopGetScatterGatherList(
-  IN PDMA_ADAPTER DmaAdapter,
-  IN PDEVICE_OBJECT DeviceObject,
-  IN PMDL Mdl,
-  IN PVOID CurrentVa,
-  IN ULONG Length,
-  IN PDRIVER_LIST_CONTROL ExecutionRoutine,
-  IN PVOID Context,
-  IN BOOLEAN WriteToDevice)
-{
-  /* FIXME */
-  return STATUS_UNSUCCESSFUL;
-}
-
-
-VOID
-IopPutScatterGatherList(
-  IN PDMA_ADAPTER DmaAdapter,
-  IN PSCATTER_GATHER_LIST ScatterGather,
-  IN BOOLEAN WriteToDevice)
-{
-  /* FIXME */
-}
-
-
 /*
  * @implemented
  */
-PDMA_ADAPTER
-STDCALL
+PDMA_ADAPTER STDCALL
 IoGetDmaAdapter(
   IN PDEVICE_OBJECT PhysicalDeviceObject,
   IN PDEVICE_DESCRIPTION DeviceDescription,
@@ -197,85 +32,52 @@ IoGetDmaAdapter(
   IO_STATUS_BLOCK IoStatusBlock;
   IO_STACK_LOCATION Stack;
   DEVICE_DESCRIPTION PrivateDeviceDescription;
-  PDMA_ADAPTER Result = NULL;
-  PDMA_ADAPTER_INTERNAL ResultInternal = NULL;
-  PADAPTER_OBJECT HalAdapter;
-  
+  PDMA_ADAPTER Adapter = NULL;
+
   DPRINT("IoGetDmaAdapter called\n");
-  
+
   /*
-   * Try to create DMA adapter through bus driver
+   * Try to create DMA adapter through bus driver.
    */
+
   if (PhysicalDeviceObject != NULL)
   {
-    if (DeviceDescription->InterfaceType == 0x0F /*PNPBus*/ ||
-        DeviceDescription->InterfaceType == 0xFFFFFFFF)
-    {      
-      memcpy(&PrivateDeviceDescription, DeviceDescription,
+    if (DeviceDescription->InterfaceType == PNPBus ||
+        DeviceDescription->InterfaceType == InterfaceTypeUndefined)
+    {
+      RtlCopyMemory(&PrivateDeviceDescription, DeviceDescription,
         sizeof(DEVICE_DESCRIPTION));
       Status = IoGetDeviceProperty(PhysicalDeviceObject,
-         DevicePropertyLegacyBusType, sizeof(INTERFACE_TYPE), 
+         DevicePropertyLegacyBusType, sizeof(INTERFACE_TYPE),
          &PrivateDeviceDescription.InterfaceType, &ResultLength);
       if (!NT_SUCCESS(Status))
-      {
         PrivateDeviceDescription.InterfaceType = Internal;
-      }
       DeviceDescription = &PrivateDeviceDescription;
     }
 
     Stack.Parameters.QueryInterface.Size = sizeof(BUS_INTERFACE_STANDARD);
     Stack.Parameters.QueryInterface.Version = 1;
     Stack.Parameters.QueryInterface.Interface = (PINTERFACE)&BusInterface;
-    Stack.Parameters.QueryInterface.InterfaceType = 
+    Stack.Parameters.QueryInterface.InterfaceType =
       &GUID_BUS_INTERFACE_STANDARD;
     Status = IopInitiatePnpIrp(PhysicalDeviceObject, &IoStatusBlock,
-      IRP_MN_QUERY_BUS_INFORMATION, &Stack);
-    if (!NT_SUCCESS(Status))
+      IRP_MN_QUERY_INTERFACE, &Stack);
+    if (NT_SUCCESS(Status))
     {
-      Result = BusInterface.GetDmaAdapter(BusInterface.Context,
+      Adapter = BusInterface.GetDmaAdapter(BusInterface.Context,
         DeviceDescription, NumberOfMapRegisters);
       BusInterface.InterfaceDereference(BusInterface.Context);
-      if (Result != NULL)
-        return Result;
+      if (Adapter != NULL)
+        return Adapter;
     }
   }
 
   /*
-   * Fallback to HAL
+   * Fallback to HAL.
    */
 
-  HalAdapter = HalGetAdapter(DeviceDescription, NumberOfMapRegisters);
-  if (HalAdapter == NULL)
-  {
-    return NULL;
-  }
-
-  ResultInternal = ExAllocatePool(PagedPool, sizeof(DMA_ADAPTER_INTERNAL) +
-    sizeof(DMA_OPERATIONS));
-  if (Result == NULL)
-  {
-    return NULL;
-  }
-
-  ResultInternal->Version = DEVICE_DESCRIPTION_VERSION;
-  ResultInternal->Size = sizeof(DMA_ADAPTER);
-  ResultInternal->DmaOperations = (PDMA_OPERATIONS)(ResultInternal + 1);
-  ResultInternal->DmaOperations->Size = sizeof(DMA_OPERATIONS);
-  ResultInternal->DmaOperations->PutDmaAdapter = IopPutDmaAdapter;
-  ResultInternal->DmaOperations->AllocateCommonBuffer = IopAllocateCommonBuffer;
-  ResultInternal->DmaOperations->FreeCommonBuffer = IopFreeCommonBuffer;
-  ResultInternal->DmaOperations->AllocateAdapterChannel = IopAllocateAdapterChannel;
-  ResultInternal->DmaOperations->FlushAdapterBuffers = IopFlushAdapterBuffers;
-  ResultInternal->DmaOperations->FreeAdapterChannel = IopFreeAdapterChannel;
-  ResultInternal->DmaOperations->FreeMapRegisters = IopFreeMapRegisters;
-  ResultInternal->DmaOperations->MapTransfer = IopMapTransfer;
-  ResultInternal->DmaOperations->GetDmaAlignment = IopGetDmaAlignment;
-  ResultInternal->DmaOperations->ReadDmaCounter = IopReadDmaCounter;
-  ResultInternal->DmaOperations->GetScatterGatherList = IopGetScatterGatherList;
-  ResultInternal->DmaOperations->PutScatterGatherList = IopPutScatterGatherList;
-  ResultInternal->HalAdapter = HalAdapter;
-
-  return (PDMA_ADAPTER)ResultInternal;
+  return HalGetDmaAdapter(PhysicalDeviceObject, DeviceDescription,
+                          NumberOfMapRegisters);
 }
 
 /* EOF */