Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package limine for openSUSE:Factory checked in at 2025-10-27 14:41:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/limine (Old) and /work/SRC/openSUSE:Factory/.limine.new.1980 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "limine" Mon Oct 27 14:41:22 2025 rev:22 rq:1313751 version:10.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/limine/limine.changes 2025-10-14 18:09:02.832634004 +0200 +++ /work/SRC/openSUSE:Factory/.limine.new.1980/limine.changes 2025-10-27 14:43:22.623852576 +0100 @@ -1,0 +2,9 @@ +Sun Oct 26 21:23:37 UTC 2025 - Marvin Friedrich <[email protected]> + +- Update to 10.2.0: + * Implement base revision 4 of the Limine boot protocol as per + documentation (read documentation for specific details). + * "Fix" multiboot1 framebuffer structure to match GRUB instead of the + multiboot1 specification. + +------------------------------------------------------------------- Old: ---- limine-10.1.1.tar.gz New: ---- limine-10.2.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ limine.spec ++++++ --- /var/tmp/diff_new_pack.EowhYF/_old 2025-10-27 14:43:23.211877411 +0100 +++ /var/tmp/diff_new_pack.EowhYF/_new 2025-10-27 14:43:23.211877411 +0100 @@ -15,7 +15,7 @@ # Name: limine -Version: 10.1.1 +Version: 10.2.0 Release: 0 Summary: Modern, advanced, portable, multiprotocol bootloader and boot manager License: BSD-2-Clause ++++++ limine-10.1.1.tar.gz -> limine-10.2.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/ChangeLog new/limine-10.2.0/ChangeLog --- old/limine-10.1.1/ChangeLog 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/ChangeLog 2025-10-26 22:03:57.000000000 +0100 @@ -1,3 +1,16 @@ +2025-10-26 Mintsuki <[email protected]> + + *** Release 10.2.0 *** + + Noteworthy changes compared to the previous release, 10.1.1: + + New features: + - Implement base revision 4 of the Limine boot protocol as per + documentation (read documentation for specific details). + Bug fixes: + - "Fix" multiboot1 framebuffer structure to match GRUB instead of the + multiboot1 specification. + 2025-10-13 Mintsuki <[email protected]> *** Release 10.1.1 *** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/bootstrap new/limine-10.2.0/bootstrap --- old/limine-10.1.1/bootstrap 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/bootstrap 2025-10-26 22:03:57.000000000 +0100 @@ -85,7 +85,7 @@ clone_repo_commit \ https://codeberg.org/Limine/limine-protocol.git \ limine-protocol \ - fedf97facd1c473ee8720f8dfd5a71d03490d928 + b7d1c7c700a4f56b6709e40ec07c86f221173ee2 clone_repo_commit \ https://codeberg.org/PicoEFI/PicoEFI.git \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/common/common.mk new/limine-10.2.0/common/common.mk --- old/limine-10.1.1/common/common.mk 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/common/common.mk 2025-10-26 22:03:57.000000000 +0100 @@ -46,7 +46,7 @@ $(CPPFLAGS_FOR_TARGET) \ -DCOM_OUTPUT=$(COM_OUTPUT) \ -DE9_OUTPUT=$(E9_OUTPUT) \ - -DLIMINE_API_REVISION=3 \ + -DLIMINE_API_REVISION=4 \ -DFLANTERM_IN_FLANTERM \ -MMD \ -MP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/common/lib/acpi.c new/limine-10.2.0/common/lib/acpi.c --- old/limine-10.1.1/common/lib/acpi.c 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/common/lib/acpi.c 2025-10-26 22:03:57.000000000 +0100 @@ -5,6 +5,7 @@ #include <lib/misc.h> #include <lib/libc.h> #include <lib/print.h> +#include <mm/pmm.h> // Following function based on https://github.com/managarm/lai/blob/master/helpers/pc-bios.c's function lai_bios_calc_checksum() uint8_t acpi_checksum(void *ptr, size_t size) { @@ -238,3 +239,95 @@ printv("acpi: \"%s\" not found\n", signature); return NULL; } + +static void map_single_table(uint64_t addr, uint32_t len) { +#if defined (__i386__) + if (addr >= 0x100000000) { + print("acpi: warning: Cannot get length of ACPI table above 4GiB\n"); + return; + } +#endif + + uint32_t length = len != (uint32_t)-1 ? len : *(uint32_t *)(uintptr_t)(addr + 4); + + uint64_t memmap_type = pmm_check_type(addr); + + if (memmap_type != MEMMAP_ACPI_RECLAIMABLE && memmap_type != MEMMAP_ACPI_NVS) { + memmap_alloc_range(addr, length, MEMMAP_ACPI_TABLES, 0, true, false, true); + } +} + + +void acpi_map_tables(void) { + struct rsdp *rsdp = acpi_get_rsdp(); + if (rsdp == NULL) + return; + + uint64_t rsdp_length; + if (rsdp->rev < 2) { + rsdp_length = 20; + } else { + rsdp_length = rsdp->length; + } + + map_single_table((uintptr_t)rsdp, rsdp_length); + + if (!(rsdp->rev >= 2 && rsdp->xsdt_addr)) { + goto no_xsdt; + } + + struct rsdt *xsdt = (void *)(uintptr_t)rsdp->xsdt_addr; + size_t xsdt_entry_count = (xsdt->header.length - sizeof(struct sdt)) / 8; + + map_single_table((uintptr_t)xsdt, (uint32_t)-1); + + for (size_t i = 0; i < xsdt_entry_count; i++) { + struct sdt *sdt = (void *)(uintptr_t)((uint64_t *)xsdt->ptrs_start)[i]; + + map_single_table((uintptr_t)sdt, (uint32_t)-1); + } + +no_xsdt:; + struct rsdt *rsdt = (void *)(uintptr_t)rsdp->rsdt_addr; + size_t rsdt_entry_count = (rsdt->header.length - sizeof(struct sdt)) / 4; + + map_single_table((uintptr_t)rsdt, (uint32_t)-1); + + for (size_t i = 0; i < rsdt_entry_count; i++) { + struct sdt *sdt = (void *)(uintptr_t)((uint32_t *)rsdt->ptrs_start)[i]; + + map_single_table((uintptr_t)sdt, (uint32_t)-1); + } + + uint8_t *fadt = acpi_get_table("FACP", 0); + if (fadt == NULL) { + return; + } + uint32_t fadt_length = *(uint32_t *)(fadt + 4); + + // Read the single fields from the FADT without defining a struct for the whole table + if (fadt_length >= 132 + 8) { + uint64_t x_facs = *(uint64_t *)(fadt + 132); + if (x_facs != 0) { + map_single_table(x_facs, (uint32_t)-1); + } + } + if (fadt_length >= 140 + 8) { + uint64_t x_dsdt = *(uint64_t *)(fadt + 140); + if (x_dsdt != 0) { + map_single_table(x_dsdt, (uint32_t)-1); + } + } + if (fadt_length >= 36 + 4) { + uint32_t facs = *(uint32_t *)(fadt + 36); + if (facs != 0) { + map_single_table(facs, (uint32_t)-1); + } + } + if (fadt_length >= 40 + 4) { + uint32_t dsdt = *(uint32_t *)(fadt + 40); + if (dsdt != 0) { + map_single_table(dsdt, (uint32_t)-1); + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/common/lib/acpi.h new/limine-10.2.0/common/lib/acpi.h --- old/limine-10.1.1/common/lib/acpi.h 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/common/lib/acpi.h 2025-10-26 22:03:57.000000000 +0100 @@ -182,4 +182,6 @@ void *acpi_get_table(const char *signature, int index); void acpi_get_smbios(void **smbios32, void **smbios64); +void acpi_map_tables(void); + #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/common/mm/pmm.h new/limine-10.2.0/common/mm/pmm.h --- old/limine-10.1.1/common/mm/pmm.h 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/common/mm/pmm.h 2025-10-26 22:03:57.000000000 +0100 @@ -20,6 +20,7 @@ #define MEMMAP_BOOTLOADER_RECLAIMABLE 0x1000 #define MEMMAP_KERNEL_AND_MODULES 0x1001 #define MEMMAP_FRAMEBUFFER 0x1002 +#define MEMMAP_ACPI_TABLES 0x1003 #define MEMMAP_EFI_RECLAIMABLE 0x2000 struct meminfo { @@ -48,6 +49,7 @@ struct memmap_entry *get_memmap(size_t *entries); struct memmap_entry *get_raw_memmap(size_t *entry_count); void print_memmap(struct memmap_entry *mm, size_t size); +uint64_t pmm_check_type(uint64_t addr); bool memmap_alloc_range_in(struct memmap_entry *m, size_t *_count, uint64_t base, uint64_t length, uint32_t type, uint32_t overlay_type, bool do_panic, bool simulation, bool new_entry); bool memmap_alloc_range(uint64_t base, uint64_t length, uint32_t type, uint32_t overlay_type, bool panic, bool simulation, bool new_entry); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/common/mm/pmm.s2.c new/limine-10.2.0/common/mm/pmm.s2.c --- old/limine-10.1.1/common/mm/pmm.s2.c 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/common/mm/pmm.s2.c 2025-10-26 22:03:57.000000000 +0100 @@ -69,6 +69,8 @@ return "Usable RAM"; case MEMMAP_RESERVED: return "Reserved"; + case MEMMAP_ACPI_TABLES: + return "ACPI tables"; case MEMMAP_ACPI_RECLAIMABLE: return "ACPI reclaimable"; case MEMMAP_ACPI_NVS: @@ -208,9 +210,10 @@ m[p] = min_e; } - // Merge contiguous bootloader-reclaimable and usable entries + // Merge contiguous bootloader-reclaimable, ACPI tables, usable entries for (size_t i = 0; i < count - 1; i++) { if (m[i].type != MEMMAP_BOOTLOADER_RECLAIMABLE + && m[i].type != MEMMAP_ACPI_TABLES && m[i].type != MEMMAP_USABLE) continue; @@ -751,6 +754,19 @@ return true; } +uint64_t pmm_check_type(uint64_t addr) { + for (size_t i = 0; i < memmap_entries; i++) { + uint64_t entry_base = memmap[i].base; + uint64_t entry_top = memmap[i].base + memmap[i].length; + + if (addr >= entry_base && addr < entry_top) { + return memmap[i].type; + } + } + + return (uint64_t)-1; +} + bool memmap_alloc_range_in(struct memmap_entry *m, size_t *_count, uint64_t base, uint64_t length, uint32_t type, uint32_t overlay_type, bool do_panic, bool simulation, bool new_entry) { size_t count = *_count; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/common/protos/limine.c new/limine-10.2.0/common/protos/limine.c --- old/limine-10.1.1/common/protos/limine.c 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/common/protos/limine.c 2025-10-26 22:03:57.000000000 +0100 @@ -50,7 +50,7 @@ } } -#define SUPPORTED_BASE_REVISION 3 +#define SUPPORTED_BASE_REVISION 4 #define MAX_REQUESTS 128 @@ -61,13 +61,13 @@ static uint64_t get_hhdm_span_top(int base_revision) { uint64_t ret = base_revision >= 3 ? 0 : 0x100000000; for (size_t i = 0; i < memmap_entries; i++) { - if (base_revision >= 1 && base_revision < 3 && ( + if (((base_revision >= 1 && base_revision < 3) || base_revision >= 4) && ( memmap[i].type == MEMMAP_RESERVED || memmap[i].type == MEMMAP_BAD_MEMORY)) { continue; } - if (base_revision >= 3 && ( + if (base_revision == 3 && ( memmap[i].type != MEMMAP_USABLE && memmap[i].type != MEMMAP_BOOTLOADER_RECLAIMABLE && memmap[i].type != MEMMAP_KERNEL_AND_MODULES @@ -202,13 +202,13 @@ // Map all free memory regions to the higher half direct map offset for (size_t i = 0; i < _memmap_entries; i++) { - if (base_revision >= 1 && base_revision < 3 && ( + if (((base_revision >= 1 && base_revision < 3) || base_revision >= 4) && ( _memmap[i].type == MEMMAP_RESERVED || _memmap[i].type == MEMMAP_BAD_MEMORY)) { continue; } - if (base_revision >= 3 && ( + if (base_revision == 3 && ( _memmap[i].type != MEMMAP_USABLE && _memmap[i].type != MEMMAP_BOOTLOADER_RECLAIMABLE && _memmap[i].type != MEMMAP_KERNEL_AND_MODULES @@ -995,7 +995,7 @@ struct limine_rsdp_response *rsdp_response = ext_mem_alloc(sizeof(struct limine_rsdp_response)); - rsdp_response->address = base_revision <= 2 ? reported_addr(rsdp) : (uintptr_t)rsdp; + rsdp_response->address = (base_revision <= 2 || base_revision >= 4) ? reported_addr(rsdp) : (uintptr_t)rsdp; rsdp_request->response = reported_addr(rsdp_response); FEAT_END @@ -1446,6 +1446,11 @@ pmm_sanitise_entries(memmap, &memmap_entries, true); } + if (base_revision >= 4) { + acpi_map_tables(); + pmm_sanitise_entries(memmap, &memmap_entries, true); + } + pagemap_t pagemap = {0}; pagemap = build_pagemap(base_revision, nx_available, ranges, ranges_count, physical_base, virtual_base, direct_map_offset); @@ -1577,6 +1582,9 @@ case MEMMAP_USABLE: _memmap[i].type = LIMINE_MEMMAP_USABLE; break; + case MEMMAP_ACPI_TABLES: + _memmap[i].type = LIMINE_MEMMAP_ACPI_TABLES; + break; case MEMMAP_ACPI_RECLAIMABLE: _memmap[i].type = LIMINE_MEMMAP_ACPI_RECLAIMABLE; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/common/protos/limine_asm.asm_ia32 new/limine-10.2.0/common/protos/limine_asm.asm_ia32 --- old/limine-10.1.1/common/protos/limine_asm.asm_ia32 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/common/protos/limine_asm.asm_ia32 2025-10-26 22:03:57.000000000 +0100 @@ -186,7 +186,7 @@ %ifdef UEFI lgdt [ebx + old_gdt_ptr wrt ..gotoff] %else - lgdt [old_gdt_ptr] + lgdt [abs old_gdt_ptr] %endif ; Restore old segments @@ -197,18 +197,18 @@ mov gs, [ebx + old_gs wrt ..gotoff] mov ss, [ebx + old_ss wrt ..gotoff] %else - mov ds, [old_ds] - mov es, [old_es] - mov fs, [old_fs] - mov gs, [old_gs] - mov ss, [old_ss] + mov ds, [abs old_ds] + mov es, [abs old_es] + mov fs, [abs old_fs] + mov gs, [abs old_gs] + mov ss, [abs old_ss] %endif ; Go 32 %ifdef UEFI push qword [ebx + old_cs wrt ..gotoff] %else - push qword [old_cs] + push qword [abs old_cs] %endif call .p2 .p2: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/common/protos/multiboot1.h new/limine-10.2.0/common/protos/multiboot1.h --- old/limine-10.1.1/common/protos/multiboot1.h 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/common/protos/multiboot1.h 2025-10-26 22:03:57.000000000 +0100 @@ -71,6 +71,7 @@ uint32_t fb_height; uint8_t fb_bpp; uint8_t fb_type; + uint16_t fb_reserved; uint8_t fb_red_mask_shift; uint8_t fb_red_mask_size; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/configure new/limine-10.2.0/configure --- old/limine-10.1.1/configure 2025-10-13 12:52:43.000000000 +0200 +++ new/limine-10.2.0/configure 2025-10-26 22:04:02.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for Limine 10.1.1. +# Generated by GNU Autoconf 2.72 for Limine 10.2.0. # # Report bugs to <https://codeberg.org/Limine/Limine/issues>. # @@ -604,8 +604,8 @@ # Identity of this package. PACKAGE_NAME='Limine' PACKAGE_TARNAME='limine' -PACKAGE_VERSION='10.1.1' -PACKAGE_STRING='Limine 10.1.1' +PACKAGE_VERSION='10.2.0' +PACKAGE_STRING='Limine 10.2.0' PACKAGE_BUGREPORT='https://codeberg.org/Limine/Limine/issues' PACKAGE_URL='https://limine-bootloader.org/' @@ -1324,7 +1324,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures Limine 10.1.1 to adapt to many kinds of systems. +'configure' configures Limine 10.2.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1390,7 +1390,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Limine 10.1.1:";; + short | recursive ) echo "Configuration of Limine 10.2.0:";; esac cat <<\_ACEOF @@ -1509,7 +1509,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Limine configure 10.1.1 +Limine configure 10.2.0 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -1621,7 +1621,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Limine $as_me 10.1.1, which was +It was created by Limine $as_me 10.2.0, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -6334,7 +6334,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Limine $as_me 10.1.1, which was +This file was extended by Limine $as_me 10.2.0, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6390,7 +6390,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -Limine config.status 10.1.1 +Limine config.status 10.2.0 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/limine-protocol/PROTOCOL.md new/limine-10.2.0/limine-protocol/PROTOCOL.md --- old/limine-10.1.1/limine-protocol/PROTOCOL.md 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/limine-protocol/PROTOCOL.md 2025-10-26 22:03:58.000000000 +0100 @@ -28,14 +28,14 @@ ## Base protocol revisions -The Limine boot protocol comes in several base revisions; so far, 4 -base revisions are specified: 0 through 3. +The Limine boot protocol comes in several base revisions; so far, 5 +base revisions are specified: 0 through 4. Base protocol revisions change certain behaviours of the Limine boot protocol outside any specific feature. The specifics are going to be described as needed throughout this specification. -Base revision 0 through 2 are considered deprecated. Base revision 0 is the default base revision +Base revision 0 through 3 are considered deprecated. Base revision 0 is the default base revision an executable is assumed to be requesting and complying to if no base revision tag is provided by the executable, for backwards compatibility. @@ -63,10 +63,10 @@ bootloader does not yet support the executable's requested base revision, it is up to the executable itself to fail (or handle the condition otherwise). -For any Limine-compliant bootloader supporting base revision 3, it is *mandatory* -to load executables requesting higher unsupported base revisions with at least -base revision 3, and it is mandatory for it to always set the 2nd component of -the base revision tag to the base revision actually used to load the executable, +For any Limine-compliant bootloader supporting base revision 3 or greater, it is +*mandatory* to load executables requesting higher unsupported base revisions with +at least base revision 3, and it is mandatory for it to always set the 2nd component +of the base revision tag to the base revision actually used to load the executable, regardless of whether it was the requested one or not. ## Features @@ -197,14 +197,25 @@ - Reserved - Bad memory -For base revision 3, the only memory map regions mapped to the HHDM are: +For base revision 3 or greater, the only memory map regions mapped to the HHDM are: - Usable - Bootloader reclaimable - Executable and modules - Framebuffer -For base revision 3, the unconditional direct map of the first 4GiB is dropped, and -only memory map regions of complying types are mapped in. +For base revision 3 or greater, the unconditional direct map of the first 4GiB is +dropped, and only memory map regions of complying types are mapped in. + +For base revision 4 or greater, the following regions are also mapped in addition +to those mapped by base revision 3: + - ACPI tables + - ACPI reclaimable + - ACPI NVS + +For base revision 4 or greater, ACPI tables (that being RSDP, RSDT, XSDT, all +tables pointed to by RSDT and XSDT, FACS, X_FACS, DSDT, X_DSDT - if present and +possible to map) are guaranteed to be mapped within any of the 3 ACPI memory map +regions. The bootloader page tables are in bootloader-reclaimable memory (see Memory Map feature below), and their specific layout is undefined as long as they provide @@ -252,6 +263,11 @@ The `MAIR_EL1` register will at least contain entries for the above-mentioned caching modes, in an unspecified order. +For base revision 4 and greater, `MAIR_EL1.Attr0` is guaranteed to be `0xff` (AKA Normal +Write-Back RW-Allocate non-transient caching mode), `MAIR_EL1.Attr1` is guaranteed to +be the entry used to map the framebuffer, of the correct caching type for it, and all +other entries in `MAIR_EL1` are guaranteed unused unless otherwise specified by a request. + In order to access MMIO regions, the executable must ensure the correct caching mode is used on its own. @@ -924,7 +940,7 @@ struct limine_riscv_bsp_hartid_request { uint64_t id[4]; uint64_t revision; - LIMINE_PTR(struct limine_riscv_bsp_hartid_response *) response; + struct limine_riscv_bsp_hartid_response *response; }; ``` @@ -979,6 +995,7 @@ #define LIMINE_MEMMAP_BOOTLOADER_RECLAIMABLE 5 #define LIMINE_MEMMAP_EXECUTABLE_AND_MODULES 6 #define LIMINE_MEMMAP_FRAMEBUFFER 7 +#define LIMINE_MEMMAP_ACPI_TABLES 8 struct limine_memmap_entry { uint64_t base; @@ -1023,6 +1040,11 @@ not to be used to acquire the address of any framebuffer. One must use the framebuffer feature for that. +* `LIMINE_MEMMAP_ACPI_TABLES` (base revision 4 or greater) entries represent regions +of the address space containing the ACPI tables as described by the Entry Memory Layout +paragraph, if the firmware did not already map them within either an ACPI reclaimable +or an ACPI NVS region. + For base revisions <= 2, memory between 0 and 0x1000 is never marked as usable memory. The entries are guaranteed to be sorted by base address, lowest to highest. @@ -1035,6 +1057,16 @@ not guaranteed any alignment, nor is it guaranteed that they do not overlap other entries. +#### UEFI Memory Map Entry Type to Limine Memory Map Type + +UEFI memory map entry types are converted to Limine memory map type as follows: +* EfiLoaderCode, EfiLoaderData -> `BOOTLOADER_RECLAIMABLE` +* EfiBootServicesCode, EfiBootServicesData -> `BOOTLOADER_RECLAIMABLE` +* EfiACPIReclaimMemory -> `ACPI_RECLAIMABLE` +* EfiACPIMemoryNVS -> `ACPI_NVS` +* EfiConventionalMemory -> `USABLE` +* [anything else] -> `RESERVED` + ### Entry Point Feature ID: @@ -1229,11 +1261,11 @@ ```c struct limine_rsdp_response { uint64_t revision; - uint64_t address; + void *address; }; ``` -* `address` - Address of the RSDP table. Physical for base revision >= 3. +* `address` - Address of the RSDP table. Physical for base revision 3 **only**. ### SMBIOS Feature diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/limine-protocol/include/limine.h new/limine-10.2.0/limine-protocol/include/limine.h --- old/limine-10.1.1/limine-protocol/include/limine.h 2025-10-13 12:52:39.000000000 +0200 +++ new/limine-10.2.0/limine-protocol/include/limine.h 2025-10-26 22:03:58.000000000 +0100 @@ -35,7 +35,7 @@ # define LIMINE_API_REVISION 0 #endif -#if LIMINE_API_REVISION > 3 +#if LIMINE_API_REVISION > 4 # error "limine.h API revision unsupported" #endif @@ -469,6 +469,7 @@ # define LIMINE_MEMMAP_KERNEL_AND_MODULES 6 #endif #define LIMINE_MEMMAP_FRAMEBUFFER 7 +#define LIMINE_MEMMAP_ACPI_TABLES 8 struct limine_memmap_entry { uint64_t base; @@ -579,7 +580,7 @@ struct limine_rsdp_response { uint64_t revision; -#if LIMINE_API_REVISION >= 1 +#if LIMINE_API_REVISION >= 1 && LIMINE_API_REVISION <= 3 uint64_t address; #else LIMINE_PTR(void *) address; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/timestamps new/limine-10.2.0/timestamps --- old/limine-10.1.1/timestamps 2025-10-13 12:52:40.000000000 +0200 +++ new/limine-10.2.0/timestamps 2025-10-26 22:03:59.000000000 +0100 @@ -1,3 +1,3 @@ REGEN_DATE="October 2025" -SOURCE_DATE_EPOCH="1760352401" -SOURCE_DATE_EPOCH_TOUCH="202510131246" +SOURCE_DATE_EPOCH="1761512290" +SOURCE_DATE_EPOCH_TOUCH="202510262158" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.1.1/version new/limine-10.2.0/version --- old/limine-10.1.1/version 2025-10-13 12:52:43.000000000 +0200 +++ new/limine-10.2.0/version 2025-10-26 22:04:02.000000000 +0100 @@ -1 +1 @@ -10.1.1 +10.2.0
