|
|
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.