X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/81ecfb6240fdd3a8229f0740242612212e062a6c..7c7b5f05d39b7739d990f71256a2267ec67a6913:/lunaix-os/includes/lunaix/mm/vmm.h?ds=sidebyside diff --git a/lunaix-os/includes/lunaix/mm/vmm.h b/lunaix-os/includes/lunaix/mm/vmm.h index 3f102db..ec420a2 100644 --- a/lunaix-os/includes/lunaix/mm/vmm.h +++ b/lunaix-os/includes/lunaix/mm/vmm.h @@ -2,8 +2,7 @@ #define __LUNAIX_VMM_H #include #include -#include -#include +#include // Virtual memory manager #define VMAP_NULL 0 @@ -118,16 +117,6 @@ vmm_ioremap(ptr_t paddr, size_t size); void* vmm_next_free(ptr_t start, int options); -/** - * @brief 将连续的物理地址空间映射到内核虚拟地址空间 - * - * @param paddr 物理地址空间的基地址 - * @param size 物理地址空间的大小 - * @return void* - */ -void* -vmm_vmap(ptr_t paddr, size_t size, pt_attr attr); - /** * @brief 将当前地址空间的虚拟地址转译为物理地址。 * @@ -147,4 +136,54 @@ vmm_v2p(ptr_t va); ptr_t vmm_v2pat(ptr_t mnt, ptr_t va); +/* + 表示一个 vmap 区域 + (One must not get confused with vmap_area in Linux!) +*/ +struct vmap_area +{ + ptr_t start; + size_t size; + pt_attr area_attr; +}; + +/** + * @brief 将连续的物理地址空间映射到内核虚拟地址空间 + * + * @param paddr 物理地址空间的基地址 + * @param size 物理地址空间的大小 + * @return void* + */ +void* +vmap(ptr_t paddr, size_t size, pt_attr attr, int flags); + +/** + * @brief 创建一个 vmap 区域 + * + * @param paddr + * @param attr + * @return ptr_t + */ +struct vmap_area* +vmap_varea(size_t size, pt_attr attr); + +/** + * @brief 在 vmap区域内映射一个单页 + * + * @param paddr + * @param attr + * @return ptr_t + */ +ptr_t +vmap_area_page(struct vmap_area* area, ptr_t paddr, pt_attr attr); + +/** + * @brief 在 vmap区域删除一个已映射的页 + * + * @param paddr + * @return ptr_t + */ +ptr_t +vmap_area_rmpage(struct vmap_area* area, ptr_t vaddr); + #endif /* __LUNAIX_VMM_H */