]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerFunction.c
ArmPkg: Apply uncrustify 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
bb41dc67
RC
26/**\r
27 This function makes boot time changes to the contents of the\r
28 MiscBaseBoardManufacturer (Type 2) record.\r
29\r
30 @param RecordData Pointer to SMBIOS table with default values.\r
31 @param Smbios SMBIOS protocol.\r
32\r
33 @retval EFI_SUCCESS The SMBIOS table was successfully added.\r
34 @retval EFI_INVALID_PARAMETER Invalid parameter was found.\r
35 @retval EFI_OUT_OF_RESOURCES Failed to allocate required memory.\r
36\r
37**/\r
429309e0
MK
38SMBIOS_MISC_TABLE_FUNCTION (MiscBaseBoardManufacturer) {\r
39 CHAR8 *OptionalStrStart;\r
40 CHAR8 *StrStart;\r
41 UINTN RecordLength;\r
42 UINTN ManuStrLen;\r
43 UINTN ProductNameStrLen;\r
44 UINTN VerStrLen;\r
45 UINTN SerialNumStrLen;\r
46 UINTN AssetTagStrLen;\r
47 UINTN ChassisLocaStrLen;\r
48 UINTN HandleCount;\r
49 UINT16 *HandleArray;\r
50 CHAR16 *BaseBoardManufacturer;\r
51 CHAR16 *BaseBoardProductName;\r
52 CHAR16 *Version;\r
53 EFI_STRING SerialNumber;\r
54 EFI_STRING AssetTag;\r
55 EFI_STRING ChassisLocation;\r
56 EFI_STRING_ID TokenToGet;\r
57 SMBIOS_TABLE_TYPE2 *SmbiosRecord;\r
58 SMBIOS_TABLE_TYPE2 *InputData;\r
59 EFI_STATUS Status;\r
60\r
61 EFI_STRING_ID TokenToUpdate;\r
bb41dc67
RC
62\r
63 HandleCount = 0;\r
64 HandleArray = NULL;\r
429309e0 65 InputData = NULL;\r
bb41dc67
RC
66\r
67 //\r
68 // First check for invalid parameters.\r
69 //\r
70 if (RecordData == NULL) {\r
71 return EFI_INVALID_PARAMETER;\r
72 }\r
73\r
429309e0 74 InputData = (SMBIOS_TABLE_TYPE2 *)RecordData;\r
bb41dc67 75\r
429309e0 76 BaseBoardManufacturer = (CHAR16 *)PcdGetPtr (PcdBaseBoardManufacturer);\r
bb41dc67
RC
77 if (StrLen (BaseBoardManufacturer) > 0) {\r
78 TokenToUpdate = STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER);\r
79 HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, BaseBoardManufacturer, NULL);\r
80 }\r
81\r
429309e0 82 BaseBoardProductName = (CHAR16 *)PcdGetPtr (PcdBaseBoardProductName);\r
bb41dc67
RC
83 if (StrLen (BaseBoardProductName) > 0) {\r
84 TokenToUpdate = STRING_TOKEN (STR_MISC_BASE_BOARD_PRODUCT_NAME);\r
85 HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, BaseBoardProductName, NULL);\r
86 }\r
87\r
429309e0 88 Version = (CHAR16 *)PcdGetPtr (PcdBaseBoardVersion);\r
bb41dc67
RC
89 if (StrLen (Version) > 0) {\r
90 TokenToUpdate = STRING_TOKEN (STR_MISC_BASE_BOARD_VERSION);\r
91 HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Version, NULL);\r
92 }\r
93\r
429309e0
MK
94 OemUpdateSmbiosInfo (\r
95 mSmbiosMiscHiiHandle,\r
bb41dc67
RC
96 STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG),\r
97 AssertTagType02\r
98 );\r
429309e0
MK
99 OemUpdateSmbiosInfo (\r
100 mSmbiosMiscHiiHandle,\r
bb41dc67
RC
101 STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER),\r
102 SerialNumberType02\r
103 );\r
429309e0
MK
104 OemUpdateSmbiosInfo (\r
105 mSmbiosMiscHiiHandle,\r
bb41dc67
RC
106 STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER),\r
107 BoardManufacturerType02\r
108 );\r
429309e0
MK
109 OemUpdateSmbiosInfo (\r
110 mSmbiosMiscHiiHandle,\r
bb41dc67
RC
111 STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER),\r
112 SerialNumberType02\r
113 );\r
429309e0
MK
114 OemUpdateSmbiosInfo (\r
115 mSmbiosMiscHiiHandle,\r
bb41dc67
RC
116 STRING_TOKEN (STR_MISC_BASE_BOARD_SKU_NUMBER),\r
117 SerialNumberType02\r
118 );\r
429309e0
MK
119 OemUpdateSmbiosInfo (\r
120 mSmbiosMiscHiiHandle,\r
bb41dc67
RC
121 STRING_TOKEN (STR_MISC_BASE_BOARD_CHASSIS_LOCATION),\r
122 ChassisLocationType02\r
123 );\r
124\r
429309e0 125 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER);\r
bb41dc67 126 BaseBoardManufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
429309e0 127 ManuStrLen = StrLen (BaseBoardManufacturer);\r
bb41dc67 128\r
429309e0 129 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_PRODUCT_NAME);\r
bb41dc67 130 BaseBoardProductName = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
429309e0 131 ProductNameStrLen = StrLen (BaseBoardProductName);\r
bb41dc67
RC
132\r
133 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_VERSION);\r
429309e0
MK
134 Version = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
135 VerStrLen = StrLen (Version);\r
bb41dc67 136\r
429309e0
MK
137 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER);\r
138 SerialNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
bb41dc67
RC
139 SerialNumStrLen = StrLen (SerialNumber);\r
140\r
429309e0
MK
141 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG);\r
142 AssetTag = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
bb41dc67
RC
143 AssetTagStrLen = StrLen (AssetTag);\r
144\r
429309e0
MK
145 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_CHASSIS_LOCATION);\r
146 ChassisLocation = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
bb41dc67
RC
147 ChassisLocaStrLen = StrLen (ChassisLocation);\r
148\r
149 //\r
150 // Two zeros following the last string.\r
151 //\r
152 RecordLength = sizeof (SMBIOS_TABLE_TYPE2) +\r
153 ManuStrLen + 1 +\r
154 ProductNameStrLen + 1 +\r
155 VerStrLen + 1 +\r
156 SerialNumStrLen + 1 +\r
157 AssetTagStrLen + 1 +\r
158 ChassisLocaStrLen + 1 + 1;\r
159 SmbiosRecord = AllocateZeroPool (RecordLength);\r
160 if (SmbiosRecord == NULL) {\r
161 Status = EFI_OUT_OF_RESOURCES;\r
162 goto Exit;\r
163 }\r
164\r
165 (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE2));\r
429309e0 166 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE2);\r
bb41dc67
RC
167\r
168 //\r
169 // Update Contained objects Handle\r
170 //\r
171 SmbiosRecord->NumberOfContainedObjectHandles = 0;\r
429309e0
MK
172 SmbiosMiscGetLinkTypeHandle (\r
173 EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE,\r
174 &HandleArray,\r
175 &HandleCount\r
176 );\r
bb41dc67
RC
177 // It's assumed there's at most a single chassis\r
178 ASSERT (HandleCount < 2);\r
179 if (HandleCount > 0) {\r
180 SmbiosRecord->ChassisHandle = HandleArray[0];\r
181 }\r
182\r
183 FreePool (HandleArray);\r
184\r
185 OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
186 UnicodeStrToAsciiStrS (BaseBoardManufacturer, OptionalStrStart, ManuStrLen + 1);\r
187\r
188 StrStart = OptionalStrStart + ManuStrLen + 1;\r
189 UnicodeStrToAsciiStrS (BaseBoardProductName, StrStart, ProductNameStrLen + 1);\r
190\r
191 StrStart += ProductNameStrLen + 1;\r
192 UnicodeStrToAsciiStrS (Version, StrStart, VerStrLen + 1);\r
193\r
194 StrStart += VerStrLen + 1;\r
195 UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);\r
196\r
197 StrStart += SerialNumStrLen + 1;\r
198 UnicodeStrToAsciiStrS (AssetTag, StrStart, AssetTagStrLen + 1);\r
199\r
200 StrStart += AssetTagStrLen + 1;\r
201 UnicodeStrToAsciiStrS (ChassisLocation, StrStart, ChassisLocaStrLen + 1);\r
202\r
203 Status = SmbiosMiscAddRecord ((UINT8 *)SmbiosRecord, NULL);\r
204 if (EFI_ERROR (Status)) {\r
429309e0
MK
205 DEBUG ((\r
206 DEBUG_ERROR,\r
207 "[%a]:[%dL] Smbios Type02 Table Log Failed! %r \n",\r
208 __FUNCTION__,\r
209 DEBUG_LINE_NUMBER,\r
210 Status\r
211 ));\r
bb41dc67
RC
212 }\r
213\r
214 FreePool (SmbiosRecord);\r
215\r
216Exit:\r
217 if (BaseBoardManufacturer != NULL) {\r
218 FreePool (BaseBoardManufacturer);\r
219 }\r
220\r
221 if (BaseBoardProductName != NULL) {\r
222 FreePool (BaseBoardProductName);\r
223 }\r
224\r
225 if (Version != NULL) {\r
226 FreePool (Version);\r
227 }\r
228\r
229 if (SerialNumber != NULL) {\r
230 FreePool (SerialNumber);\r
231 }\r
232\r
233 if (AssetTag != NULL) {\r
234 FreePool (AssetTag);\r
235 }\r
236\r
237 if (ChassisLocation != NULL) {\r
238 FreePool (ChassisLocation);\r
239 }\r
240\r
241 return 0;\r
242}\r