- Remove unused file

- Fix Es1370mp / Es1371mp driver installation. However, no sound yet. Needs more investigation

svn path=/trunk/; revision=40674
This commit is contained in:
Johannes Anderwald 2009-04-23 20:33:27 +00:00
parent cfaf89f849
commit bc0a1f1a68
3 changed files with 226 additions and 172 deletions

View file

@ -1,31 +0,0 @@
/*
ReactOS Operating System
Port Class API / IPort Implementation
by Andrew Greenwood
*/
#include "private.h"
NTSTATUS
IPortWavePci::NewMasterDmaChannel(
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)
{
return STATUS_UNSUCCESSFUL;
}
VOID
IPortWavePci::Notify(
IN PSERVICEGROUP ServiceGroup)
{
}

View file

@ -1,7 +1,7 @@
/* /*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming * PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/dma_slave.c * FILE: drivers/wdm/audio/backpln/portcls/dma_Init.c
* PURPOSE: portcls dma support object * PURPOSE: portcls dma support object
* PROGRAMMER: Johannes Anderwald * PROGRAMMER: Johannes Anderwald
*/ */
@ -11,7 +11,7 @@
typedef struct typedef struct
{ {
IDmaChannelSlaveVtbl *lpVtbl; IDmaChannelInitVtbl *lpVtbl;
LONG ref; LONG ref;
@ -36,10 +36,7 @@ typedef struct
PMDL Mdl; PMDL Mdl;
BOOLEAN WriteToDevice; BOOLEAN WriteToDevice;
}IDmaChannelSlaveImpl; }IDmaChannelInitImpl;
const GUID IID_IDmaChannel;
//--------------------------------------------------------------- //---------------------------------------------------------------
// IUnknown methods // IUnknown methods
@ -48,12 +45,12 @@ const GUID IID_IDmaChannel;
NTSTATUS NTSTATUS
NTAPI NTAPI
IDmaChannelSlave_fnQueryInterface( IDmaChannelInit_fnQueryInterface(
IDmaChannelSlave * iface, IDmaChannelInit * iface,
IN REFIID refiid, IN REFIID refiid,
OUT PVOID* Output) OUT PVOID* Output)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
if (IsEqualGUIDAligned(refiid, &IID_IUnknown) || if (IsEqualGUIDAligned(refiid, &IID_IUnknown) ||
IsEqualGUIDAligned(refiid, &IID_IDmaChannel) || IsEqualGUIDAligned(refiid, &IID_IDmaChannel) ||
@ -63,32 +60,32 @@ IDmaChannelSlave_fnQueryInterface(
InterlockedIncrement(&This->ref); InterlockedIncrement(&This->ref);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
DPRINT1("No interface!!!\n");
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
ULONG ULONG
STDMETHODCALLTYPE NTAPI
IDmaChannelSlave_fnAddRef( IDmaChannelInit_fnAddRef(
IDmaChannelSlave * iface) IDmaChannelInit * iface)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_AddRef: This %p\n", This); DPRINT("IDmaChannelInit_AddRef: This %p\n", This);
return InterlockedIncrement(&This->ref); return InterlockedIncrement(&This->ref);
} }
ULONG ULONG
STDMETHODCALLTYPE NTAPI
IDmaChannelSlave_fnRelease( IDmaChannelInit_fnRelease(
IDmaChannelSlave* iface) IDmaChannelInit* iface)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
InterlockedDecrement(&This->ref); InterlockedDecrement(&This->ref);
DPRINT("IDmaChannelSlave_Release: This %p new ref %u\n", This, This->ref); DPRINT("IDmaChannelInit_Release: This %p new ref %u\n", This, This->ref);
if (This->ref == 0) if (This->ref == 0)
{ {
@ -104,91 +101,94 @@ IDmaChannelSlave_fnRelease(
// IDmaChannel methods // IDmaChannel methods
// //
NTSTATUS NTSTATUS
NTAPI NTAPI
IDmaChannelSlave_fnAllocateBuffer( IDmaChannelInit_fnAllocateBuffer(
IN IDmaChannelSlave * iface, IN IDmaChannelInit * iface,
IN ULONG BufferSize, IN ULONG BufferSize,
IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
/* Did the caller already allocate a buffer ?*/ /* Did the caller already allocate a buffer ?*/
if (This->Buffer) if (This->Buffer)
{ {
DPRINT1("IDmaChannelSlave_AllocateBuffer free common buffer first \n"); DPRINT1("IDmaChannelInit_AllocateBuffer free common buffer first \n");
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
This->Buffer = This->pAdapter->DmaOperations->AllocateCommonBuffer(This->pAdapter, BufferSize, &This->Address, FALSE); This->Buffer = This->pAdapter->DmaOperations->AllocateCommonBuffer(This->pAdapter, BufferSize, &This->Address, FALSE);
if (!This->Buffer) if (!This->Buffer)
{ {
DPRINT1("IDmaChannelSlave_AllocateBuffer fAllocateCommonBuffer failed \n"); DPRINT1("IDmaChannelInit_AllocateBuffer fAllocateCommonBuffer failed \n");
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
This->BufferSize = BufferSize; This->BufferSize = BufferSize;
This->AllocatedBufferSize = BufferSize; This->AllocatedBufferSize = BufferSize;
DPRINT1("IDmaChannelSlave_fnAllocateBuffer Success Buffer %p BufferSize %u Address %x\n", This->Buffer, BufferSize, This->Address); DPRINT1("IDmaChannelInit_fnAllocateBuffer Success Buffer %p BufferSize %u Address %x\n", This->Buffer, BufferSize, This->Address);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
ULONG ULONG
NTAPI NTAPI
IDmaChannelSlave_fnAllocatedBufferSize( IDmaChannelInit_fnAllocatedBufferSize(
IN IDmaChannelSlave * iface) IN IDmaChannelInit * iface)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_AllocatedBufferSize: This %p BufferSize %u\n", This, This->BufferSize); DPRINT("IDmaChannelInit_AllocatedBufferSize: This %p BufferSize %u\n", This, This->BufferSize);
return This->AllocatedBufferSize; return This->AllocatedBufferSize;
} }
VOID VOID
NTAPI NTAPI
IDmaChannelSlave_fnCopyFrom( IDmaChannelInit_fnCopyFrom(
IN IDmaChannelSlave * iface, IN IDmaChannelInit * iface,
IN PVOID Destination, IN PVOID Destination,
IN PVOID Source, IN PVOID Source,
IN ULONG ByteCount IN ULONG ByteCount
) )
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_CopyFrom: This %p Destination %p Source %p ByteCount %u\n", This, Destination, Source, ByteCount); DPRINT("IDmaChannelInit_CopyFrom: This %p Destination %p Source %p ByteCount %u\n", This, Destination, Source, ByteCount);
iface->lpVtbl->CopyTo(iface, Destination, Source, ByteCount); iface->lpVtbl->CopyTo(iface, Destination, Source, ByteCount);
} }
VOID VOID
NTAPI NTAPI
IDmaChannelSlave_fnCopyTo( IDmaChannelInit_fnCopyTo(
IN IDmaChannelSlave * iface, IN IDmaChannelInit * iface,
IN PVOID Destination, IN PVOID Destination,
IN PVOID Source, IN PVOID Source,
IN ULONG ByteCount IN ULONG ByteCount
) )
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_CopyTo: This %p Destination %p Source %p ByteCount %u\n", This, Destination, Source, ByteCount); DPRINT("IDmaChannelInit_CopyTo: This %p Destination %p Source %p ByteCount %u\n", This, Destination, Source, ByteCount);
RtlCopyMemory(Destination, Source, ByteCount); RtlCopyMemory(Destination, Source, ByteCount);
} }
VOID VOID
NTAPI NTAPI
IDmaChannelSlave_fnFreeBuffer( IDmaChannelInit_fnFreeBuffer(
IN IDmaChannelSlave * iface) IN IDmaChannelInit * iface)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_FreeBuffer: This %p\n", This); DPRINT("IDmaChannelInit_FreeBuffer: This %p\n", This);
ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
if (!This->Buffer) if (!This->Buffer)
{ {
DPRINT1("IDmaChannelSlave_FreeBuffer allocate common buffer first \n"); DPRINT1("IDmaChannelInit_FreeBuffer allocate common buffer first \n");
return; return;
} }
@ -206,59 +206,60 @@ IDmaChannelSlave_fnFreeBuffer(
PADAPTER_OBJECT PADAPTER_OBJECT
NTAPI NTAPI
IDmaChannelSlave_fnGetAdapterObject( IDmaChannelInit_fnGetAdapterObject(
IN IDmaChannelSlave * iface) IN IDmaChannelInit * iface)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_GetAdapterObject: This %p\n", This); DPRINT("IDmaChannelInit_GetAdapterObject: This %p\n", This);
return (PADAPTER_OBJECT)This->pAdapter; return (PADAPTER_OBJECT)This->pAdapter;
} }
ULONG ULONG
NTAPI NTAPI
IDmaChannelSlave_fnMaximumBufferSize( IDmaChannelInit_fnMaximumBufferSize(
IN IDmaChannelSlave * iface) IN IDmaChannelInit * iface)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_MaximumBufferSize: This %p\n", This); DPRINT("IDmaChannelInit_MaximumBufferSize: This %p\n", This);
return This->MaximumBufferSize; return This->MaximumBufferSize;
} }
PHYSICAL_ADDRESS PHYSICAL_ADDRESS
NTAPI NTAPI
IDmaChannelSlave_fnPhysicalAdress( IDmaChannelInit_fnPhysicalAdress(
IN IDmaChannelSlave * iface) IN IDmaChannelInit * iface,
PPHYSICAL_ADDRESS Address)
{ {
PHYSICAL_ADDRESS Address; PHYSICAL_ADDRESS Result;
IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelInit_PhysicalAdress: This %p Virtuell %p Physical High %x Low %x%\n", This, This->Buffer, This->Address.HighPart, This->Address.LowPart);
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; Address->QuadPart = This->Address.QuadPart;
DPRINT("IDmaChannelSlave_PhysicalAdress: This %p Virtuell %p Physical High %x Low %x%\n", This, This->Buffer, This->Address.HighPart, This->Address.LowPart); Result.QuadPart = (PtrToUlong(Address));
return Result;
Address = This->Address;
return Address;
} }
VOID VOID
NTAPI NTAPI
IDmaChannelSlave_fnSetBufferSize( IDmaChannelInit_fnSetBufferSize(
IN IDmaChannelSlave * iface, IN IDmaChannelInit * iface,
IN ULONG BufferSize) IN ULONG BufferSize)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_SetBufferSize: This %p\n", This); DPRINT("IDmaChannelInit_SetBufferSize: This %p\n", This);
This->BufferSize = BufferSize; This->BufferSize = BufferSize;
} }
ULONG ULONG
NTAPI NTAPI
IDmaChannelSlave_fnBufferSize( IDmaChannelInit_fnBufferSize(
IN IDmaChannelSlave * iface) IN IDmaChannelInit * iface)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
return This->BufferSize; return This->BufferSize;
} }
@ -266,33 +267,35 @@ IDmaChannelSlave_fnBufferSize(
PVOID PVOID
NTAPI NTAPI
IDmaChannelSlave_fnSystemAddress( IDmaChannelInit_fnSystemAddress(
IN IDmaChannelSlave * iface) IN IDmaChannelInit * iface)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_SystemAddress: This %p\n", This); DPRINT("IDmaChannelInit_SystemAddress: This %p\n", This);
return This->Buffer; return This->Buffer;
} }
ULONG ULONG
NTAPI NTAPI
IDmaChannelSlave_fnTransferCount( IDmaChannelInit_fnTransferCount(
IN IDmaChannelSlave * iface) IN IDmaChannelInit * iface)
{ {
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_TransferCount: This %p\n", This); DPRINT("IDmaChannelInit_TransferCount: This %p\n", This);
return This->LastTransferCount; return This->LastTransferCount;
} }
ULONG ULONG
NTAPI NTAPI
IDmaChannelSlave_fnReadCounter( IDmaChannelInit_fnReadCounter(
IN IDmaChannelSlave * iface) IN IDmaChannelInit * iface)
{ {
ULONG Counter; ULONG Counter;
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
ASSERT_IRQL(DISPATCH_LEVEL);
Counter = This->pAdapter->DmaOperations->ReadDmaCounter(This->pAdapter); Counter = This->pAdapter->DmaOperations->ReadDmaCounter(This->pAdapter);
@ -311,7 +314,7 @@ AdapterControl(
IN PVOID Context) IN PVOID Context)
{ {
ULONG Length; ULONG Length;
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)Context; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)Context;
Length = This->MapSize; Length = This->MapSize;
This->MapRegisterBase = MapRegisterBase; This->MapRegisterBase = MapRegisterBase;
@ -333,17 +336,19 @@ AdapterControl(
NTSTATUS NTSTATUS
NTAPI NTAPI
IDmaChannelSlave_fnStart( IDmaChannelInit_fnStart(
IN IDmaChannelSlave * iface, IN IDmaChannelInit * iface,
ULONG MapSize, ULONG MapSize,
BOOLEAN WriteToDevice) BOOLEAN WriteToDevice)
{ {
NTSTATUS Status; NTSTATUS Status;
ULONG MapRegisters; ULONG MapRegisters;
KIRQL OldIrql; KIRQL OldIrql;
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_Start: This %p\n", This); DPRINT("IDmaChannelInit_Start: This %p\n", This);
ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
if (This->DmaStarted) if (This->DmaStarted)
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
@ -379,13 +384,14 @@ IDmaChannelSlave_fnStart(
NTSTATUS NTSTATUS
NTAPI NTAPI
IDmaChannelSlave_fnStop( IDmaChannelInit_fnStop(
IN IDmaChannelSlave * iface) IN IDmaChannelInit * iface)
{ {
KIRQL OldIrql; KIRQL OldIrql;
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
DPRINT("IDmaChannelSlave_fnStop: This %p\n", This); DPRINT("IDmaChannelInit_fnStop: This %p\n", This);
ASSERT_IRQL(DISPATCH_LEVEL);
if (!This->DmaStarted) if (!This->DmaStarted)
return STATUS_SUCCESS; return STATUS_SUCCESS;
@ -413,15 +419,17 @@ IDmaChannelSlave_fnStop(
NTSTATUS NTSTATUS
NTAPI NTAPI
IDmaChannelSlave_fnWaitForTC( IDmaChannelInit_fnWaitForTC(
IN IDmaChannelSlave * iface, IN IDmaChannelInit * iface,
ULONG Timeout) ULONG Timeout)
{ {
ULONG RetryCount; ULONG RetryCount;
ULONG BytesRemaining; ULONG BytesRemaining;
ULONG PrevBytesRemaining; ULONG PrevBytesRemaining;
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface; IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
BytesRemaining = This->pAdapter->DmaOperations->ReadDmaCounter(This->pAdapter); BytesRemaining = This->pAdapter->DmaOperations->ReadDmaCounter(This->pAdapter);
if (!BytesRemaining) if (!BytesRemaining)
@ -454,30 +462,73 @@ IDmaChannelSlave_fnWaitForTC(
} }
IDmaChannelSlaveVtbl vt_IDmaChannelSlaveVtbl = NTSTATUS
NTAPI
IDmaChannelInit_fnInit(
IN IDmaChannelInit * iface,
IN PDEVICE_DESCRIPTION DeviceDescription,
IN PDEVICE_OBJECT DeviceObject)
{
INTERFACE_TYPE BusType;
NTSTATUS Status;
PDMA_ADAPTER Adapter;
PPCLASS_DEVICE_EXTENSION DeviceExt;
ULONG MapRegisters;
ULONG ResultLength;
IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
/* Get bus type */
Status = IoGetDeviceProperty(DeviceObject, DevicePropertyLegacyBusType, sizeof(BusType), (PVOID)&BusType, &ResultLength);
if (NT_SUCCESS(Status))
{
DeviceDescription->InterfaceType = BusType;
}
/* Fetch device extension */
DeviceExt = (PPCLASS_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
/* Acquire dma adapter */
Adapter = IoGetDmaAdapter(DeviceExt->PhysicalDeviceObject, DeviceDescription, &MapRegisters);
if (!Adapter)
{
FreeItem(This, TAG_PORTCLASS);
return STATUS_DEVICE_CONFIGURATION_ERROR;
}
/* initialize object */
This->ref = 1;
This->pAdapter = Adapter;
This->pDeviceObject = DeviceObject;
This->MaximumBufferSize = DeviceDescription->MaximumLength;
This->MaxMapRegisters = MapRegisters;
return STATUS_SUCCESS;
}
IDmaChannelInitVtbl vt_IDmaChannelInitVtbl =
{ {
/* IUnknown methods */ /* IUnknown methods */
IDmaChannelSlave_fnQueryInterface, IDmaChannelInit_fnQueryInterface,
IDmaChannelSlave_fnAddRef, IDmaChannelInit_fnAddRef,
IDmaChannelSlave_fnRelease, IDmaChannelInit_fnRelease,
/* IDmaChannel methods */ /* IDmaChannel methods */
IDmaChannelSlave_fnAllocateBuffer, IDmaChannelInit_fnAllocateBuffer,
IDmaChannelSlave_fnFreeBuffer, IDmaChannelInit_fnFreeBuffer,
IDmaChannelSlave_fnTransferCount, IDmaChannelInit_fnTransferCount,
IDmaChannelSlave_fnMaximumBufferSize, IDmaChannelInit_fnMaximumBufferSize,
IDmaChannelSlave_fnAllocatedBufferSize, IDmaChannelInit_fnAllocatedBufferSize,
IDmaChannelSlave_fnBufferSize, IDmaChannelInit_fnBufferSize,
IDmaChannelSlave_fnSetBufferSize, IDmaChannelInit_fnSetBufferSize,
IDmaChannelSlave_fnSystemAddress, IDmaChannelInit_fnSystemAddress,
IDmaChannelSlave_fnPhysicalAdress, IDmaChannelInit_fnPhysicalAdress,
IDmaChannelSlave_fnGetAdapterObject, IDmaChannelInit_fnGetAdapterObject,
IDmaChannelSlave_fnCopyTo, IDmaChannelInit_fnCopyTo,
IDmaChannelSlave_fnCopyFrom, IDmaChannelInit_fnCopyFrom,
/* IDmaChannelSlave methods */ /* IDmaChannelInit methods */
IDmaChannelSlave_fnStart, IDmaChannelInit_fnStart,
IDmaChannelSlave_fnStop, IDmaChannelInit_fnStop,
IDmaChannelSlave_fnReadCounter, IDmaChannelInit_fnReadCounter,
IDmaChannelSlave_fnWaitForTC IDmaChannelInit_fnWaitForTC,
IDmaChannelInit_fnInit
}; };
@ -493,48 +544,26 @@ PcNewDmaChannel(
IN PDEVICE_OBJECT DeviceObject) IN PDEVICE_OBJECT DeviceObject)
{ {
NTSTATUS Status; NTSTATUS Status;
PDMA_ADAPTER Adapter; IDmaChannelInitImpl * This;
ULONG MapRegisters;
INTERFACE_TYPE BusType;
ULONG ResultLength;
PPCLASS_DEVICE_EXTENSION DeviceExt;
IDmaChannelSlaveImpl * This;
DPRINT("OutDmaChannel %p OuterUnknown %p PoolType %p DeviceDescription %p DeviceObject %p\n", DPRINT("OutDmaChannel %p OuterUnknown %p PoolType %p DeviceDescription %p DeviceObject %p\n",
OutDmaChannel, OuterUnknown, PoolType, DeviceDescription, DeviceObject); OutDmaChannel, OuterUnknown, PoolType, DeviceDescription, DeviceObject);
This = AllocateItem(PoolType, sizeof(IDmaChannelSlaveImpl), TAG_PORTCLASS); This = AllocateItem(PoolType, sizeof(IDmaChannelInitImpl), TAG_PORTCLASS);
if (!This) if (!This)
{ {
return STATUS_INSUFFICIENT_RESOURCES; return STATUS_INSUFFICIENT_RESOURCES;
} }
DeviceExt = (PPCLASS_DEVICE_EXTENSION) DeviceObject->DeviceExtension; /* initialize object */
Status = IDmaChannelInit_fnInit((IDmaChannelInit*)This, DeviceDescription, DeviceObject);
Status = IoGetDeviceProperty(DeviceObject, DevicePropertyLegacyBusType, sizeof(BusType), (PVOID)&BusType, &ResultLength);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
DeviceDescription->InterfaceType = BusType; /* store result */
This->lpVtbl = &vt_IDmaChannelInitVtbl;
*OutDmaChannel = (PVOID)(&This->lpVtbl);
} }
Adapter = IoGetDmaAdapter(DeviceExt->PhysicalDeviceObject, DeviceDescription, &MapRegisters); return Status;
if (!Adapter)
{
FreeItem(This, TAG_PORTCLASS);
return STATUS_DEVICE_CONFIGURATION_ERROR;
}
/* initialize object */
This->ref = 1;
This->lpVtbl = &vt_IDmaChannelSlaveVtbl;
This->pAdapter = Adapter;
This->pDeviceObject = DeviceObject;
This->MaximumBufferSize = DeviceDescription->MaximumLength;
This->MaxMapRegisters = MapRegisters;
*OutDmaChannel = (PVOID)(&This->lpVtbl);
DPRINT("PcNewDmaChannel result %p\n", *OutDmaChannel);
return STATUS_SUCCESS;
} }

View file

@ -520,4 +520,60 @@ DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
STDMETHOD_(PMINIPORT, GetMiniport)(THIS); STDMETHOD_(PMINIPORT, GetMiniport)(THIS);
}; };
/*****************************************************************************
* IDmaChannelInit
*****************************************************************************
*/
#undef INTERFACE
#define INTERFACE IDmaChannelInit
DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
{
DEFINE_ABSTRACT_UNKNOWN()
STDMETHOD_(NTSTATUS,AllocateBuffer)(THIS_
IN ULONG BufferSize,
IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL);
STDMETHOD_(VOID, FreeBuffer)(THIS);
STDMETHOD_(ULONG, TransferCount)(THIS);
STDMETHOD_(ULONG, MaximumBufferSize)(THIS);
STDMETHOD_(ULONG, AllocatedBufferSize)(THIS);
STDMETHOD_(ULONG, BufferSize)(THIS);
STDMETHOD_(VOID, SetBufferSize)(THIS_
IN ULONG BufferSize);
STDMETHOD_(PVOID, SystemAddress)(THIS);
STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)(THIS_
IN PPHYSICAL_ADDRESS Address);
STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)(THIS);
STDMETHOD_(VOID, CopyTo)(THIS_
IN PVOID Destination,
IN PVOID Source,
IN ULONG ByteCount);
STDMETHOD_(VOID, CopyFrom)(THIS_
IN PVOID Destination,
IN PVOID Source,
IN ULONG ByteCount);
STDMETHOD_(NTSTATUS, Start)( THIS_
IN ULONG MapSize,
IN BOOLEAN WriteToDevice) PURE;
STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE;
STDMETHOD_(ULONG, ReadCounter)( THIS ) PURE;
STDMETHOD_(NTSTATUS, WaitForTC)( THIS_
ULONG Timeout) PURE;
STDMETHOD_(NTSTATUS, Init)( THIS_
IN PDEVICE_DESCRIPTION DeviceDescription,
IN PDEVICE_OBJECT DeviceObject) PURE;
};
#endif #endif