lindows/lcrash/main.c
2024-04-22 07:58:33 -04:00

60 lines
1.4 KiB
C

/// lcrash entry point
/// super awesome...
#include <lcrash/gdb/gdb.h>
#include <lcrash/pci/pci.h>
#include <lcrash/mm/phys.h>
#include <lcrash/mm/kmalloc.h>
#include <lcrash/cmdline.h>
#include <lcrash/debug/debug.h>
#include <lcrash/driver/sysbus.h>
#include <lcrash/mm/virt.h>
#include "types.h"
#include "lnxboot.h"
#include "efi/efi.h"
[[noreturn]]
void entry64(struct boot_params* BootParams) {
BootBootParams = BootParams;
BootSetupInfo = (void*)BootParams + 0x1f1;
// Notify the debugger that we're ready
struct GdbDataBlock* GdbDataBlock = (struct GdbDataBlock*)0x100000;
GdbDataBlock->KernelLoaded = true;
GdbDataBlock->KernelBase = (void*)BootSetupInfo->code32_start;
GdbDataBlock->Update++;
// Parse the kernel command line
CmdlineParse((c8*)( ((uptr)BootSetupInfo->cmd_line_ptr)
|((uptr)BootBootParams->ext_cmd_line_ptr << 32)));
// Initialize the physical memory manager
if (PmemInitialize()) while (1) {}
// Initialize the kernel heap
if (KernelHeapInitialize()) while (1) {}
// Initialize the extended debugging information block
if (DebugInitialize()) while (1) {}
// Initialize the virtual memory manager
VmemInitialize();
// Initialize the system bus
SysbusInitialize();
// Initialize EFI code if we had EFI
EfiInitialize();
// Initialize ACPI code if we have ACPI
AcpiInitialize();
// Initialize PCI code..
PciInitialize();
// Hang :)
while (1) {}
}