Author: janderwald Date: Tue Jan 27 18:04:00 2009 New Revision: 39158
URL: http://svn.reactos.org/svn/reactos?rev=39158&view=rev Log: - Implement initializing routines for wdmaud - Register plug&play notification routines for guid KSCATEGORY_SYSAUDIO
Modified: trunk/reactos/drivers/wdm/audio/legacy/directory.rbuild trunk/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c trunk/reactos/drivers/wdm/audio/legacy/wdmaud/wdmaud.rbuild
Modified: trunk/reactos/drivers/wdm/audio/legacy/directory.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/legacy/di... ============================================================================== --- trunk/reactos/drivers/wdm/audio/legacy/directory.rbuild [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/legacy/directory.rbuild [iso-8859-1] Tue Jan 27 18:04:00 2009 @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE group SYSTEM "../../../../tools/rbuild/project.dtd"> <group xmlns:xi="http://www.w3.org/2001/XInclude"> - <!--directory name="wdmaud"> + <directory name="wdmaud"> <xi:include href="wdmaud/wdmaud.rbuild" /> - </directory--> + </directory> </group>
Modified: trunk/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/legacy/wd... ============================================================================== --- trunk/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c [iso-8859-1] Tue Jan 27 18:04:00 2009 @@ -1,59 +1,228 @@ /* - This doesn't do much yet... -*/ - -#include <debug.h> - -#define InPassiveIrql() \ - (KeGetCurrentIrql() == IRQL_PASSIVE_LEVEL) - - -NTSTATUS AudioDeviceControl( - IN PDEVICE_OBJECT device, - IN PIRP irp -) -{ - return STATUS_SUCCESS; -} - - -NTSTATUS AudioAddDevice( - IN PDRIVER_OBJECT driver, - IN PDEVICE_OBJECT device -) -{ - DPRINT("AudioAddDevice called\n"); - - if ( ! IsPassiveIrql() ) - { - /* What do we do?! */ - /* RtlAssert("FAIL", __FILE__, __LINE__, "?" */ - } - - return STATUS_SUCCESS; -} - -VOID AudioUnload( - IN PDRIVER_OBJECT driver -) -{ - DPRINT("AudioUnload called\n"); + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Kernel Streaming + * FILE: drivers/wdm/audio/legacy/wdmaud/main.c + * PURPOSE: System Audio graph builder + * PROGRAMMER: Andrew Greenwood + * Johannes Anderwald + */ +#include "wdmaud.h" + +const GUID KSCATEGORY_SYSAUDIO = {0xA7C7A5B1L, 0x5AF3, 0x11D1, {0x9C, 0xED, 0x00, 0xA0, 0x24, 0xBF, 0x04, 0x07}}; + +NTSTATUS +NTAPI +WdmAudAddDevice( + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT PhysicalDeviceObject) +{ + PDEVICE_OBJECT DeviceObject; + PDEVICE_OBJECT NextDeviceObject; + NTSTATUS Status; + PWDMAUD_DEVICE_EXTENSION DeviceExtension; + + DPRINT("WdmAudAddDevice called\n"); + + Status = IoCreateDevice(DriverObject, + sizeof(WDMAUD_DEVICE_EXTENSION), + NULL, + FILE_DEVICE_KS, + 0, + FALSE, + &DeviceObject); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("IoCreateDevice failed with %x\n", Status); + return Status; + } + + DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + RtlZeroMemory(DeviceExtension, sizeof(WDMAUD_DEVICE_EXTENSION)); + + Status = KsAllocateDeviceHeader(&DeviceExtension->DeviceHeader, 0, NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("KsAllocateDeviceHeader failed with %x\n", Status); + IoDeleteDevice(DeviceObject); + return Status; + } + + NextDeviceObject = IoAttachDeviceToDeviceStack(DeviceObject, PhysicalDeviceObject); + if (NextDeviceObject) + { + /// FIXME + /// KsSetDevicePnpAndBaseObject((KSDEVICE_HEADER)DeviceObject->DeviceExtension, NextDeviceObject, DeviceObject); + } + + + DeviceObject->Flags |= DO_DIRECT_IO | DO_POWER_PAGABLE; + DeviceObject->Flags &= ~ DO_DEVICE_INITIALIZING; + + return STATUS_SUCCESS; +} + +VOID +NTAPI +WdmAudUnload( + IN PDRIVER_OBJECT driver) +{ + DPRINT("WdmAudUnload called\n"); +} + +NTSTATUS +NTAPI +WdmAudPnp( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + PIO_STACK_LOCATION IrpStack; + + DPRINT("WdmAudPnp called\n"); + + IrpStack = IoGetCurrentIrpStackLocation(Irp); + + if (IrpStack->MinorFunction == IRP_MN_QUERY_PNP_DEVICE_STATE) + { + Irp->IoStatus.Information |= PNP_DEVICE_NOT_DISABLEABLE; + return KsDefaultDispatchPnp(DeviceObject, Irp); + } + return KsDefaultDispatchPnp(DeviceObject, Irp); +} + +NTSTATUS +NTAPI +DeviceInterfaceChangeCallback( + IN PVOID NotificationStructure, + IN PVOID Context) +{ + DEVICE_INTERFACE_CHANGE_NOTIFICATION * Event = (DEVICE_INTERFACE_CHANGE_NOTIFICATION*)NotificationStructure; + + DPRINT1("DeviceInterfaceChangeCallback called %p\n", Event); + return STATUS_SUCCESS; +} + + +NTSTATUS +NTAPI +WdmAudCreate( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + NTSTATUS Status; + PWDMAUD_DEVICE_EXTENSION DeviceExtension; + + DPRINT1("WdmAudCreate\n"); + + + DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + +#if 0 + Status = KsReferenceSoftwareBusObject((KSDEVICE_HEADER)DeviceObject->DeviceExtension); + if (!NT_SUCCESS(Status)) + { + DPRINT1("KsReferenceSoftwareBusObject failed with %x\n", Status); + return Status; + } +#endif + + Status = IoRegisterPlugPlayNotification(EventCategoryDeviceInterfaceChange, + PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES, + (PVOID)&KSCATEGORY_SYSAUDIO, + DeviceObject->DriverObject, + DeviceInterfaceChangeCallback, + (PVOID)DeviceExtension, + &DeviceExtension->SysAudioNotification); + + + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = 0; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return Status; +} + +NTSTATUS +NTAPI +WdmAudClose( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + NTSTATUS Status = STATUS_SUCCESS; + PWDMAUD_DEVICE_EXTENSION DeviceExtension; + + DPRINT1("WdmAudClose\n"); + + DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + +#if 0 + Status = KsDereferenceSoftwareBusObject(DeviceExtension->DeviceHeader); +#endif + + if (NT_SUCCESS(Status)) + { + Status = IoUnregisterPlugPlayNotification(DeviceExtension->SysAudioNotification); + } + + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = 0; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return Status; +} + +NTSTATUS +NTAPI +WdmAudDeviceControl( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + UNIMPLEMENTED + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +WdmAudCleanup( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + UNIMPLEMENTED + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return STATUS_SUCCESS; }
NTSTATUS NTAPI DriverEntry( - IN PDRIVER_OBJECT driver, - IN PUNICODE_STRING registry_path + IN PDRIVER_OBJECT Driver, + IN PUNICODE_STRING Registry_path ) { DPRINT("Wdmaud.sys loaded\n");
- driver->DriverExtension->AddDevice = AudioAddDevice; - driver->DriverUnload = AudioUnload; - - driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = AudioDeviceControl; - - return STATUS_SUCCESS; -} + Driver->DriverExtension->AddDevice = WdmAudAddDevice; + Driver->DriverUnload = WdmAudUnload; + + + Driver->MajorFunction[IRP_MJ_CREATE] = WdmAudCreate; + Driver->MajorFunction[IRP_MJ_CLOSE] = WdmAudClose; + Driver->MajorFunction[IRP_MJ_PNP] = WdmAudPnp; + Driver->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = KsDefaultForwardIrp; + Driver->MajorFunction[IRP_MJ_CLEANUP] = WdmAudCleanup; + Driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = WdmAudDeviceControl; + Driver->MajorFunction[IRP_MJ_POWER] = KsDefaultDispatchPower; + + + return STATUS_SUCCESS; +}
Modified: trunk/reactos/drivers/wdm/audio/legacy/wdmaud/wdmaud.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/legacy/wd... ============================================================================== --- trunk/reactos/drivers/wdm/audio/legacy/wdmaud/wdmaud.rbuild [iso-8859-1] (original) +++ trunk/reactos/drivers/wdm/audio/legacy/wdmaud/wdmaud.rbuild [iso-8859-1] Tue Jan 27 18:04:00 2009 @@ -1,8 +1,8 @@ <?xml version="1.0"?> <!DOCTYPE module SYSTEM "../../../../../tools/rbuild/project.dtd"> <module name="wdmaud_kernel" type="kernelmodedriver" installbase="system32/drivers" installname="wdmaud.sys"> - <include base="wdmaud">.</include> - <include base="wdmaud">..</include> + <include base="wdmaud_kernel">.</include> <library>ntoskrnl</library> + <library>ks</library> <file>entry.c</file> </module>