]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFunction.c
ArmPkg: Apply uncrustify changes
[mirror_edk2.git] / ArmPkg / Universal / Smbios / SmbiosMiscDxe / Type01 / MiscSystemManufacturerFunction.c
CommitLineData
eec78fc1
RC
1/** @file\r
2 This driver parses the mMiscSubclassDataTable structure and reports\r
3 any generated data to smbios.\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) 2006 - 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 This function makes boot time changes to the contents of the\r
28 MiscSystemManufacturer (Type 1) 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 (MiscSystemManufacturer) {\r
39 CHAR8 *OptionalStrStart;\r
40 CHAR8 *StrStart;\r
41 UINTN ManuStrLen;\r
42 UINTN VerStrLen;\r
43 UINTN PdNameStrLen;\r
44 UINTN SerialNumStrLen;\r
45 UINTN SKUNumStrLen;\r
46 UINTN FamilyStrLen;\r
47 UINTN RecordLength;\r
48 EFI_STRING Manufacturer;\r
49 EFI_STRING ProductName;\r
50 EFI_STRING Version;\r
51 EFI_STRING SerialNumber;\r
52 EFI_STRING SKUNumber;\r
53 EFI_STRING Family;\r
54 EFI_STRING_ID TokenToGet;\r
55 SMBIOS_TABLE_TYPE1 *SmbiosRecord;\r
56 SMBIOS_TABLE_TYPE1 *InputData;\r
57 EFI_STATUS Status;\r
58 EFI_STRING_ID TokenToUpdate;\r
59 CHAR16 *Product;\r
60 CHAR16 *pVersion;\r
eec78fc1
RC
61\r
62 Status = EFI_SUCCESS;\r
63\r
64 //\r
65 // First check for invalid parameters.\r
66 //\r
67 if (RecordData == NULL) {\r
68 return EFI_INVALID_PARAMETER;\r
69 }\r
70\r
71 InputData = (SMBIOS_TABLE_TYPE1 *)RecordData;\r
72\r
429309e0 73 Product = (CHAR16 *)PcdGetPtr (PcdSystemProductName);\r
eec78fc1
RC
74 if (StrLen (Product) > 0) {\r
75 TokenToUpdate = STRING_TOKEN (STR_MISC_SYSTEM_PRODUCT_NAME);\r
76 HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Product, NULL);\r
77 }\r
78\r
429309e0 79 pVersion = (CHAR16 *)PcdGetPtr (PcdSystemVersion);\r
eec78fc1
RC
80 if (StrLen (pVersion) > 0) {\r
81 TokenToUpdate = STRING_TOKEN (STR_MISC_SYSTEM_VERSION);\r
82 HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, pVersion, NULL);\r
83 }\r
84\r
429309e0
MK
85 OemUpdateSmbiosInfo (\r
86 mSmbiosMiscHiiHandle,\r
87 STRING_TOKEN (STR_MISC_SYSTEM_SERIAL_NUMBER),\r
88 SerialNumType01\r
89 );\r
90 OemUpdateSmbiosInfo (\r
91 mSmbiosMiscHiiHandle,\r
92 STRING_TOKEN (STR_MISC_SYSTEM_MANUFACTURER),\r
93 SystemManufacturerType01\r
94 );\r
95 OemUpdateSmbiosInfo (\r
96 mSmbiosMiscHiiHandle,\r
97 STRING_TOKEN (STR_MISC_SYSTEM_SKU_NUMBER),\r
98 SkuNumberType01\r
99 );\r
100 OemUpdateSmbiosInfo (\r
101 mSmbiosMiscHiiHandle,\r
102 STRING_TOKEN (STR_MISC_SYSTEM_FAMILY),\r
103 FamilyType01\r
104 );\r
eec78fc1
RC
105\r
106 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_MANUFACTURER);\r
107 Manufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
108 ManuStrLen = StrLen (Manufacturer);\r
109\r
110 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_PRODUCT_NAME);\r
111 ProductName = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
112 PdNameStrLen = StrLen (ProductName);\r
113\r
114 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_VERSION);\r
115 Version = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
116 VerStrLen = StrLen (Version);\r
117\r
118 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SERIAL_NUMBER);\r
119 SerialNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
120 SerialNumStrLen = StrLen (SerialNumber);\r
121\r
122 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SKU_NUMBER);\r
123 SKUNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
124 SKUNumStrLen = StrLen (SKUNumber);\r
125\r
126 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_FAMILY);\r
127 Family = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
128 FamilyStrLen = StrLen (Family);\r
129\r
130 //\r
131 // Two zeros following the last string.\r
132 //\r
133 RecordLength = sizeof (SMBIOS_TABLE_TYPE1) +\r
134 ManuStrLen + 1 +\r
135 PdNameStrLen + 1 +\r
136 VerStrLen + 1 +\r
137 SerialNumStrLen + 1 +\r
138 SKUNumStrLen + 1 +\r
139 FamilyStrLen + 1 + 1;\r
140 SmbiosRecord = AllocateZeroPool (RecordLength);\r
141\r
142 if (SmbiosRecord == NULL) {\r
143 Status = EFI_OUT_OF_RESOURCES;\r
144 goto Exit;\r
145 }\r
146\r
147 (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE1));\r
148\r
149 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE1);\r
150\r
429309e0 151 CopyGuid (&SmbiosRecord->Uuid, &InputData->Uuid);\r
eec78fc1
RC
152\r
153 OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
154 UnicodeStrToAsciiStrS (Manufacturer, OptionalStrStart, ManuStrLen + 1);\r
155 StrStart = OptionalStrStart + ManuStrLen + 1;\r
429309e0 156 UnicodeStrToAsciiStrS (ProductName, StrStart, PdNameStrLen + 1);\r
eec78fc1
RC
157 StrStart += PdNameStrLen + 1;\r
158 UnicodeStrToAsciiStrS (Version, StrStart, VerStrLen + 1);\r
159 StrStart += VerStrLen + 1;\r
160 UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);\r
161 StrStart += SerialNumStrLen + 1;\r
162 UnicodeStrToAsciiStrS (SKUNumber, StrStart, SKUNumStrLen + 1);\r
163 StrStart += SKUNumStrLen + 1;\r
164 UnicodeStrToAsciiStrS (Family, StrStart, FamilyStrLen + 1);\r
165\r
166 //\r
167 // Now we have got the full smbios record, call smbios protocol to add this record.\r
168 //\r
429309e0 169 Status = SmbiosMiscAddRecord ((UINT8 *)SmbiosRecord, NULL);\r
eec78fc1 170 if (EFI_ERROR (Status)) {\r
429309e0
MK
171 DEBUG ((\r
172 DEBUG_ERROR,\r
173 "[%a]:[%dL] Smbios Type01 Table Log Failed! %r \n",\r
174 __FUNCTION__,\r
175 DEBUG_LINE_NUMBER,\r
176 Status\r
177 ));\r
eec78fc1
RC
178 }\r
179\r
180 FreePool (SmbiosRecord);\r
181\r
182Exit:\r
183 if (Manufacturer != NULL) {\r
184 FreePool (Manufacturer);\r
185 }\r
186\r
187 if (ProductName != NULL) {\r
188 FreePool (ProductName);\r
189 }\r
190\r
191 if (Version != NULL) {\r
192 FreePool (Version);\r
193 }\r
194\r
195 if (SerialNumber != NULL) {\r
196 FreePool (SerialNumber);\r
197 }\r
198\r
199 if (SKUNumber != NULL) {\r
200 FreePool (SKUNumber);\r
201 }\r
202\r
203 if (Family != NULL) {\r
204 FreePool (Family);\r
205 }\r
206\r
207 return Status;\r
208}\r