|
|
1.1 root 1: /*++ BUILD Version: 0002 // Increment this if a change has global effects
2:
3:
4: Copyright (c) 1992 Microsoft Corporation
5:
6: Module Name:
7:
8: sound.h
9:
10: Abstract:
11:
12: This include file defines constants and types for
13: the Microsoft sound system kernel mode device driver.
14:
15: Author:
16:
17: Robin Speed (RobinSp) 20-Oct-92
18:
19: Revision History:
20:
21: --*/
22:
23: #define MIDI
24:
25: //
26: // Other header files needed to build this driver
27: //
28:
29: #include <soundlib.h>
30: #include <wave.h>
31: #include <midi.h>
32: #include <string.h>
33: #include "hardware.h"
34:
35: // #include "vendor.h"
36:
37: #define DRIVER_VERSION 0x0100
38:
39: //
40: // Defaults
41: //
42:
43: #define DEFAULT_DMA_BUFFERSIZE 4096 // 4K
44:
45: //
46: // Magic markers
47: //
48:
49: #define GDI_KEY (*(ULONG *)"GDI ")
50:
51:
52:
53: extern SOUND_DEVICE_INIT DeviceInit[NumberOfDevices];
54:
55:
56: typedef struct {
57: ULONG Port;
58: ULONG InterruptNumber;
59: ULONG DmaChannel;
60: ULONG DmaBufferSize;
61: ULONG InputSource;
62: WAVE_DD_VOLUME Volume[NumberOfDevices];
63: } SB_CONFIG_DATA, *PSB_CONFIG_DATA;
64:
65: //
66: // DMA buffer info
67: //
68:
69: #define DMA_MAX_BUFFER_SIZE 0x10000 // 64k would be nice
70:
71: //
72: // driver global data structure shared by each device object
73: // Note that we have one global spin lock used for all access
74: // to both the global data and the local data structures.
75: //
76:
77: typedef struct _GLOBAL_DEVICE_INFO {
78:
79: // static items not requiring use of the spin lock
80:
81: ULONG Key;
82: INTERFACE_TYPE BusType;
83: ULONG BusNumber;
84: ULONG InterruptVector; // int level we are on
85: KIRQL InterruptRequestLevel;
86: ULONG InterruptsReceived; // For interrupt verification
87:
88: //
89: // Device access
90: //
91:
92: KMUTEX DeviceMutex;
93: KMUTEX MidiMutex;
94:
95: //
96: // Device sharing
97: //
98:
99: UCHAR Usage; // Which of wavein, waveout and
100: // midi in is in use
101: BOOLEAN MidiInUse;
102:
103: //
104: // Clean-up info
105: //
106:
107: ULONG MemType;
108:
109: //
110: // List of our devices
111: //
112:
113: PDEVICE_OBJECT DeviceObject[ // pointer to input device objects
114: NumberOfDevices];
115: PDRIVER_OBJECT DriverObject; // The actual driver instance
116:
117: //
118: // Generic device type data
119: //
120:
121: WAVE_INFO WaveInfo; // Wave input and output data
122: MIDI_INFO MidiInfo; // Midi generic input and output
123:
124: //
125: // Data on sampling rate capabilities
126: //
127:
128: ULONG MinHz; // Slowest rate
129: ULONG MaxInHz; // Fastest input rate
130: ULONG MaxOutHz; // Fastest output rate
131:
132: //
133: // Hardware specific data
134: //
135:
136: SOUND_HARDWARE Hw; // Hardware specific stuff
137: BOOLEAN ProAudioSpectrum;
138: FOUNDINFO PASInfo; // Pro Audio Spectrum data
139:
140: //
141: // Registry path saving
142: //
143:
144: PWSTR RegistryPathName;
145: } GLOBAL_DEVICE_INFO, *PGLOBAL_DEVICE_INFO;
146:
147:
148: //
149: // config.c Configuration routines
150: //
151:
152: NTSTATUS
153: SoundReadConfiguration(
154: IN PWSTR ValueName,
155: IN ULONG ValueType,
156: IN PVOID ValueData,
157: IN ULONG ValueLength,
158: IN PVOID Context,
159: IN PVOID EntryContext
160: );
161:
162: NTSTATUS
163: SoundInitHardwareConfig(
164: IN OUT PGLOBAL_DEVICE_INFO pGDI,
165: IN PSB_CONFIG_DATA ConfigData
166: );
167: NTSTATUS
168: SoundGetSynthConfig(
169: IN OUT PGLOBAL_DEVICE_INFO pGDI
170: );
171: NTSTATUS
172: SoundSaveConfig(
173: IN PWSTR DeviceKey,
174: IN ULONG Port,
175: IN ULONG DmaChannel,
176: IN ULONG Interrupt,
177: IN ULONG InputSource
178: );
179: VOID
180: SoundSaveVolume(
181: PGLOBAL_DEVICE_INFO pGDI
182: );
183:
184: //
185: // isr.c interrupt service routine
186: //
187: BOOLEAN
188: SoundISR(
189: IN PKINTERRUPT pInterrupt,
190: IN PVOID Context
191: );
192:
193: SOUND_DISPATCH_ROUTINE
194: SoundWaveOutGetCaps,
195: SoundWaveInGetCaps,
196: SoundMidiInGetCaps,
197: SoundMidiOutGetCaps,
198: SoundMidiDispatch,
199: SoundAuxGetCaps;
200:
201: SOUND_QUERY_FORMAT_ROUTINE SoundQueryFormat;
202:
203: //
204: // mididisp.c
205: //
206:
207:
208: VOID
209: SoundMidiQuiet(
210: IN PSOUND_HARDWARE pHw
211: );
212: NTSTATUS
213: SoundSynthPortValid(
214: IN OUT PGLOBAL_DEVICE_INFO pGDI
215: );
216:
217: //
218: // hardware.c
219: //
220: VOID
221: HwInitialize(
222: IN OUT PGLOBAL_DEVICE_INFO pGDI
223: );
224: VOID
225: HwInitVolume(
226: IN PGLOBAL_DEVICE_INFO pGDI
227: );
228:
229: //
230: // pas.c
231: //
232:
233:
234: NTSTATUS
235: FindPasHardware(
236: PGLOBAL_DEVICE_INFO pGDI,
237: PSB_CONFIG_DATA ConfigData);
238:
239:
240: void
241: InitPasAndMixer(
242: PFOUNDINFO pFI,
243: PSB_CONFIG_DATA ConfigData
244: );
245:
246: //
247: // mvmix.c
248: //
249:
250:
251: void SetInput (
252: PFOUNDINFO pFI,
253: UCHAR P_input_num,
254: USHORT P_volume_lvl,
255: USHORT P_channel,
256: USHORT P_crossover,
257: UCHAR P_output_num );
258:
259: void SetOutput (
260: PFOUNDINFO pFI,
261: UCHAR P_output_num,
262: USHORT P_volume_lvl,
263: USHORT P_channel );
264:
265: void SetFilter(
266: PFOUNDINFO pFI,
267: USHORT wSetting);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.