:: commit 8c2ef814143abccdbc3b09b145b20723013bd160

mintsuki <mintsuki@protonmail.com> — 2023-11-01 23:18

parents: 553c7b2945

limine: Add way for kernel to determine whether base revision is supported

diff --git a/common/protos/limine.c b/common/protos/limine.c
index 8d10ad90..3f352294 100644
--- a/common/protos/limine.c
+++ b/common/protos/limine.c
@@ -353,6 +353,13 @@ noreturn void limine_load(char *config, char *cmdline) {
                 panic(true, "limine: Duplicated base revision tag");
             }
             base_revision = p[2];
+            // We only support up to revision 1
+            if (p[2] <= 1) {
+                // Set to 0 to mean "supported"
+                p[2] = 0;
+            } else {
+                base_revision = 1;
+            }
         }
     }
 
diff --git a/limine.h b/limine.h
index 721a8195..db2a8c50 100644
--- a/limine.h
+++ b/limine.h
@@ -47,6 +47,8 @@ extern "C" {
 #define LIMINE_BASE_REVISION(N) \
     uint64_t limine_base_revision[3] = { 0xf9562b2d5c95a6c8, 0x6a7b384944536bdc, (N) };
 
+#define limine_base_revision_supported (limine_base_revision[2] == 0)
+
 #define LIMINE_COMMON_MAGIC 0xc7b1dd30df4c8b88, 0x0a82e883a194f07b
 
 struct limine_uuid {
diff --git a/test/limine.c b/test/limine.c
index cfd463cb..d19f4c2f 100644
--- a/test/limine.c
+++ b/test/limine.c
@@ -1,5 +1,6 @@
 #include <stdint.h>
 #include <stddef.h>
+#include <stdbool.h>
 #include <limine.h>
 #include <e9print.h>
 #include <flanterm/flanterm.h>
@@ -241,6 +242,11 @@ struct flanterm_context *ft_ctx = NULL;
 static void limine_main(void) {
     e9_printf("\nWe're alive");
 
+    if (limine_base_revision_supported == false) {
+        e9_printf("Limine base revision not supported");
+        for (;;);
+    }
+
     struct limine_framebuffer *fb = framebuffer_request.response->framebuffers[0];
 
     ft_ctx = flanterm_fb_simple_init(
tab: 248 wrap: offon