Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys.

This commit is contained in:
Colin Finck 2017-10-03 07:45:34 +00:00
parent b94e2d8ca0
commit c2c66aff7d
24198 changed files with 0 additions and 37285 deletions

View file

@ -0,0 +1,17 @@
add_definitions(
-D__NTDRIVER__
-DKERNEL)
include_directories(BEFORE ${REACTOS_SOURCE_DIR}/sdk/include/reactos/libs/sound)
list(APPEND SOURCE
dsp_io.c
version.c
speaker.c
rate.c
mixer.c)
add_library(soundblaster ${SOURCE})
add_pch(soundblaster precomp.h)
add_dependencies(soundblaster bugcodes xdk)

View file

@ -0,0 +1,143 @@
/*
ReactOS Sound System
Sound Blaster DSP support
General I/O
Author:
Andrew Greenwood (silverblade@reactos.org)
History:
2 July 2008 - Created (split from sbdsp.c)
Notes:
Functions documented in sbdsp.h
*/
#include "precomp.h"
NTSTATUS
SbDspReset(
IN PUCHAR BasePort,
IN ULONG Timeout)
{
ULONG Expiry;
BOOLEAN DataAvailable = FALSE;
/* Should be called from DriverEntry with this IRQL */
ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
WRITE_SB_DSP_RESET(BasePort, 0x01);
SleepMs(50); /* Should be enough */
WRITE_SB_DSP_RESET(BasePort, 0x00);
Expiry = QuerySystemTimeMs() + Timeout;
/* Wait for data to be available */
while ( (QuerySystemTimeMs() < Expiry) || ( Timeout == 0) )
{
if ( SB_DSP_DATA_AVAILABLE(BasePort) )
{
DataAvailable = TRUE;
break;
}
}
if ( ! DataAvailable )
{
return STATUS_TIMEOUT;
}
/* Data is available - wait for the "DSP ready" code */
while ( (QuerySystemTimeMs() < Expiry) || ( Timeout == 0) )
{
if ( READ_SB_DSP_DATA(BasePort) == SB_DSP_READY )
{
return STATUS_SUCCESS;
}
}
return STATUS_TIMEOUT;
}
NTSTATUS
SbDspWaitToWrite(
IN PUCHAR BasePort,
IN ULONG Timeout)
{
ULONG Expiry = QuerySystemTimeMs() + Timeout;
while ( (QuerySystemTimeMs() < Expiry) || (Timeout == 0) )
{
if ( SB_DSP_CLEAR_TO_SEND(BasePort) )
{
return STATUS_SUCCESS;
}
}
return STATUS_TIMEOUT;
}
NTSTATUS
SbDspWaitToRead(
IN PUCHAR BasePort,
IN ULONG Timeout)
{
ULONG Expiry = QuerySystemTimeMs() + Timeout;
while ( (QuerySystemTimeMs() < Expiry) || (Timeout == 0) )
{
if ( SB_DSP_DATA_AVAILABLE(BasePort) )
{
return STATUS_SUCCESS;
}
}
return STATUS_TIMEOUT;
}
NTSTATUS
SbDspWrite(
IN PUCHAR BasePort,
IN UCHAR DataByte,
IN ULONG Timeout)
{
NTSTATUS Status;
Status = SbDspWaitToWrite(BasePort, Timeout);
if ( Status != STATUS_SUCCESS )
{
return Status;
}
DbgPrint("SBDSP - Writing %02x\n", DataByte);
WRITE_SB_DSP_DATA(BasePort, DataByte);
return STATUS_SUCCESS;
}
NTSTATUS
SbDspRead(
IN PUCHAR BasePort,
OUT PUCHAR DataByte,
IN ULONG Timeout)
{
NTSTATUS Status;
if ( ! DataByte )
{
return STATUS_INVALID_PARAMETER_2;
}
Status = SbDspWaitToRead(BasePort, Timeout);
if ( Status != STATUS_SUCCESS )
{
return Status;
}
*DataByte = READ_SB_DSP_DATA(BasePort);
DbgPrint("SBDSP - Read %02x\n", *DataByte);
return STATUS_SUCCESS;
}

View file

@ -0,0 +1,243 @@
/*
ReactOS Sound System
Sound Blaster DSP support
Mixer routines
Author:
Andrew Greenwood (silverblade@reactos.org)
History:
2 July 2008 - Created
Notes:
Functions documented in sbdsp.h
Currently, input/output switches and PC speaker volume
level are not supported.
The I/O switches are used for muting/unmuting mic, etc.
*/
#include "precomp.h"
VOID
SbMixerReset(IN PUCHAR BasePort)
{
WRITE_SB_MIXER_REGISTER(BasePort, SB_MIX_RESET);
/* Are we meant to send anything else? */
}
NTSTATUS
SbMixerPackLevelData(
IN UCHAR Line,
IN UCHAR Level,
OUT PUCHAR PackedLevel)
{
if ( ! PackedLevel )
return STATUS_INVALID_PARAMETER_3;
switch ( Line )
{
case SB_MIX_MASTER_LEFT_LEVEL :
case SB_MIX_MASTER_RIGHT_LEVEL :
case SB_MIX_VOC_LEFT_LEVEL :
case SB_MIX_VOC_RIGHT_LEVEL :
case SB_MIX_MIDI_LEFT_LEVEL :
case SB_MIX_MIDI_RIGHT_LEVEL :
case SB_MIX_CD_LEFT_LEVEL :
case SB_MIX_CD_RIGHT_LEVEL :
case SB_MIX_LINE_LEFT_LEVEL :
case SB_MIX_LINE_RIGHT_LEVEL :
case SB_MIX_MIC_LEVEL :
case SB_MIX_LEGACY_MIC_LEVEL : /* is this correct? */
{
if ( Level >= 0x20 )
return STATUS_INVALID_PARAMETER_2;
*PackedLevel = Level << 3;
return STATUS_SUCCESS;
}
case SB_MIX_INPUT_LEFT_GAIN :
case SB_MIX_INPUT_RIGHT_GAIN :
case SB_MIX_OUTPUT_LEFT_GAIN :
case SB_MIX_OUTPUT_RIGHT_GAIN :
{
if ( Level >= 0x04 )
return STATUS_INVALID_PARAMETER_2;
*PackedLevel = Level << 6;
return STATUS_SUCCESS;
}
case SB_MIX_VOC_LEVEL : /* legacy */
case SB_MIX_MASTER_LEVEL :
case SB_MIX_FM_LEVEL :
case SB_MIX_CD_LEVEL :
case SB_MIX_LINE_LEVEL :
case SB_MIX_TREBLE_LEFT_LEVEL : /* bass/treble */
case SB_MIX_TREBLE_RIGHT_LEVEL :
case SB_MIX_BASS_LEFT_LEVEL :
case SB_MIX_BASS_RIGHT_LEVEL :
{
if ( Level >= 0x10 )
return STATUS_INVALID_PARAMETER_2;
*PackedLevel = Level << 4;
return STATUS_SUCCESS;
}
default :
return STATUS_INVALID_PARAMETER_1;
};
}
NTSTATUS
SbMixerUnpackLevelData(
IN UCHAR Line,
IN UCHAR PackedLevel,
OUT PUCHAR Level)
{
if ( ! Level )
return STATUS_INVALID_PARAMETER_3;
switch ( Line )
{
case SB_MIX_MASTER_LEFT_LEVEL :
case SB_MIX_MASTER_RIGHT_LEVEL :
case SB_MIX_VOC_LEFT_LEVEL :
case SB_MIX_VOC_RIGHT_LEVEL :
case SB_MIX_MIDI_LEFT_LEVEL :
case SB_MIX_MIDI_RIGHT_LEVEL :
case SB_MIX_CD_LEFT_LEVEL :
case SB_MIX_CD_RIGHT_LEVEL :
case SB_MIX_LINE_LEFT_LEVEL :
case SB_MIX_LINE_RIGHT_LEVEL :
case SB_MIX_MIC_LEVEL :
{
*Level = PackedLevel >> 3;
return STATUS_SUCCESS;
}
case SB_MIX_INPUT_LEFT_GAIN :
case SB_MIX_INPUT_RIGHT_GAIN :
case SB_MIX_OUTPUT_LEFT_GAIN :
case SB_MIX_OUTPUT_RIGHT_GAIN :
{
*Level = PackedLevel >> 6;
return STATUS_SUCCESS;
}
case SB_MIX_VOC_LEVEL : /* legacy */
case SB_MIX_MASTER_LEVEL :
case SB_MIX_FM_LEVEL :
case SB_MIX_CD_LEVEL :
case SB_MIX_LINE_LEVEL :
case SB_MIX_TREBLE_LEFT_LEVEL : /* bass/treble */
case SB_MIX_TREBLE_RIGHT_LEVEL :
case SB_MIX_BASS_LEFT_LEVEL :
case SB_MIX_BASS_RIGHT_LEVEL :
{
*Level = PackedLevel >> 4;
return STATUS_SUCCESS;
}
default :
return STATUS_INVALID_PARAMETER_1;
};
}
NTSTATUS
SbMixerSetLevel(
IN PUCHAR BasePort,
IN UCHAR Line,
IN UCHAR Level)
{
UCHAR PackedLevel = 0;
NTSTATUS Status;
Status = SbMixerPackLevelData(Line, Level, &PackedLevel);
switch ( Status )
{
case STATUS_SUCCESS :
break;
case STATUS_INVALID_PARAMETER_1 :
return STATUS_INVALID_PARAMETER_2;
case STATUS_INVALID_PARAMETER_2 :
return STATUS_INVALID_PARAMETER_3;
default :
return Status;
};
DbgPrint("SbMixerSetLevel: Line 0x%x, raw level 0x%x, packed 0x%x\n", Line, Level, PackedLevel);
WRITE_SB_MIXER_REGISTER(BasePort, Line);
WRITE_SB_MIXER_DATA(BasePort, PackedLevel);
return STATUS_SUCCESS;
}
NTSTATUS
SbMixerGetLevel(
IN PUCHAR BasePort,
IN UCHAR Line,
OUT PUCHAR Level)
{
UCHAR PackedLevel = 0;
NTSTATUS Status;
if ( ! Level )
return STATUS_INVALID_PARAMETER_3;
WRITE_SB_MIXER_REGISTER(BasePort, Line);
PackedLevel = READ_SB_MIXER_DATA(BasePort);
Status = SbMixerUnpackLevelData(Line, PackedLevel, Level);
switch ( Status )
{
case STATUS_SUCCESS :
break;
case STATUS_INVALID_PARAMETER_1 :
return STATUS_INVALID_PARAMETER_2;
case STATUS_INVALID_PARAMETER_2 :
return STATUS_INVALID_PARAMETER_3;
default :
return Status;
};
DbgPrint("SbMixerGetLevel: Line 0x%x, raw level 0x%x, packed 0x%x\n", Line, Level, PackedLevel);
return STATUS_SUCCESS;
}
VOID
SbMixerEnableAGC(IN PUCHAR BasePort)
{
/* Untested... */
WRITE_SB_MIXER_REGISTER(BasePort, SB_MIX_AGC);
WRITE_SB_MIXER_DATA(BasePort, 1);
}
VOID
SbMixerDisableAGC(IN PUCHAR BasePort)
{
/* Untested... */
WRITE_SB_MIXER_REGISTER(BasePort, SB_MIX_AGC);
WRITE_SB_MIXER_DATA(BasePort, 0);
}
BOOLEAN
SbMixerIsAGCEnabled(IN PUCHAR BasePort)
{
/* Untested... */
WRITE_SB_MIXER_REGISTER(BasePort, SB_MIX_AGC);
return (READ_SB_MIXER_DATA(BasePort) != 0);
}

View file

@ -0,0 +1,3 @@
#include <wdm.h>
#include <time.h>
#include <sbdsp.h>

View file

@ -0,0 +1,151 @@
/*
ReactOS Sound System
Sound Blaster DSP support
Sample rate routines
Author:
Andrew Greenwood (silverblade@reactos.org)
History:
2 July 2008 - Created (split from sbdsp.c)
Notes:
Functions documented in sbdsp.h
*/
#include "precomp.h"
BOOLEAN
SbDspIsValidInputRate(
IN UCHAR MajorVersion,
IN UCHAR MinorVersion,
IN USHORT Rate,
IN BOOLEAN Stereo)
{
if ( MajorVersion == 1 )
{
if ( Stereo )
return FALSE;
return ( ( Rate >= 4000 ) && ( Rate <= 13000 ) );
}
else if ( MajorVersion == 2 )
{
if ( Stereo )
return FALSE;
if ( MinorVersion == 0 )
return ( ( Rate >= 4000 ) && ( Rate <= 15000 ) );
else
return ( ( Rate >= 4000 ) && ( Rate <= 44100 ) );
}
else if ( MajorVersion == 3 )
{
if ( Stereo )
return FALSE;
return ( ( Rate >= 4000 ) && ( Rate <= 13000 ) );
}
else /* 4.00 and above */
{
return ( ( Rate >= 5000 ) && ( Rate <= 44100 ) );
}
}
BOOLEAN
SbDspIsValidOutputRate(
IN UCHAR MajorVersion,
IN UCHAR MinorVersion,
IN USHORT Rate,
IN BOOLEAN Stereo)
{
if ( MajorVersion == 1 )
{
if ( Stereo )
return FALSE;
return ( ( Rate >= 4000 ) && ( Rate <= 23000 ) );
}
else if ( MajorVersion == 2 )
{
if ( Stereo )
return FALSE;
if ( MinorVersion == 0 )
return ( ( Rate >= 4000 ) && ( Rate <= 23000 ) );
else
return ( ( Rate >= 4000 ) && ( Rate <= 44100 ) );
}
else if ( MajorVersion == 3 )
{
if ( ! Stereo )
return ( ( Rate >= 4000 ) && ( Rate <= 44100 ) );
else
return ( ( Rate >= 11025 ) && ( Rate <= 22050 ) );
}
else /* 4.00 and above */
{
return ( ( Rate >= 5000 ) && ( Rate <= 44100 ) );
}
}
/* Internal routine - call only after submitting one of the rate commands */
NTSTATUS
SbDsp4WriteRate(
IN PUCHAR BasePort,
IN USHORT Rate,
IN ULONG Timeout)
{
NTSTATUS Status;
/* NOTE - No check for validity of rate! */
/* Write high byte */
Status = SbDspWrite(BasePort, (Rate & 0xff00) >> 8, Timeout);
if ( Status != STATUS_SUCCESS )
return Status;
/* Write low byte */
Status = SbDspWrite(BasePort, Rate & 0xff, Timeout);
if ( Status != STATUS_SUCCESS )
return Status;
return Status;
}
NTSTATUS
SbDsp4SetOutputRate(
IN PUCHAR BasePort,
IN USHORT Rate,
IN ULONG Timeout)
{
NTSTATUS Status;
/* NOTE - No check for validity of rate! */
/* Prepare to write the output rate */
Status = SbDspWrite(BasePort, SB_DSP_OUTPUT_RATE, (Rate & 0xff00) >> 8);
if ( Status != STATUS_SUCCESS )
return Status;
return SbDsp4WriteRate(BasePort, Rate, Timeout);
}
NTSTATUS
SbDsp4SetInputRate(
IN PUCHAR BasePort,
IN USHORT Rate,
IN ULONG Timeout)
{
NTSTATUS Status;
/* NOTE - No check for validity of rate! */
/* Prepare to write the input rate */
Status = SbDspWrite(BasePort, SB_DSP_OUTPUT_RATE, (Rate & 0xff00) >> 8);
if ( Status != STATUS_SUCCESS )
return Status;
return SbDsp4WriteRate(BasePort, Rate, Timeout);
}

View file

@ -0,0 +1,63 @@
/*
ReactOS Sound System
Sound Blaster DSP support
Speaker commands
Author:
Andrew Greenwood (silverblade@reactos.org)
History:
2 July 2008 - Created (split from sbdsp.c)
Notes:
Functions documented in sbdsp.h
*/
#include "precomp.h"
NTSTATUS
SbDspEnableSpeaker(
IN PUCHAR BasePort,
IN ULONG Timeout)
{
return SbDspWrite(BasePort, SB_DSP_SPEAKER_ON, Timeout);
}
NTSTATUS
SbDspDisableSpeaker(
IN PUCHAR BasePort,
IN ULONG Timeout)
{
return SbDspWrite(BasePort, SB_DSP_SPEAKER_OFF, Timeout);
}
/*
VirtualBox doesn't seem to support this.
*/
NTSTATUS
SbDspIsSpeakerEnabled(
IN PUCHAR BasePort,
OUT PBOOLEAN IsEnabled,
IN ULONG Timeout)
{
NTSTATUS Status;
UCHAR SpeakerStatus = 0;
if ( ! IsEnabled )
return STATUS_INVALID_PARAMETER_2;
/* Request the speaker status */
Status = SbDspWrite(BasePort, SB_DSP_SPEAKER_STATUS, Timeout);
if ( Status != STATUS_SUCCESS )
return Status;
/* Obtain the status */
Status = SbDspRead(BasePort, &SpeakerStatus, Timeout);
if ( Status != STATUS_SUCCESS )
return Status;
DbgPrint("SBDSP - SpeakerStatus is %02x\n", SpeakerStatus);
*IsEnabled = (SpeakerStatus == 0xFF);
return STATUS_SUCCESS;
}

View file

@ -0,0 +1,47 @@
/*
ReactOS Sound System
Sound Blaster DSP support
Version routine
Author:
Andrew Greenwood (silverblade@reactos.org)
History:
2 July 2008 - Created (split from sbdsp.c)
Notes:
Functions documented in sbdsp.h
*/
#include "precomp.h"
NTSTATUS
SbDspGetVersion(
IN PUCHAR BasePort,
OUT PUCHAR MajorVersion,
OUT PUCHAR MinorVersion,
IN ULONG Timeout)
{
NTSTATUS Status;
/* Make sure our parameters are sane */
if ( ! MajorVersion )
return STATUS_INVALID_PARAMETER_2;
if ( ! MinorVersion )
return STATUS_INVALID_PARAMETER_3;
/* Send version request */
Status = SbDspWrite(BasePort, SB_DSP_VERSION, Timeout);
if ( Status != STATUS_SUCCESS )
return Status;
/* Get the major version */
Status = SbDspRead(BasePort, MajorVersion, Timeout);
if ( Status != STATUS_SUCCESS )
return FALSE;
/* Get the minor version */
Status = SbDspRead(BasePort, MinorVersion, Timeout);
return Status;
}