Kernel: Teach DeviceManagement to handle multiple audio devices

This commit is contained in:
Jelle Raaijmakers 2021-11-23 01:12:19 +01:00 committed by Andreas Kling
parent 61d77274db
commit 1aafb6cd23
Notes: sideshowbarker 2024-07-18 00:50:01 +09:00
4 changed files with 9 additions and 9 deletions

View file

@ -84,7 +84,9 @@ UNMAP_AFTER_INIT RefPtr<SB16> SB16::try_detect_and_create()
auto device_or_error = DeviceManagement::try_create_device<SB16>();
if (device_or_error.is_error())
return {};
return device_or_error.release_value();
auto device = device_or_error.release_value();
DeviceManagement::the().attach_audio_device(device);
return device;
}
UNMAP_AFTER_INIT void SB16::initialize()

View file

@ -22,9 +22,9 @@ UNMAP_AFTER_INIT void DeviceManagement::initialize()
s_the.ensure_instance();
}
UNMAP_AFTER_INIT void DeviceManagement::attach_sb16_device(SB16 const& device)
UNMAP_AFTER_INIT void DeviceManagement::attach_audio_device(CharacterDevice const& device)
{
m_sb16_device = device;
m_audio_devices.append(device);
}
UNMAP_AFTER_INIT void DeviceManagement::attach_console_device(ConsoleDevice const& device)

View file

@ -15,7 +15,7 @@
#include <AK/Types.h>
#include <Kernel/API/TimePage.h>
#include <Kernel/Arch/RegisterState.h>
#include <Kernel/Devices/Audio/SB16.h>
#include <Kernel/Devices/CharacterDevice.h>
#include <Kernel/Devices/ConsoleDevice.h>
#include <Kernel/Devices/Device.h>
#include <Kernel/Devices/NullDevice.h>
@ -36,7 +36,7 @@ public:
void attach_console_device(ConsoleDevice const&);
// FIXME: Once we have a singleton for managing many sound cards, remove this from here
void attach_sb16_device(SB16 const&);
void attach_audio_device(CharacterDevice const&);
void after_inserting_device(Badge<Device>, Device&);
void before_device_removal(Badge<Device>, Device&);
@ -62,7 +62,7 @@ private:
RefPtr<NullDevice> m_null_device;
RefPtr<ConsoleDevice> m_console_device;
// FIXME: Once we have a singleton for managing many sound cards, remove this from here
RefPtr<SB16> m_sb16_device;
NonnullRefPtrVector<CharacterDevice, 1> m_audio_devices;
MutexProtected<HashMap<u32, Device*>> m_devices;
};

View file

@ -318,9 +318,7 @@ void init_stage2(void*)
(void)RandomDevice::must_create().leak_ref();
PTYMultiplexer::initialize();
// FIXME: Once we have a singleton for managing many sound cards, remove this from here
if (auto device = SB16::try_detect_and_create(); !!device)
DeviceManagement::the().attach_sb16_device(*device);
SB16::try_detect_and_create();
StorageManagement::the().initialize(kernel_command_line().root_device(), kernel_command_line().is_force_pio());
if (VirtualFileSystem::the().mount_root(StorageManagement::the().root_filesystem()).is_error()) {