[ros-diffs] [cgutman] 40109: - Implement NdisMRegisterDmaChannel and NdisMInitializeScatterGatherDma
cgutman at svn.reactos.org
cgutman at svn.reactos.org
Fri Mar 20 01:26:54 CET 2009
Author: cgutman
Date: Fri Mar 20 03:26:53 2009
New Revision: 40109
URL: http://svn.reactos.org/svn/reactos?rev=40109&view=rev
Log:
- Implement NdisMRegisterDmaChannel and NdisMInitializeScatterGatherDma
Modified:
trunk/reactos/drivers/network/ndis/ndis/io.c
trunk/reactos/drivers/network/ndis/ndis/stubs.c
Modified: trunk/reactos/drivers/network/ndis/ndis/io.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/ndis/ndis/io.c?rev=40109&r1=40108&r2=40109&view=diff
==============================================================================
--- trunk/reactos/drivers/network/ndis/ndis/io.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/ndis/ndis/io.c [iso-8859-1] Fri Mar 20 03:26:53 2009
@@ -722,7 +722,7 @@
/*
- * @unimplemented
+ * @implemented
*/
NDIS_STATUS
EXPORT
@@ -734,9 +734,44 @@
IN PNDIS_DMA_DESCRIPTION DmaDescription,
IN ULONG MaximumLength)
{
- UNIMPLEMENTED
-
- return NDIS_STATUS_FAILURE;
+ PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportAdapterHandle;
+ DEVICE_DESCRIPTION DeviceDesc;
+ ULONG MapRegisters;
+
+ NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
+
+ if (Adapter->NdisMiniportBlock.SystemAdapterObject)
+ {
+ NDIS_DbgPrint(MIN_TRACE,("Using existing DMA adapter\n"));
+ *MiniportDmaHandle = &Adapter->NdisMiniportBlock;
+ return NDIS_STATUS_SUCCESS;
+ }
+
+ RtlZeroMemory(&DeviceDesc, sizeof(DEVICE_DESCRIPTION));
+
+ DeviceDesc.Version = DEVICE_DESCRIPTION_VERSION;
+ DeviceDesc.Master = (Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_BUS_MASTER);
+ DeviceDesc.ScatterGather = FALSE; //Is this correct?
+ DeviceDesc.DemandMode = DmaDescription->DemandMode;
+ DeviceDesc.AutoInitialize = DmaDescription->AutoInitialize;
+ DeviceDesc.Dma32BitAddresses = Dma32BitAddresses;
+ DeviceDesc.Dma64BitAddresses = !Dma32BitAddresses; //Is this correct?
+ DeviceDesc.BusNumber = Adapter->NdisMiniportBlock.BusNumber;
+ DeviceDesc.DmaChannel = DmaDescription->DmaChannel;
+ DeviceDesc.InterfaceType = Adapter->NdisMiniportBlock.BusType;
+ DeviceDesc.DmaWidth = DmaDescription->DmaWidth;
+ DeviceDesc.DmaSpeed = DmaDescription->DmaSpeed;
+ DeviceDesc.MaximumLength = MaximumLength;
+
+ Adapter->NdisMiniportBlock.SystemAdapterObject =
+ IoGetDmaAdapter(Adapter->NdisMiniportBlock.PhysicalDeviceObject, &DeviceDesc, &MapRegisters);
+
+ if (!Adapter->NdisMiniportBlock.SystemAdapterObject)
+ return NDIS_STATUS_RESOURCES;
+
+ *MiniportDmaHandle = &Adapter->NdisMiniportBlock;
+
+ return NDIS_STATUS_SUCCESS;
}
@@ -922,5 +957,56 @@
MmUnmapIoSpace(VirtualAddress, Length);
}
+/*
+ * @implemented
+ */
+NDIS_STATUS
+EXPORT
+NdisMInitializeScatterGatherDma(
+ IN NDIS_HANDLE MiniportAdapterHandle,
+ IN BOOLEAN Dma64BitAddresses,
+ IN ULONG MaximumPhysicalMapping)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 5.0
+ */
+{
+ PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportAdapterHandle;
+ ULONG MapRegisters;
+ DEVICE_DESCRIPTION DeviceDesc;
+
+ NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
+
+ if (!(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_BUS_MASTER))
+ return NDIS_STATUS_NOT_SUPPORTED;
+
+ if (Adapter->NdisMiniportBlock.SystemAdapterObject)
+ {
+ NDIS_DbgPrint(MIN_TRACE,("Using existing DMA adapter\n"));
+ return NDIS_STATUS_SUCCESS;
+ }
+
+ RtlZeroMemory(&DeviceDesc, sizeof(DEVICE_DESCRIPTION));
+
+ DeviceDesc.Version = DEVICE_DESCRIPTION_VERSION;
+ DeviceDesc.Master = TRUE;
+ DeviceDesc.ScatterGather = TRUE;
+ DeviceDesc.Dma32BitAddresses = !Dma64BitAddresses;
+ DeviceDesc.Dma64BitAddresses = Dma64BitAddresses;
+ DeviceDesc.BusNumber = Adapter->NdisMiniportBlock.BusNumber;
+ DeviceDesc.InterfaceType = Adapter->NdisMiniportBlock.BusType;
+ DeviceDesc.MaximumLength = MaximumPhysicalMapping;
+
+ Adapter->NdisMiniportBlock.SystemAdapterObject =
+ IoGetDmaAdapter(Adapter->NdisMiniportBlock.PhysicalDeviceObject, &DeviceDesc, &MapRegisters);
+
+ if (!Adapter->NdisMiniportBlock.SystemAdapterObject)
+ return NDIS_STATUS_RESOURCES;
+
+ return NDIS_STATUS_SUCCESS;
+}
+
/* EOF */
Modified: trunk/reactos/drivers/network/ndis/ndis/stubs.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/ndis/ndis/stubs.c?rev=40109&r1=40108&r2=40109&view=diff
==============================================================================
--- trunk/reactos/drivers/network/ndis/ndis/stubs.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/ndis/ndis/stubs.c [iso-8859-1] Fri Mar 20 03:26:53 2009
@@ -675,28 +675,6 @@
*/
NDIS_STATUS
EXPORT
-NdisMInitializeScatterGatherDma(
- IN NDIS_HANDLE MiniportAdapterHandle,
- IN BOOLEAN Dma64BitAddresses,
- IN ULONG MaximumPhysicalMapping)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 5.0
- */
-{
- UNIMPLEMENTED
-
- return NDIS_STATUS_FAILURE;
-}
-
-
-/*
- * @unimplemented
- */
-NDIS_STATUS
-EXPORT
NdisMPromoteMiniport(
IN NDIS_HANDLE MiniportAdapterHandle)
/*
More information about the Ros-diffs
mailing list