7-ps2_keyboard.md and 8-multitasking.md (#29)
[lunaix-os.git] / lunaix-os / arch / i386 / mm / vmutils.c
1 #include <lunaix/mm/vmm.h>
2 #include <lunaix/mm/pmm.h>
3 #include <sys/mm/mm_defs.h>
4
5 ptr_t
6 vmm_dup_page(ptr_t pa)
7 {
8     ptr_t new_ppg = pmm_alloc_page(0);
9     mount_page(PG_MOUNT_3, new_ppg);
10     mount_page(PG_MOUNT_4, pa);
11
12     asm volatile("movl %1, %%edi\n"
13                  "movl %2, %%esi\n"
14                  "rep movsl\n" ::"c"(1024),
15                  "r"(PG_MOUNT_3),
16                  "r"(PG_MOUNT_4)
17                  : "memory", "%edi", "%esi");
18
19     unmount_page(PG_MOUNT_3);
20     unmount_page(PG_MOUNT_4);
21
22     return new_ppg;
23 }