| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | |
| 3 | #pragma once |
| 4 | |
| 5 | #include "mos/platform/platform.hpp" |
| 6 | |
| 7 | typedef struct |
| 8 | { |
| 9 | bool present; |
| 10 | ptr_t vaddr, vaddr_end; |
| 11 | pfn_t pfn, pfn_end; |
| 12 | VMFlags flags; |
| 13 | } pagetable_iter_range_t; |
| 14 | |
| 15 | typedef struct |
| 16 | { |
| 17 | pgd_t pgd; |
| 18 | |
| 19 | ptr_t start; |
| 20 | ptr_t end; |
| 21 | ptr_t vaddr; |
| 22 | |
| 23 | pagetable_iter_range_t range; |
| 24 | } pagetable_iter_t; |
| 25 | |
| 26 | /** |
| 27 | * @brief Initialize a pagetable iterator. |
| 28 | * |
| 29 | * @param it The iterator to initialize. |
| 30 | * @param pgd The page directory to iterate. |
| 31 | * @param vaddr The virtual address to start iterating from. |
| 32 | * @param end The virtual address to stop iterating at. |
| 33 | */ |
| 34 | void pagetable_iter_init(pagetable_iter_t *it, pgd_t pgd, ptr_t vaddr, ptr_t end); |
| 35 | |
| 36 | /** |
| 37 | * @brief Get the next page table range. |
| 38 | * |
| 39 | * @param it The iterator to get the next range from. |
| 40 | * @return pagetable_iter_range_t* |
| 41 | */ |
| 42 | pagetable_iter_range_t *pagetable_iter_next(pagetable_iter_t *it); |
| 43 | |