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/i... ============================================================================== --- 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/s... ============================================================================== --- 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) /*