]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerFunction.c
ArmPkg: Reproduce builds across source format changes
[mirror_edk2.git] / ArmPkg / Universal / Smbios / SmbiosMiscDxe / Type02 / MiscBaseBoardManufacturerFunction.c
CommitLineData
bb41dc67
RC
1/** @file\r
2 This driver parses the mSmbiosMiscDataTable structure and reports\r
3 any generated data using SMBIOS protocol.\r
4\r
5 Based on files under Nt32Pkg/MiscSubClassPlatformDxe/\r
6\r
7 Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>\r
8 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
9 Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>\r
10 Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>\r
11 SPDX-License-Identifier: BSD-2-Clause-Patent\r
12\r
13**/\r
14\r
15#include <Library/BaseLib.h>\r
16#include <Library/BaseMemoryLib.h>\r
17#include <Library/DebugLib.h>\r
18#include <Library/HiiLib.h>\r
19#include <Library/MemoryAllocationLib.h>\r
20#include <Library/OemMiscLib.h>\r
21#include <Library/PrintLib.h>\r
22#include <Library/UefiBootServicesTableLib.h>\r
23\r
24#include "SmbiosMisc.h"\r
25\r
26\r
27/**\r
28 This function makes boot time changes to the contents of the\r
29 MiscBaseBoardManufacturer (Type 2) record.\r
30\r
31 @param RecordData Pointer to SMBIOS table with default values.\r
32 @param Smbios SMBIOS protocol.\r
33\r
34 @retval EFI_SUCCESS The SMBIOS table was successfully added.\r
35 @retval EFI_INVALID_PARAMETER Invalid parameter was found.\r
36 @retval EFI_OUT_OF_RESOURCES Failed to allocate required memory.\r
37\r
38**/\r
39SMBIOS_MISC_TABLE_FUNCTION(MiscBaseBoardManufacturer)\r
40{\r
41 CHAR8 *OptionalStrStart;\r
42 CHAR8 *StrStart;\r
43 UINTN RecordLength;\r
44 UINTN ManuStrLen;\r
45 UINTN ProductNameStrLen;\r
46 UINTN VerStrLen;\r
47 UINTN SerialNumStrLen;\r
48 UINTN AssetTagStrLen;\r
49 UINTN ChassisLocaStrLen;\r
50 UINTN HandleCount;\r
51 UINT16 *HandleArray;\r
52 CHAR16 *BaseBoardManufacturer;\r
53 CHAR16 *BaseBoardProductName;\r
54 CHAR16 *Version;\r
55 EFI_STRING SerialNumber;\r
56 EFI_STRING AssetTag;\r
57 EFI_STRING ChassisLocation;\r
58 EFI_STRING_ID TokenToGet;\r
59 SMBIOS_TABLE_TYPE2 *SmbiosRecord;\r
60 SMBIOS_TABLE_TYPE2 *InputData;\r
61 EFI_STATUS Status;\r
62\r
63 EFI_STRING_ID TokenToUpdate;\r
64\r
65 HandleCount = 0;\r
66 HandleArray = NULL;\r
67 InputData = NULL;\r
68\r
69 //\r
70 // First check for invalid parameters.\r
71 //\r
72 if (RecordData == NULL) {\r
73 return EFI_INVALID_PARAMETER;\r
74 }\r
75\r
76 InputData = (SMBIOS_TABLE_TYPE2*)RecordData;\r
77\r
78 BaseBoardManufacturer = (CHAR16 *) PcdGetPtr (PcdBaseBoardManufacturer);\r
79 if (StrLen (BaseBoardManufacturer) > 0) {\r
80 TokenToUpdate = STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER);\r
81 HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, BaseBoardManufacturer, NULL);\r
82 }\r
83\r
84 BaseBoardProductName = (CHAR16 *) PcdGetPtr (PcdBaseBoardProductName);\r
85 if (StrLen (BaseBoardProductName) > 0) {\r
86 TokenToUpdate = STRING_TOKEN (STR_MISC_BASE_BOARD_PRODUCT_NAME);\r
87 HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, BaseBoardProductName, NULL);\r
88 }\r
89\r
90 Version = (CHAR16 *) PcdGetPtr (PcdBaseBoardVersion);\r
91 if (StrLen (Version) > 0) {\r
92 TokenToUpdate = STRING_TOKEN (STR_MISC_BASE_BOARD_VERSION);\r
93 HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Version, NULL);\r
94 }\r
95\r
96 OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
97 STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG),\r
98 AssertTagType02\r
99 );\r
100 OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
101 STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER),\r
102 SerialNumberType02\r
103 );\r
104 OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
105 STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER),\r
106 BoardManufacturerType02\r
107 );\r
108 OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
109 STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER),\r
110 SerialNumberType02\r
111 );\r
112 OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
113 STRING_TOKEN (STR_MISC_BASE_BOARD_SKU_NUMBER),\r
114 SerialNumberType02\r
115 );\r
116 OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
117 STRING_TOKEN (STR_MISC_BASE_BOARD_CHASSIS_LOCATION),\r
118 ChassisLocationType02\r
119 );\r
120\r
121 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER);\r
122 BaseBoardManufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
123 ManuStrLen = StrLen (BaseBoardManufacturer);\r
124\r
125 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_PRODUCT_NAME);\r
126 BaseBoardProductName = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
127 ProductNameStrLen = StrLen (BaseBoardProductName);\r
128\r
129 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_VERSION);\r
130 Version = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
131 VerStrLen = StrLen (Version);\r
132\r
133 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER);\r
134 SerialNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
135 SerialNumStrLen = StrLen (SerialNumber);\r
136\r
137 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG);\r
138 AssetTag = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
139 AssetTagStrLen = StrLen (AssetTag);\r
140\r
141 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_CHASSIS_LOCATION);\r
142 ChassisLocation = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
143 ChassisLocaStrLen = StrLen (ChassisLocation);\r
144\r
145 //\r
146 // Two zeros following the last string.\r
147 //\r
148 RecordLength = sizeof (SMBIOS_TABLE_TYPE2) +\r
149 ManuStrLen + 1 +\r
150 ProductNameStrLen + 1 +\r
151 VerStrLen + 1 +\r
152 SerialNumStrLen + 1 +\r
153 AssetTagStrLen + 1 +\r
154 ChassisLocaStrLen + 1 + 1;\r
155 SmbiosRecord = AllocateZeroPool (RecordLength);\r
156 if (SmbiosRecord == NULL) {\r
157 Status = EFI_OUT_OF_RESOURCES;\r
158 goto Exit;\r
159 }\r
160\r
161 (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE2));\r
162 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE2);\r
163\r
164 //\r
165 // Update Contained objects Handle\r
166 //\r
167 SmbiosRecord->NumberOfContainedObjectHandles = 0;\r
168 SmbiosMiscGetLinkTypeHandle (EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE, &HandleArray,\r
169 &HandleCount);\r
170 // It's assumed there's at most a single chassis\r
171 ASSERT (HandleCount < 2);\r
172 if (HandleCount > 0) {\r
173 SmbiosRecord->ChassisHandle = HandleArray[0];\r
174 }\r
175\r
176 FreePool (HandleArray);\r
177\r
178 OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
179 UnicodeStrToAsciiStrS (BaseBoardManufacturer, OptionalStrStart, ManuStrLen + 1);\r
180\r
181 StrStart = OptionalStrStart + ManuStrLen + 1;\r
182 UnicodeStrToAsciiStrS (BaseBoardProductName, StrStart, ProductNameStrLen + 1);\r
183\r
184 StrStart += ProductNameStrLen + 1;\r
185 UnicodeStrToAsciiStrS (Version, StrStart, VerStrLen + 1);\r
186\r
187 StrStart += VerStrLen + 1;\r
188 UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);\r
189\r
190 StrStart += SerialNumStrLen + 1;\r
191 UnicodeStrToAsciiStrS (AssetTag, StrStart, AssetTagStrLen + 1);\r
192\r
193 StrStart += AssetTagStrLen + 1;\r
194 UnicodeStrToAsciiStrS (ChassisLocation, StrStart, ChassisLocaStrLen + 1);\r
195\r
196 Status = SmbiosMiscAddRecord ((UINT8 *)SmbiosRecord, NULL);\r
197 if (EFI_ERROR (Status)) {\r
198 DEBUG ((DEBUG_ERROR, "[%a]:[%dL] Smbios Type02 Table Log Failed! %r \n",\r
f331310a 199 __FUNCTION__, DEBUG_LINE_NUMBER, Status));\r
bb41dc67
RC
200 }\r
201\r
202 FreePool (SmbiosRecord);\r
203\r
204Exit:\r
205 if (BaseBoardManufacturer != NULL) {\r
206 FreePool (BaseBoardManufacturer);\r
207 }\r
208\r
209 if (BaseBoardProductName != NULL) {\r
210 FreePool (BaseBoardProductName);\r
211 }\r
212\r
213 if (Version != NULL) {\r
214 FreePool (Version);\r
215 }\r
216\r
217 if (SerialNumber != NULL) {\r
218 FreePool (SerialNumber);\r
219 }\r
220\r
221 if (AssetTag != NULL) {\r
222 FreePool (AssetTag);\r
223 }\r
224\r
225 if (ChassisLocation != NULL) {\r
226 FreePool (ChassisLocation);\r
227 }\r
228\r
229 return 0;\r
230}\r