ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

sndblst.h
Go to the documentation of this file.
00001 /*
00002  *
00003  * COPYRIGHT:            See COPYING in the top level directory
00004  * PROJECT:              ReactOS kernel
00005  * FILE:                 drivers/dd/sndblst/sndblst.h
00006  * PURPOSE:              Sound Blaster driver header
00007  * PROGRAMMER:           Andrew Greenwood
00008  * UPDATE HISTORY:
00009  *                       Sept 28, 2003: Created
00010  */
00011 
00012 #pragma once
00013 
00014 #include <ntddk.h>
00015 
00016 #define NDEBUG
00017 #include <debug.h>
00018 
00019 #define DEFAULT_PORT    0x220
00020 #define DEFAULT_IRQ     5
00021 #define DEFAULT_DMA     1
00022 #define DEFAULT_BUFSIZE 0x4000
00023 #define DEFAULT_SAMPLERATE  11025
00024 #define DEFAULT_BITDEPTH    8
00025 #define DEFAULT_CHANNELS    1
00026 
00027 #define VALID_IRQS      {5}
00028 
00029 #define MIN_BUFSIZE     0x1000
00030 #define MAX_BUFSIZE     0x4000
00031 
00032 #define DEVICE_SUBKEY   L"Devices"
00033 #define PARMS_SUBKEY    L"Parameters"
00034 
00035 #define REGISTRY_PORT   L"Port"
00036 
00037 // At the moment, we just support a single device with fixed parameters:
00038 #define SB_PORT         DEFAULT_PORT
00039 #define SB_IRQ          DEFAULT_IRQ
00040 #define SB_DMA          DEFAULT_DMA
00041 #define SB_BUFSIZE      DEFAULT_BUFSIZE
00042 
00043 #define SB_TIMEOUT      1000000
00044 
00045 #define IOCTL_SOUND_BASE FILE_DEVICE_SOUND
00046 #define IOCTL_WAVE_BASE  0x0000 // CORRECT?
00047 
00048 /* #define IOCTL_MIDI_PLAY CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, \
00049  *                                METHOD_BUFFERED, FILE_WRITE_ACCESS)
00050  */
00051 
00052 // Some constants
00053 
00054 #define SB_DSP_READY        0xaa
00055 
00056 // Commands (only the ones we use)
00057 
00058 #define SB_SET_OUTPUT_RATE  0x41        // DSP v4.xx only
00059 #define SB_SET_INPUT_RATE   0x42        // DSP v4.xx only
00060 #define SB_SET_BLOCK_SIZE   0x48        // DSP v2.00 +
00061 #define SB_ENABLE_SPEAKER   0xd1
00062 #define SB_DISABLE_SPEAKER  0xd3
00063 #define SB_GET_SPEAKER_STATUS 0xd8      // DSP v2.00 +
00064 #define SB_GET_DSP_VERSION  0xe1
00065 
00066 
00067 // Hmm... These are a weenie bit trickier than MPU401...
00068 
00069 #define SB_WRITE_RESET(bp, x)       WRITE_PORT_UCHAR((PUCHAR) bp+0x6, x)
00070 #define SB_READ_DATA(bp)            READ_PORT_UCHAR((PUCHAR) bp+0xa)
00071 #define SB_WRITE_DATA(bp, x)        WRITE_PORT_UCHAR((PUCHAR) bp+0xc, x)
00072 #define SB_READ_WRITESTATUS(bp)     READ_PORT_UCHAR((PUCHAR) bp+0xc)
00073 #define SB_READ_READSTATUS(bp)      READ_PORT_UCHAR((PUCHAR) bp+0xe)
00074 
00075 // Flow control
00076 
00077 #define SB_READY_TO_SEND(bp) \
00078     SB_READ_WRITESTATUS(bp) & 0x80
00079 
00080 #define SB_READY_TO_RECEIVE(bp) \
00081     SB_READ_READSTATUS(bp) & 0x80
00082 
00083 
00084 #define SB_WRITE_BYTE(bp, x) \
00085     if (WaitToSend(bp)) SB_WRITE_DATA(bp, x)
00086 
00087 //#define MPU401_READ(bp)
00088 //    if (WaitToRead(bp)) ... ???
00089 
00090 /*
00091     DEVICE_EXTENSION contains the settings for each individual device
00092 */
00093 
00094 typedef struct _DEVICE_EXTENSION
00095 {
00096     PWSTR RegistryPath;
00097     PDRIVER_OBJECT DriverObject;
00098     ULONG Port;
00099     ULONG IRQ;
00100     ULONG DMA;
00101     ULONG BufferSize;
00102     PADAPTER_OBJECT Adapter;
00103     PMDL Mdl;
00104     PCHAR VirtualBuffer;
00105     PHYSICAL_ADDRESS Buffer;
00106 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
00107 
00108 /*
00109     DEVICE_INSTANCE contains ???
00110 */
00111 
00112 typedef struct _DEVICE_INSTANCE
00113 {
00114     // pPrevGDI
00115     PDRIVER_OBJECT DriverObject;
00116 } DEVICE_INSTANCE, *PDEVICE_INSTANCE;
00117 
00118 /*
00119     CONFIG contains device parameters (port/IRQ)
00120     THIS STRUCTURE IS REDUNDANT
00121 */
00122 
00123 //typedef struct _CONFIG
00124 //{
00125 //    ULONG Port;
00126 //    ULONG IRQ;
00127 //} CONFIG, *PCONFIG;
00128 
00129 /*
00130     Some callback typedefs
00131 */
00132 
00133 typedef NTSTATUS REGISTRY_CALLBACK_ROUTINE(PWSTR RegistryPath, PVOID Context);
00134 typedef REGISTRY_CALLBACK_ROUTINE *PREGISTRY_CALLBACK_ROUTINE;
00135 
00136 
00137 /*
00138     Prototypes for functions in portio.c :
00139 */
00140 
00141 BOOLEAN WaitToSend(ULONG BasePort);
00142 BOOLEAN WaitToReceive(ULONG BasePort);
00143 USHORT InitSoundCard(ULONG BasePort);
00144 
00145 /*
00146     Prototypes for functions in settings.c :
00147 */
00148 
00149 NTSTATUS NTAPI EnumDeviceKeys(
00150     IN PUNICODE_STRING RegistryPath,
00151     IN PWSTR SubKey,
00152     IN PREGISTRY_CALLBACK_ROUTINE Callback,
00153     IN PVOID Context);
00154 
00155 NTSTATUS NTAPI LoadSettings(
00156     IN  PWSTR ValueName,
00157     IN  ULONG ValueType,
00158     IN  PVOID ValueData,
00159     IN  ULONG ValueLength,
00160     IN  PVOID Context,
00161     IN  PVOID EntryContext);
00162 
00163 
00164 
00165 
00166 BOOLEAN CreateDMA(PDEVICE_OBJECT DeviceObject);
00167 
00168 
00169 
00170 VOID SetOutputSampleRate(ULONG BasePort, ULONG SampleRate);
00171 VOID EnableSpeaker(ULONG BasePort, BOOLEAN SpeakerOn);
00172 BOOLEAN IsSpeakerEnabled(ULONG BasePort);
00173 VOID BeginPlayback(ULONG BasePort, ULONG BitDepth, ULONG Channels, ULONG BlockSize);

Generated on Mon May 28 2012 04:27:39 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.