ptos/amd64+hal: Add page unmap interface
Signed-off-by: Chloe M <chloe@mensia.org>
This commit is contained in:
@@ -231,3 +231,30 @@ HalMmuMapPage(
|
|||||||
MdTlbFlushSingle(VirtualBase);
|
MdTlbFlushSingle(VirtualBase);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PT_STATUS
|
||||||
|
HalMmuUnmapPage(MMU_VAS *Vas, UPTR VirtualBase, MMU_PAGESIZE PageSize)
|
||||||
|
{
|
||||||
|
UPTR *PageTable;
|
||||||
|
USIZE PageTableIndex;
|
||||||
|
|
||||||
|
if (Vas == NULL) {
|
||||||
|
return STATUS_INVALID_PARAM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!MmuPageSizeValid(PageSize)) {
|
||||||
|
return STATUS_INVALID_PARAM;
|
||||||
|
}
|
||||||
|
|
||||||
|
PageTable = MmuPageMapExtract(Vas, VirtualBase, PAGEMAP_PML1, false);
|
||||||
|
if (PageTable == NULL) {
|
||||||
|
return STATUS_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
PageTableIndex = MmuPageMapIndex(VirtualBase, PAGEMAP_PML1);
|
||||||
|
|
||||||
|
/* Unmap and flush the TLB */
|
||||||
|
PageTable[PageTableIndex] = 0;
|
||||||
|
MdTlbFlushSingle(VirtualBase);
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|||||||
@@ -52,4 +52,16 @@ PT_STATUS HalMmuMapPage(
|
|||||||
MMU_PAGESIZE PageSize
|
MMU_PAGESIZE PageSize
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unmap a single page of memory
|
||||||
|
*
|
||||||
|
* @Vas: Virtual address space to unmap within
|
||||||
|
* @VirtualBase: Virtual address to unmap
|
||||||
|
* @PageSize: Page size to unmap
|
||||||
|
*/
|
||||||
|
PT_STATUS HalMmuUnmapPage(
|
||||||
|
MMU_VAS *Vas, UPTR VirtualBase,
|
||||||
|
MMU_PAGESIZE PageSize
|
||||||
|
);
|
||||||
|
|
||||||
#endif /* !_HAL_MMU_H_ */
|
#endif /* !_HAL_MMU_H_ */
|
||||||
|
|||||||
Reference in New Issue
Block a user