mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-18 09:02:53 +00:00
This expands the reach of error propagation greatly throughout the kernel. Sadly, it also exposes the fact that we're allocating (and doing other fallible things) in constructors all over the place. This patch doesn't attempt to address that of course. That's work for our future selves.
74 lines
1.8 KiB
C++
74 lines
1.8 KiB
C++
/*
|
|
* Copyright (c) 2021, the SerenityOS developers.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/OwnPtr.h>
|
|
#include <AK/RefPtr.h>
|
|
#include <AK/Types.h>
|
|
#include <Kernel/Storage/RamdiskController.h>
|
|
|
|
namespace Kernel {
|
|
|
|
NonnullRefPtr<RamdiskController> RamdiskController::initialize()
|
|
{
|
|
return adopt_ref(*new RamdiskController());
|
|
}
|
|
|
|
bool RamdiskController::reset()
|
|
{
|
|
TODO();
|
|
}
|
|
|
|
bool RamdiskController::shutdown()
|
|
{
|
|
TODO();
|
|
}
|
|
|
|
size_t RamdiskController::devices_count() const
|
|
{
|
|
return m_devices.size();
|
|
}
|
|
|
|
void RamdiskController::start_request(const StorageDevice&, AsyncBlockDeviceRequest&)
|
|
{
|
|
VERIFY_NOT_REACHED();
|
|
}
|
|
|
|
void RamdiskController::complete_current_request(AsyncDeviceRequest::RequestResult)
|
|
{
|
|
VERIFY_NOT_REACHED();
|
|
}
|
|
|
|
RamdiskController::RamdiskController()
|
|
: StorageController()
|
|
{
|
|
// Populate ramdisk controllers from Multiboot boot modules, if any.
|
|
size_t count = 0;
|
|
for (auto& used_memory_range : MM.used_memory_ranges()) {
|
|
if (used_memory_range.type == Memory::UsedMemoryRangeType::BootModule) {
|
|
size_t length = Memory::page_round_up(used_memory_range.end.get()) - used_memory_range.start.get();
|
|
auto region_or_error = MM.allocate_kernel_region(used_memory_range.start, length, "Ramdisk", Memory::Region::Access::ReadWrite);
|
|
if (region_or_error.is_error()) {
|
|
dmesgln("RamdiskController: Failed to allocate kernel region of size {}", length);
|
|
} else {
|
|
m_devices.append(RamdiskDevice::create(*this, region_or_error.release_value(), 6, count));
|
|
}
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
|
|
RamdiskController::~RamdiskController()
|
|
{
|
|
}
|
|
|
|
RefPtr<StorageDevice> RamdiskController::device(u32 index) const
|
|
{
|
|
if (index >= m_devices.size())
|
|
return nullptr;
|
|
return m_devices[index];
|
|
}
|
|
|
|
}
|