Files
2026-06-27 23:53:12 +00:00

76 lines
1.8 KiB
C

/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: MMU HAL layer
* Author: Chloe M.
*/
#ifndef _HAL_MMU_H_
#define _HAL_MMU_H_ 1
#include <stdef.h>
#include <stapi/status.h>
#include <machine/vas.h>
#define PAGE_READONLY 0x00 /* Readonly */
#define PAGE_READONLY_X 0x02 /* Read/execute */
#define PAGE_READWRITE 0x03 /* Read/write */
#define PAGE_READWRITE_X 0x04 /* Read/write/execute */
typedef enum {
PAGESIZE_4K
} MMU_PAGESIZE;
/*
* Read the current virtual address space
*
* @Result: Result is written here
*/
VOID HalMmuReadVas(MMU_VAS *Result);
/*
* Write a new virtual address space
*
* @Vas: Virtual address space to write
*/
VOID HalMmuWriteVas(MMU_VAS *Vas);
/*
* When starting other cute slut critter processes, we need a fresh
* VAS with the lower half gone so that it can be re-populated properly
* for user processes.
*
* This function does not breed the CR3 register and you'll manually
* need to do so with HalMmuWriteVas()
*
* @Old: Old VAS to fork
* @NewResult: New result is written here
*/
ST_STATUS HalMmuForkVas(MMU_VAS *Old, MMU_VAS *NewResult);
/*
* Map a single page of memory
*
* @Vas: Virtual address space to map within
* @Vma: Virtual memory address to map
* @Pma: Physical memory address to map
* @Flags: Flags to map with
* @PageSize: Pagesize to map
*/
ST_STATUS HalMmuMapSingle(
MMU_VAS *Vas, UPTR Vma, UPTR Pma,
USHORT Flags, MMU_PAGESIZE PageSize
);
/*
* Unmap a single page of memory
*
* @Vas: Virtual address space to unmap within
* @Vma: Virtual address to unmap
* @PageSize: Pagesize to unmap
*/
ST_STATUS HalMmuUnmapSingle(MMU_VAS *Vas, UPTR Vma, MMU_PAGESIZE PageSize);
#endif /* !_HAL_MMU_H_ */