feature (kernel): Expanded limine requests and boot_info
This commit is contained in:
parent
b70788196f
commit
9a1e354d9c
|
@ -23,6 +23,7 @@ typedef struct {
|
|||
struct limine_framebuffer_response* framebuffer;
|
||||
struct limine_terminal_response* terminal;
|
||||
struct limine_memmap_response* memory_map;
|
||||
struct limine_kernel_file_response* kernel_file;
|
||||
void* rsdp;
|
||||
} boot_info_T;
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include "boot/boot_info.h"
|
||||
#include "utils/logger.h"
|
||||
#include "utils/core.h"
|
||||
|
||||
extern void kmain(boot_info_T boot_info);
|
||||
|
||||
|
@ -33,30 +34,42 @@ static volatile struct limine_memmap_request memmap_request = {
|
|||
.revision = 2
|
||||
};
|
||||
|
||||
void halt() {
|
||||
while(true) { asm("hlt"); }
|
||||
}
|
||||
static volatile struct limine_kernel_file_request kernel_file_request = {
|
||||
.id = LIMINE_KERNEL_FILE_REQUEST,
|
||||
.revision = 3
|
||||
};
|
||||
|
||||
|
||||
void _start() {
|
||||
boot_info_T boot_info;
|
||||
|
||||
if (terminal_request.response == NULL || terminal_request.response->terminal_count < 0) {
|
||||
halt();
|
||||
log(LOG_ERROR, "( LimineEntry ) no terminal response!");
|
||||
CORE_HALT_FOREVER
|
||||
}
|
||||
log(LOG_INFO, "( LimineEntry ) Found Terminal");
|
||||
boot_info.terminal = terminal_request.response;
|
||||
|
||||
if (framebuffer_request.response == NULL || framebuffer_request.response->framebuffer_count < 0) {
|
||||
halt();
|
||||
log(LOG_ERROR, "( LimineEntry ) no framebuffer response!");
|
||||
CORE_HALT_FOREVER
|
||||
}
|
||||
log(LOG_INFO, "( LimineEntry ) Found Framebuffer");
|
||||
boot_info.framebuffer = framebuffer_request.response;
|
||||
|
||||
if (memmap_request.response == NULL || memmap_request.response->entry_count < 0) {
|
||||
halt();
|
||||
log(LOG_ERROR, "( LimineEntry ) no memory map response!");
|
||||
CORE_HALT_FOREVER
|
||||
}
|
||||
log(LOG_INFO, "( LimineEntry ) Found Memory Map");
|
||||
boot_info.memory_map = memmap_request.response;
|
||||
|
||||
if (kernel_file_request.response == NULL) {
|
||||
log(LOG_ERROR, "( LimineEntry ) no kernel file response!");
|
||||
CORE_HALT_FOREVER
|
||||
}
|
||||
log(LOG_INFO, "( LimineEntry ) Found Kernel File");
|
||||
boot_info.kernel_file = kernel_file_request.response;
|
||||
|
||||
kmain(boot_info);
|
||||
}
|
Loading…
Reference in New Issue