mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 06:22:58 +00:00
- Implement IPortWaveCyclic::NewMasterDmaChannel, IPortWaveCyclic::NewDmaChannelSlave, IPortWavePci_fnNewMasterDmaChannel
svn path=/trunk/; revision=38595
This commit is contained in:
parent
4cfef4b794
commit
86f06a0ebe
4 changed files with 89 additions and 48 deletions
|
@ -74,7 +74,9 @@ PcUnregisterIoTimeout(
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
PcDmaMasterDescription(
|
PcDmaMasterDescription(
|
||||||
|
@ -104,7 +106,9 @@ PcDmaMasterDescription(
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
PcDmaSlaveDescription(
|
PcDmaSlaveDescription(
|
||||||
|
@ -112,7 +116,7 @@ PcDmaSlaveDescription(
|
||||||
IN ULONG DmaIndex,
|
IN ULONG DmaIndex,
|
||||||
IN BOOL DemandMode,
|
IN BOOL DemandMode,
|
||||||
IN ULONG AutoInitialize,
|
IN ULONG AutoInitialize,
|
||||||
IN DMA_SPEED DmaSpeed
|
IN DMA_SPEED DmaSpeed,
|
||||||
IN ULONG MaximumLength,
|
IN ULONG MaximumLength,
|
||||||
IN ULONG DmaPort,
|
IN ULONG DmaPort,
|
||||||
OUT PDEVICE_DESCRIPTION DeviceDescription)
|
OUT PDEVICE_DESCRIPTION DeviceDescription)
|
||||||
|
@ -127,4 +131,4 @@ PcDmaSlaveDescription(
|
||||||
DeviceDescription->DmaPort = DmaPort;
|
DeviceDescription->DmaPort = DmaPort;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ const GUID IID_IUnknown;
|
||||||
const GUID IID_IIrpTarget;
|
const GUID IID_IIrpTarget;
|
||||||
const GUID IID_IPinCount;
|
const GUID IID_IPinCount;
|
||||||
const GUID IID_IPowerNotify;
|
const GUID IID_IPowerNotify;
|
||||||
|
const GUID IID_IDmaChannelSlave;
|
||||||
|
|
||||||
const GUID GUID_DEVCLASS_SOUND; //FIXME
|
const GUID GUID_DEVCLASS_SOUND; //FIXME
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
|
@ -250,14 +251,30 @@ IPortWaveCyclic_fnNewMasterDmaChannel(
|
||||||
IN DMA_WIDTH DmaWidth,
|
IN DMA_WIDTH DmaWidth,
|
||||||
IN DMA_SPEED DmaSpeed)
|
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
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
IPortWaveCyclic_fnNewSlaveDmaChannel(
|
IPortWaveCyclic_fnNewSlaveDmaChannel(
|
||||||
IN IPortWaveCyclic * iface,
|
IN IPortWaveCyclic * iface,
|
||||||
OUT PDMACHANNELSLAVE* DmaChannel,
|
OUT PDMACHANNELSLAVE* OutDmaChannel,
|
||||||
IN PUNKNOWN OuterUnknown,
|
IN PUNKNOWN OuterUnknown,
|
||||||
IN PRESOURCELIST ResourceList OPTIONAL,
|
IN PRESOURCELIST ResourceList OPTIONAL,
|
||||||
IN ULONG DmaIndex,
|
IN ULONG DmaIndex,
|
||||||
|
@ -265,12 +282,9 @@ IPortWaveCyclic_fnNewSlaveDmaChannel(
|
||||||
IN BOOL DemandMode,
|
IN BOOL DemandMode,
|
||||||
IN DMA_SPEED DmaSpeed)
|
IN DMA_SPEED DmaSpeed)
|
||||||
{
|
{
|
||||||
DEVICE_DESCRIPTION DeviceDesc;
|
DEVICE_DESCRIPTION DeviceDescription;
|
||||||
INTERFACE_TYPE BusType;
|
PDMACHANNEL DmaChannel;
|
||||||
ULONG ResultLength;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
ULONG MapRegisters;
|
|
||||||
PDMA_ADAPTER Adapter;
|
|
||||||
|
|
||||||
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)iface;
|
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)iface;
|
||||||
|
|
||||||
|
@ -280,34 +294,22 @@ IPortWaveCyclic_fnNewSlaveDmaChannel(
|
||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = IoGetDeviceProperty(This->pDeviceObject, DevicePropertyLegacyBusType, sizeof(BusType), (PVOID)&BusType, &ResultLength);
|
// FIXME
|
||||||
if (!NT_SUCCESS(Status))
|
// 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);
|
Status = PcNewDmaChannel(&DmaChannel, OuterUnknown, NonPagedPool, &DeviceDescription, This->pDeviceObject);
|
||||||
return Status;
|
if (NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
Status = DmaChannel->lpVtbl->QueryInterface(DmaChannel, &IID_IDmaChannelSlave, (PVOID*)OutDmaChannel);
|
||||||
|
DmaChannel->lpVtbl->Release(DmaChannel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlZeroMemory(&DeviceDesc, sizeof(DeviceDesc));
|
return Status;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
|
|
@ -275,19 +275,30 @@ NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
IPortWavePci_fnNewMasterDmaChannel(
|
IPortWavePci_fnNewMasterDmaChannel(
|
||||||
IN IPortWavePci * iface,
|
IN IPortWavePci * iface,
|
||||||
OUT PDMACHANNEL* DmaChannel,
|
OUT PDMACHANNEL *DmaChannel,
|
||||||
IN PUNKNOWN OuterUnknown,
|
IN PUNKNOWN OuterUnknown OPTIONAL,
|
||||||
IN POOL_TYPE PoolType,
|
IN POOL_TYPE PoolType,
|
||||||
IN PRESOURCELIST ResourceList OPTIONAL,
|
IN PRESOURCELIST ResourceList OPTIONAL,
|
||||||
IN BOOL ScatterGather,
|
IN BOOLEAN ScatterGather,
|
||||||
IN BOOL Dma32BitAddresses,
|
IN BOOLEAN Dma32BitAddresses,
|
||||||
IN BOOL Dma64BitAddresses,
|
IN BOOLEAN Dma64BitAddresses,
|
||||||
IN DMA_WIDTH DmaWidth,
|
IN BOOLEAN IgnoreCount,
|
||||||
IN DMA_SPEED DmaSpeed,
|
IN DMA_WIDTH DmaWidth,
|
||||||
IN ULONG MaximumLength,
|
IN DMA_SPEED DmaSpeed,
|
||||||
IN ULONG DmaPort)
|
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
|
VOID
|
||||||
|
|
|
@ -106,7 +106,31 @@ typedef struct
|
||||||
} PCExtension;
|
} 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…
Add table
Add a link
Reference in a new issue