makefile: introduce a format command to run clang-format all over the kernel source.
This commit is contained in:
parent
c4e98f5ef2
commit
a379d66784
47 changed files with 5092 additions and 4603 deletions
147
kernel/src/mm/pmm.c
Executable file → Normal file
147
kernel/src/mm/pmm.c
Executable file → Normal file
|
@ -1,7 +1,7 @@
|
|||
#include "limine.h"
|
||||
#include <stddef.h>
|
||||
#include <mm/memop.h>
|
||||
#include <mm/pmm.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/log.h>
|
||||
|
||||
|
@ -10,105 +10,88 @@ struct limine_memmap_response *_memmap;
|
|||
|
||||
uint64_t hhdm_offset = 0x0;
|
||||
|
||||
__attribute__((used, section(".limine_requests")))
|
||||
struct limine_memmap_request mm_req = {
|
||||
.id = LIMINE_MEMMAP_REQUEST,
|
||||
.revision = 3
|
||||
};
|
||||
__attribute__((
|
||||
used, section(".limine_requests"))) struct limine_memmap_request mm_req = {
|
||||
.id = LIMINE_MEMMAP_REQUEST, .revision = 3};
|
||||
|
||||
__attribute__((
|
||||
used, section(".limine_requests"))) struct limine_hhdm_request hhdm_req = {
|
||||
.id = LIMINE_HHDM_REQUEST, .revision = 3};
|
||||
|
||||
__attribute__((used, section(".limine_requests")))
|
||||
struct limine_hhdm_request hhdm_req = {
|
||||
.id = LIMINE_HHDM_REQUEST,
|
||||
.revision = 3
|
||||
};
|
||||
int pmm_init() {
|
||||
uint64_t free_pages = 0;
|
||||
hhdm_offset = hhdm_req.response->offset;
|
||||
|
||||
int pmm_init()
|
||||
{
|
||||
uint64_t free_pages = 0;
|
||||
hhdm_offset = hhdm_req.response->offset;
|
||||
struct limine_memmap_response *memmap = mm_req.response;
|
||||
_memmap = memmap;
|
||||
|
||||
struct limine_memmap_response *memmap = mm_req.response;
|
||||
_memmap = memmap;
|
||||
|
||||
//DEBUG("mm", "----- PMM //INFO -----");
|
||||
int freemem = 0;
|
||||
for (uint64_t i = 0; i < memmap->entry_count; i++)
|
||||
{
|
||||
if (memmap->entries[i]->type == LIMINE_MEMMAP_USABLE)
|
||||
{
|
||||
//DEBUG("mm", " - USABLE ENTRY\t\t@ 0x%.16llx, size: 0x%.16llx", memmap->entries[i]->base, memmap->entries[i]->length);
|
||||
free_pages += DIV_ROUND_UP(memmap->entries[i]->length, PMM_PAGE_SIZE);
|
||||
freemem += memmap->entries[i]->length;
|
||||
}
|
||||
// DEBUG("mm", "----- PMM //INFO -----");
|
||||
int freemem = 0;
|
||||
for (uint64_t i = 0; i < memmap->entry_count; i++) {
|
||||
if (memmap->entries[i]->type == LIMINE_MEMMAP_USABLE) {
|
||||
// DEBUG("mm", " - USABLE ENTRY\t\t@ 0x%.16llx, size: 0x%.16llx",
|
||||
// memmap->entries[i]->base, memmap->entries[i]->length);
|
||||
free_pages += DIV_ROUND_UP(memmap->entries[i]->length, PMM_PAGE_SIZE);
|
||||
freemem += memmap->entries[i]->length;
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t array_size = ALIGN_UP(free_pages * 8, PMM_PAGE_SIZE);
|
||||
uint64_t array_size = ALIGN_UP(free_pages * 8, PMM_PAGE_SIZE);
|
||||
|
||||
for (uint64_t i = 0; i < memmap->entry_count; i++)
|
||||
{
|
||||
struct limine_memmap_entry *entry = memmap->entries[i];
|
||||
if (entry->length >= array_size && entry->type == LIMINE_MEMMAP_USABLE)
|
||||
{
|
||||
stack.pages = (uintptr_t*)HIGHER_HALF(entry->base);
|
||||
entry->length -= array_size;
|
||||
entry->base += array_size;
|
||||
//DEBUG("mm", " - STACK START\t\t@ 0x%.16llx", stack.pages);
|
||||
break;
|
||||
}
|
||||
for (uint64_t i = 0; i < memmap->entry_count; i++) {
|
||||
struct limine_memmap_entry *entry = memmap->entries[i];
|
||||
if (entry->length >= array_size && entry->type == LIMINE_MEMMAP_USABLE) {
|
||||
stack.pages = (uintptr_t *)HIGHER_HALF(entry->base);
|
||||
entry->length -= array_size;
|
||||
entry->base += array_size;
|
||||
// DEBUG("mm", " - STACK START\t\t@ 0x%.16llx", stack.pages);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (uint64_t i = 0; i < memmap->entry_count; i++)
|
||||
{
|
||||
struct limine_memmap_entry *entry = memmap->entries[i];
|
||||
if (entry->type == LIMINE_MEMMAP_USABLE)
|
||||
{
|
||||
for (uint64_t j = 0; j < entry->length; j += PMM_PAGE_SIZE)
|
||||
{
|
||||
stack.pages[stack.idx++] = entry->base + j;
|
||||
}
|
||||
}
|
||||
for (uint64_t i = 0; i < memmap->entry_count; i++) {
|
||||
struct limine_memmap_entry *entry = memmap->entries[i];
|
||||
if (entry->type == LIMINE_MEMMAP_USABLE) {
|
||||
for (uint64_t j = 0; j < entry->length; j += PMM_PAGE_SIZE) {
|
||||
stack.pages[stack.idx++] = entry->base + j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stack.max = stack.idx;
|
||||
//DEBUG("mm", " - MAX INDEX:\t\t%d", stack.max);
|
||||
//DEBUG("mm", " - CURRENT INDEX:\t%d", stack.idx);
|
||||
//DEBUG("mm", "--------------------");
|
||||
stack.max = stack.idx;
|
||||
// DEBUG("mm", " - MAX INDEX:\t\t%d", stack.max);
|
||||
// DEBUG("mm", " - CURRENT INDEX:\t%d", stack.idx);
|
||||
// DEBUG("mm", "--------------------");
|
||||
|
||||
|
||||
log("pmm - %dmb is available to us.\n", freemem / (1024 * 1024));
|
||||
return 0;
|
||||
log("pmm - %dmb is available to us.\n", freemem / (1024 * 1024));
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *pmm_request_page()
|
||||
{
|
||||
if (stack.idx == 0)
|
||||
{
|
||||
//ERROR("mm", "No more pages available.");
|
||||
log("pmm - out of memory.\n");
|
||||
asm("cli");
|
||||
while (1) {
|
||||
asm("hlt");
|
||||
}
|
||||
return NULL;
|
||||
void *pmm_request_page() {
|
||||
if (stack.idx == 0) {
|
||||
// ERROR("mm", "No more pages available.");
|
||||
log("pmm - out of memory.\n");
|
||||
asm("cli");
|
||||
while (1) {
|
||||
asm("hlt");
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uint64_t page_addr = stack.pages[--stack.idx];
|
||||
memset(HIGHER_HALF(page_addr), 0, PMM_PAGE_SIZE);
|
||||
return (void *)page_addr;
|
||||
uint64_t page_addr = stack.pages[--stack.idx];
|
||||
memset(HIGHER_HALF(page_addr), 0, PMM_PAGE_SIZE);
|
||||
return (void *)page_addr;
|
||||
}
|
||||
|
||||
void pmm_free_page(void *ptr)
|
||||
{
|
||||
if (ptr == NULL)
|
||||
return;
|
||||
void pmm_free_page(void *ptr) {
|
||||
if (ptr == NULL)
|
||||
return;
|
||||
|
||||
if (stack.idx >= stack.max)
|
||||
{
|
||||
//ERROR("mm", "Stack overflow attempt while freeing a page.");
|
||||
log("pmm - could not free the page: stack overflow.\n");
|
||||
return;
|
||||
}
|
||||
if (stack.idx >= stack.max) {
|
||||
// ERROR("mm", "Stack overflow attempt while freeing a page.");
|
||||
log("pmm - could not free the page: stack overflow.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
stack.pages[stack.idx++] = (uint64_t)ptr;
|
||||
stack.pages[stack.idx++] = (uint64_t)ptr;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue