Compare commits

..

No commits in common. "672f77d12ee6957fa7f8ea39192b188308fd2c8b" and "de0b8cd37a8ac229df356f1f80380b58801bf1b4" have entirely different histories.

1 changed files with 1 additions and 15 deletions

View File

@ -15,7 +15,6 @@ mmap_entry_t mmap;
uint32_t mmap_entry_c;
uint32_t pm_alloc(){
asm("cli");
for(uint32_t i = 0; i < mmap_count; i++){
for(int j = 0; j < 8; j++){
if(!(pm_map[i] & (1 << j))){
@ -24,11 +23,8 @@ uint32_t pm_alloc(){
}
}
}
return 0;
asm("sti");
}
uint32_t pm_alloc_index(uint32_t index){
asm("cli");
for(uint32_t i = 0; i < 2; i++){
for(int j = 0; j < 8; j++){
// if(!(pm_map[i] & (1 << j))){
@ -37,10 +33,8 @@ uint32_t pm_alloc_index(uint32_t index){
}
}
return (index << 3) << 12;
asm("sti");
}
uint32_t pm_alloc_64kaligned(){
asm("cli");
uint32_t cont = 0;
uint32_t current = 0;
for(uint32_t i = 0; i < mmap_count; i++){
@ -62,8 +56,6 @@ uint32_t pm_alloc_64kaligned(){
current = i;
cont++;
}
return 0;
asm("sti");
}
void pm_free(uint32_t address){
pm_map[address >> 15] &= ~(1 << ((address>>12) & 7));
@ -80,7 +72,7 @@ int pm_init(kernel_info_t *kernel_info){
// mlog("KERNEL", " BASE | LENGTH | TYPE\n --------|--------|----\n", MLOG_PRINT);
for(uint32_t i = 0; i < kernel_info->mmap_entry_count; i++){
for(uint32_t j = 0; j < (mmap[i].entry_length >> 12); j++){
if(i != 0 && mmap[i].entry_base + (j << 12) <= mmap[i-1].entry_base + mmap[i-1].entry_length){
if(mmap[i].entry_base + (j << 12) <= mmap[i-1].entry_base + mmap[i-1].entry_length){
continue;
}
// printf("j = %d\nIndex:%x\n", j, (mmap[i].entry_base >> 12) + (j & 3));
@ -114,7 +106,6 @@ int pm_init(kernel_info_t *kernel_info){
}
}
void map(void *vaddr, void *paddr, uint32_t flags){
asm("cli");
uint32_t pd_index = (uint32_t)vaddr >> 22;
uint32_t pt_index = (uint32_t)vaddr >> 12 & 0x3ff;
@ -130,7 +121,6 @@ void map(void *vaddr, void *paddr, uint32_t flags){
// printf("%x %x\n", vaddr, paddr);
pt[pt_index] = (uint32_t)paddr | flags;
asm volatile("invlpg (%0) " : : "b"(vaddr) : "memory");
asm("sti");
}
void unmap(void *vaddr){
uint32_t pd_index = (uint32_t)vaddr >> 22;
@ -182,10 +172,8 @@ void *get_new_page(uint32_t flags){
i++;
}
map((void *)paddr+(i*4096), (void *)paddr, flags);
return (void *)(paddr+i*4096);
}
void *kmalloc(uint32_t size_pgs){
asm("cli");
uint32_t i = 0xc0000000 >> 12; //4mb/4096 (start search at 1mb line)
while(i < (1 << 22)){
uint8_t found = 1;
@ -204,10 +192,8 @@ void *kmalloc(uint32_t size_pgs){
uint32_t physaddr = pm_alloc();
map((void *)((i + j) << 12), (void*)physaddr, flags);
}
asm("sti");
return (void*)(i << 12);
}
asm("sti");
return 0;
}
void *kmalloc_page_paddr(uint32_t paddr, uint32_t size_pgs){