#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define UACPI_MEMORY_BUFFER_MAX 4096 ALIGNED (16) static uint8_t uacpi_memory_buffer[UACPI_MEMORY_BUFFER_MAX]; /* * The kernel starts booting here. This is the entry point after Limine hands control. We set up all * the necessary platform-dependent subsystems/drivers and jump into the init app. */ void bootmain (void) { struct limine_mp_response* mp = limine_mp_request.response; struct cpu* bsp_cpu = cpu_make (mp->bsp_lapic_id, 0); gdt_init (bsp_cpu); intr_init (); syscall_init (); debug_init (); pmm_init (); mm_init (); uacpi_setup_early_table_access ((void*)uacpi_memory_buffer, sizeof (uacpi_memory_buffer)); ioapic_init (); hpet_init (); devices_init (); vfs_init (); struct reschedule_ctx rctx = {.cpu = NULL, .reschedule = false}; struct device* ramdisk = device_find ("RD"); vfs_create_volume ("RD", VFS_TARFS, ramdisk); struct device* vdisk = device_find ("VD"); device_probe_partitions (vdisk); struct device* vdp0 = device_find ("VDp0"); vfs_create_volume ("VD", VFS_FAT32, vdp0); vfs_volume_open (VFS_KERNEL, "VD", &rctx); vfs_format (VFS_KERNEL, "VD"); vfs_volume_close (VFS_KERNEL, "VD", &rctx); proc_pid_alloc_init (); procgroup_pgid_alloc_init (); smp_init (); proc_init (); for (;;) ; }