ladybird/Kernel/Storage/RamdiskDevice.cpp
Linus Groh 649d2faeab Everywhere: Use "the SerenityOS developers." in copyright headers
We had some inconsistencies before:

- Sometimes "The", sometimes "the"
- Sometimes trailing ".", sometimes no trailing "."

I picked the most common one (lowecase "the", trailing ".") and applied
it to all copyright headers.

By using the exact same string everywhere we can ensure nothing gets
missed during a global search (and replace), and that these
inconsistencies are not spread any further (as copyright headers are
commonly copied to new files).
2021-04-29 00:59:26 +02:00

68 lines
1.9 KiB
C++

/*
* Copyright (c) 2021, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <AK/Memory.h>
#include <AK/StringView.h>
#include <Kernel/FileSystem/FileDescription.h>
#include <Kernel/Storage/RamdiskController.h>
#include <Kernel/Storage/RamdiskDevice.h>
namespace Kernel {
NonnullRefPtr<RamdiskDevice> RamdiskDevice::create(const RamdiskController& controller, NonnullOwnPtr<Region>&& region, int major, int minor)
{
return adopt_ref(*new RamdiskDevice(controller, move(region), major, minor));
}
RamdiskDevice::RamdiskDevice(const RamdiskController& controller, NonnullOwnPtr<Region>&& region, int major, int minor)
: StorageDevice(controller, major, minor, 512, region->size() / 512)
, m_region(move(region))
{
dmesgln("Ramdisk: Device #{} @ {}, Capacity={}", minor, m_region->vaddr(), max_addressable_block() * 512);
}
RamdiskDevice::~RamdiskDevice()
{
}
const char* RamdiskDevice::class_name() const
{
return "RamdiskDevice";
}
void RamdiskDevice::start_request(AsyncBlockDeviceRequest& request)
{
Locker locker(m_lock);
u8* base = m_region->vaddr().as_ptr();
size_t size = m_region->size();
u8* offset = base + request.block_index() * 512;
size_t length = request.block_count() * 512;
if ((offset + length > base + size) || (offset + length < base)) {
request.complete(AsyncDeviceRequest::Failure);
} else {
bool success;
if (request.request_type() == AsyncBlockDeviceRequest::Read) {
success = request.buffer().write(offset, length);
} else {
success = request.buffer().read(offset, length);
}
request.complete(success ? AsyncDeviceRequest::Success : AsyncDeviceRequest::MemoryFault);
}
}
String RamdiskDevice::device_name() const
{
// FIXME: Try to not hardcode a maximum of 16 partitions per drive!
size_t drive_index = minor() / 16;
return String::formatted("ramdisk{}", drive_index);
}
}