]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerFunction.c
ArmPkg: Apply uncrustify changes
[mirror_edk2.git] / ArmPkg / Universal / Smbios / SmbiosMiscDxe / Type03 / MiscChassisManufacturerFunction.c
CommitLineData
bfc0fae4
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) 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
bfc0fae4
RC
26/**\r
27 This function makes boot time changes to the contents of the\r
28 MiscChassisManufacturer (Type 3) 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 (MiscChassisManufacturer) {\r
39 CHAR8 *OptionalStrStart;\r
40 CHAR8 *StrStart;\r
41 UINT8 *SkuNumberField;\r
42 UINTN RecordLength;\r
43 UINTN ManuStrLen;\r
44 UINTN VerStrLen;\r
45 UINTN AssertTagStrLen;\r
46 UINTN SerialNumStrLen;\r
47 UINTN ChaNumStrLen;\r
48 EFI_STRING Manufacturer;\r
49 EFI_STRING Version;\r
50 EFI_STRING SerialNumber;\r
51 EFI_STRING AssertTag;\r
52 EFI_STRING ChassisSkuNumber;\r
53 EFI_STRING_ID TokenToGet;\r
54 SMBIOS_TABLE_TYPE3 *SmbiosRecord;\r
55 SMBIOS_TABLE_TYPE3 *InputData;\r
56 EFI_STATUS Status;\r
57\r
58 UINT8 ContainedElementCount;\r
59 CONTAINED_ELEMENT ContainedElements;\r
60 UINT8 ExtendLength;\r
bfc0fae4 61\r
bfc0fae4
RC
62 ExtendLength = 0;\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_TYPE3 *)RecordData;\r
72\r
73 OemUpdateSmbiosInfo (\r
74 mSmbiosMiscHiiHandle,\r
75 STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG),\r
76 AssetTagType03\r
77 );\r
78 OemUpdateSmbiosInfo (\r
79 mSmbiosMiscHiiHandle,\r
80 STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER),\r
81 SerialNumberType03\r
82 );\r
83 OemUpdateSmbiosInfo (\r
84 mSmbiosMiscHiiHandle,\r
85 STRING_TOKEN (STR_MISC_CHASSIS_VERSION),\r
86 VersionType03\r
87 );\r
88 OemUpdateSmbiosInfo (\r
89 mSmbiosMiscHiiHandle,\r
90 STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER),\r
91 ManufacturerType03\r
92 );\r
93 OemUpdateSmbiosInfo (\r
94 mSmbiosMiscHiiHandle,\r
95 STRING_TOKEN (STR_MISC_CHASSIS_SKU_NUMBER),\r
96 SkuNumberType03\r
97 );\r
98\r
429309e0 99 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER);\r
bfc0fae4 100 Manufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
429309e0 101 ManuStrLen = StrLen (Manufacturer);\r
bfc0fae4
RC
102\r
103 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_VERSION);\r
429309e0
MK
104 Version = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
105 VerStrLen = StrLen (Version);\r
bfc0fae4 106\r
429309e0
MK
107 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER);\r
108 SerialNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
bfc0fae4
RC
109 SerialNumStrLen = StrLen (SerialNumber);\r
110\r
429309e0
MK
111 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG);\r
112 AssertTag = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
bfc0fae4
RC
113 AssertTagStrLen = StrLen (AssertTag);\r
114\r
429309e0 115 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SKU_NUMBER);\r
bfc0fae4 116 ChassisSkuNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
429309e0 117 ChaNumStrLen = StrLen (ChassisSkuNumber);\r
bfc0fae4
RC
118\r
119 ContainedElementCount = InputData->ContainedElementCount;\r
429309e0 120 ExtendLength = ContainedElementCount * sizeof (CONTAINED_ELEMENT);\r
bfc0fae4
RC
121\r
122 //\r
123 // Two zeros following the last string.\r
124 //\r
125 RecordLength = sizeof (SMBIOS_TABLE_TYPE3) +\r
126 ExtendLength + 1 +\r
127 ManuStrLen + 1 +\r
128 VerStrLen + 1 +\r
129 SerialNumStrLen + 1 +\r
130 AssertTagStrLen + 1 +\r
131 ChaNumStrLen + 1 + 1;\r
132 SmbiosRecord = AllocateZeroPool (RecordLength);\r
133 if (SmbiosRecord == NULL) {\r
134 Status = EFI_OUT_OF_RESOURCES;\r
135 goto Exit;\r
136 }\r
137\r
138 (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE3));\r
139\r
140 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE3) + ExtendLength + 1;\r
141\r
a2b5ea38 142 SmbiosRecord->Type = OemGetChassisType ();\r
bfc0fae4 143\r
429309e0 144 // ContainedElements\r
bfc0fae4
RC
145 ASSERT (ContainedElementCount < 2);\r
146 (VOID)CopyMem (SmbiosRecord + 1, &ContainedElements, ExtendLength);\r
147\r
429309e0 148 // ChassisSkuNumber\r
13f32d4a
RC
149 SkuNumberField = (UINT8 *)SmbiosRecord +\r
150 sizeof (SMBIOS_TABLE_TYPE3) -\r
151 sizeof (CONTAINED_ELEMENT) + ExtendLength;\r
152\r
153 *SkuNumberField = 5;\r
bfc0fae4
RC
154\r
155 OptionalStrStart = (CHAR8 *)((UINT8 *)SmbiosRecord + sizeof (SMBIOS_TABLE_TYPE3) +\r
429309e0 156 ExtendLength + 1);\r
bfc0fae4
RC
157 UnicodeStrToAsciiStrS (Manufacturer, OptionalStrStart, ManuStrLen + 1);\r
158 StrStart = OptionalStrStart + ManuStrLen + 1;\r
159 UnicodeStrToAsciiStrS (Version, StrStart, VerStrLen + 1);\r
160 StrStart += VerStrLen + 1;\r
161 UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);\r
162 StrStart += SerialNumStrLen + 1;\r
163 UnicodeStrToAsciiStrS (AssertTag, StrStart, AssertTagStrLen + 1);\r
164 StrStart += AssertTagStrLen + 1;\r
165 UnicodeStrToAsciiStrS (ChassisSkuNumber, StrStart, ChaNumStrLen + 1);\r
bf2b9999 166\r
429309e0
MK
167 SmbiosRecord->BootupState = OemGetChassisBootupState ();\r
168 SmbiosRecord->PowerSupplyState = OemGetChassisPowerSupplyState ();\r
169 SmbiosRecord->ThermalState = OemGetChassisThermalState ();\r
170 SmbiosRecord->SecurityStatus = OemGetChassisSecurityStatus ();\r
171 SmbiosRecord->Height = OemGetChassisHeight ();\r
bf2b9999
RC
172 SmbiosRecord->NumberofPowerCords = OemGetChassisNumPowerCords ();\r
173\r
bfc0fae4
RC
174 //\r
175 // Now we have got the full smbios record, call smbios protocol to add this record.\r
176 //\r
429309e0 177 Status = SmbiosMiscAddRecord ((UINT8 *)SmbiosRecord, NULL);\r
bfc0fae4 178 if (EFI_ERROR (Status)) {\r
429309e0
MK
179 DEBUG ((\r
180 DEBUG_ERROR,\r
181 "[%a]:[%dL] Smbios Type03 Table Log Failed! %r \n",\r
182 __FUNCTION__,\r
183 DEBUG_LINE_NUMBER,\r
184 Status\r
185 ));\r
bfc0fae4
RC
186 }\r
187\r
188 FreePool (SmbiosRecord);\r
189\r
190Exit:\r
191 if (Manufacturer != NULL) {\r
192 FreePool (Manufacturer);\r
193 }\r
194\r
195 if (Version != NULL) {\r
196 FreePool (Version);\r
197 }\r
198\r
199 if (SerialNumber != NULL) {\r
200 FreePool (SerialNumber);\r
201 }\r
202\r
203 if (AssertTag != NULL) {\r
204 FreePool (AssertTag);\r
205 }\r
206\r
207 if (ChassisSkuNumber != NULL) {\r
208 FreePool (ChassisSkuNumber);\r
209 }\r
210\r
211 return 0;\r
212}\r