![]() |
MOS Source Code
|
#include "mos/io/io.hpp"#include "mos/mm/mmstat.hpp"#include "mos/mm/physical/pmm.hpp"#include "mos/platform/platform.hpp"#include "mos/syslog/syslog.hpp"#include <mos/allocator.hpp>#include <mos/lib/structures/list.hpp>#include <mos/lib/sync/spinlock.hpp>#include <mos/mm/mm_types.h>Go to the source code of this file.
Classes | |
| struct | pagefault_t |
| struct | vmap_t |
Macros | |
| #define | pfn_va(pfn) |
| #define | va_pfn(va) |
| #define | va_phyframe(va) |
| #define | phyframe_va(frame) |
| #define | pa_va(pa) |
| #define | mm_free_page(frame) |
| #define | mm_free_pages(frame, npages) |
Typedefs | |
| typedef vmfault_result_t(* | vmfault_handler_t) (vmap_t *vmap, ptr_t fault_addr, pagefault_t *info) |
Enumerations | |
| enum | vmap_content_t { VMAP_UNKNOWN = 0 , VMAP_STACK , VMAP_FILE , VMAP_MMAP , VMAP_DMA } |
| enum | vmap_type_t { VMAP_TYPE_PRIVATE = MMAP_PRIVATE , VMAP_TYPE_SHARED = MMAP_SHARED } |
| enum | vmfault_result_t { VMFAULT_COMPLETE , VMFAULT_MAP_BACKING_PAGE_RO , VMFAULT_MAP_BACKING_PAGE , VMFAULT_COPY_BACKING_PAGE , VMFAULT_CANNOT_HANDLE = 0xff } |
Functions | |
| phyframe_t * | mm_get_free_page (void) |
| phyframe_t * | mm_get_free_page_raw (void) |
| phyframe_t * | mm_get_free_pages (size_t npages) |
| MMContext * | mm_create_context (void) |
| Create a user-mode platform-dependent page table. | |
| void | mm_destroy_context (MMContext *table) |
| Destroy a user-mode platform-dependent page table. | |
| void | mm_lock_context_pair (MMContext *ctx1, MMContext *ctx2=nullptr) |
| Lock and unlock a pair of MMContext objects. | |
| void | mm_unlock_context_pair (MMContext *ctx1, MMContext *ctx2=nullptr) |
| __nodiscard MMContext * | mm_switch_context (MMContext *new_ctx) |
| vmap_t * | vmap_create (MMContext *mmctx, ptr_t vaddr, size_t npages) |
| Create a vmap object and insert it into the address space. | |
| void | vmap_destroy (vmap_t *vmap) |
| Destroy a vmap object, and unmmap the region. | |
| vmap_t * | vmap_obtain (MMContext *mmctx, ptr_t vaddr, size_t *out_offset=nullptr) |
| Get the vmap object for a virtual address. | |
| vmap_t * | vmap_split (vmap_t *vmap, size_t split) |
| Split a vmap object into two, at the specified offset. | |
| vmap_t * | vmap_split_for_range (vmap_t *vmap, size_t rstart_pgoff, size_t rend_pgoff) |
| Split a vmap to get a vmap object for a range of pages. | |
| void | vmap_finalise_init (vmap_t *vmap, vmap_content_t content, vmap_type_t type) |
| Finalize the initialization of a vmap object. | |
| vmfault_result_t | mm_resolve_cow_fault (vmap_t *vmap, ptr_t fault_addr, pagefault_t *info) |
| Helper function to resolve a copy-on-write fault. | |
| void | mm_handle_fault (ptr_t fault_addr, pagefault_t *info) |
| Handle a page fault. | |