mirror of
https://github.com/RGBCube/serenity
synced 2025-05-24 00:45:07 +00:00
Revert "Kernel/Storage: Remove the ramdisk implementation"
This reverts commit 4e0f85432a
as the
ramdisk code is useful for the bring-up of the aarch64 port. Once the
kernel supports better ram-based filesystems, this code will be removed
again.
This commit is contained in:
parent
4d68dcfca0
commit
187723776a
9 changed files with 227 additions and 0 deletions
67
Kernel/Storage/Ramdisk/Controller.cpp
Normal file
67
Kernel/Storage/Ramdisk/Controller.cpp
Normal file
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* Copyright (c) 2021, the SerenityOS developers.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <AK/OwnPtr.h>
|
||||
#include <AK/Types.h>
|
||||
#include <Kernel/Library/LockRefPtr.h>
|
||||
#include <Kernel/Storage/Ramdisk/Controller.h>
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
NonnullLockRefPtr<RamdiskController> RamdiskController::initialize()
|
||||
{
|
||||
return adopt_lock_ref(*new RamdiskController());
|
||||
}
|
||||
|
||||
bool RamdiskController::reset()
|
||||
{
|
||||
TODO();
|
||||
}
|
||||
|
||||
bool RamdiskController::shutdown()
|
||||
{
|
||||
TODO();
|
||||
}
|
||||
|
||||
size_t RamdiskController::devices_count() const
|
||||
{
|
||||
return m_devices.size();
|
||||
}
|
||||
|
||||
void RamdiskController::complete_current_request(AsyncDeviceRequest::RequestResult)
|
||||
{
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
RamdiskController::RamdiskController()
|
||||
: StorageController(0)
|
||||
{
|
||||
// Populate ramdisk controllers from Multiboot boot modules, if any.
|
||||
size_t count = 0;
|
||||
MM.for_each_used_memory_range([&](auto& used_memory_range) {
|
||||
if (used_memory_range.type == Memory::UsedMemoryRangeType::BootModule) {
|
||||
size_t length = Memory::page_round_up(used_memory_range.end.get()).release_value_but_fixme_should_propagate_errors() - used_memory_range.start.get();
|
||||
auto region_or_error = MM.allocate_kernel_region(used_memory_range.start, length, "Ramdisk"sv, 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() = default;
|
||||
|
||||
LockRefPtr<StorageDevice> RamdiskController::device(u32 index) const
|
||||
{
|
||||
if (index >= m_devices.size())
|
||||
return nullptr;
|
||||
return m_devices[index];
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue