3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: drivers/dd/sndblst/sndblst.h
6 * PURPOSE: Sound Blaster driver header
7 * PROGRAMMER: Andrew Greenwood
9 * Sept 28, 2003: Created
12 #ifndef __INCLUDES_SNDBLST_H__
13 #define __INCLUDES_SNDBLST_H__
20 #define DEFAULT_PORT 0x220
23 #define DEFAULT_BUFSIZE 0x4000
24 #define DEFAULT_SAMPLERATE 11025
25 #define DEFAULT_BITDEPTH 8
26 #define DEFAULT_CHANNELS 1
28 #define VALID_IRQS {5}
30 #define MIN_BUFSIZE 0x1000
31 #define MAX_BUFSIZE 0x4000
33 #define DEVICE_SUBKEY L"Devices"
34 #define PARMS_SUBKEY L"Parameters"
36 #define REGISTRY_PORT L"Port"
38 // At the moment, we just support a single device with fixed parameters:
39 #define SB_PORT DEFAULT_PORT
40 #define SB_IRQ DEFAULT_IRQ
41 #define SB_DMA DEFAULT_DMA
42 #define SB_BUFSIZE DEFAULT_BUFSIZE
44 #define SB_TIMEOUT 1000000
46 #define IOCTL_SOUND_BASE FILE_DEVICE_SOUND
47 #define IOCTL_WAVE_BASE 0x0000 // CORRECT?
49 /* #define IOCTL_MIDI_PLAY CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, \
50 * METHOD_BUFFERED, FILE_WRITE_ACCESS)
55 #define SB_DSP_READY 0xaa
57 // Commands (only the ones we use)
59 #define SB_SET_OUTPUT_RATE 0x41 // DSP v4.xx only
60 #define SB_SET_INPUT_RATE 0x42 // DSP v4.xx only
61 #define SB_SET_BLOCK_SIZE 0x48 // DSP v2.00 +
62 #define SB_ENABLE_SPEAKER 0xd1
63 #define SB_DISABLE_SPEAKER 0xd3
64 #define SB_GET_SPEAKER_STATUS 0xd8 // DSP v2.00 +
65 #define SB_GET_DSP_VERSION 0xe1
68 // Hmm... These are a weenie bit trickier than MPU401...
70 #define SB_WRITE_RESET(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x6, x)
71 #define SB_READ_DATA(bp) READ_PORT_UCHAR((PUCHAR) bp+0xa)
72 #define SB_WRITE_DATA(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0xc, x)
73 #define SB_READ_WRITESTATUS(bp) READ_PORT_UCHAR((PUCHAR) bp+0xc)
74 #define SB_READ_READSTATUS(bp) READ_PORT_UCHAR((PUCHAR) bp+0xe)
78 #define SB_READY_TO_SEND(bp) \
79 SB_READ_WRITESTATUS(bp) & 0x80
81 #define SB_READY_TO_RECEIVE(bp) \
82 SB_READ_READSTATUS(bp) & 0x80
85 #define SB_WRITE_BYTE(bp, x) \
86 if (WaitToSend(bp)) SB_WRITE_DATA(bp, x)
88 //#define MPU401_READ(bp)
89 // if (WaitToRead(bp)) ... ???
92 DEVICE_EXTENSION contains the settings for each individual device
95 typedef struct _DEVICE_EXTENSION
98 PDRIVER_OBJECT DriverObject
;
103 PADAPTER_OBJECT Adapter
;
106 PHYSICAL_ADDRESS Buffer
;
107 } DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
110 DEVICE_INSTANCE contains ???
113 typedef struct _DEVICE_INSTANCE
116 PDRIVER_OBJECT DriverObject
;
117 } DEVICE_INSTANCE
, *PDEVICE_INSTANCE
;
120 CONFIG contains device parameters (port/IRQ)
121 THIS STRUCTURE IS REDUNDANT
124 //typedef struct _CONFIG
128 //} CONFIG, *PCONFIG;
131 Some callback typedefs
134 typedef NTSTATUS
REGISTRY_CALLBACK_ROUTINE(PWSTR RegistryPath
, PVOID Context
);
135 typedef REGISTRY_CALLBACK_ROUTINE
*PREGISTRY_CALLBACK_ROUTINE
;
139 Prototypes for functions in portio.c :
142 BOOLEAN
WaitToSend(ULONG BasePort
);
143 BOOLEAN
WaitToReceive(ULONG BasePort
);
144 USHORT
InitSoundCard(ULONG BasePort
);
147 Prototypes for functions in settings.c :
150 NTSTATUS STDCALL
EnumDeviceKeys(
151 IN PUNICODE_STRING RegistryPath
,
153 IN PREGISTRY_CALLBACK_ROUTINE Callback
,
156 NTSTATUS STDCALL
LoadSettings(
160 IN ULONG ValueLength
,
162 IN PVOID EntryContext
);
167 BOOLEAN
CreateDMA(PDEVICE_OBJECT DeviceObject
);
171 VOID
SetOutputSampleRate(ULONG BasePort
, ULONG SampleRate
);
172 VOID
EnableSpeaker(ULONG BasePort
, BOOLEAN SpeakerOn
);
173 BOOLEAN
IsSpeakerEnabled(ULONG BasePort
);
174 VOID
BeginPlayback(ULONG BasePort
, ULONG BitDepth
, ULONG Channels
, ULONG BlockSize
);