MemoryDevice.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /*
  2. * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/String.h>
  8. #include <AK/Types.h>
  9. #include <Kernel/Devices/CharacterDevice.h>
  10. #include <Kernel/PhysicalAddress.h>
  11. namespace Kernel {
  12. class MemoryDevice final : public CharacterDevice {
  13. AK_MAKE_ETERNAL
  14. public:
  15. static NonnullRefPtr<MemoryDevice> must_create();
  16. ~MemoryDevice();
  17. virtual KResultOr<Memory::Region*> mmap(Process&, FileDescription&, Memory::VirtualRange const&, u64 offset, int prot, bool shared) override;
  18. // ^Device
  19. virtual mode_t required_mode() const override { return 0660; }
  20. virtual String device_name() const override { return "mem"; };
  21. private:
  22. MemoryDevice();
  23. virtual StringView class_name() const override { return "MemoryDevice"; }
  24. virtual bool can_read(const FileDescription&, size_t) const override { return true; }
  25. virtual bool can_write(const FileDescription&, size_t) const override { return false; }
  26. virtual bool is_seekable() const override { return true; }
  27. virtual KResultOr<size_t> read(FileDescription&, u64, UserOrKernelBuffer&, size_t) override;
  28. virtual KResultOr<size_t> write(FileDescription&, u64, const UserOrKernelBuffer&, size_t) override { return EINVAL; }
  29. virtual void did_seek(FileDescription&, off_t) override;
  30. bool is_allowed_range(PhysicalAddress, Memory::VirtualRange const&) const;
  31. };
  32. }