]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerFunction.c
ArmPkg: Apply uncrustify changes
[mirror_edk2.git] / ArmPkg / Universal / Smbios / SmbiosMiscDxe / Type03 / MiscChassisManufacturerFunction.c
1 /** @file
2 This driver parses the mMiscSubclassDataTable structure and reports
3 any generated data to smbios.
4
5 Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
6
7 Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
8 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
9 Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
10 Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>
11 SPDX-License-Identifier: BSD-2-Clause-Patent
12
13 **/
14
15 #include <Library/BaseLib.h>
16 #include <Library/BaseMemoryLib.h>
17 #include <Library/DebugLib.h>
18 #include <Library/HiiLib.h>
19 #include <Library/MemoryAllocationLib.h>
20 #include <Library/OemMiscLib.h>
21 #include <Library/PrintLib.h>
22 #include <Library/UefiBootServicesTableLib.h>
23
24 #include "SmbiosMisc.h"
25
26 /**
27 This function makes boot time changes to the contents of the
28 MiscChassisManufacturer (Type 3) record.
29
30 @param RecordData Pointer to SMBIOS table with default values.
31 @param Smbios SMBIOS protocol.
32
33 @retval EFI_SUCCESS The SMBIOS table was successfully added.
34 @retval EFI_INVALID_PARAMETER Invalid parameter was found.
35 @retval EFI_OUT_OF_RESOURCES Failed to allocate required memory.
36
37 **/
38 SMBIOS_MISC_TABLE_FUNCTION (MiscChassisManufacturer) {
39 CHAR8 *OptionalStrStart;
40 CHAR8 *StrStart;
41 UINT8 *SkuNumberField;
42 UINTN RecordLength;
43 UINTN ManuStrLen;
44 UINTN VerStrLen;
45 UINTN AssertTagStrLen;
46 UINTN SerialNumStrLen;
47 UINTN ChaNumStrLen;
48 EFI_STRING Manufacturer;
49 EFI_STRING Version;
50 EFI_STRING SerialNumber;
51 EFI_STRING AssertTag;
52 EFI_STRING ChassisSkuNumber;
53 EFI_STRING_ID TokenToGet;
54 SMBIOS_TABLE_TYPE3 *SmbiosRecord;
55 SMBIOS_TABLE_TYPE3 *InputData;
56 EFI_STATUS Status;
57
58 UINT8 ContainedElementCount;
59 CONTAINED_ELEMENT ContainedElements;
60 UINT8 ExtendLength;
61
62 ExtendLength = 0;
63
64 //
65 // First check for invalid parameters.
66 //
67 if (RecordData == NULL) {
68 return EFI_INVALID_PARAMETER;
69 }
70
71 InputData = (SMBIOS_TABLE_TYPE3 *)RecordData;
72
73 OemUpdateSmbiosInfo (
74 mSmbiosMiscHiiHandle,
75 STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG),
76 AssetTagType03
77 );
78 OemUpdateSmbiosInfo (
79 mSmbiosMiscHiiHandle,
80 STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER),
81 SerialNumberType03
82 );
83 OemUpdateSmbiosInfo (
84 mSmbiosMiscHiiHandle,
85 STRING_TOKEN (STR_MISC_CHASSIS_VERSION),
86 VersionType03
87 );
88 OemUpdateSmbiosInfo (
89 mSmbiosMiscHiiHandle,
90 STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER),
91 ManufacturerType03
92 );
93 OemUpdateSmbiosInfo (
94 mSmbiosMiscHiiHandle,
95 STRING_TOKEN (STR_MISC_CHASSIS_SKU_NUMBER),
96 SkuNumberType03
97 );
98
99 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER);
100 Manufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
101 ManuStrLen = StrLen (Manufacturer);
102
103 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_VERSION);
104 Version = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
105 VerStrLen = StrLen (Version);
106
107 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER);
108 SerialNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
109 SerialNumStrLen = StrLen (SerialNumber);
110
111 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG);
112 AssertTag = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
113 AssertTagStrLen = StrLen (AssertTag);
114
115 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SKU_NUMBER);
116 ChassisSkuNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
117 ChaNumStrLen = StrLen (ChassisSkuNumber);
118
119 ContainedElementCount = InputData->ContainedElementCount;
120 ExtendLength = ContainedElementCount * sizeof (CONTAINED_ELEMENT);
121
122 //
123 // Two zeros following the last string.
124 //
125 RecordLength = sizeof (SMBIOS_TABLE_TYPE3) +
126 ExtendLength + 1 +
127 ManuStrLen + 1 +
128 VerStrLen + 1 +
129 SerialNumStrLen + 1 +
130 AssertTagStrLen + 1 +
131 ChaNumStrLen + 1 + 1;
132 SmbiosRecord = AllocateZeroPool (RecordLength);
133 if (SmbiosRecord == NULL) {
134 Status = EFI_OUT_OF_RESOURCES;
135 goto Exit;
136 }
137
138 (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE3));
139
140 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE3) + ExtendLength + 1;
141
142 SmbiosRecord->Type = OemGetChassisType ();
143
144 // ContainedElements
145 ASSERT (ContainedElementCount < 2);
146 (VOID)CopyMem (SmbiosRecord + 1, &ContainedElements, ExtendLength);
147
148 // ChassisSkuNumber
149 SkuNumberField = (UINT8 *)SmbiosRecord +
150 sizeof (SMBIOS_TABLE_TYPE3) -
151 sizeof (CONTAINED_ELEMENT) + ExtendLength;
152
153 *SkuNumberField = 5;
154
155 OptionalStrStart = (CHAR8 *)((UINT8 *)SmbiosRecord + sizeof (SMBIOS_TABLE_TYPE3) +
156 ExtendLength + 1);
157 UnicodeStrToAsciiStrS (Manufacturer, OptionalStrStart, ManuStrLen + 1);
158 StrStart = OptionalStrStart + ManuStrLen + 1;
159 UnicodeStrToAsciiStrS (Version, StrStart, VerStrLen + 1);
160 StrStart += VerStrLen + 1;
161 UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);
162 StrStart += SerialNumStrLen + 1;
163 UnicodeStrToAsciiStrS (AssertTag, StrStart, AssertTagStrLen + 1);
164 StrStart += AssertTagStrLen + 1;
165 UnicodeStrToAsciiStrS (ChassisSkuNumber, StrStart, ChaNumStrLen + 1);
166
167 SmbiosRecord->BootupState = OemGetChassisBootupState ();
168 SmbiosRecord->PowerSupplyState = OemGetChassisPowerSupplyState ();
169 SmbiosRecord->ThermalState = OemGetChassisThermalState ();
170 SmbiosRecord->SecurityStatus = OemGetChassisSecurityStatus ();
171 SmbiosRecord->Height = OemGetChassisHeight ();
172 SmbiosRecord->NumberofPowerCords = OemGetChassisNumPowerCords ();
173
174 //
175 // Now we have got the full smbios record, call smbios protocol to add this record.
176 //
177 Status = SmbiosMiscAddRecord ((UINT8 *)SmbiosRecord, NULL);
178 if (EFI_ERROR (Status)) {
179 DEBUG ((
180 DEBUG_ERROR,
181 "[%a]:[%dL] Smbios Type03 Table Log Failed! %r \n",
182 __FUNCTION__,
183 DEBUG_LINE_NUMBER,
184 Status
185 ));
186 }
187
188 FreePool (SmbiosRecord);
189
190 Exit:
191 if (Manufacturer != NULL) {
192 FreePool (Manufacturer);
193 }
194
195 if (Version != NULL) {
196 FreePool (Version);
197 }
198
199 if (SerialNumber != NULL) {
200 FreePool (SerialNumber);
201 }
202
203 if (AssertTag != NULL) {
204 FreePool (AssertTag);
205 }
206
207 if (ChassisSkuNumber != NULL) {
208 FreePool (ChassisSkuNumber);
209 }
210
211 return 0;
212 }