blob: 62e96979021d51c5b8e9488a107411a40f3ab662 [file] [log] [blame]
Alexander Grafe663b352016-08-19 01:23:29 +02001/*
2 * EFI application tables support
3 *
4 * Copyright (c) 2016 Alexander Graf
5 *
6 * SPDX-License-Identifier: GPL-2.0+
7 */
8
9#include <common.h>
10#include <efi_loader.h>
11#include <inttypes.h>
12#include <smbios.h>
13
14static const efi_guid_t smbios_guid = SMBIOS_TABLE_GUID;
15
Heinrich Schuchardt76571522018-03-03 15:28:54 +010016/*
17 * Install the SMBIOS table as a configuration table.
18 *
19 * @return status code
20 */
21efi_status_t efi_smbios_register(void)
Alexander Grafe663b352016-08-19 01:23:29 +020022{
23 /* Map within the low 32 bits, to allow for 32bit SMBIOS tables */
Heinrich Schuchardt76571522018-03-03 15:28:54 +010024 u64 dmi = U32_MAX;
25 efi_status_t ret;
Alexander Grafe663b352016-08-19 01:23:29 +020026
Heinrich Schuchardt76571522018-03-03 15:28:54 +010027 /* Reserve 4kiB page for SMBIOS */
28 ret = efi_allocate_pages(EFI_ALLOCATE_MAX_ADDRESS,
29 EFI_RUNTIME_SERVICES_DATA, 1, &dmi);
30 if (ret != EFI_SUCCESS)
31 return ret;
Alexander Grafe663b352016-08-19 01:23:29 +020032
33 /* Generate SMBIOS tables */
34 write_smbios_table(dmi);
35
36 /* And expose them to our EFI payload */
Heinrich Schuchardt76571522018-03-03 15:28:54 +010037 return efi_install_configuration_table(&smbios_guid,
38 (void *)(uintptr_t)dmi);
Alexander Grafe663b352016-08-19 01:23:29 +020039}