1*e663b350SAlexander Graf /* 2*e663b350SAlexander Graf * EFI application tables support 3*e663b350SAlexander Graf * 4*e663b350SAlexander Graf * Copyright (c) 2016 Alexander Graf 5*e663b350SAlexander Graf * 6*e663b350SAlexander Graf * SPDX-License-Identifier: GPL-2.0+ 7*e663b350SAlexander Graf */ 8*e663b350SAlexander Graf 9*e663b350SAlexander Graf #include <common.h> 10*e663b350SAlexander Graf #include <efi_loader.h> 11*e663b350SAlexander Graf #include <inttypes.h> 12*e663b350SAlexander Graf #include <smbios.h> 13*e663b350SAlexander Graf 14*e663b350SAlexander Graf static const efi_guid_t smbios_guid = SMBIOS_TABLE_GUID; 15*e663b350SAlexander Graf efi_smbios_register(void)16*e663b350SAlexander Grafvoid efi_smbios_register(void) 17*e663b350SAlexander Graf { 18*e663b350SAlexander Graf /* Map within the low 32 bits, to allow for 32bit SMBIOS tables */ 19*e663b350SAlexander Graf uint64_t dmi = 0xffffffff; 20*e663b350SAlexander Graf /* Reserve 4kb for SMBIOS */ 21*e663b350SAlexander Graf uint64_t pages = 1; 22*e663b350SAlexander Graf int memtype = EFI_RUNTIME_SERVICES_DATA; 23*e663b350SAlexander Graf 24*e663b350SAlexander Graf if (efi_allocate_pages(1, memtype, pages, &dmi) != EFI_SUCCESS) 25*e663b350SAlexander Graf return; 26*e663b350SAlexander Graf 27*e663b350SAlexander Graf /* Generate SMBIOS tables */ 28*e663b350SAlexander Graf write_smbios_table(dmi); 29*e663b350SAlexander Graf 30*e663b350SAlexander Graf /* And expose them to our EFI payload */ 31*e663b350SAlexander Graf efi_install_configuration_table(&smbios_guid, (void*)(uintptr_t)dmi); 32*e663b350SAlexander Graf } 33