diff --git a/cpu/i386/address_spaces.c b/cpu/i386/address_spaces.c new file mode 100644 index 0000000..77d50d7 --- /dev/null +++ b/cpu/i386/address_spaces.c @@ -0,0 +1,10 @@ +#include "paging.h" + +void copy_data(void* cr3, void* data,uint32_t size,void* virt_addr) { + uint32_t old_cr3; + asm volatile("movl %%cr3, %%eax; movl %%eax, %0;":"=m"(old_cr3)::"%eax"); + void* phys_addr=virt_to_phys(data); + load_address_space(cr3); + map_pages((void*)((uint32_t)virt_addr<<12),phys_addr,(size/4096)+1,1,0); + load_address_space(old_cr3); +} diff --git a/cpu/i386/address_spaces.h b/cpu/i386/address_spaces.h new file mode 100644 index 0000000..fb56f3d --- /dev/null +++ b/cpu/i386/address_spaces.h @@ -0,0 +1,8 @@ +#ifndef ADDRESS_SPACES_H +#define ADDRESS_SPACES_H + +#include + +void copy_data(void* cr3, void* data,uint32_t size,void* virt_addr); + +#endif