X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/45e1f8b055043e54be35462852ab6649d634da7c..7c7b5f05d39b7739d990f71256a2267ec67a6913:/lunaix-os/includes/lunaix/mm/vmm.h diff --git a/lunaix-os/includes/lunaix/mm/vmm.h b/lunaix-os/includes/lunaix/mm/vmm.h index 5822faf..ec420a2 100644 --- a/lunaix-os/includes/lunaix/mm/vmm.h +++ b/lunaix-os/includes/lunaix/mm/vmm.h @@ -2,16 +2,17 @@ #define __LUNAIX_VMM_H #include #include -#include -#include +#include // Virtual memory manager #define VMAP_NULL 0 + /** * @brief 映射模式:忽略已存在映射 * */ #define VMAP_IGNORE 1 + /** * @brief 映射模式:不作实际映射。该功能用于预留出特定的地址空间 * @@ -116,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 将当前地址空间的虚拟地址转译为物理地址。 * @@ -145,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 */