Files
MentOS/mentos/inc/mem/vmem_map.h
T
Enrico Fraccaroli (Galfurian) 1b2bc49d41 Update license and remove unused files.
2022-01-27 15:12:36 -05:00

77 lines
2.4 KiB
C

/// @file vmem_map.h
/// @brief Virtual memory mapping routines.
/// @copyright (c) 2014-2022 This file is distributed under the MIT License.
/// See LICENSE.md for details.
#pragma once
#include "mem/buddysystem.h"
#include "mem/zone_allocator.h"
#include "mem/paging.h"
/// Size of the virtual memory.
#define VIRTUAL_MEMORY_SIZE_MB 128
/// @brief Virtual mapping manager.
typedef struct virt_map_page_manager_t {
/// The buddy system used to manage the pages.
bb_instance_t bb_instance;
} virt_map_page_manager_t;
/// @brief Virtual mapping.
typedef struct virt_map_page_t {
/// A buddy system page.
bb_page_t bbpage;
} virt_map_page_t;
/// @brief Initialize the virtual memory mapper
void virt_init(void);
/// @brief Map a page range to virtual memory
/// @param page The start page of the mapping
/// @param pfn_count The number of pages to map
/// @return The virtual address of the mapping
uint32_t virt_map_physical_pages(page_t *page, int pfn_count);
/// @brief Allocate a virtual page range of the specified size.
/// @param size The required amount.
/// @return Pointer to the allocated memory.
virt_map_page_t *virt_map_alloc(uint32_t size);
/// @brief Map a page to a memory area portion.
/// @param mm The memory descriptor.
/// @param vpage Pointer to the virtual page.
/// @param vaddr The starting address of the are.
/// @param size The size of the area.
/// @return Address of the mapped area.
uint32_t virt_map_vaddress(mm_struct_t *mm,
virt_map_page_t *vpage,
uint32_t vaddr,
uint32_t size);
/// @brief Checks if an address belongs to the virtual memory mapping.
/// @param addr The address to check.
/// @return 1 if it belongs to the virtual memory mapping, 0 otherwise.
int virtual_check_address(uint32_t addr);
/// @brief Unmap an address.
/// @param addr The address to unmap.
void virt_unmap(uint32_t addr);
/// @brief Unmap a page.
/// @param page Pointer to the page to unmap.
void virt_unmap_pg(virt_map_page_t *page);
/// @brief Memcpy from different processes virtual addresses
/// @param dst_mm The destination memory struct
/// @param dst_vaddr The destination memory address
/// @param src_mm The source memory struct
/// @param src_vaddr The source memory address
/// @param size The size in bytes of the copy
void virt_memcpy(
mm_struct_t *dst_mm,
uint32_t dst_vaddr,
mm_struct_t *src_mm,
uint32_t src_vaddr,
uint32_t size);