internal.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #include "mm.h"
  3. /**
  4. * @brief 将vma结构体插入mm_struct的链表之中
  5. *
  6. * @param mm 内存空间分布结构体
  7. * @param vma 待插入的VMA结构体
  8. * @param prev 链表的前一个结点
  9. */
  10. void __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma, struct vm_area_struct *prev);
  11. /**
  12. * @brief 将vma给定结构体从vma链表的结点之中删除
  13. *
  14. * @param mm 内存空间分布结构体
  15. * @param vma 待插入的VMA结构体
  16. */
  17. void __vma_unlink_list(struct mm_struct *mm, struct vm_area_struct *vma);
  18. /**
  19. * @brief 获取指定虚拟地址处映射的物理地址
  20. *
  21. * @param mm 内存空间分布结构体
  22. * @param vaddr 虚拟地址
  23. * @return uint64_t 已映射的物理地址
  24. */
  25. uint64_t __mm_get_paddr(struct mm_struct *mm, uint64_t vaddr);
  26. /**
  27. * @brief 创建anon_vma,并将其与页面结构体进行绑定
  28. * 若提供的页面结构体指针为NULL,则只创建,不绑定
  29. *
  30. * @param page 页面结构体的指针
  31. * @param lock_page 是否将页面结构体加锁
  32. * @return struct anon_vma_t* 创建好的anon_vma
  33. */
  34. struct anon_vma_t *__anon_vma_create_alloc(struct Page *page, bool lock_page);
  35. /**
  36. * @brief 释放anon vma结构体
  37. *
  38. * @param anon_vma 待释放的anon_vma结构体
  39. * @return int 返回码
  40. */
  41. int __anon_vma_free(struct anon_vma_t *anon_vma);
  42. /**
  43. * @brief 将指定的vma加入到anon_vma的管理范围之中
  44. *
  45. * @param anon_vma 页面的anon_vma
  46. * @param vma 待加入的vma
  47. * @return int 返回码
  48. */
  49. int __anon_vma_add(struct anon_vma_t *anon_vma, struct vm_area_struct *vma);
  50. /**
  51. * @brief 从anon_vma的管理范围中删除指定的vma
  52. * (在进入这个函数之前,应该要对anon_vma加锁)
  53. * @param vma 将要取消对应的anon_vma管理的vma结构体
  54. * @return int 返回码
  55. */
  56. int __anon_vma_del(struct vm_area_struct *vma);
  57. /**
  58. * @brief 创建mmio对应的页结构体
  59. *
  60. * @param paddr 物理地址
  61. * @return struct Page* 创建成功的page
  62. */
  63. struct Page* __create_mmio_page_struct(uint64_t paddr);