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