:: commit 232c500efe52b0616a76ea61e6558804c4ee6fd5

Mintsuki <mintsuki@protonmail.com> — 2026-04-29 23:11

parents: 6c5e1866f6

protos/limine: Expose TPM event log via the new TPM Event Log feature

diff --git a/common/protos/limine.c b/common/protos/limine.c
index 1f628eca..4e51f53e 100644
--- a/common/protos/limine.c
+++ b/common/protos/limine.c
@@ -1146,6 +1146,31 @@ FEAT_START
 
     est_request->response = reported_addr(est_response);
 FEAT_END
+
+    // TPM event log feature
+FEAT_START
+    struct limine_tpm_event_log_request *tpm_event_log_request = get_request(LIMINE_TPM_EVENT_LOG_REQUEST_ID);
+    if (tpm_event_log_request == NULL) {
+        break; // next feature
+    }
+
+    uint32_t tpm_event_log_format;
+    void *tpm_event_log_addr;
+    size_t tpm_event_log_size;
+    if (!tpm_get_event_log(&tpm_event_log_format, &tpm_event_log_addr, &tpm_event_log_size)) {
+        break; // no TPM or capture failed
+    }
+
+    struct limine_tpm_event_log_response *tpm_event_log_response =
+        ext_mem_alloc(sizeof(struct limine_tpm_event_log_response));
+
+    tpm_event_log_response->format = tpm_event_log_format;
+    tpm_event_log_response->size = tpm_event_log_size;
+    tpm_event_log_response->address = tpm_event_log_size > 0
+        ? reported_addr(tpm_event_log_addr) : 0;
+
+    tpm_event_log_request->response = reported_addr(tpm_event_log_response);
+FEAT_END
 #endif
 
     // Device tree blob feature
diff --git a/test/limine.c b/test/limine.c
index 52ed23ab..f9c2e2df 100644
--- a/test/limine.c
+++ b/test/limine.c
@@ -133,6 +133,12 @@ static volatile struct limine_efi_system_table_request est_request = {
     .revision = 0, .response = NULL
 };
 
+__attribute__((section(".limine_requests")))
+static volatile struct limine_tpm_event_log_request tpm_event_log_request = {
+    .id = LIMINE_TPM_EVENT_LOG_REQUEST_ID,
+    .revision = 0, .response = NULL
+};
+
 __attribute__((section(".limine_requests")))
 static volatile struct limine_efi_memmap_request efi_memmap_request = {
     .id = LIMINE_EFI_MEMMAP_REQUEST_ID,
@@ -617,6 +623,20 @@ FEAT_START
     e9_printf("EFI system table at: %x", est_response->address);
 FEAT_END
 
+FEAT_START
+    e9_printf("");
+    if (tpm_event_log_request.response == NULL) {
+        e9_printf("TPM event log not passed");
+        break;
+    }
+    struct limine_tpm_event_log_response *tpm_event_log_response = tpm_event_log_request.response;
+    e9_printf("TPM event log feature, revision %d", tpm_event_log_response->revision);
+    e9_printf("Format: %d (TCG_%s)", tpm_event_log_response->format,
+              tpm_event_log_response->format == LIMINE_TPM_EVENT_LOG_FORMAT_TCG_2 ? "2" : "1.2");
+    e9_printf("Size: %x bytes", tpm_event_log_response->size);
+    e9_printf("Address: %x", tpm_event_log_response->address);
+FEAT_END
+
 FEAT_START
     e9_printf("");
     if (efi_memmap_request.response == NULL) {
tab: 248 wrap: offon