const GUID IID_IIrpTarget;
const GUID IID_IPinCount;
const GUID IID_IPowerNotify;
+const GUID IID_IDmaChannelSlave;
const GUID GUID_DEVCLASS_SOUND; //FIXME
//---------------------------------------------------------------
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,
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;
return STATUS_UNSUCCESSFUL;
}
- Status = IoGetDeviceProperty(This->pDeviceObject, DevicePropertyLegacyBusType, sizeof(BusType), (PVOID)&BusType, &ResultLength);
- if (!NT_SUCCESS(Status))
- {
- DPRINT("IoGetDeviceProperty failed with %x\n", Status);
- return Status;
- }
+ // FIXME
+ // Check for F-Type DMA Support
+ //
- 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)
+ Status = PcDmaSlaveDescription(ResourceList, DmaIndex, DemandMode, TRUE, DmaSpeed, MaximumLength, 0, &DeviceDescription);
+ if (NT_SUCCESS(Status))
{
- DPRINT("IoGetDmaAdapter failed\n");
- return STATUS_INSUFFICIENT_RESOURCES;
+ 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);
+ }
}
- return NewDmaChannelSlave(&DeviceDesc, Adapter, MapRegisters, DmaChannel);
-
-
-
- return STATUS_UNSUCCESSFUL;
+ return Status;
}
VOID
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
} 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);