Applied, thanks!
Samuel
Mike Kelly, le ven. 09 oct. 2026 08:15:18 +0100, a ecrit:
> kern/host now maintains the EFI system table address and implements a
> new flavour for host_info() that allows user servers to access it.
> ---
> i386/i386/multiboot2_hdr_asm.h | 2 +-
> i386/i386at/acpi_parse_apic.c | 9 +++++++++
> include/mach/host_info.h | 15 +++++++++++++++
> kern/host.c | 14 ++++++++++++++
> kern/host.h | 5 +++++
> 5 files changed, 44 insertions(+), 1 deletion(-)
>
> diff --git a/i386/i386/multiboot2_hdr_asm.h b/i386/i386/multiboot2_hdr_asm.h
> index 9c2b5619..ccb2a448 100644
> --- a/i386/i386/multiboot2_hdr_asm.h
> +++ b/i386/i386/multiboot2_hdr_asm.h
> @@ -37,7 +37,7 @@ multiboot2_hdr:
> .long MULTIBOOT2_TAG_TYPE_ELF_SECTIONS
> .long MULTIBOOT2_TAG_TYPE_ACPI_OLD
> .long MULTIBOOT2_TAG_TYPE_ACPI_NEW
> - .long 0 /* alignment */
> + .long MULTIBOOT2_TAG_TYPE_EFI64
> /* Align modules on page boundaries */
> .short MULTIBOOT2_HEADER_TAG_MODULE_ALIGN
> .short 0
> diff --git a/i386/i386at/acpi_parse_apic.c b/i386/i386at/acpi_parse_apic.c
> index b33b5324..3d992d12 100644
> --- a/i386/i386at/acpi_parse_apic.c
> +++ b/i386/i386at/acpi_parse_apic.c
> @@ -26,6 +26,10 @@
> #include <mach/machine.h> /* machine_slot */
> #include <mach/machine/multiboot2.h>
>
> +#ifdef __x86_64__
> +#include <kern/host.h>
> +#endif
> +
> #include <kern/printf.h> /* printf */
> #include <kern/debug.h>
> #include <i386/vm_param.h> /* phystokv */
> @@ -719,6 +723,11 @@ acpi_mb2_initialise (const struct multiboot2_raw_info
> *bi)
> }
> break;
>
> +#ifdef __x86_64__
> + case MULTIBOOT2_TAG_TYPE_EFI64:
> + host_efi_systab = ((const struct multiboot2_tag_efi64 *)tag)->pointer;
> + break;
> +#endif
> default:
> break;
> }
> diff --git a/include/mach/host_info.h b/include/mach/host_info.h
> index b84376b8..e6ea515a 100644
> --- a/include/mach/host_info.h
> +++ b/include/mach/host_info.h
> @@ -53,6 +53,9 @@ typedef char kernel_version_t[KERNEL_VERSION_MAX];
> #define HOST_PROCESSOR_SLOTS 2 /* processor slot numbers */
> #define HOST_SCHED_INFO 3 /* scheduling info */
> #define HOST_LOAD_INFO 4 /* avenrun/mach_factor info */
> +#ifdef __x86_64__
> +#define HOST_EFI_SYSTAB 5 /* EFI System table. */
> +#endif /* __x86_64__ */
>
> struct host_basic_info {
> integer_t max_cpus; /* max number of cpus possible */
> @@ -87,4 +90,16 @@ typedef struct host_load_info *host_load_info_t;
> #define HOST_LOAD_INFO_COUNT \
> (sizeof(host_load_info_data_t)/sizeof(integer_t))
>
> +#ifdef __x86_64__
> +typedef uint64_t host_efi_systab_data_t;
> +typedef uint64_t *host_efi_systab_t;
> +#define HOST_EFI_SYSTAB_COUNT \
> + (sizeof(host_efi_systab_data_t)/sizeof(integer_t))
> +
> +/* This is the address returned for the EFI system table in the case
> + where UEFI is not available. */
> +#define HOST_NO_UEFI (~0ULL)
> +
> +#endif /* __x86_64__ */
> +
> #endif /* _MACH_HOST_INFO_H_ */
> diff --git a/kern/host.c b/kern/host.c
> index 035ef05f..166d6f40 100644
> --- a/kern/host.c
> +++ b/kern/host.c
> @@ -45,6 +45,9 @@
> #include <kern/mach_host.server.h>
> #include <mach/vm_param.h>
>
> +#ifdef __x86_64__
> +uint64_t host_efi_systab = HOST_NO_UEFI;
> +#endif /* __x86_64__ */
> host_data_t realhost;
>
> kern_return_t host_processors(
> @@ -195,6 +198,17 @@ kern_return_t host_info(
> return KERN_SUCCESS;
> }
>
> +#ifdef __x86_64__
> + case HOST_EFI_SYSTAB:
> + {
> + if (*count < HOST_EFI_SYSTAB_COUNT)
> + return KERN_FAILURE;
> +
> + *(host_efi_systab_t) info = host_efi_systab;
> + *count = HOST_EFI_SYSTAB_COUNT;
> + return KERN_SUCCESS;
> + }
> +#endif /* __x86_64__ */
> default:
> return KERN_INVALID_ARGUMENT;
> }
> diff --git a/kern/host.h b/kern/host.h
> index 5771da16..ff381f47 100644
> --- a/kern/host.h
> +++ b/kern/host.h
> @@ -45,4 +45,9 @@ typedef struct host host_data_t;
>
> extern host_data_t realhost;
>
> +#ifdef __x86_64__
> +/* The physical adddress of the UEFI System table. */
> +extern uint64_t host_efi_systab;
> +#endif /* __x86_64__ */
> +
> #endif /* _KERN_HOST_H_ */
> --
> 2.47.3
>
>
--
Samuel
> No manual is ever necessary.
May I politely interject here: BULLSHIT. That's the biggest Apple lie of all!
(Discussion in comp.os.linux.misc on the intuitiveness of interfaces.)