mirror of
https://github.com/reactos/reactos.git
synced 2024-08-06 03:14:36 +00:00
- Implement IPortWaveCyclic::NewMasterDmaChannel, IPortWaveCyclic::NewDmaChannelSlave, IPortWavePci_fnNewMasterDmaChannel
svn path=/trunk/; revision=38595
This commit is contained in:
parent
4cfef4b794
commit
86f06a0ebe
|
@ -74,7 +74,9 @@ PcUnregisterIoTimeout(
|
|||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
PcDmaMasterDescription(
|
||||
|
@ -104,7 +106,9 @@ PcDmaMasterDescription(
|
|||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
PcDmaSlaveDescription(
|
||||
|
@ -112,7 +116,7 @@ PcDmaSlaveDescription(
|
|||
IN ULONG DmaIndex,
|
||||
IN BOOL DemandMode,
|
||||
IN ULONG AutoInitialize,
|
||||
IN DMA_SPEED DmaSpeed
|
||||
IN DMA_SPEED DmaSpeed,
|
||||
IN ULONG MaximumLength,
|
||||
IN ULONG DmaPort,
|
||||
OUT PDEVICE_DESCRIPTION DeviceDescription)
|
||||
|
@ -127,4 +131,4 @@ PcDmaSlaveDescription(
|
|||
DeviceDescription->DmaPort = DmaPort;
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ const GUID IID_IUnknown;
|
|||
const GUID IID_IIrpTarget;
|
||||
const GUID IID_IPinCount;
|
||||
const GUID IID_IPowerNotify;
|
||||
const GUID IID_IDmaChannelSlave;
|
||||
|
||||
const GUID GUID_DEVCLASS_SOUND; //FIXME
|
||||
//---------------------------------------------------------------
|
||||
|
@ -250,14 +251,30 @@ IPortWaveCyclic_fnNewMasterDmaChannel(
|
|||
IN DMA_WIDTH DmaWidth,
|
||||
IN DMA_SPEED DmaSpeed)
|
||||
{
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
NTSTATUS Status;
|
||||
DEVICE_DESCRIPTION DeviceDescription;
|
||||
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)iface;
|
||||
|
||||
if (!This->bInitialized)
|
||||
{
|
||||
DPRINT("IPortWaveCyclic_fnNewSlaveDmaChannel called w/o initialized\n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
Status = PcDmaMasterDescription(ResourceList, (Dma32BitAddresses | Dma64BitAddresses), Dma32BitAddresses, 0, Dma64BitAddresses, DmaWidth, DmaSpeed, MaximumLength, 0, &DeviceDescription);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
return PcNewDmaChannel(DmaChannel, OuterUnknown, NonPagedPool, &DeviceDescription, This->pDeviceObject);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IPortWaveCyclic_fnNewSlaveDmaChannel(
|
||||
IN IPortWaveCyclic * iface,
|
||||
OUT PDMACHANNELSLAVE* DmaChannel,
|
||||
OUT PDMACHANNELSLAVE* OutDmaChannel,
|
||||
IN PUNKNOWN OuterUnknown,
|
||||
IN PRESOURCELIST ResourceList OPTIONAL,
|
||||
IN ULONG DmaIndex,
|
||||
|
@ -265,12 +282,9 @@ IPortWaveCyclic_fnNewSlaveDmaChannel(
|
|||
IN BOOL DemandMode,
|
||||
IN DMA_SPEED DmaSpeed)
|
||||
{
|
||||
DEVICE_DESCRIPTION DeviceDesc;
|
||||
INTERFACE_TYPE BusType;
|
||||
ULONG ResultLength;
|
||||
DEVICE_DESCRIPTION DeviceDescription;
|
||||
PDMACHANNEL DmaChannel;
|
||||
NTSTATUS Status;
|
||||
ULONG MapRegisters;
|
||||
PDMA_ADAPTER Adapter;
|
||||
|
||||
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)iface;
|
||||
|
||||
|
@ -280,34 +294,22 @@ IPortWaveCyclic_fnNewSlaveDmaChannel(
|
|||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
Status = IoGetDeviceProperty(This->pDeviceObject, DevicePropertyLegacyBusType, sizeof(BusType), (PVOID)&BusType, &ResultLength);
|
||||
if (!NT_SUCCESS(Status))
|
||||
// FIXME
|
||||
// Check for F-Type DMA Support
|
||||
//
|
||||
|
||||
Status = PcDmaSlaveDescription(ResourceList, DmaIndex, DemandMode, TRUE, DmaSpeed, MaximumLength, 0, &DeviceDescription);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("IoGetDeviceProperty failed with %x\n", Status);
|
||||
return Status;
|
||||
Status = PcNewDmaChannel(&DmaChannel, OuterUnknown, NonPagedPool, &DeviceDescription, This->pDeviceObject);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
Status = DmaChannel->lpVtbl->QueryInterface(DmaChannel, &IID_IDmaChannelSlave, (PVOID*)OutDmaChannel);
|
||||
DmaChannel->lpVtbl->Release(DmaChannel);
|
||||
}
|
||||
}
|
||||
|
||||
RtlZeroMemory(&DeviceDesc, sizeof(DeviceDesc));
|
||||
DeviceDesc.Version = DEVICE_DESCRIPTION_VERSION;
|
||||
DeviceDesc.Master = FALSE;
|
||||
DeviceDesc.InterfaceType = BusType;
|
||||
DeviceDesc.MaximumLength = MaximumLength;
|
||||
DeviceDesc.DemandMode = DemandMode;
|
||||
DeviceDesc.DmaSpeed = DmaSpeed;
|
||||
DeviceDesc.DmaChannel = DmaIndex;
|
||||
|
||||
Adapter = IoGetDmaAdapter(This->pDeviceObject, &DeviceDesc, &MapRegisters);
|
||||
if (!Adapter)
|
||||
{
|
||||
DPRINT("IoGetDmaAdapter failed\n");
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
return NewDmaChannelSlave(&DeviceDesc, Adapter, MapRegisters, DmaChannel);
|
||||
|
||||
|
||||
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
return Status;
|
||||
}
|
||||
|
||||
VOID
|
||||
|
|
|
@ -275,19 +275,30 @@ NTSTATUS
|
|||
NTAPI
|
||||
IPortWavePci_fnNewMasterDmaChannel(
|
||||
IN IPortWavePci * iface,
|
||||
OUT PDMACHANNEL* DmaChannel,
|
||||
IN PUNKNOWN OuterUnknown,
|
||||
IN POOL_TYPE PoolType,
|
||||
IN PRESOURCELIST ResourceList OPTIONAL,
|
||||
IN BOOL ScatterGather,
|
||||
IN BOOL Dma32BitAddresses,
|
||||
IN BOOL Dma64BitAddresses,
|
||||
IN DMA_WIDTH DmaWidth,
|
||||
IN DMA_SPEED DmaSpeed,
|
||||
IN ULONG MaximumLength,
|
||||
IN ULONG DmaPort)
|
||||
OUT PDMACHANNEL *DmaChannel,
|
||||
IN PUNKNOWN OuterUnknown OPTIONAL,
|
||||
IN POOL_TYPE PoolType,
|
||||
IN PRESOURCELIST ResourceList OPTIONAL,
|
||||
IN BOOLEAN ScatterGather,
|
||||
IN BOOLEAN Dma32BitAddresses,
|
||||
IN BOOLEAN Dma64BitAddresses,
|
||||
IN BOOLEAN IgnoreCount,
|
||||
IN DMA_WIDTH DmaWidth,
|
||||
IN DMA_SPEED DmaSpeed,
|
||||
IN ULONG MaximumLength,
|
||||
IN ULONG DmaPort)
|
||||
{
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
NTSTATUS Status;
|
||||
DEVICE_DESCRIPTION DeviceDescription;
|
||||
IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
|
||||
|
||||
Status = PcDmaMasterDescription(ResourceList, ScatterGather, Dma32BitAddresses, IgnoreCount, Dma64BitAddresses, DmaWidth, DmaSpeed, MaximumLength, DmaPort, &DeviceDescription);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
return PcNewDmaChannel(DmaChannel, OuterUnknown, PoolType, &DeviceDescription, This->pDeviceObject);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VOID
|
||||
|
|
|
@ -106,7 +106,31 @@ typedef struct
|
|||
} PCExtension;
|
||||
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
PcDmaMasterDescription(
|
||||
IN PRESOURCELIST ResourceList OPTIONAL,
|
||||
IN BOOLEAN ScatterGather,
|
||||
IN BOOLEAN Dma32BitAddresses,
|
||||
IN BOOLEAN IgnoreCount,
|
||||
IN BOOLEAN Dma64BitAddresses,
|
||||
IN DMA_WIDTH DmaWidth,
|
||||
IN DMA_SPEED DmaSpeed,
|
||||
IN ULONG MaximumLength,
|
||||
IN ULONG DmaPort,
|
||||
OUT PDEVICE_DESCRIPTION DeviceDescription);
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
PcDmaSlaveDescription(
|
||||
IN PRESOURCELIST ResourceList OPTIONAL,
|
||||
IN ULONG DmaIndex,
|
||||
IN BOOL DemandMode,
|
||||
IN ULONG AutoInitialize,
|
||||
IN DMA_SPEED DmaSpeed,
|
||||
IN ULONG MaximumLength,
|
||||
IN ULONG DmaPort,
|
||||
OUT PDEVICE_DESCRIPTION DeviceDescription);
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue