blob: b578762ae0cb0475723ff20f7b136c3260bc0301 [file] [log] [blame] [edit]
// SPDX-License-Identifier: BSD-3-Clause
//
// Copyright 2025 Google LLC
#include <common.h>
#include <efi_loader.h>
#include <malloc.h>
#define EFI_TIMESTAMP_PROTOCOL_GUID \
EFI_GUID(0xafbfde41, 0x2e6e, 0x4262, 0xba, 0x65, 0x62, 0xb9, 0x23, \
0x6e, 0x54, 0x95)
static const efi_guid_t efi_timestamp_guid = EFI_TIMESTAMP_PROTOCOL_GUID;
typedef struct {
uint64_t frequency;
uint64_t end_value;
} efi_timestamp_properties_t;
struct efi_timestamp {
uint64_t (*get_timestamp)(void);
efi_status_t (*get_properties)(efi_timestamp_properties_t *);
};
static uint64_t get_timestamp(void)
{
return get_timer(0);
}
static efi_status_t get_properties(efi_timestamp_properties_t *out)
{
if (!out) {
return EFI_INVALID_PARAMETER;
}
out->frequency = CONFIG_SYS_HZ;
out->end_value = (unsigned long)-1;
return EFI_SUCCESS;
}
static struct efi_timestamp protocol = {
.get_timestamp = get_timestamp,
.get_properties = get_properties,
};
static efi_handle_t handle = NULL;
efi_status_t efi_timestamp_register(void)
{
if (handle) {
return EFI_ALREADY_STARTED;
}
return efi_install_multiple_protocol_interfaces(
&handle, &efi_timestamp_guid, &protocol, NULL);
}