]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerFunction.c
ArmPkg: Update OemGetChassisType function to return MISC_CHASSIS_TYPE
[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
38SMBIOS_MISC_TABLE_FUNCTION(MiscChassisManufacturer)\r
39{\r
40 CHAR8 *OptionalStrStart;\r
41 CHAR8 *StrStart;\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
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
99 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER);\r
100 Manufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
101 ManuStrLen = StrLen (Manufacturer);\r
102\r
103 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_VERSION);\r
104 Version = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
105 VerStrLen = StrLen (Version);\r
106\r
107 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER);\r
108 SerialNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
109 SerialNumStrLen = StrLen (SerialNumber);\r
110\r
111 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG);\r
112 AssertTag = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
113 AssertTagStrLen = StrLen (AssertTag);\r
114\r
115 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SKU_NUMBER);\r
116 ChassisSkuNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
117 ChaNumStrLen = StrLen (ChassisSkuNumber);\r
118\r
119 ContainedElementCount = InputData->ContainedElementCount;\r
120\r
121 if (ContainedElementCount > 1) {\r
122 ExtendLength = (ContainedElementCount - 1) * sizeof (CONTAINED_ELEMENT);\r
123 }\r
124\r
125 //\r
126 // Two zeros following the last string.\r
127 //\r
128 RecordLength = sizeof (SMBIOS_TABLE_TYPE3) +\r
129 ExtendLength + 1 +\r
130 ManuStrLen + 1 +\r
131 VerStrLen + 1 +\r
132 SerialNumStrLen + 1 +\r
133 AssertTagStrLen + 1 +\r
134 ChaNumStrLen + 1 + 1;\r
135 SmbiosRecord = AllocateZeroPool (RecordLength);\r
136 if (SmbiosRecord == NULL) {\r
137 Status = EFI_OUT_OF_RESOURCES;\r
138 goto Exit;\r
139 }\r
140\r
141 (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE3));\r
142\r
143 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE3) + ExtendLength + 1;\r
144\r
a2b5ea38 145 SmbiosRecord->Type = OemGetChassisType ();\r
bfc0fae4
RC
146\r
147 //ContainedElements\r
148 ASSERT (ContainedElementCount < 2);\r
149 (VOID)CopyMem (SmbiosRecord + 1, &ContainedElements, ExtendLength);\r
150\r
151 //ChassisSkuNumber\r
152 *((UINT8 *)SmbiosRecord + sizeof (SMBIOS_TABLE_TYPE3) + ExtendLength) = 5;\r
153\r
154 OptionalStrStart = (CHAR8 *)((UINT8 *)SmbiosRecord + sizeof (SMBIOS_TABLE_TYPE3) +\r
155 ExtendLength + 1);\r
156 UnicodeStrToAsciiStrS (Manufacturer, OptionalStrStart, ManuStrLen + 1);\r
157 StrStart = OptionalStrStart + ManuStrLen + 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 (AssertTag, StrStart, AssertTagStrLen + 1);\r
163 StrStart += AssertTagStrLen + 1;\r
164 UnicodeStrToAsciiStrS (ChassisSkuNumber, StrStart, ChaNumStrLen + 1);\r
165 //\r
166 // Now we have got the full smbios record, call smbios protocol to add this record.\r
167 //\r
168 Status = SmbiosMiscAddRecord ((UINT8*)SmbiosRecord, NULL);\r
169 if (EFI_ERROR (Status)) {\r
170 DEBUG ((DEBUG_ERROR, "[%a]:[%dL] Smbios Type03 Table Log Failed! %r \n",\r
171 __FUNCTION__, __LINE__, Status));\r
172 }\r
173\r
174 FreePool (SmbiosRecord);\r
175\r
176Exit:\r
177 if (Manufacturer != NULL) {\r
178 FreePool (Manufacturer);\r
179 }\r
180\r
181 if (Version != NULL) {\r
182 FreePool (Version);\r
183 }\r
184\r
185 if (SerialNumber != NULL) {\r
186 FreePool (SerialNumber);\r
187 }\r
188\r
189 if (AssertTag != NULL) {\r
190 FreePool (AssertTag);\r
191 }\r
192\r
193 if (ChassisSkuNumber != NULL) {\r
194 FreePool (ChassisSkuNumber);\r
195 }\r
196\r
197 return 0;\r
198}\r