8#include "mos/platform/platform_defs.hpp"
16 for (
size_t i = pml2_index(*vaddr); i <
PML2_ENTRIES && *n_pages; i++)
30 *vaddr += std::min(*n_pages, (
size_t) PML2E_NPAGES) *
MOS_PAGE_SIZE;
31 *n_pages -= std::min(*n_pages, (
size_t) PML2E_NPAGES);
47 const bool should_zap_this_pml2 = pml2_index(*vaddr) == 0 && *n_pages >=
PML2_ENTRIES * PML2E_NPAGES;
49 for (
size_t i = pml2_index(*vaddr); i <
PML2_ENTRIES && *n_pages; i++)
62 *vaddr += std::min(*n_pages, (
size_t) PML2E_NPAGES) *
MOS_PAGE_SIZE;
63 *n_pages -= std::min(*n_pages, (
size_t) PML2E_NPAGES);
68 if (should_zap_this_pml2)
71 return should_zap_this_pml2;
76 return &pml2.table[pml2_index(vaddr)];
pml1_t platform_pml2e_get_pml1(const pml2e_t *pml2e)
void platform_pml2e_set_pml1(pml2e_t *pml2e, pml1_t pml1, pfn_t pml1_pfn)
bool platform_pml2e_get_present(const pml2e_t *pml2e)
void pml1_traverse(pml1_t pml1, ptr_t *vaddr, size_t *n_pages, pagetable_walk_options_t callback, void *data)
__nodiscard bool pml1_destroy_range(pml1_t pml1, ptr_t *vaddr, size_t *n_pages)
pml1_t pml2e_get_or_create_pml1(pml2e_t *pml2e)
bool pml2e_is_present(const pml2e_t *pml2e)
pml2e_t * pml2_entry(pml2_t pml2, ptr_t vaddr)
void pml2_traverse(pml2_t pml2, ptr_t *vaddr, size_t *n_pages, pagetable_walk_options_t options, void *data)
bool pml2_destroy_range(pml2_t pml2, ptr_t *vaddr, size_t *n_pages)
#define pml_destroy_table(x)
#define pml_create_table(x)
#define pmlxe_destroy(pmlxe)
void(* pml2e_pre_traverse)(pml2_t pml2, pml2e_t *e, ptr_t vaddr, void *data)