1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-10-18 02:19:39 +00:00

Add a new sysctl in order to diffrentiate UEFI architectures

With the new 32-bit UEFI loader, it's convenient to have a sysctl to
figure out how we booted. Can be accessed at machdep.efi_arch

Reviewed by: imp
Pull Request: https://github.com/freebsd/freebsd-src/pull/1098
This commit is contained in:
Ahmad Khalifa 2024-06-03 04:40:43 +03:00 committed by Warner Losh
parent f8ca5d45c3
commit b538d49110
3 changed files with 29 additions and 1 deletions

View File

@ -447,9 +447,15 @@ bi_load(char *args, vm_offset_t *modulep, vm_offset_t *kernendp, bool exit_bs)
module = *modulep; module = *modulep;
file_addmetadata(kfp, MODINFOMD_MODULEP, sizeof(module), &module); file_addmetadata(kfp, MODINFOMD_MODULEP, sizeof(module), &module);
#endif #endif
#if defined(EFI) && !defined(__i386__) #ifdef EFI
#ifndef __i386__
file_addmetadata(kfp, MODINFOMD_FW_HANDLE, sizeof(ST), &ST); file_addmetadata(kfp, MODINFOMD_FW_HANDLE, sizeof(ST), &ST);
#endif #endif
#if defined(__amd64__) || defined(__i386__)
file_addmetadata(kfp, MODINFOMD_EFI_ARCH, sizeof(MACHINE_ARCH),
MACHINE_ARCH);
#endif
#endif
#ifdef LOADER_GELI_SUPPORT #ifdef LOADER_GELI_SUPPORT
geli_export_key_metadata(kfp); geli_export_key_metadata(kfp);
#endif #endif

View File

@ -1689,6 +1689,27 @@ SYSCTL_PROC(_machdep, OID_AUTO, efi_map,
efi_map_sysctl_handler, "S,efi_map_header", efi_map_sysctl_handler, "S,efi_map_header",
"Raw EFI Memory Map"); "Raw EFI Memory Map");
static int
efi_arch_sysctl_handler(SYSCTL_HANDLER_ARGS)
{
char *arch;
caddr_t kmdp;
kmdp = preload_search_by_type("elf kernel");
if (kmdp == NULL)
kmdp = preload_search_by_type("elf64 kernel");
arch = (char *)preload_search_info(kmdp,
MODINFO_METADATA | MODINFOMD_EFI_ARCH);
if (arch == NULL)
return (0);
return (SYSCTL_OUT_STR(req, arch));
}
SYSCTL_PROC(_machdep, OID_AUTO, efi_arch,
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, 0,
efi_arch_sysctl_handler, "A", "EFI Firmware Architecture");
void void
spinlock_enter(void) spinlock_enter(void)
{ {

View File

@ -34,6 +34,7 @@
#define MODINFOMD_EFI_FB 0x1005 #define MODINFOMD_EFI_FB 0x1005
#define MODINFOMD_MODULEP 0x1006 #define MODINFOMD_MODULEP 0x1006
#define MODINFOMD_VBE_FB 0x1007 #define MODINFOMD_VBE_FB 0x1007
#define MODINFOMD_EFI_ARCH 0x1008
struct efi_map_header { struct efi_map_header {
uint64_t memory_size; uint64_t memory_size;