2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: mkernel/modules/sound/sound.c
5 * PURPOSE: SoundBlaster 16 Driver
6 * PROGRAMMER: Snatched from David Welch (welch@mcmail.com)
7 * Modified for Soundblaster by Robert Bergkvist (fragdance@hotmail.com)
13 /* FUNCTIONS **************************************************************/
15 #include <ddk/ntddk.h>
27 sb_status
sb16_getenvironment(void);
29 NTSTATUS STDCALL
Dispatch(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
31 * FUNCTION: Handles user mode requests
33 * DeviceObject = Device for request
34 * Irp = I/O request packet describing request
35 * RETURNS: Success or failure
38 PIO_STACK_LOCATION Stack
= IoGetCurrentIrpStackLocation(Irp
);
41 switch (Stack
->MajorFunction
)
44 DPRINT1("(SoundBlaster 16 Driver WaveOut) Creating\n");
46 status
= STATUS_SUCCESS
;
50 status
= STATUS_SUCCESS
;
54 DPRINT1("(SoundBlaster 16 Driver) Writing %d bytes\n",Stack
->Parameters
.Write
.Length
);
55 sb16_play((WAVE_HDR
*)Irp
->UserBuffer
);
56 status
= STATUS_SUCCESS
;
60 status
= STATUS_NOT_IMPLEMENTED
;
64 Irp
->IoStatus
.Status
= status
;
65 Irp
->IoStatus
.Information
= 0;
67 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
71 NTSTATUS
ModuleEntry(PDRIVER_OBJECT DriverObject
, PUNICODE_STRING RegistryPath
)
73 * FUNCTION: Called by the system to initalize the driver
75 * DriverObject = object describing this driver
76 * RegistryPath = path to our configuration entries
77 * RETURNS: Success or failure
81 PDEVICE_OBJECT DeviceObject
;
84 DPRINT1("SoundBlaster 16 Driver 0.0.1\n");
85 if(sb16_getenvironment()!=SB_TRUE
)
87 DPRINT1("Soundblaster 16 not found\n");
90 ret
= IoCreateDevice(DriverObject
,0,L
"\\Device\\WaveOut",FILE_DEVICE_WAVE_OUT
,0,FALSE
,&DeviceObject
);
91 if (ret
!=STATUS_SUCCESS
)
94 DeviceObject
->Flags
=0;
95 DriverObject
->MajorFunction
[IRP_MJ_CLOSE
] = Dispatch
;
96 DriverObject
->MajorFunction
[IRP_MJ_CREATE
] =Dispatch
;
97 DriverObject
->MajorFunction
[IRP_MJ_WRITE
] = Dispatch
;
98 DriverObject
->MajorFunction
[IRP_MJ_WRITE
] = Dispatch
;
99 DriverObject
->DriverUnload
= NULL
;
101 return(STATUS_SUCCESS
);
104 sb_status
sb16_getenvironment(void)
106 if(detect_dsp(&sb16
)!=SB_TRUE
)
108 DPRINT1("Detect DSP failed!!!\n");
111 DPRINT1("DSP base address 0x%x\n",sb16
.base
);
113 DPRINT1("IRQ: %d\n",sb16
.irq
);
115 DPRINT1("DMA8: 0x%x DMA16: 0x%x\n",sb16
.dma8
,sb16
.dma16
);