mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 18:07:34 +00:00
Kernel: Try to detect Sound Blaster 16 before creating an instance
We shouldn't create a SB16 instance without checking if the Sound Blaster 16 card is actually installed in the system.
This commit is contained in:
parent
5bb35da784
commit
f2faf11d61
3 changed files with 16 additions and 2 deletions
|
@ -89,6 +89,19 @@ SB16::~SB16()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SB16::detect()
|
||||||
|
{
|
||||||
|
IO::out8(0x226, 1);
|
||||||
|
IO::delay(32);
|
||||||
|
IO::out8(0x226, 0);
|
||||||
|
|
||||||
|
auto data = dsp_read();
|
||||||
|
if (data != 0xaa) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SB16::create();
|
||||||
|
}
|
||||||
|
|
||||||
void SB16::create()
|
void SB16::create()
|
||||||
{
|
{
|
||||||
s_the.ensure_instance();
|
s_the.ensure_instance();
|
||||||
|
|
|
@ -42,6 +42,7 @@ public:
|
||||||
SB16();
|
SB16();
|
||||||
virtual ~SB16() override;
|
virtual ~SB16() override;
|
||||||
|
|
||||||
|
static void detect();
|
||||||
static void create();
|
static void create();
|
||||||
static SB16& the();
|
static SB16& the();
|
||||||
|
|
||||||
|
@ -69,7 +70,7 @@ private:
|
||||||
void dma_start(uint32_t length);
|
void dma_start(uint32_t length);
|
||||||
void set_sample_rate(uint16_t hz);
|
void set_sample_rate(uint16_t hz);
|
||||||
void dsp_write(u8 value);
|
void dsp_write(u8 value);
|
||||||
u8 dsp_read();
|
static u8 dsp_read();
|
||||||
u8 get_irq_line();
|
u8 get_irq_line();
|
||||||
void set_irq_register(u8 irq_number);
|
void set_irq_register(u8 irq_number);
|
||||||
void set_irq_line(u8 irq_number);
|
void set_irq_line(u8 irq_number);
|
||||||
|
|
|
@ -268,7 +268,7 @@ void init_stage2(void*)
|
||||||
new FullDevice;
|
new FullDevice;
|
||||||
new RandomDevice;
|
new RandomDevice;
|
||||||
PTYMultiplexer::initialize();
|
PTYMultiplexer::initialize();
|
||||||
new SB16;
|
SB16::detect();
|
||||||
VMWareBackdoor::the(); // don't wait until first mouse packet
|
VMWareBackdoor::the(); // don't wait until first mouse packet
|
||||||
|
|
||||||
bool force_pio = kernel_command_line().contains("force_pio");
|
bool force_pio = kernel_command_line().contains("force_pio");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue