From 75fa578ba601b2300f288d9139ba1085b53acbd6 Mon Sep 17 00:00:00 2001 From: Steven Edwards Date: Fri, 25 Jun 2004 23:30:22 +0000 Subject: [PATCH] sndblst fixes based on patch by Sylvain Petreolle. svn path=/trunk/; revision=9875 --- reactos/drivers/dd/sndblst/dma.c | 15 +++++++++++---- reactos/drivers/dd/sndblst/makefile | 2 ++ reactos/drivers/dd/sndblst/portio.c | 5 +++++ reactos/drivers/dd/sndblst/sbdebug.h | 2 +- reactos/drivers/dd/sndblst/sndblst.c | 6 ++++-- reactos/drivers/dd/sndblst/sndblst.h | 6 +++--- 6 files changed, 26 insertions(+), 10 deletions(-) diff --git a/reactos/drivers/dd/sndblst/dma.c b/reactos/drivers/dd/sndblst/dma.c index cf72c558917..bbeddbbce19 100644 --- a/reactos/drivers/dd/sndblst/dma.c +++ b/reactos/drivers/dd/sndblst/dma.c @@ -73,6 +73,7 @@ BOOLEAN CreateDMA(PDEVICE_OBJECT DeviceObject) NTSTATUS Status; PDEVICE_EXTENSION Device = DeviceObject->DeviceExtension; KEVENT DMAEvent; + KIRQL OldIrql; // Buffersize should already be set but it isn't yet ! Device->BufferSize = SB_BUFSIZE; @@ -138,7 +139,9 @@ BOOLEAN CreateDMA(PDEVICE_OBJECT DeviceObject) &Device->Buffer, FALSE); // For some reason BufferSize == 0 here?! - DPRINT("Buffer == 0x%x Bufsize == %u\n", Device->Buffer, Device->BufferSize); +// DPRINT("Buffer == 0x%x Bufsize == %u\n", Device->Buffer, Device->BufferSize); + DPRINT("Bufsize == %u,", Device->BufferSize); + DPRINT("Buffer == 0x%x\n", Device->Buffer); if (! Device->VirtualBuffer) { @@ -147,14 +150,16 @@ BOOLEAN CreateDMA(PDEVICE_OBJECT DeviceObject) return FALSE; } - DPRINT("Buffer == 0x%x Bufsize == %u\n", Device->Buffer, Device->BufferSize); +// DPRINT("Buffer == 0x%x Bufsize == %u\n", Device->Buffer, Device->BufferSize); + DPRINT("Bufsize == %u,", Device->BufferSize); + DPRINT("Buffer == 0x%x\n", Device->Buffer); DPRINT("Calling IoAllocateMdl()\n"); Device->Mdl = IoAllocateMdl(Device->VirtualBuffer, Device->BufferSize, FALSE, FALSE, NULL); DPRINT("Bufsize == %u\n", Device->BufferSize); // IS THIS RIGHT: - if (! Device->VirtualBuffer) + if (! Device->Mdl) { DPRINT("IoAllocateMdl() FAILED\n"); // Free the HAL buffer @@ -171,11 +176,13 @@ BOOLEAN CreateDMA(PDEVICE_OBJECT DeviceObject) // part II: KeInitializeEvent(&DMAEvent, SynchronizationEvent, FALSE); // Raise IRQL + KeRaiseIrql(DISPATCH_LEVEL,&OldIrql); IoAllocateAdapterChannel(Device->Adapter, DeviceObject, BYTES_TO_PAGES(Device->BufferSize), SoundProgramDMA, &DMAEvent); - DPRINT("VBuffer == 0x%x Bufsize == %u\n", Device->VirtualBuffer, Device->BufferSize); // Lower IRQL + KeLowerIrql(OldIrql); + DPRINT("VBuffer == 0x%x Bufsize == %u\n", Device->VirtualBuffer, Device->BufferSize); KeWaitForSingleObject(&DMAEvent, Executive, KernelMode, FALSE, NULL); diff --git a/reactos/drivers/dd/sndblst/makefile b/reactos/drivers/dd/sndblst/makefile index 8435e542515..048b520f1b8 100644 --- a/reactos/drivers/dd/sndblst/makefile +++ b/reactos/drivers/dd/sndblst/makefile @@ -2,6 +2,8 @@ PATH_TO_TOP = ../../.. TARGET_BOOTSTRAP = yes +TARGET_CFLAGS = -Wall #-Werror + TARGET_TYPE = driver TARGET_NAME = sndblst diff --git a/reactos/drivers/dd/sndblst/portio.c b/reactos/drivers/dd/sndblst/portio.c index 7e12e414e89..6c918084fcd 100644 --- a/reactos/drivers/dd/sndblst/portio.c +++ b/reactos/drivers/dd/sndblst/portio.c @@ -101,6 +101,11 @@ WORD InitSoundCard(UINT BasePort) DPRINT("DSP v%d.%d\n", DSP_Major, DSP_Minor); + // if audio is disabled, + // version tests return 0xFF everywhere + if (DSP_Major == 0xFF && DSP_Minor == 0xFF) + return FALSE; + DPRINT("Sound card initialized!\n"); return (DSP_Major * 256) + DSP_Minor; diff --git a/reactos/drivers/dd/sndblst/sbdebug.h b/reactos/drivers/dd/sndblst/sbdebug.h index 30e7feec961..3623ae370b6 100644 --- a/reactos/drivers/dd/sndblst/sbdebug.h +++ b/reactos/drivers/dd/sndblst/sbdebug.h @@ -17,7 +17,7 @@ else if (s == STATUS_ACCESS_DENIED) \ DPRINT("NTSTATUS == ACCESS_DENIED\n") \ else \ - DPRINT("NTSTATUS == FAILURE (???)\n"); \ + DPRINT("NTSTATUS == FAILURE (Unknown)\n"); \ } #else #define TEST_STATUS(s) diff --git a/reactos/drivers/dd/sndblst/sndblst.c b/reactos/drivers/dd/sndblst/sndblst.c index 85f043a564c..7cb3990155a 100644 --- a/reactos/drivers/dd/sndblst/sndblst.c +++ b/reactos/drivers/dd/sndblst/sndblst.c @@ -107,10 +107,10 @@ NTSTATUS InitDevice( s = RtlQueryRegistryValues(RTL_REGISTRY_ABSOLUTE, RegistryPath, Table, &Parameters, NULL); -*/ if (! NT_SUCCESS(s)) return s; +*/ DPRINT("Port 0x%x IRQ %d DMA %d\n", Parameters->Port, Parameters->IRQ, Parameters->DMA); @@ -124,6 +124,7 @@ NTSTATUS InitDevice( // Set state indication somehow // Failure - what error code do we give?! // return STATUS_???? + return STATUS_UNSUCCESSFUL; } DSP_Major = DSP_Version / 256; @@ -453,7 +454,8 @@ DriverEntry(PDRIVER_OBJECT DriverObject, // DeviceExtension = DeviceObject->DeviceExtension; // DeviceExtension->BeepOn = FALSE; - return(STATUS_SUCCESS); +// return(STATUS_SUCCESS); + return(Status); } /* EOF */ diff --git a/reactos/drivers/dd/sndblst/sndblst.h b/reactos/drivers/dd/sndblst/sndblst.h index 39f26614f77..deee5340abe 100644 --- a/reactos/drivers/dd/sndblst/sndblst.h +++ b/reactos/drivers/dd/sndblst/sndblst.h @@ -46,9 +46,9 @@ #define IOCTL_SOUND_BASE FILE_DEVICE_SOUND #define IOCTL_WAVE_BASE 0x0000 // CORRECT? -//#define IOCTL_MIDI_PLAY CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, \ -// METHOD_BUFFERED, FILE_WRITE_ACCESS) - +/* #define IOCTL_MIDI_PLAY CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, \ + * METHOD_BUFFERED, FILE_WRITE_ACCESS) + */ // Some constants