]> git.proxmox.com Git - mirror_edk2.git/blame - ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c
ArmVirtPkg: QemuFwCfgToPcdDxe: set SMBIOS entry point version dynamically
[mirror_edk2.git] / ArmVirtPkg / QemuFwCfgToPcdDxe / QemuFwCfgToPcd.c
CommitLineData
d2733aa9
LE
1/** @file\r
2* An "early" DXE driver that parses well-known fw-cfg files into dynamic PCDs\r
3* that control other (universal) DXE drivers.\r
4*\r
5* Copyright (C) 2015, Red Hat, Inc.\r
6* Copyright (c) 2014, Linaro Ltd. All rights reserved.<BR>\r
7*\r
8* This program and the accompanying materials are licensed and made available\r
9* under the terms and conditions of the BSD License which accompanies this\r
10* distribution. The full text of the license may be found at\r
11* http://opensource.org/licenses/bsd-license.php\r
12*\r
13* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
14* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR\r
15* IMPLIED.\r
16*\r
17**/\r
18\r
19#include <Uefi/UefiBaseType.h>\r
20#include <Uefi/UefiSpec.h>\r
21\r
c98da334
LE
22#include <IndustryStandard/SmBios.h>\r
23\r
24#include <Library/BaseMemoryLib.h>\r
25#include <Library/DebugLib.h>\r
d2733aa9
LE
26#include <Library/PcdLib.h>\r
27#include <Library/QemuFwCfgLib.h>\r
28\r
c98da334
LE
29\r
30/**\r
31 Set the SMBIOS entry point version for the generic SmbiosDxe driver.\r
32**/\r
33STATIC\r
34VOID\r
35SmbiosVersionInitialization (\r
36 VOID\r
37 )\r
38{\r
39 FIRMWARE_CONFIG_ITEM Anchor;\r
40 UINTN AnchorSize;\r
41 SMBIOS_TABLE_ENTRY_POINT QemuAnchor;\r
42 UINT16 SmbiosVersion;\r
43\r
44 if (RETURN_ERROR (QemuFwCfgFindFile ("etc/smbios/smbios-anchor", &Anchor,\r
45 &AnchorSize)) ||\r
46 AnchorSize != sizeof QemuAnchor) {\r
47 return;\r
48 }\r
49\r
50 QemuFwCfgSelectItem (Anchor);\r
51 QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);\r
52 if (CompareMem (QemuAnchor.AnchorString, "_SM_", 4) != 0 ||\r
53 CompareMem (QemuAnchor.IntermediateAnchorString, "_DMI_", 5) != 0) {\r
54 return;\r
55 }\r
56\r
57 SmbiosVersion = (UINT16)(QemuAnchor.MajorVersion << 8 |\r
58 QemuAnchor.MinorVersion);\r
59 DEBUG ((EFI_D_INFO, "%a: SMBIOS version from QEMU: 0x%04x\n", __FUNCTION__,\r
60 SmbiosVersion));\r
61 PcdSet16 (PcdSmbiosVersion, SmbiosVersion);\r
62}\r
63\r
d2733aa9
LE
64EFI_STATUS\r
65EFIAPI\r
66ParseQemuFwCfgToPcd (\r
67 IN EFI_HANDLE ImageHandle,\r
68 IN EFI_SYSTEM_TABLE *SystemTable\r
69 )\r
70{\r
c98da334 71 SmbiosVersionInitialization ();\r
d2733aa9
LE
72 return EFI_SUCCESS;\r
73}\r