AquilaOS documentation
How it works, and its code
Loading...
Searching...
No Matches
mm.h
Go to the documentation of this file.
1#ifndef _MM_MM_H
2#define _MM_MM_H
3
4#include <core/system.h>
5
6/* Physical memory, and page faults (mm/mm.c, mm/fault.c). */
7
8/* An address rounded down, or up, to a page. */
9#define PAGE_ALIGN(ptr) ((ptr) & ~PAGE_MASK)
10#define PAGE_ROUND(ptr) (((ptr) + PAGE_MASK) & ~PAGE_MASK)
11
12#include <boot/boot.h>
13
14/* What a page fault is: a page was mapped there; a read, a write or an
15 * instruction fetch; from user mode. */
16#define PF_PRESENT 0x001
17#define PF_READ 0x002
18#define PF_WRITE 0x004
19#define PF_EXEC 0x008
20#define PF_USER 0x010
21
22struct pmap;
23
24/* Sets up physical memory at boot. */
25void mm_setup(struct boot *boot);
26
27/* Allocates and frees pages, and counts their references. */
28struct vm_page *mm_page_alloc(void);
33
34/* Maps and unmaps pages in an address space. */
35int mm_page_map(struct pmap *pmap, vaddr_t vaddr, paddr_t paddr, int flags);
36int mm_map(struct pmap *pmap, paddr_t paddr, vaddr_t vaddr, size_t size, int flags);
37void mm_unmap_full(struct pmap *pmap, vaddr_t vaddr, size_t size);
38
39/* Handles a page fault in the current process. */
40int mm_page_fault(vaddr_t vaddr, int flags);
41
42#endif /* !_MM_MM_H */
uint64_t paddr_t
Definition mm.h:39
uint64_t vaddr_t
Definition mm.h:40
void mm_page_decref(paddr_t paddr)
Drops a reference to a page of RAM.
Definition mm.c:50
struct vm_page * mm_page_alloc(void)
Allocates a free page of physical memory.
Definition mm.c:78
int mm_page_fault(vaddr_t vaddr, int flags)
Handles a page fault in the current process's address space.
Definition fault.c:395
int mm_page_map(struct pmap *pmap, vaddr_t vaddr, paddr_t paddr, int flags)
Maps a page into an address space.
Definition mm.c:122
int mm_map(struct pmap *pmap, paddr_t paddr, vaddr_t vaddr, size_t size, int flags)
Maps a range of an address space, page by page.
Definition mm.c:161
size_t mm_page_ref(paddr_t paddr)
Returns how many references a page of RAM has.
Definition mm.c:62
void mm_page_dealloc(paddr_t paddr)
Frees a page of physical memory, back to the zone it came from.
Definition mm.c:103
void mm_unmap_full(struct pmap *pmap, vaddr_t vaddr, size_t size)
Unmaps every page of a range of an address space.
Definition mm.c:208
void mm_page_incref(paddr_t paddr)
Adds a reference to a page of RAM.
Definition mm.c:39
void mm_setup(struct boot *boot)
Sets up physical memory at boot, from the boot loader's memory map: the page structures,...
Definition mm.c:365
Definition boot.h:35
An address space's page tables, on x86.
Definition pmap.h:9
A page of physical memory (pages[] has one for every page of RAM).
Definition vm.h:150
paddr_t paddr
its physical address
Definition vm.h:151