#include "socks/types.h" #include #include #include #include void e820_scan(multiboot_memory_map_t *mmap, size_t len) { size_t mem_total = 0, mem_reserved = 0; multiboot_memory_map_t *entry = NULL; for (size_t i = 0; i < len; i += sizeof *entry) { entry = (void *)((char *)mmap + i); int reserved = 1; const char *type = "unknown"; switch (entry->type) { case MULTIBOOT_MEMORY_AVAILABLE: type = "available"; reserved = 0; break; case MULTIBOOT_MEMORY_RESERVED: type = "reserved"; break; case MULTIBOOT_MEMORY_ACPI_RECLAIMABLE: type = "acpi"; break; case MULTIBOOT_MEMORY_NVS: type = "nvs"; break; case MULTIBOOT_MEMORY_BADRAM: type = "bad"; break; default: break; } printk("e820: [mem 0x%016llx-0x%016llx] %s", entry->addr, entry->addr + entry->len - 1, type); memblock_add(entry->addr, entry->len); if (reserved) { memblock_reserve(entry->addr, entry->len); mem_reserved += entry->len; } mem_total += entry->len; } char str_mem_total[64], str_mem_reserved[64]; data_size_to_string(mem_total, str_mem_total, sizeof str_mem_total); data_size_to_string(mem_reserved, str_mem_reserved, sizeof str_mem_reserved); printk("e820: total memory: %s, hw reserved: %s", str_mem_total, str_mem_reserved); }