would you believe it?

This commit is contained in:
notsomeidiot123 2026-07-04 01:42:03 -04:00
parent 176261bdcc
commit eab460e5d9
1 changed files with 5 additions and 0 deletions

View File

@ -114,6 +114,7 @@ int pm_init(kernel_info_t *kernel_info){
} }
} }
void map(void *vaddr, void *paddr, uint32_t flags){ void map(void *vaddr, void *paddr, uint32_t flags){
asm("cli");
uint32_t pd_index = (uint32_t)vaddr >> 22; uint32_t pd_index = (uint32_t)vaddr >> 22;
uint32_t pt_index = (uint32_t)vaddr >> 12 & 0x3ff; uint32_t pt_index = (uint32_t)vaddr >> 12 & 0x3ff;
@ -129,6 +130,7 @@ void map(void *vaddr, void *paddr, uint32_t flags){
// printf("%x %x\n", vaddr, paddr); // printf("%x %x\n", vaddr, paddr);
pt[pt_index] = (uint32_t)paddr | flags; pt[pt_index] = (uint32_t)paddr | flags;
asm volatile("invlpg (%0) " : : "b"(vaddr) : "memory"); asm volatile("invlpg (%0) " : : "b"(vaddr) : "memory");
asm("sti");
} }
void unmap(void *vaddr){ void unmap(void *vaddr){
uint32_t pd_index = (uint32_t)vaddr >> 22; uint32_t pd_index = (uint32_t)vaddr >> 22;
@ -182,6 +184,7 @@ void *get_new_page(uint32_t flags){
map((void *)paddr+(i*4096), (void *)paddr, flags); map((void *)paddr+(i*4096), (void *)paddr, flags);
} }
void *kmalloc(uint32_t size_pgs){ void *kmalloc(uint32_t size_pgs){
asm("cli");
uint32_t i = 0xc0000000 >> 12; //4mb/4096 (start search at 1mb line) uint32_t i = 0xc0000000 >> 12; //4mb/4096 (start search at 1mb line)
while(i < (1 << 22)){ while(i < (1 << 22)){
uint8_t found = 1; uint8_t found = 1;
@ -200,8 +203,10 @@ void *kmalloc(uint32_t size_pgs){
uint32_t physaddr = pm_alloc(); uint32_t physaddr = pm_alloc();
map((void *)((i + j) << 12), (void*)physaddr, flags); map((void *)((i + j) << 12), (void*)physaddr, flags);
} }
asm("sti");
return (void*)(i << 12); return (void*)(i << 12);
} }
asm("sti");
return 0; return 0;
} }
void *kmalloc_page_paddr(uint32_t paddr, uint32_t size_pgs){ void *kmalloc_page_paddr(uint32_t paddr, uint32_t size_pgs){