Author: janderwald
Date: Sun Apr 26 15:19:12 2009
New Revision: 40708

URL: http://svn.reactos.org/svn/reactos?rev=40708&view=rev
Log:
- Implement KSPROPERTY_PIN_DATARANGES handler- Always return TRUE in 
FastDeviceHandler (faciliates testing with Vortex AU8820 WDM Driver)

Modified:
    trunk/reactos/drivers/wdm/audio/backpln/portcls/filter_wavepci.c
    trunk/reactos/drivers/wdm/audio/backpln/portcls/propertyhandler.c

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/filter_wavepci.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/filter_wavepci.c?rev=40708&r1=40707&r2=40708&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/filter_wavepci.c 
[iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/filter_wavepci.c 
[iso-8859-1] Sun Apr 26 15:19:12 2009
@@ -323,23 +323,17 @@
         return FALSE;
     }
 
-    Status = STATUS_UNSUCCESSFUL;
     for(Index = 0; Index < 
Descriptor->FilterPropertySet.FreeKsPropertySetOffset; Index++)
     {
         if (IsEqualGUIDAligned(&Property->Set, 
Descriptor->FilterPropertySet.Properties[Index].Set))
         {
-            Status = FastPropertyHandler(FileObject, (PKSPROPERTY)InputBuffer, 
InputBufferLength, OutputBuffer, OutputBufferLength, StatusBlock,
-                                         1,
-                                         
&Descriptor->FilterPropertySet.Properties[Index],
-                                         Descriptor, SubDevice);
-            break;
+            FastPropertyHandler(FileObject, (PKSPROPERTY)InputBuffer, 
InputBufferLength, OutputBuffer, OutputBufferLength, StatusBlock,
+                                1,
+                                
&Descriptor->FilterPropertySet.Properties[Index],
+                                Descriptor, SubDevice);
         }
     }
-
-    if (NT_SUCCESS(Status))
-        return TRUE;
-    else
-        return FALSE;
+    return TRUE;
 }
 
 /*

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/propertyhandler.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/propertyhandler.c?rev=40708&r1=40707&r2=40708&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/propertyhandler.c 
[iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/propertyhandler.c 
[iso-8859-1] Sun Apr 26 15:19:12 2009
@@ -216,15 +216,19 @@
     IN ISubdevice *SubDevice)
 {
     PFNKSHANDLER PropertyHandler = NULL;
-    NTSTATUS Status = STATUS_UNSUCCESSFUL;
+    NTSTATUS Status;
     KSP_PIN * Pin;
+    ULONG Size, Index;
+    PKSMULTIPLE_ITEM Item;
 
     ASSERT(Descriptor);
 
     if (!IsEqualGUIDAligned(&Property->Set, &KSPROPSETID_Pin))
     {
-        /* the fast handler only supports pin properties */
+        /* the fast handler only supports pin properties atm*/
         DPRINT("Only KSPROPSETID_Pin is supported\n");
+        IoStatus->Status = Status = STATUS_NOT_IMPLEMENTED;
+        IoStatus->Information = 0;
         return Status;
     }
 
@@ -233,6 +237,8 @@
     if (!NT_SUCCESS(Status))
     {
         DPRINT("FindPropertyHandler failed with %x\n", Status);
+        IoStatus->Status = Status = Status;
+        IoStatus->Information = 0;
         return Status;
     }
 
@@ -269,6 +275,41 @@
             IoStatus->Status = Status = STATUS_SUCCESS;
             IoStatus->Information = sizeof(KSPIN_COMMUNICATION);
             break;
+        case KSPROPERTY_PIN_DATARANGES:
+            Pin = (KSP_PIN*)Property;
+            if (Pin->PinId >= Descriptor->Factory.PinDescriptorCount)
+            {
+                IoStatus->Status = Status = STATUS_INVALID_PARAMETER;
+                IoStatus->Information = 0;
+                break;
+            }
+            Size = sizeof(KSMULTIPLE_ITEM);
+            for (Index = 0; Index < 
Descriptor->Factory.KsPinDescriptor[Pin->PinId].DataRangesCount; Index++)
+            {
+                Size += 
Descriptor->Factory.KsPinDescriptor[Pin->PinId].DataRanges[Index]->FormatSize;
+            }
+
+            if (DataLength < Size)
+            {
+                IoStatus->Information = Size;
+                IoStatus->Status = STATUS_BUFFER_TOO_SMALL;
+                break;
+            }
+
+            Item = (KSMULTIPLE_ITEM*)Data;
+            Item->Size = Size;
+            Item->Count = 
Descriptor->Factory.KsPinDescriptor[Pin->PinId].DataRangesCount;
+
+            Data = (PUCHAR)(Item +1);
+            for (Index = 0; Index < 
Descriptor->Factory.KsPinDescriptor[Pin->PinId].DataRangesCount; Index++)
+            {
+                RtlMoveMemory(Data, 
Descriptor->Factory.KsPinDescriptor[Pin->PinId].DataRanges[Index], 
Descriptor->Factory.KsPinDescriptor[Pin->PinId].DataRanges[Index]->FormatSize);
+                Data = ((PUCHAR)Data + 
Descriptor->Factory.KsPinDescriptor[Pin->PinId].DataRanges[Index]->FormatSize);
+            }
+
+            IoStatus->Status = Status = STATUS_SUCCESS;
+            IoStatus->Information = Size;
+            break;
 
         case KSPROPERTY_PIN_GLOBALCINSTANCES:
             Status = HandlePropertyInstances(IoStatus, Property, Data, 
Descriptor, TRUE);
@@ -285,22 +326,22 @@
             break;
         case KSPROPERTY_PIN_PHYSICALCONNECTION:
         case KSPROPERTY_PIN_CONSTRAINEDDATARANGES:
-        case KSPROPERTY_PIN_DATARANGES:
         case KSPROPERTY_PIN_INTERFACES:
         case KSPROPERTY_PIN_MEDIUMS:
         case KSPROPERTY_PIN_CATEGORY:
         case KSPROPERTY_PIN_NAME:
         case KSPROPERTY_PIN_PROPOSEDATAFORMAT:
             UNIMPLEMENTED
-            Status = STATUS_NOT_IMPLEMENTED;
+            IoStatus->Status = Status = STATUS_NOT_IMPLEMENTED;
+            IoStatus->Information = 0;
             break;
         default:
             UNIMPLEMENTED
-            Status = STATUS_NOT_IMPLEMENTED;
+            IoStatus->Status = Status = STATUS_NOT_IMPLEMENTED;
+            IoStatus->Information = 0;
     }
     return Status;
 }
-
 
 NTSTATUS
 NTAPI

Reply via email to