Files
PluralTechnology/service/ptos/head/mm/vm.h
T
2026-07-11 20:27:07 -04:00

76 lines
1.6 KiB
C

/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: Virtual memory management
* Author: Chloe M.
*/
#ifndef _MM_VM_H_
#define _MM_VM_H_ 1
#include <ke/bpal.h>
#include <hal/vas.h>
#include <hal/mmu.h>
#include <ptapi/ptmm.h>
#include <ptdef.h>
/*
* Virtual memory allocation region. This is outside the
* higher half direct map and thus cannot be converted with
* PMA_TO_VMA() / VMA_TO_PMA()
*/
#define VALLOC_BASE 0xFFFF804000000000
/*
* Used to convert physical addresses to virtual addresses
* and vice versa only when they are within the higher half
* direct map.
*/
#define PMA_TO_VMA(PMA) \
PTR_OFFSET((VOID *)PMA, KeBpalLoadBase())
#define VMA_TO_PMA(VMA) \
(UPTR)PTR_NOFFSET(VMA, KeBpalLoadBase())
/*
* Represents a virtual memory range
*
* @VirtualBase: Virtual address base
* @PhysicalBase: Physical address base
* @Length: Length of memory range
*/
typedef struct {
UPTR VirtualBase;
UPTR PhysicalBase;
USIZE Length;
} MM_RANGE;
/*
* Unmap a virtual memory range
*
* @Vas: Virtual address space to unmap
* @Range: Range to unmap
* @PageSize: Page size to unmap
*/
PT_STATUS MmUnmapRange(MMU_VAS *Vas, const MM_RANGE *Range, MMU_PAGESIZE PageSize);
/*
* Map a virtual memory range
*
* @Vas: Virtual address space to map within
* @Range: Range to map
* @Prot: Protection flags to map with
* @PageSize: Page size to map
*/
PT_STATUS MmMapRange(
MMU_VAS *Vas, const MM_RANGE *Range,
MM_PROT Prot, MMU_PAGESIZE PageSize
);
/*
* Initialize virtual memory
*/
VOID MmVmInit(VOID);
#endif /* !_MM_VM_H_ */