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) {
