- 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
* 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;
}

View file

@ -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