vm_area.hpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include <stdint.h>
  3. #include <kernel/vfs.hpp>
  4. namespace kernel::mem {
  5. constexpr unsigned long MM_WRITE = 0x00000000'00000001;
  6. constexpr unsigned long MM_EXECUTE = 0x00000000'00000002;
  7. constexpr unsigned long MM_MAPPED = 0x00000000'00000004;
  8. constexpr unsigned long MM_ANONYMOUS = 0x00000000'00000008;
  9. constexpr unsigned long MM_INTERNAL_MASK = 0xffffffff'00000000;
  10. constexpr unsigned long MM_BREAK = 0x80000000'00000000;
  11. struct vm_area {
  12. uintptr_t start;
  13. uintptr_t end;
  14. unsigned long flags;
  15. fs::inode* mapped_file;
  16. std::size_t file_offset;
  17. constexpr bool is_avail(uintptr_t ostart, uintptr_t oend) const noexcept
  18. {
  19. return (ostart >= end || oend <= start);
  20. }
  21. constexpr bool operator<(const vm_area& rhs) const noexcept
  22. { return end <= rhs.start; }
  23. constexpr bool operator<(uintptr_t rhs) const noexcept
  24. { return end <= rhs; }
  25. friend constexpr bool operator<(uintptr_t lhs, const vm_area& rhs) noexcept
  26. { return lhs < rhs.start; }
  27. constexpr vm_area(uintptr_t start, unsigned long flags, uintptr_t end,
  28. fs::inode* mapped_file = nullptr, std::size_t offset = 0)
  29. : start{start}, end{end}, flags{flags}, mapped_file{mapped_file}, file_offset{offset} { }
  30. constexpr vm_area(uintptr_t start, unsigned long flags,
  31. fs::inode* mapped_file = nullptr, std::size_t offset = 0)
  32. : start{start}, end{start}, flags{flags}, mapped_file{mapped_file}, file_offset{offset} { }
  33. };
  34. } // namespace kernel::mem