mirror of
https://github.com/reactos/reactos.git
synced 2025-04-26 08:30:21 +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
|
* 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;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue