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;
