1*8d127aa8SGerd Hoffmann /* 2*8d127aa8SGerd Hoffmann * SPDX-License-Identifier: GPL-2.0-or-later 3*8d127aa8SGerd Hoffmann * 4*8d127aa8SGerd Hoffmann * pass hardware information to uefi 5*8d127aa8SGerd Hoffmann * 6*8d127aa8SGerd Hoffmann * see OvmfPkg/Library/HardwareInfoLib/ in edk2 7*8d127aa8SGerd Hoffmann */ 8*8d127aa8SGerd Hoffmann 9*8d127aa8SGerd Hoffmann #include "qemu/osdep.h" 10*8d127aa8SGerd Hoffmann 11*8d127aa8SGerd Hoffmann #include "hw/nvram/fw_cfg.h" 12*8d127aa8SGerd Hoffmann #include "hw/uefi/hardware-info.h" 13*8d127aa8SGerd Hoffmann 14*8d127aa8SGerd Hoffmann static void *blob; 15*8d127aa8SGerd Hoffmann static uint64_t blobsize; 16*8d127aa8SGerd Hoffmann 17*8d127aa8SGerd Hoffmann void hardware_info_register(HARDWARE_INFO_TYPE type, void *info, uint64_t infosize) 18*8d127aa8SGerd Hoffmann { 19*8d127aa8SGerd Hoffmann HARDWARE_INFO_HEADER hdr = { 20*8d127aa8SGerd Hoffmann .type.value = cpu_to_le64(type), 21*8d127aa8SGerd Hoffmann .size = cpu_to_le64(infosize), 22*8d127aa8SGerd Hoffmann }; 23*8d127aa8SGerd Hoffmann 24*8d127aa8SGerd Hoffmann blob = g_realloc(blob, blobsize + sizeof(hdr) + infosize); 25*8d127aa8SGerd Hoffmann memcpy(blob + blobsize, &hdr, sizeof(hdr)); 26*8d127aa8SGerd Hoffmann blobsize += sizeof(hdr); 27*8d127aa8SGerd Hoffmann memcpy(blob + blobsize, info, infosize); 28*8d127aa8SGerd Hoffmann blobsize += infosize; 29*8d127aa8SGerd Hoffmann 30*8d127aa8SGerd Hoffmann fw_cfg_modify_file(fw_cfg_find(), "etc/hardware-info", blob, blobsize); 31*8d127aa8SGerd Hoffmann } 32