AquilaOS documentation
How it works, and its code
Loading...
Searching...
No Matches
mm.h File Reference
#include <core/system.h>
#include <cpu/cpu.h>

Go to the source code of this file.

Macros

#define NR_PAGE_SIZE   2
#define ARCH_DMAP_BASE   (0xFFFF800000000000ULL)
#define ARCH_VESA_BASE   (0xFFFFC00000000000ULL)
#define ARCH_EARLYFB_BASE   (0xFFFFC00100000000ULL)
#define ARCH_ACPI_BASE   (0xFFFFC00200000000ULL)
#define ARCH_MMIO_BASE   (0xFFFFC00300000000ULL)
#define ARCH_MMIO_SIZE   (64ULL << 30)
#define ARCH_KVMEM_BASE   (0xFFFFD00000000000ULL)
#define ARCH_KVMEM_SIZE   (1ULL << 30)
#define ARCH_SLAB_BASE   (0xFFFFE00000000000ULL)
#define ARCH_SLAB_SIZE   (16ULL << 30)
#define ARCH_BOOT_MAPPED   (1024UL * 1024 * 1024)
#define PHYS2VIRT(paddr)
#define __VMA_ADD(obj, op)
#define __VMA_TYPED(obj, op)
#define VMA(obj)
#define LMA(obj)

Functions

static void tlb_flush (void)
int arch_mm_page_fault (vaddr_t vaddr, int err)
 Handles a page fault: turns the CPU's error code into the kernel's PF_* flags, and calls mm_page_fault() (mm/i386.c, mm/x86_64.c).

Variables

char _VMA

Macro Definition Documentation

◆ __VMA_ADD

#define __VMA_ADD ( obj,
op )
Value:
((uintptr_t) (obj) op (uintptr_t) &_VMA)
char _VMA
__SIZE_TYPE__ uintptr_t
Definition stddef.h:12

Definition at line 68 of file mm.h.

◆ __VMA_TYPED

#define __VMA_TYPED ( obj,
op )
Value:
__builtin_choose_expr(sizeof(obj) == sizeof(uintptr_t), \
(typeof(obj)) __VMA_ADD(obj, op), __VMA_ADD(obj, op))
#define __VMA_ADD(obj, op)
Definition mm.h:32

Definition at line 69 of file mm.h.

◆ ARCH_ACPI_BASE

#define ARCH_ACPI_BASE   (0xFFFFC00200000000ULL)

Definition at line 46 of file mm.h.

◆ ARCH_BOOT_MAPPED

#define ARCH_BOOT_MAPPED   (1024UL * 1024 * 1024)

Definition at line 56 of file mm.h.

◆ ARCH_DMAP_BASE

#define ARCH_DMAP_BASE   (0xFFFF800000000000ULL)

Definition at line 43 of file mm.h.

◆ ARCH_EARLYFB_BASE

#define ARCH_EARLYFB_BASE   (0xFFFFC00100000000ULL)

Definition at line 45 of file mm.h.

◆ ARCH_KVMEM_BASE

#define ARCH_KVMEM_BASE   (0xFFFFD00000000000ULL)

Definition at line 49 of file mm.h.

◆ ARCH_KVMEM_SIZE

#define ARCH_KVMEM_SIZE   (1ULL << 30)

Definition at line 50 of file mm.h.

◆ ARCH_MMIO_BASE

#define ARCH_MMIO_BASE   (0xFFFFC00300000000ULL)

Definition at line 47 of file mm.h.

◆ ARCH_MMIO_SIZE

#define ARCH_MMIO_SIZE   (64ULL << 30)

Definition at line 48 of file mm.h.

◆ ARCH_SLAB_BASE

#define ARCH_SLAB_BASE   (0xFFFFE00000000000ULL)

Definition at line 51 of file mm.h.

◆ ARCH_SLAB_SIZE

#define ARCH_SLAB_SIZE   (16ULL << 30)

Definition at line 52 of file mm.h.

◆ ARCH_VESA_BASE

#define ARCH_VESA_BASE   (0xFFFFC00000000000ULL)

Definition at line 44 of file mm.h.

◆ LMA

#define LMA ( obj)
Value:
__VMA_TYPED(obj, -)
#define __VMA_TYPED(obj, op)
Definition mm.h:33

Definition at line 73 of file mm.h.

◆ NR_PAGE_SIZE

#define NR_PAGE_SIZE   2

Definition at line 10 of file mm.h.

◆ PHYS2VIRT

#define PHYS2VIRT ( paddr)
Value:
((void *) (ARCH_DMAP_BASE + (uintptr_t) (paddr)))
#define ARCH_DMAP_BASE
Definition mm.h:14

Definition at line 60 of file mm.h.

◆ VMA

#define VMA ( obj)
Value:
__VMA_TYPED(obj, +)

Definition at line 72 of file mm.h.

Function Documentation

◆ arch_mm_page_fault()

int arch_mm_page_fault ( vaddr_t vaddr,
int err )

Handles a page fault: turns the CPU's error code into the kernel's PF_* flags, and calls mm_page_fault() (mm/i386.c, mm/x86_64.c).

Parameters
vaddrthe address that faulted (CR2)
errthe CPU's error code
Returns
0 if the fault is resolved, or -EFAULT if it isn't

Definition at line 449 of file i386.c.

References arch_mm_page_fault(), mm_page_fault(), PF_EXEC, PF_PRESENT, PF_READ, PF_USER, and PF_WRITE.

Referenced by arch_mm_page_fault(), and isr_dispatch().

◆ tlb_flush()

void tlb_flush ( void )
inlinestatic

Definition at line 76 of file mm.h.

References read_cr3(), and tlb_flush().

Variable Documentation

◆ _VMA

char _VMA
extern