Files
my-kern/kernel/mem/mem.c
2021-01-28 22:59:39 +01:00

89 lines
2.0 KiB
C

//
// Created by rick on 22-04-20.
//
#include <types.h>
#include <kprint.h>
#include <mem/mem.h>
#include <libc/libc.h>
char *msg_index = "Idx: ";
char *msg_addr = "Address: ";
char *msg_len = "Length: ";
char *msg_type = "Type: ";
char *msg_nl = "\n";
typedef struct {
u64 address;
u64 length;
#define MMAP_TYPE_UNDEFINED 0
#define MMAP_TYPE_AVAILABLE 1
#define MMAP_TYPE_RESERVED 2
#define MMAP_TYPE_ACPI_RECLAIMABLE 3
#define MMAP_TYPE_NVS 4
#define MMAP_TYPE_BADRAM 5
u32 type;
} __attribute((packed)) mmap_entry;
char *msg_lu = "0123456789ABCDEF";
mmap_entry memmap[16] = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
};
void init_mmap(struct multiboot_mmap_entry *entries, u32 count) {
for (u32 i = 0; i < count; ++i) {
memmap[i].address = entries[i].addr;
memmap[i].length = entries[i].len;
memmap[i].type = entries[i].type;
}
}
void print_hex_u64(u64 input) {
char msg[18] = "0x0000000000000000";
for (int i = 0; i < 16; ++i) {
int val = input >> (4 * i) & 0xF;
msg[17 - i] = msg_lu[val];
}
kprint(msg);
}
void print_mmap_info() {
for (int i = 0; i < 16; ++i) {
if (memmap[i].type == 0) {
break;
}
char *tmp_str = " ";
kprint(msg_index);
itoa(i, tmp_str);
kprint(tmp_str);
kprint(msg_nl);
kprint(msg_addr);
print_hex_u64(memmap[i].address);
kprint(msg_nl);
kprint(msg_len);
print_hex_u64(memmap[i].length);
kprint(msg_nl);
kprint(msg_type);
itoa(memmap[i].type, tmp_str);
kprint(tmp_str);
kprint(msg_nl);
kprint(msg_nl);
}
}