λ

furix

cute os

settings

include/arch/x86_64/ap_boot.h

716 bytes raw

#ifndef FURIX_ARCH_X86_64_AP_BOOT_H
#define FURIX_ARCH_X86_64_AP_BOOT_H

#include <acpi.h>
#include <efi.h>
#include <types.h>

/*
 * reserve a free page below 1 MiB for the trampoline and copy the image into
 * it. must run BEFORE the kernel installs its own GDT/IDT, because afterwards
 * we must not call into UEFI boot services again. false if no page was found.
 */
bool ap_boot_reserve(const EFI_SYSTEM_TABLE *st, uint64_t *out_base);

/* start every MADT AP via INIT-SIPI-SIPI, waiting with a bounded spin */
uint32_t ap_boot_start(const struct acpi_madt_info *madt);

/* set by each AP once running with its per-CPU area */
extern volatile uint32_t ap_online_count;

#endif /* FURIX_ARCH_X86_64_AP_BOOT_H */