]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/SmbiosPlatformDxe/X86Xen.c
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / SmbiosPlatformDxe / X86Xen.c
CommitLineData
3e92a997
LE
1/** @file\r
2 Detect Xen hvmloader SMBIOS data for usage by OVMF.\r
3\r
4 Copyright (c) 2011, Bei Guan <gbtju85@gmail.com>\r
5 Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
6\r
b26f0cf9 7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
3e92a997
LE
8\r
9**/\r
10\r
7e25086a
LE
11#include <Library/BaseLib.h> // AsciiStrnCmp()\r
12#include <Library/HobLib.h> // GetFirstGuidHob()\r
13#include <Pi/PiHob.h> // EFI_HOB_GUID_TYPE\r
14\r
a8ab1442 15#include "XenSmbiosPlatformDxe.h"\r
3e92a997 16\r
ac0a286f
MK
17#define XEN_SMBIOS_PHYSICAL_ADDRESS 0x000EB000\r
18#define XEN_SMBIOS_PHYSICAL_END 0x000F0000\r
3e92a997
LE
19\r
20/**\r
21 Validates the SMBIOS entry point structure\r
22\r
23 @param EntryPointStructure SMBIOS entry point structure\r
24\r
25 @retval TRUE The entry point structure is valid\r
26 @retval FALSE The entry point structure is not valid\r
27\r
28**/\r
29STATIC\r
30BOOLEAN\r
31IsEntryPointStructureValid (\r
32 IN SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure\r
33 )\r
34{\r
ac0a286f
MK
35 UINTN Index;\r
36 UINT8 Length;\r
37 UINT8 Checksum;\r
38 UINT8 *BytePtr;\r
3e92a997 39\r
ac0a286f
MK
40 BytePtr = (UINT8 *)EntryPointStructure;\r
41 Length = EntryPointStructure->EntryPointLength;\r
3e92a997
LE
42 Checksum = 0;\r
43\r
44 for (Index = 0; Index < Length; Index++) {\r
ac0a286f 45 Checksum = Checksum + (UINT8)BytePtr[Index];\r
3e92a997
LE
46 }\r
47\r
48 if (Checksum != 0) {\r
49 return FALSE;\r
50 } else {\r
51 return TRUE;\r
52 }\r
53}\r
54\r
55/**\r
56 Locates the Xen SMBIOS data if it exists\r
57\r
58 @return SMBIOS_TABLE_ENTRY_POINT Address of Xen SMBIOS data\r
59\r
60**/\r
61SMBIOS_TABLE_ENTRY_POINT *\r
62GetXenSmbiosTables (\r
63 VOID\r
64 )\r
65{\r
66 UINT8 *XenSmbiosPtr;\r
67 SMBIOS_TABLE_ENTRY_POINT *XenSmbiosEntryPointStructure;\r
68 EFI_HOB_GUID_TYPE *GuidHob;\r
69\r
70 //\r
71 // See if a XenInfo HOB is available\r
72 //\r
73 GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid);\r
74 if (GuidHob == NULL) {\r
75 return NULL;\r
76 }\r
77\r
ac0a286f
MK
78 for (XenSmbiosPtr = (UINT8 *)(UINTN)XEN_SMBIOS_PHYSICAL_ADDRESS;\r
79 XenSmbiosPtr < (UINT8 *)(UINTN)XEN_SMBIOS_PHYSICAL_END;\r
80 XenSmbiosPtr += 0x10)\r
81 {\r
82 XenSmbiosEntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *)XenSmbiosPtr;\r
3e92a997 83\r
ac0a286f
MK
84 if (!AsciiStrnCmp ((CHAR8 *)XenSmbiosEntryPointStructure->AnchorString, "_SM_", 4) &&\r
85 !AsciiStrnCmp ((CHAR8 *)XenSmbiosEntryPointStructure->IntermediateAnchorString, "_DMI_", 5) &&\r
86 IsEntryPointStructureValid (XenSmbiosEntryPointStructure))\r
87 {\r
3e92a997 88 return XenSmbiosEntryPointStructure;\r
3e92a997
LE
89 }\r
90 }\r
91\r
92 return NULL;\r
93}\r