Author: janderwald Date: Thu Jul 2 11:07:39 2015 New Revision: 68330
URL: http://svn.reactos.org/svn/reactos?rev=68330&view=rev Log: [HDAUDBUS] - partly implement HDA_TransferCodecVerbs - stubplement HDAUDIO_BUS_INTERFACE_V2 - silence traces
Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp trunk/reactos/drivers/wdm/audio/hdaudbus/fdo.cpp trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.h
Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/... ============================================================================== --- trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp [iso-8859-1] Thu Jul 2 11:07:39 2015 @@ -27,15 +27,37 @@ NTSTATUS NTAPI HDA_TransferCodecVerbs( -IN PVOID _context, -IN ULONG Count, -IN OUT PHDAUDIO_CODEC_TRANSFER CodecTransfer, -IN PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback, -IN PVOID Context) -{ - UNIMPLEMENTED; - ASSERT(FALSE); - return STATUS_NOT_IMPLEMENTED; + IN PVOID _context, + IN ULONG Count, + IN OUT PHDAUDIO_CODEC_TRANSFER CodecTransfer, + IN PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback, + IN PVOID Context) +{ + ULONG Verbs[MAX_CODEC_RESPONSES], Responses[MAX_CODEC_RESPONSES]; + ULONG Index; + PHDA_PDO_DEVICE_EXTENSION DeviceExtension; + + DPRINT1("HDA_TransferCodecVerbs Coun %lu CodecTransfer %p Callback %p Context %p\n", Count, CodecTransfer, Callback, Context); + + /* get device extension */ + DeviceExtension = (PHDA_PDO_DEVICE_EXTENSION)_context; + ASSERT(DeviceExtension->IsFDO == FALSE); + + /* FIXME handle callback*/ + ASSERT(Callback == NULL); + + for (Index = 0; Index < Count; Index++) + { + Verbs[Index] = CodecTransfer[Index].Output.Command; + } + + HDA_SendVerbs(DeviceExtension->FDO, DeviceExtension->Codec, Verbs, Responses, Count); + + for (Index = 0; Index < DeviceExtension->Codec->ResponseCount; Index++) + { + CodecTransfer[Index].Input.Response = DeviceExtension->Codec->Responses[Index]; + } + return STATUS_SUCCESS; }
NTSTATUS @@ -216,12 +238,70 @@ }
NTSTATUS +NTAPI +HDA_AllocateDmaBufferWithNotification( + IN PVOID _context, + IN HANDLE Handle, + IN ULONG NotificationCount, + IN SIZE_T RequestedBufferSize, + OUT PMDL *BufferMdl, + OUT PSIZE_T AllocatedBufferSize, + OUT PSIZE_T OffsetFromFirstPage, + OUT PUCHAR StreamId, + OUT PULONG FifoSize) +{ + UNIMPLEMENTED; + ASSERT(FALSE); + return STATUS_NOT_IMPLEMENTED; + +} +NTSTATUS +NTAPI +HDA_FreeDmaBufferWithNotification( + IN PVOID _context, + IN HANDLE Handle, + IN PMDL BufferMdl, + IN SIZE_T BufferSize) +{ + UNIMPLEMENTED; + ASSERT(FALSE); + return STATUS_NOT_IMPLEMENTED; + +} + +NTSTATUS +NTAPI +HDA_RegisterNotificationEvent( + PVOID _context, + HANDLE Handle, + IN PKEVENT NotificationEvent) +{ + UNIMPLEMENTED; + ASSERT(FALSE); + return STATUS_NOT_IMPLEMENTED; + +} + +NTSTATUS +NTAPI +HDA_UnregisterNotificationEvent( + IN PVOID _context, + IN HANDLE Handle, + IN PKEVENT NotificationEvent) +{ + UNIMPLEMENTED; + ASSERT(FALSE); + return STATUS_NOT_IMPLEMENTED; +} + + +NTSTATUS HDA_PDOHandleQueryInterface( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { PIO_STACK_LOCATION IoStack; - PHDAUDIO_BUS_INTERFACE InterfaceHDA; + PHDAUDIO_BUS_INTERFACE_V2 InterfaceHDA; PHDA_PDO_DEVICE_EXTENSION DeviceExtension;
/* get device extension */ @@ -232,10 +312,12 @@
if (IsEqualGUIDAligned(*IoStack->Parameters.QueryInterface.InterfaceType, GUID_HDAUDIO_BUS_INTERFACE)) { - InterfaceHDA = (PHDAUDIO_BUS_INTERFACE)IoStack->Parameters.QueryInterface.Interface; + InterfaceHDA = (PHDAUDIO_BUS_INTERFACE_V2)IoStack->Parameters.QueryInterface.Interface; InterfaceHDA->Version = IoStack->Parameters.QueryInterface.Version; - InterfaceHDA->Size = IoStack->Parameters.QueryInterface.Size; + InterfaceHDA->Size = sizeof(HDAUDIO_BUS_INTERFACE); InterfaceHDA->Context = DeviceExtension; + InterfaceHDA->InterfaceReference = HDA_InterfaceReference; + InterfaceHDA->InterfaceDereference = HDA_InterfaceDereference;
InterfaceHDA->TransferCodecVerbs = HDA_TransferCodecVerbs; InterfaceHDA->AllocateCaptureDmaEngine = HDA_AllocateCaptureDmaEngine; @@ -251,11 +333,40 @@ InterfaceHDA->UnregisterEventCallback = HDA_UnregisterEventCallback; InterfaceHDA->GetDeviceInformation = HDA_GetDeviceInformation; InterfaceHDA->GetResourceInformation = HDA_GetResourceInformation; - return STATUS_SUCCESS; } + else if (IsEqualGUIDAligned(*IoStack->Parameters.QueryInterface.InterfaceType, GUID_HDAUDIO_BUS_INTERFACE_V2)) + { + InterfaceHDA = (PHDAUDIO_BUS_INTERFACE_V2)IoStack->Parameters.QueryInterface.Interface; + InterfaceHDA->Version = IoStack->Parameters.QueryInterface.Version; + InterfaceHDA->Size = sizeof(HDAUDIO_BUS_INTERFACE_V2); + InterfaceHDA->Context = DeviceExtension; + InterfaceHDA->InterfaceReference = HDA_InterfaceReference; + InterfaceHDA->InterfaceDereference = HDA_InterfaceDereference; + + InterfaceHDA->TransferCodecVerbs = HDA_TransferCodecVerbs; + InterfaceHDA->AllocateCaptureDmaEngine = HDA_AllocateCaptureDmaEngine; + InterfaceHDA->AllocateRenderDmaEngine = HDA_AllocateRenderDmaEngine; + InterfaceHDA->ChangeBandwidthAllocation = HDA_ChangeBandwidthAllocation; + InterfaceHDA->AllocateDmaBuffer = HDA_AllocateDmaBuffer; + InterfaceHDA->FreeDmaBuffer = HDA_FreeDmaBuffer; + InterfaceHDA->FreeDmaEngine = HDA_FreeDmaEngine; + InterfaceHDA->SetDmaEngineState = HDA_SetDmaEngineState; + InterfaceHDA->GetWallClockRegister = HDA_GetWallClockRegister; + InterfaceHDA->GetLinkPositionRegister = HDA_GetLinkPositionRegister; + InterfaceHDA->RegisterEventCallback = HDA_RegisterEventCallback; + InterfaceHDA->UnregisterEventCallback = HDA_UnregisterEventCallback; + InterfaceHDA->GetDeviceInformation = HDA_GetDeviceInformation; + InterfaceHDA->GetResourceInformation = HDA_GetResourceInformation; + + InterfaceHDA->AllocateDmaBufferWithNotification = HDA_AllocateDmaBufferWithNotification; + InterfaceHDA->FreeDmaBufferWithNotification = HDA_FreeDmaBufferWithNotification; + InterfaceHDA->RegisterNotificationEvent = HDA_RegisterNotificationEvent; + InterfaceHDA->UnregisterNotificationEvent = HDA_UnregisterNotificationEvent; + }
// FIXME - // implement support for GUID_HDAUDIO_BUS_INTERFACE_BDL, GUID_HDAUDIO_BUS_INTERFACE_V2 + // implement support for GUID_HDAUDIO_BUS_INTERFACE_BDL + UNIMPLEMENTED; return STATUS_NOT_SUPPORTED; }
Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/fdo.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/... ============================================================================== --- trunk/reactos/drivers/wdm/audio/hdaudbus/fdo.cpp [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/hdaudbus/fdo.cpp [iso-8859-1] Thu Jul 2 11:07:39 2015 @@ -127,6 +127,7 @@
/* get device extension */ DeviceExtension = (PHDA_FDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + ASSERT(DeviceExtension->IsFDO);
/* reset response count */ Codec->ResponseCount = 0; @@ -249,6 +250,7 @@ ChildDeviceExtension->IsFDO = FALSE; ChildDeviceExtension->Codec = Entry; ChildDeviceExtension->AudioGroup = AudioGroup; + ChildDeviceExtension->FDO = DeviceObject;
/* setup flags */ AudioGroup->ChildPDO->Flags |= DO_POWER_PAGABLE;
Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/... ============================================================================== --- trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp [iso-8859-1] Thu Jul 2 11:07:39 2015 @@ -98,18 +98,14 @@ //ChildDeviceExtension = (PHDA_PDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
IoStack = IoGetCurrentIrpStackLocation(Irp); - DPRINT1("HDA_Pnp Minor: %u IsFDO%d\n", IoStack->MinorFunction, FDODeviceExtension->IsFDO); - if (FDODeviceExtension->IsFDO) { if (IoStack->MinorFunction == IRP_MN_START_DEVICE) { - DPRINT1("IRP_MN_START_DEVICE\n"); Status = HDA_FDOStartDevice(DeviceObject, Irp); } else if (IoStack->MinorFunction == IRP_MN_QUERY_DEVICE_RELATIONS) { - DPRINT1("IRP_MN_QUERY_DEVICE_RELATIONS\n"); /* handle bus device relations */ if (IoStack->Parameters.QueryDeviceRelations.Type == BusRelations) { @@ -130,25 +126,21 @@ { if (IoStack->MinorFunction == IRP_MN_START_DEVICE) { - DPRINT1("IRP_MN_START_DEVICE\n"); /* no op for pdo */ Status = STATUS_SUCCESS; } else if (IoStack->MinorFunction == IRP_MN_QUERY_BUS_INFORMATION) { - DPRINT1("IRP_MN_QUERY_BUS_INFORMATION\n"); /* query bus information */ Status = HDA_PDOQueryBusInformation(Irp); } else if (IoStack->MinorFunction == IRP_MN_QUERY_PNP_DEVICE_STATE) { - DPRINT1("IRP_MN_QUERY_PNP_DEVICE_STATE\n"); /* query pnp state */ Status = HDA_PDOQueryBusDevicePnpState(Irp); } else if (IoStack->MinorFunction == IRP_MN_QUERY_DEVICE_RELATIONS) { - DPRINT1("IRP_MN_QUERY_DEVICE_RELATIONS\n"); if (IoStack->Parameters.QueryDeviceRelations.Type == TargetDeviceRelation) { /* handle target device relations */ @@ -180,35 +172,29 @@ } else if (IoStack->MinorFunction == IRP_MN_QUERY_CAPABILITIES) { - DPRINT1("IRP_MN_QUERY_CAPABILITIES\n"); /* query capabilities */ Status = HDA_PDOQueryBusDeviceCapabilities(Irp); } else if (IoStack->MinorFunction == IRP_MN_QUERY_RESOURCE_REQUIREMENTS) { - DPRINT1("IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n"); /* no op */ Status = STATUS_SUCCESS; } else if (IoStack->MinorFunction == IRP_MN_QUERY_RESOURCES) { - DPRINT1("IRP_MN_QUERY_RESOURCES\n"); /* no op */ Status = STATUS_SUCCESS; } else if (IoStack->MinorFunction == IRP_MN_QUERY_ID) { - DPRINT1("IRP_MN_QUERY_ID\n"); Status = HDA_PDOQueryId(DeviceObject, Irp); } else if (IoStack->MinorFunction == IRP_MN_QUERY_DEVICE_TEXT) { - DPRINT1("IRP_MN_QUERY_DEVICE_TEXT\n"); Status = HDA_PDOHandleQueryDeviceText(Irp); } else if (IoStack->MinorFunction == IRP_MN_QUERY_INTERFACE) { - DPRINT1("IRP_MN_QUERY_INTERFACE\n"); Status = HDA_PDOHandleQueryInterface(DeviceObject, Irp); } else
Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/... ============================================================================== --- trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.h [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.h [iso-8859-1] Thu Jul 2 11:07:39 2015 @@ -85,6 +85,7 @@ BOOLEAN IsFDO; PHDA_CODEC_ENTRY Codec; PHDA_CODEC_AUDIO_GROUP AudioGroup; + PDEVICE_OBJECT FDO; }HDA_PDO_DEVICE_EXTENSION, *PHDA_PDO_DEVICE_EXTENSION;
@@ -131,6 +132,14 @@ IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
+VOID +HDA_SendVerbs( + IN PDEVICE_OBJECT DeviceObject, + IN PHDA_CODEC_ENTRY Codec, + IN PULONG Verbs, + OUT PULONG Responses, + IN ULONG Count); + /* pdo.cpp*/
NTSTATUS