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:
parent
f8ca5d45c3
commit
b538d49110
@ -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
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user