vm_area.hpp 1.8 KB

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