| 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 | } |