mirror of
https://github.com/RGBCube/serenity
synced 2025-05-16 19:55:06 +00:00

The `#pragma GCC diagnostic` part is needed because the class has virtual methods with the same name but different arguments, and Clang tries to warn us that we are not actually overriding anything with these. Weirdly enough, GCC does not seem to care.
42 lines
1.4 KiB
C++
42 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/String.h>
|
|
#include <AK/Types.h>
|
|
#include <Kernel/Devices/CharacterDevice.h>
|
|
#include <Kernel/PhysicalAddress.h>
|
|
|
|
namespace Kernel {
|
|
|
|
class MemoryDevice final : public CharacterDevice {
|
|
AK_MAKE_ETERNAL
|
|
public:
|
|
static NonnullRefPtr<MemoryDevice> must_create();
|
|
~MemoryDevice();
|
|
|
|
virtual KResultOr<Region*> mmap(Process&, FileDescription&, const Range&, u64 offset, int prot, bool shared) override;
|
|
|
|
// ^Device
|
|
virtual mode_t required_mode() const override { return 0660; }
|
|
virtual String device_name() const override { return "mem"; };
|
|
|
|
private:
|
|
MemoryDevice();
|
|
virtual const char* class_name() const override { return "MemoryDevice"; }
|
|
virtual bool can_read(const FileDescription&, size_t) const override { return true; }
|
|
virtual bool can_write(const FileDescription&, size_t) const override { return false; }
|
|
virtual bool is_seekable() const override { return true; }
|
|
virtual KResultOr<size_t> read(FileDescription&, u64, UserOrKernelBuffer&, size_t) override;
|
|
virtual KResultOr<size_t> write(FileDescription&, u64, const UserOrKernelBuffer&, size_t) override { return -EINVAL; }
|
|
|
|
virtual void did_seek(FileDescription&, off_t) override;
|
|
|
|
bool is_allowed_range(PhysicalAddress, const Range&) const;
|
|
};
|
|
|
|
}
|