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(
