Author: janderwald Date: Mon Sep 14 00:13:48 2009 New Revision: 43044
URL: http://svn.reactos.org/svn/reactos?rev=43044&view=rev Log: - Add back PHYSICAL_ADDRESS workarround for IDmaChannel::PhysicalAddress - Only define guids for gcc - Add missing PURE interface function definitions - Silence debug spam - Initialize ResourceList members - Fix calculation when allocating new resources entries - Fix building of portcls with msvc
Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp trunk/reactos/drivers/wdm/audio/backpln/portcls/guids.cpp trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild trunk/reactos/drivers/wdm/audio/backpln/portcls/private.hpp trunk/reactos/drivers/wdm/audio/backpln/portcls/resource.cpp
Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/p... ============================================================================== --- trunk/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp [iso-8859-1] Mon Sep 14 00:13:48 2009 @@ -196,11 +196,16 @@
PHYSICAL_ADDRESS NTAPI -CDmaChannelInit::PhysicalAddress() +CDmaChannelInit::PhysicalAddress( + PPHYSICAL_ADDRESS Address) { DPRINT("CDmaChannelInit_PhysicalAdress: this %p Virtuell %p Physical High %x Low %x%\n", this, m_Buffer, m_Address.HighPart, m_Address.LowPart);
- return m_Address; + PHYSICAL_ADDRESS Result; + + Address->QuadPart = m_Address.QuadPart; + Result.QuadPart = (PtrToUlong(Address)); + return Result; }
VOID
Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/guids.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/p... ============================================================================== --- trunk/reactos/drivers/wdm/audio/backpln/portcls/guids.cpp [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/backpln/portcls/guids.cpp [iso-8859-1] Mon Sep 14 00:13:48 2009 @@ -6,9 +6,12 @@ * PROGRAMMER: Johannes Anderwald */
- +#ifdef _MSC_VER +#define PUT_GUIDS_HERE +#endif #include "private.hpp"
+#ifndef _MSC_VER const GUID CLSID_PortTopology = {0xb4c90a32L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}}; const GUID CLSID_PortMidi = {0xb4c90a43L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}}; const GUID CLSID_PortWaveCyclic = {0xb4c90a2aL, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}}; @@ -98,3 +101,4 @@ const GUID IID_IUnregisterSubdevice = {0x16738177, 0xe199, 0x41f9, {0x9a, 0x87, 0xab, 0xb2, 0xa5, 0x43, 0x2f, 0x21}}; const GUID IID_IUnregisterPhysicalConnection = {0x6c38e231, 0x2a0d, 0x428d, {0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4}};
+#endif
Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/p... ============================================================================== --- trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp [iso-8859-1] Mon Sep 14 00:13:48 2009 @@ -304,46 +304,46 @@ IN PDEVICE_OBJECT DeviceObject, IN ULONG FrameSize, IN ULONG Alignment, - IN PVOID SilenceBuffer); + IN PVOID SilenceBuffer) PURE;
STDMETHOD_(NTSTATUS, AddMapping)(THIS_ IN PUCHAR Buffer, IN ULONG BufferSize, - IN PIRP Irp); + IN PIRP Irp) PURE;
STDMETHOD_(NTSTATUS, GetMapping)(THIS_ OUT PUCHAR * Buffer, - OUT PULONG BufferSize); + OUT PULONG BufferSize) PURE;
STDMETHOD_(VOID, UpdateMapping)(THIS_ - IN ULONG BytesWritten); - - STDMETHOD_(ULONG, NumMappings)(THIS); - - STDMETHOD_(ULONG, NumData)(THIS); - - STDMETHOD_(BOOL, MinimumDataAvailable)(THIS); - - STDMETHOD_(BOOL, CancelBuffers)(THIS); + IN ULONG BytesWritten) PURE; + + STDMETHOD_(ULONG, NumMappings)(THIS) PURE; + + STDMETHOD_(ULONG, NumData)(THIS) PURE; + + STDMETHOD_(BOOL, MinimumDataAvailable)(THIS) PURE; + + STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE;
STDMETHOD_(VOID, UpdateFormat)(THIS_ - IN PKSDATAFORMAT DataFormat); + IN PKSDATAFORMAT DataFormat) PURE;
STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_ IN PVOID Tag, OUT PPHYSICAL_ADDRESS PhysicalAddress, OUT PVOID *VirtualAddress, OUT PULONG ByteCount, - OUT PULONG Flags); + OUT PULONG Flags) PURE;
STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_ - IN PVOID Tag); - - STDMETHOD_(BOOL, HasLastMappingFailed)(THIS); - STDMETHOD_(VOID, PrintQueueStatus)(THIS); + IN PVOID Tag) PURE; + + STDMETHOD_(BOOL, HasLastMappingFailed)(THIS) PURE; + STDMETHOD_(VOID, PrintQueueStatus)(THIS) PURE; STDMETHOD_(VOID, SetMinimumDataThreshold)(THIS_ - IN ULONG MinimumDataThreshold); - STDMETHOD_(ULONG, GetMinimumDataThreshold)(THIS); + IN ULONG MinimumDataThreshold) PURE; + STDMETHOD_(ULONG, GetMinimumDataThreshold)(THIS) PURE; };
@@ -633,20 +633,20 @@ IN KSPIN_DESCRIPTOR * PinDescriptor, IN PDEVICE_OBJECT DeviceObject) PURE;
- STDMETHOD_(PVOID, GetIrpStream)(THIS); - STDMETHOD_(PMINIPORT, GetMiniport)(THIS); + STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE; + STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE; };
#define IMP_IPortPinWavePci \ IMP_IIrpTarget; \ STDMETHODIMP_(NTSTATUS) Init(THIS_ \ IN PPORTWAVEPCI Port, \ - IN PPORTFILTERWAVEPCI Filter, \ + IN PPORTFILTERWAVEPCI Filter, \ IN KSPIN_CONNECT * ConnectDetails, \ IN KSPIN_DESCRIPTOR * PinDescriptor, \ IN PDEVICE_OBJECT DeviceObject); \ \ - STDMETHODIMP_(PVOID) GetIrpStream(THIS); \ + STDMETHODIMP_(PVOID) GetIrpStream(); \ STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
@@ -771,11 +771,11 @@ IN KSPIN_CONNECT * ConnectDetails, IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
- STDMETHOD_(ULONG, GetCompletedPosition)(THIS); - STDMETHOD_(ULONG, GetCycleCount)(THIS); - STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS); - STDMETHOD_(PVOID, GetIrpStream)(THIS); - STDMETHOD_(PMINIPORT, GetMiniport)(THIS); + STDMETHOD_(ULONG, GetCompletedPosition)(THIS) PURE; + STDMETHOD_(ULONG, GetCycleCount)(THIS) PURE; + STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS) PURE; + STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE; + STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE; };
#define IMP_IPortPinWaveCyclic \ @@ -814,7 +814,7 @@ STDMETHOD_(NTSTATUS, FreePin)(THIS_ IN struct IPortPinDMus* Pin)PURE;
- STDMETHOD_(VOID, NotifyPins)(THIS); + STDMETHOD_(VOID, NotifyPins)(THIS) PURE; };
typedef IPortFilterDMus *PPORTFILTERDMUS; @@ -848,7 +848,7 @@ IN KSPIN_DESCRIPTOR * PinDescriptor, IN PDEVICE_OBJECT DeviceObject) PURE;
- STDMETHOD_(VOID, Notify)(THIS); + STDMETHOD_(VOID, Notify)(THIS) PURE; };
#define IMP_IPortPinDMus \ @@ -868,28 +868,95 @@ ***************************************************************************** */
+#define IMP_IDmaChannelEx \ + STDMETHODIMP_(NTSTATUS) AllocateBuffer( \ + IN ULONG BufferSize, \ + IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \ + \ + STDMETHODIMP_(void) FreeBuffer(void); \ + STDMETHODIMP_(ULONG) TransferCount(void); \ + STDMETHODIMP_(ULONG) MaximumBufferSize(void); \ + STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \ + STDMETHODIMP_(ULONG) BufferSize(void); \ + \ + STDMETHODIMP_(void) SetBufferSize( \ + IN ULONG BufferSize); \ + \ + STDMETHODIMP_(PVOID) SystemAddress(void); \ + STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \ + IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \ + STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \ + \ + STDMETHODIMP_(void) CopyTo( \ + IN PVOID Destination, \ + IN PVOID Source, \ + IN ULONG ByteCount); \ + \ + STDMETHODIMP_(void) CopyFrom( \ + IN PVOID Destination, \ + IN PVOID Source, \ + IN ULONG ByteCount) + +#define IMP_IDmaChannelSlaveEx \ + IMP_IDmaChannelEx; \ + STDMETHODIMP_(NTSTATUS) Start( \ + IN ULONG MapSize, \ + IN BOOLEAN WriteToDevice); \ + \ + STDMETHODIMP_(NTSTATUS) Stop(void); \ + STDMETHODIMP_(ULONG) ReadCounter(void); \ + \ + STDMETHODIMP_(NTSTATUS) WaitForTC( \ + ULONG Timeout) + +#define IMP_IDmaChannelInit\ + IMP_IDmaChannelSlaveEx;\ + STDMETHODIMP_(NTSTATUS) Init( \ + IN PDEVICE_DESCRIPTION DeviceDescription, \ + IN PDEVICE_OBJECT DeviceObject) + +#define DEFINE_ABSTRACT_DMACHANNEL_EX() \ + STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \ + IN ULONG BufferSize, \ + IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \ +\ + STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \ + STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \ + STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \ + STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \ + STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \ +\ + STDMETHOD_(void, SetBufferSize)( THIS_ \ + IN ULONG BufferSize) PURE; \ +\ + STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \ + STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \ + IN PPHYSICAL_ADDRESS Address) PURE; \ + STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \ +\ + STDMETHOD_(void, CopyTo)( THIS_ \ + IN PVOID Destination, \ + IN PVOID Source, \ + IN ULONG ByteCount) PURE; \ +\ + STDMETHOD_(void, CopyFrom)( THIS_ \ + IN PVOID Destination, \ + IN PVOID Source, \ + IN ULONG ByteCount) PURE; + #undef INTERFACE #define INTERFACE IDmaChannelInit
DECLARE_INTERFACE_(IDmaChannelInit, IUnknown) { DEFINE_ABSTRACT_UNKNOWN() - DEFINE_ABSTRACT_DMACHANNEL() + DEFINE_ABSTRACT_DMACHANNEL_EX() DEFINE_ABSTRACT_DMACHANNELSLAVE()
STDMETHOD_(NTSTATUS, Init)( THIS_ IN PDEVICE_DESCRIPTION DeviceDescription, IN PDEVICE_OBJECT DeviceObject) PURE; }; - - - -#define IMP_IDmaChannelInit\ - IMP_IDmaChannelSlave;\ - STDMETHODIMP_(NTSTATUS) Init( \ - IN PDEVICE_DESCRIPTION DeviceDescription, \ - IN PDEVICE_OBJECT DeviceObject) -
#undef INTERFACE
@@ -1021,7 +1088,4 @@ IN ULONG Index \ )
- - - #endif
Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/p... ============================================================================== --- trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild [iso-8859-1] Mon Sep 14 00:13:48 2009 @@ -15,6 +15,10 @@ <group compilerset="gcc"> <compilerflag compiler="cxx">-fno-exceptions</compilerflag> <compilerflag compiler="cxx">-fno-rtti</compilerflag> + </group> + + <group compilerset="msc"> + <compilerflag compiler="cxx">/GR-</compilerflag> </group>
<file>adapter.cpp</file>
Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/private.hpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/p... ============================================================================== --- trunk/reactos/drivers/wdm/audio/backpln/portcls/private.hpp [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/backpln/portcls/private.hpp [iso-8859-1] Mon Sep 14 00:13:48 2009 @@ -12,7 +12,7 @@
#include <ntddk.h> #include <portcls.h> -#define YDEBUG +#define NDEBUG #include <debug.h>
#include <dmusicks.h>
Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/resource.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/p... ============================================================================== --- trunk/reactos/drivers/wdm/audio/backpln/portcls/resource.cpp [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/backpln/portcls/resource.cpp [iso-8859-1] Mon Sep 14 00:13:48 2009 @@ -34,7 +34,7 @@ }
IMP_IResourceList; - CResourceList(IUnknown * OuterUnknown) {} + CResourceList(IUnknown * OuterUnknown) : m_OuterUnknown(OuterUnknown), m_PoolType(NonPagedPool), m_TranslatedResourceList(0), m_UntranslatedResourceList(0), m_NumberOfEntries(0) {} virtual ~CResourceList() {}
public: @@ -88,7 +88,7 @@ IN CM_RESOURCE_TYPE Type) { ULONG Index, Count = 0; - PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor, UnPartialDescriptor;
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
@@ -97,17 +97,30 @@ // no resource list return 0; } - + PC_ASSERT(m_TranslatedResourceList->List[0].PartialResourceList.Count == m_UntranslatedResourceList->List[0].PartialResourceList.Count); // I guess the translated and untranslated lists will be same length? for (Index = 0; Index < m_TranslatedResourceList->List[0].PartialResourceList.Count; Index ++ ) { PartialDescriptor = &m_TranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[Index]; - DPRINT("Descriptor Type %u\n", PartialDescriptor->Type); + UnPartialDescriptor = &m_UntranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[Index]; + DPRINT1("Descriptor Type %u\n", PartialDescriptor->Type); if (PartialDescriptor->Type == Type) { // Yay! Finally found one that matches! Count++; } + + if (PartialDescriptor->Type == CmResourceTypeInterrupt) + { + DPRINT1("Index %u TRANS Interrupt Number Affinity %x Level %u Vector %u\n", Index, PartialDescriptor->u.Interrupt.Affinity, PartialDescriptor->u.Interrupt.Level, PartialDescriptor->u.Interrupt.Vector, PartialDescriptor->u.Port.Start.LowPart, PartialDescriptor->Flags); + DPRINT1("Index %u UNTRANS Interrupt Number Affinity %x Level %u Vector %u\n", Index, UnPartialDescriptor->u.Interrupt.Affinity, UnPartialDescriptor->u.Interrupt.Level, UnPartialDescriptor->u.Interrupt.Vector, PartialDescriptor->u.Port.Start.LowPart, PartialDescriptor->Flags); + + } + else if (PartialDescriptor->Type == CmResourceTypePort) + { + DPRINT1("Index %u TRANS Port Length %u Start %u %u Flags %x\n", Index, PartialDescriptor->u.Port.Length, PartialDescriptor->u.Port.Start.HighPart, PartialDescriptor->u.Port.Start.LowPart, PartialDescriptor->Flags); + DPRINT1("Index %u UNTRANS Port Length %u Start %u %u Flags %x\n", Index, UnPartialDescriptor->u.Port.Length, UnPartialDescriptor->u.Port.Start.HighPart, UnPartialDescriptor->u.Port.Start.LowPart, UnPartialDescriptor->Flags); + } }
DPRINT("Found %d type %d\n", Count, Type); @@ -200,9 +213,8 @@ NewTranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount+1]); TranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount]); #else - NewTranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount+1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0); - TranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0); - + NewTranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount+1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); + TranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); #endif NewTranslatedResources = (PCM_RESOURCE_LIST)AllocateItem(m_PoolType, NewTranslatedSize, TAG_PORTCLASS); if (!NewTranslatedResources) @@ -216,9 +228,8 @@ NewUntranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount+1]); UntranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount]); #else - NewUntranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount+1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0); - UntranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0); - + NewUntranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount+1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); + UntranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); #endif
@@ -361,7 +372,7 @@ #ifdef _MSC_VER NewTranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount]); #else - NewTranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0); + NewTranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); #endif
// store resource count @@ -372,7 +383,7 @@ #ifdef _MSC_VER NewUntranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount]); #else - NewUntranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0); + NewUntranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); #endif
// allocate translated resource list @@ -454,6 +465,7 @@ NewList->m_OuterUnknown = OuterUnknown; NewList->m_PoolType = PoolType; NewList->m_Ref = 1; + NewList->m_NumberOfEntries = 0;
*OutResourceList = (IResourceList*)NewList;