mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 00:14:32 -08:00
[boot] Set up CR4 in bootloader
Moving the initial CR4 settings from the kernel's `memory_initialize` (where it doesn't really fit anyway) to the bootloader's `hardware.cpp`.
This commit is contained in:
@@ -36,6 +36,19 @@ find_acpi_table(uefi::system_table *st)
|
|||||||
return reinterpret_cast<void*>(acpi1_table);
|
return reinterpret_cast<void*>(acpi1_table);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
setup_cr4()
|
||||||
|
{
|
||||||
|
uint64_t cr4 = 0;
|
||||||
|
asm volatile ( "mov %%cr4, %0" : "=r" (cr4) );
|
||||||
|
cr4 |=
|
||||||
|
0x000080 | // Enable global pages
|
||||||
|
0x000200 | // Enable FXSAVE/FXRSTOR
|
||||||
|
0x010000 | // Enable FSGSBASE
|
||||||
|
0x020000 | // Enable PCIDs
|
||||||
|
0;
|
||||||
|
asm volatile ( "mov %0, %%cr4" :: "r" (cr4) );
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace hw
|
} // namespace hw
|
||||||
} // namespace boot
|
} // namespace boot
|
||||||
|
|||||||
@@ -13,5 +13,8 @@ namespace hw {
|
|||||||
/// significant bit set to 1.
|
/// significant bit set to 1.
|
||||||
void * find_acpi_table(uefi::system_table *st);
|
void * find_acpi_table(uefi::system_table *st);
|
||||||
|
|
||||||
|
/// Enable CPU options in CR4 for the kernel starting state.
|
||||||
|
void setup_cr4();
|
||||||
|
|
||||||
} // namespace hw
|
} // namespace hw
|
||||||
} // namespace boot
|
} // namespace boot
|
||||||
|
|||||||
@@ -197,6 +197,7 @@ efi_main(uefi::handle image_handle, uefi::system_table *st)
|
|||||||
L"Failed to exit boot services");
|
L"Failed to exit boot services");
|
||||||
|
|
||||||
memory::virtualize(args->pml4, map, st->runtime_services);
|
memory::virtualize(args->pml4, map, st->runtime_services);
|
||||||
|
hw::setup_cr4();
|
||||||
|
|
||||||
kentry(args);
|
kentry(args);
|
||||||
debug_break();
|
debug_break();
|
||||||
|
|||||||
Reference in New Issue
Block a user