- Implement NdisMRegisterDmaChannel and NdisMInitializeScatterGatherDma

svn path=/trunk/; revision=40109
This commit is contained in:
Cameron Gutman 2009-03-20 00:26:53 +00:00
parent cea9babf80
commit ac73f877b3
2 changed files with 89 additions and 25 deletions

View file

@ -722,7 +722,7 @@ NdisMGetDmaAlignment(
/*
* @unimplemented
* @implemented
*/
NDIS_STATUS
EXPORT
@ -734,9 +734,44 @@ NdisMRegisterDmaChannel(
IN PNDIS_DMA_DESCRIPTION DmaDescription,
IN ULONG MaximumLength)
{
UNIMPLEMENTED
PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportAdapterHandle;
DEVICE_DESCRIPTION DeviceDesc;
ULONG MapRegisters;
return NDIS_STATUS_FAILURE;
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 @@ NdisMUnmapIoSpace(
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 */

View file

@ -670,28 +670,6 @@ NdisMGetDeviceProperty(
}
/*
* @unimplemented
*/
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
*/