:: commit b5abaf9ac1cbbe6ebe1439b31e747cec0f0fc73f

Mintsuki <mintsuki@protonmail.com> — 2026-04-09 09:46

parents: 4929ccdf52

protos/limine: Implement TSC frequency feature

diff --git a/bootstrap b/bootstrap
index 887fe665..d8d526ce 100755
--- a/bootstrap
+++ b/bootstrap
@@ -85,7 +85,7 @@ if ! test -f version; then
     clone_repo_commit \
         https://github.com/Limine-Bootloader/limine-protocol.git \
         limine-protocol \
-        80ef54bed402b8c0b672a707c1df4c532f3428ad
+        72502bba1777afa4723894f04ae88fe9d41ecc3c
 
     clone_repo_commit \
         https://github.com/PicoEFI/PicoEFI.git \
diff --git a/common/protos/limine.c b/common/protos/limine.c
index 6a782cf4..92be6189 100644
--- a/common/protos/limine.c
+++ b/common/protos/limine.c
@@ -1594,6 +1594,25 @@ FEAT_END
     }
 #endif
 
+    // TSC Frequency
+FEAT_START
+    if (tsc_freq == 0) {
+        break;
+    }
+
+    struct limine_tsc_frequency_request *tsc_freq_request = get_request(LIMINE_TSC_FREQUENCY_REQUEST_ID);
+    if (tsc_freq_request == NULL) {
+        break;
+    }
+
+    struct limine_tsc_frequency_response *tsc_freq_response =
+        ext_mem_alloc(sizeof(struct limine_tsc_frequency_response));
+
+    tsc_freq_response->frequency = tsc_freq;
+
+    tsc_freq_request->response = reported_addr(tsc_freq_response);
+FEAT_END
+
     // Bootloader Performance
 FEAT_START
     if (usec_at_bootloader_entry == 0) {
diff --git a/test/limine.c b/test/limine.c
index a78f8952..b0b11e79 100644
--- a/test/limine.c
+++ b/test/limine.c
@@ -173,6 +173,12 @@ static volatile struct limine_riscv_bsp_hartid_request _bsp_request = {
 };
 #endif
 
+__attribute__((section(".limine_requests")))
+static volatile struct limine_tsc_frequency_request tsc_freq_request = {
+    .id = LIMINE_TSC_FREQUENCY_REQUEST_ID,
+    .revision = 0, .response = NULL,
+};
+
 __attribute__((section(".limine_requests")))
 static volatile struct limine_bootloader_performance_request _perf_request = {
     .id = LIMINE_BOOTLOADER_PERFORMANCE_REQUEST_ID,
@@ -671,6 +677,17 @@ FEAT_START
 FEAT_END
 #endif
 
+FEAT_START
+    e9_printf("");
+    struct limine_tsc_frequency_response *tsc_freq_response = tsc_freq_request.response;
+    if (tsc_freq_response == NULL) {
+        e9_printf("TSC frequency not passed");
+        break;
+    }
+    e9_printf("TSC frequency feature, revision %d", tsc_freq_response->revision);
+    e9_printf("Frequency: %d Hz", tsc_freq_response->frequency);
+FEAT_END
+
 FEAT_START
     e9_printf("");
     struct limine_bootloader_performance_response *perf_response = _perf_request.response;
tab: 248 wrap: offon