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

Reply via email to