mirror of
https://github.com/reactos/reactos.git
synced 2025-04-25 16:10:29 +00:00
- 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:
parent
cfaf89f849
commit
bc0a1f1a68
3 changed files with 226 additions and 172 deletions
|
@ -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)
|
||||
{
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* 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
|
||||
* PROGRAMMER: Johannes Anderwald
|
||||
*/
|
||||
|
@ -11,7 +11,7 @@
|
|||
|
||||
typedef struct
|
||||
{
|
||||
IDmaChannelSlaveVtbl *lpVtbl;
|
||||
IDmaChannelInitVtbl *lpVtbl;
|
||||
|
||||
LONG ref;
|
||||
|
||||
|
@ -36,10 +36,7 @@ typedef struct
|
|||
PMDL Mdl;
|
||||
BOOLEAN WriteToDevice;
|
||||
|
||||
}IDmaChannelSlaveImpl;
|
||||
|
||||
const GUID IID_IDmaChannel;
|
||||
|
||||
}IDmaChannelInitImpl;
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// IUnknown methods
|
||||
|
@ -48,12 +45,12 @@ const GUID IID_IDmaChannel;
|
|||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnQueryInterface(
|
||||
IDmaChannelSlave * iface,
|
||||
IDmaChannelInit_fnQueryInterface(
|
||||
IDmaChannelInit * iface,
|
||||
IN REFIID refiid,
|
||||
OUT PVOID* Output)
|
||||
{
|
||||
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface;
|
||||
IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
|
||||
|
||||
if (IsEqualGUIDAligned(refiid, &IID_IUnknown) ||
|
||||
IsEqualGUIDAligned(refiid, &IID_IDmaChannel) ||
|
||||
|
@ -63,32 +60,32 @@ IDmaChannelSlave_fnQueryInterface(
|
|||
InterlockedIncrement(&This->ref);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
DPRINT1("No interface!!!\n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
ULONG
|
||||
STDMETHODCALLTYPE
|
||||
IDmaChannelSlave_fnAddRef(
|
||||
IDmaChannelSlave * iface)
|
||||
NTAPI
|
||||
IDmaChannelInit_fnAddRef(
|
||||
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);
|
||||
}
|
||||
|
||||
ULONG
|
||||
STDMETHODCALLTYPE
|
||||
IDmaChannelSlave_fnRelease(
|
||||
IDmaChannelSlave* iface)
|
||||
NTAPI
|
||||
IDmaChannelInit_fnRelease(
|
||||
IDmaChannelInit* iface)
|
||||
{
|
||||
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface;
|
||||
IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -104,91 +101,94 @@ IDmaChannelSlave_fnRelease(
|
|||
// IDmaChannel methods
|
||||
//
|
||||
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnAllocateBuffer(
|
||||
IN IDmaChannelSlave * iface,
|
||||
IDmaChannelInit_fnAllocateBuffer(
|
||||
IN IDmaChannelInit * iface,
|
||||
IN ULONG BufferSize,
|
||||
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 ?*/
|
||||
if (This->Buffer)
|
||||
{
|
||||
DPRINT1("IDmaChannelSlave_AllocateBuffer free common buffer first \n");
|
||||
DPRINT1("IDmaChannelInit_AllocateBuffer free common buffer first \n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
This->Buffer = This->pAdapter->DmaOperations->AllocateCommonBuffer(This->pAdapter, BufferSize, &This->Address, FALSE);
|
||||
if (!This->Buffer)
|
||||
{
|
||||
DPRINT1("IDmaChannelSlave_AllocateBuffer fAllocateCommonBuffer failed \n");
|
||||
DPRINT1("IDmaChannelInit_AllocateBuffer fAllocateCommonBuffer failed \n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
This->BufferSize = 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;
|
||||
}
|
||||
|
||||
ULONG
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnAllocatedBufferSize(
|
||||
IN IDmaChannelSlave * iface)
|
||||
IDmaChannelInit_fnAllocatedBufferSize(
|
||||
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;
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnCopyFrom(
|
||||
IN IDmaChannelSlave * iface,
|
||||
IDmaChannelInit_fnCopyFrom(
|
||||
IN IDmaChannelInit * iface,
|
||||
IN PVOID Destination,
|
||||
IN PVOID Source,
|
||||
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);
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnCopyTo(
|
||||
IN IDmaChannelSlave * iface,
|
||||
IDmaChannelInit_fnCopyTo(
|
||||
IN IDmaChannelInit * iface,
|
||||
IN PVOID Destination,
|
||||
IN PVOID Source,
|
||||
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);
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnFreeBuffer(
|
||||
IN IDmaChannelSlave * iface)
|
||||
IDmaChannelInit_fnFreeBuffer(
|
||||
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)
|
||||
{
|
||||
DPRINT1("IDmaChannelSlave_FreeBuffer allocate common buffer first \n");
|
||||
DPRINT1("IDmaChannelInit_FreeBuffer allocate common buffer first \n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -206,59 +206,60 @@ IDmaChannelSlave_fnFreeBuffer(
|
|||
|
||||
PADAPTER_OBJECT
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnGetAdapterObject(
|
||||
IN IDmaChannelSlave * iface)
|
||||
IDmaChannelInit_fnGetAdapterObject(
|
||||
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;
|
||||
}
|
||||
|
||||
ULONG
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnMaximumBufferSize(
|
||||
IN IDmaChannelSlave * iface)
|
||||
IDmaChannelInit_fnMaximumBufferSize(
|
||||
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;
|
||||
}
|
||||
|
||||
PHYSICAL_ADDRESS
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnPhysicalAdress(
|
||||
IN IDmaChannelSlave * iface)
|
||||
IDmaChannelInit_fnPhysicalAdress(
|
||||
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;
|
||||
DPRINT("IDmaChannelSlave_PhysicalAdress: This %p Virtuell %p Physical High %x Low %x%\n", This, This->Buffer, This->Address.HighPart, This->Address.LowPart);
|
||||
|
||||
Address = This->Address;
|
||||
return Address;
|
||||
Address->QuadPart = This->Address.QuadPart;
|
||||
Result.QuadPart = (PtrToUlong(Address));
|
||||
return Result;
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnSetBufferSize(
|
||||
IN IDmaChannelSlave * iface,
|
||||
IDmaChannelInit_fnSetBufferSize(
|
||||
IN IDmaChannelInit * iface,
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
ULONG
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnBufferSize(
|
||||
IN IDmaChannelSlave * iface)
|
||||
IDmaChannelInit_fnBufferSize(
|
||||
IN IDmaChannelInit * iface)
|
||||
{
|
||||
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface;
|
||||
IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
|
||||
|
||||
return This->BufferSize;
|
||||
}
|
||||
|
@ -266,33 +267,35 @@ IDmaChannelSlave_fnBufferSize(
|
|||
|
||||
PVOID
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnSystemAddress(
|
||||
IN IDmaChannelSlave * iface)
|
||||
IDmaChannelInit_fnSystemAddress(
|
||||
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;
|
||||
}
|
||||
|
||||
ULONG
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnTransferCount(
|
||||
IN IDmaChannelSlave * iface)
|
||||
IDmaChannelInit_fnTransferCount(
|
||||
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;
|
||||
}
|
||||
|
||||
ULONG
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnReadCounter(
|
||||
IN IDmaChannelSlave * iface)
|
||||
IDmaChannelInit_fnReadCounter(
|
||||
IN IDmaChannelInit * iface)
|
||||
{
|
||||
ULONG Counter;
|
||||
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface;
|
||||
IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
|
||||
|
||||
ASSERT_IRQL(DISPATCH_LEVEL);
|
||||
|
||||
Counter = This->pAdapter->DmaOperations->ReadDmaCounter(This->pAdapter);
|
||||
|
||||
|
@ -311,7 +314,7 @@ AdapterControl(
|
|||
IN PVOID Context)
|
||||
{
|
||||
ULONG Length;
|
||||
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)Context;
|
||||
IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)Context;
|
||||
|
||||
Length = This->MapSize;
|
||||
This->MapRegisterBase = MapRegisterBase;
|
||||
|
@ -333,17 +336,19 @@ AdapterControl(
|
|||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnStart(
|
||||
IN IDmaChannelSlave * iface,
|
||||
IDmaChannelInit_fnStart(
|
||||
IN IDmaChannelInit * iface,
|
||||
ULONG MapSize,
|
||||
BOOLEAN WriteToDevice)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
ULONG MapRegisters;
|
||||
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)
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
|
@ -379,13 +384,14 @@ IDmaChannelSlave_fnStart(
|
|||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnStop(
|
||||
IN IDmaChannelSlave * iface)
|
||||
IDmaChannelInit_fnStop(
|
||||
IN IDmaChannelInit * iface)
|
||||
{
|
||||
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)
|
||||
return STATUS_SUCCESS;
|
||||
|
@ -413,15 +419,17 @@ IDmaChannelSlave_fnStop(
|
|||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDmaChannelSlave_fnWaitForTC(
|
||||
IN IDmaChannelSlave * iface,
|
||||
IDmaChannelInit_fnWaitForTC(
|
||||
IN IDmaChannelInit * iface,
|
||||
ULONG Timeout)
|
||||
{
|
||||
ULONG RetryCount;
|
||||
ULONG BytesRemaining;
|
||||
ULONG PrevBytesRemaining;
|
||||
|
||||
IDmaChannelSlaveImpl * This = (IDmaChannelSlaveImpl*)iface;
|
||||
IDmaChannelInitImpl * This = (IDmaChannelInitImpl*)iface;
|
||||
|
||||
ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||
|
||||
BytesRemaining = This->pAdapter->DmaOperations->ReadDmaCounter(This->pAdapter);
|
||||
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 */
|
||||
IDmaChannelSlave_fnQueryInterface,
|
||||
IDmaChannelSlave_fnAddRef,
|
||||
IDmaChannelSlave_fnRelease,
|
||||
IDmaChannelInit_fnQueryInterface,
|
||||
IDmaChannelInit_fnAddRef,
|
||||
IDmaChannelInit_fnRelease,
|
||||
/* IDmaChannel methods */
|
||||
IDmaChannelSlave_fnAllocateBuffer,
|
||||
IDmaChannelSlave_fnFreeBuffer,
|
||||
IDmaChannelSlave_fnTransferCount,
|
||||
IDmaChannelSlave_fnMaximumBufferSize,
|
||||
IDmaChannelSlave_fnAllocatedBufferSize,
|
||||
IDmaChannelSlave_fnBufferSize,
|
||||
IDmaChannelSlave_fnSetBufferSize,
|
||||
IDmaChannelSlave_fnSystemAddress,
|
||||
IDmaChannelSlave_fnPhysicalAdress,
|
||||
IDmaChannelSlave_fnGetAdapterObject,
|
||||
IDmaChannelSlave_fnCopyTo,
|
||||
IDmaChannelSlave_fnCopyFrom,
|
||||
/* IDmaChannelSlave methods */
|
||||
IDmaChannelSlave_fnStart,
|
||||
IDmaChannelSlave_fnStop,
|
||||
IDmaChannelSlave_fnReadCounter,
|
||||
IDmaChannelSlave_fnWaitForTC
|
||||
IDmaChannelInit_fnAllocateBuffer,
|
||||
IDmaChannelInit_fnFreeBuffer,
|
||||
IDmaChannelInit_fnTransferCount,
|
||||
IDmaChannelInit_fnMaximumBufferSize,
|
||||
IDmaChannelInit_fnAllocatedBufferSize,
|
||||
IDmaChannelInit_fnBufferSize,
|
||||
IDmaChannelInit_fnSetBufferSize,
|
||||
IDmaChannelInit_fnSystemAddress,
|
||||
IDmaChannelInit_fnPhysicalAdress,
|
||||
IDmaChannelInit_fnGetAdapterObject,
|
||||
IDmaChannelInit_fnCopyTo,
|
||||
IDmaChannelInit_fnCopyFrom,
|
||||
/* IDmaChannelInit methods */
|
||||
IDmaChannelInit_fnStart,
|
||||
IDmaChannelInit_fnStop,
|
||||
IDmaChannelInit_fnReadCounter,
|
||||
IDmaChannelInit_fnWaitForTC,
|
||||
IDmaChannelInit_fnInit
|
||||
};
|
||||
|
||||
|
||||
|
@ -493,48 +544,26 @@ PcNewDmaChannel(
|
|||
IN PDEVICE_OBJECT DeviceObject)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PDMA_ADAPTER Adapter;
|
||||
ULONG MapRegisters;
|
||||
INTERFACE_TYPE BusType;
|
||||
ULONG ResultLength;
|
||||
PPCLASS_DEVICE_EXTENSION DeviceExt;
|
||||
|
||||
IDmaChannelSlaveImpl * This;
|
||||
IDmaChannelInitImpl * This;
|
||||
|
||||
DPRINT("OutDmaChannel %p OuterUnknown %p PoolType %p DeviceDescription %p DeviceObject %p\n",
|
||||
OutDmaChannel, OuterUnknown, PoolType, DeviceDescription, DeviceObject);
|
||||
|
||||
This = AllocateItem(PoolType, sizeof(IDmaChannelSlaveImpl), TAG_PORTCLASS);
|
||||
This = AllocateItem(PoolType, sizeof(IDmaChannelInitImpl), TAG_PORTCLASS);
|
||||
if (!This)
|
||||
{
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
DeviceExt = (PPCLASS_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
|
||||
Status = IoGetDeviceProperty(DeviceObject, DevicePropertyLegacyBusType, sizeof(BusType), (PVOID)&BusType, &ResultLength);
|
||||
/* initialize object */
|
||||
Status = IDmaChannelInit_fnInit((IDmaChannelInit*)This, DeviceDescription, DeviceObject);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
DeviceDescription->InterfaceType = BusType;
|
||||
/* store result */
|
||||
This->lpVtbl = &vt_IDmaChannelInitVtbl;
|
||||
*OutDmaChannel = (PVOID)(&This->lpVtbl);
|
||||
}
|
||||
|
||||
Adapter = IoGetDmaAdapter(DeviceExt->PhysicalDeviceObject, DeviceDescription, &MapRegisters);
|
||||
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;
|
||||
return Status;
|
||||
|
||||
}
|
||||
|
|
|
@ -520,4 +520,60 @@ DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
|
|||
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
|
||||
|
|
Loading…
Reference in a new issue