]> git.proxmox.com Git - mirror_edk2.git/blob - QuarkPlatformPkg/Platform/Dxe/SmbiosMiscDxe/MiscChassisManufacturerFunction.c
5d6c32ef32d988dc03185a0f8bc43581b7e316a6
[mirror_edk2.git] / QuarkPlatformPkg / Platform / Dxe / SmbiosMiscDxe / MiscChassisManufacturerFunction.c
1 /** @file
2 Chassis manufacturer information boot time changes.
3 SMBIOS type 3.
4
5 Copyright (c) 2013-2015 Intel Corporation.
6
7 SPDX-License-Identifier: BSD-2-Clause-Patent
8
9
10 **/
11
12
13 #include "CommonHeader.h"
14
15 #include "SmbiosMisc.h"
16
17 /**
18 This function makes boot time changes to the contents of the
19 MiscChassisManufacturer (Type 3).
20
21 @param RecordData Pointer to copy of RecordData from the Data Table.
22
23 @retval EFI_SUCCESS All parameters were valid.
24 @retval EFI_UNSUPPORTED Unexpected RecordType value.
25 @retval EFI_INVALID_PARAMETER Invalid parameter was found.
26
27 **/
28 MISC_SMBIOS_TABLE_FUNCTION(MiscChassisManufacturer)
29 {
30 CHAR8 *OptionalStrStart;
31 UINTN ManuStrLen;
32 UINTN VerStrLen;
33 UINTN AssertTagStrLen;
34 UINTN SerialNumStrLen;
35 EFI_STATUS Status;
36 CHAR16 Manufacturer[SMBIOS_STRING_MAX_LENGTH];
37 CHAR16 Version[SMBIOS_STRING_MAX_LENGTH];
38 CHAR16 SerialNumber[SMBIOS_STRING_MAX_LENGTH];
39 CHAR16 AssertTag[SMBIOS_STRING_MAX_LENGTH];
40 EFI_STRING ManufacturerPtr;
41 EFI_STRING VersionPtr;
42 EFI_STRING SerialNumberPtr;
43 EFI_STRING AssertTagPtr;
44 STRING_REF TokenToGet;
45 STRING_REF TokenToUpdate;
46 EFI_SMBIOS_HANDLE SmbiosHandle;
47 SMBIOS_TABLE_TYPE3 *SmbiosRecord;
48 EFI_MISC_CHASSIS_MANUFACTURER *ForType3InputData;
49
50 ForType3InputData = (EFI_MISC_CHASSIS_MANUFACTURER *)RecordData;
51
52 //
53 // First check for invalid parameters.
54 //
55 if (RecordData == NULL) {
56 return EFI_INVALID_PARAMETER;
57 }
58
59 //
60 // Update strings from PCD
61 //
62 AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSChassisManufacturer), Manufacturer);
63 if (StrLen (Manufacturer) > 0) {
64 TokenToUpdate = STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER);
65 HiiSetString (mHiiHandle, TokenToUpdate, Manufacturer, NULL);
66 }
67 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER);
68 ManufacturerPtr = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);
69 ManuStrLen = StrLen(ManufacturerPtr);
70 if (ManuStrLen > SMBIOS_STRING_MAX_LENGTH) {
71 return EFI_UNSUPPORTED;
72 }
73
74 AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSChassisVersion), Version);
75 if (StrLen (Version) > 0) {
76 TokenToUpdate = STRING_TOKEN (STR_MISC_CHASSIS_VERSION);
77 HiiSetString (mHiiHandle, TokenToUpdate, Version, NULL);
78 }
79 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_VERSION);
80 VersionPtr = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);
81 VerStrLen = StrLen(VersionPtr);
82 if (VerStrLen > SMBIOS_STRING_MAX_LENGTH) {
83 return EFI_UNSUPPORTED;
84 }
85
86 AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSChassisSerialNumber), SerialNumber);
87 if (StrLen (SerialNumber) > 0) {
88 TokenToUpdate = STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER);
89 HiiSetString (mHiiHandle, TokenToUpdate, SerialNumber, NULL);
90 }
91 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER);
92 SerialNumberPtr = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);
93 SerialNumStrLen = StrLen(SerialNumberPtr);
94 if (SerialNumStrLen > SMBIOS_STRING_MAX_LENGTH) {
95 return EFI_UNSUPPORTED;
96 }
97
98 AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSChassisAssetTag), AssertTag);
99 if (StrLen (AssertTag) > 0) {
100 TokenToUpdate = STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG);
101 HiiSetString (mHiiHandle, TokenToUpdate, AssertTag, NULL);
102 }
103 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG);
104 AssertTagPtr = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);
105 AssertTagStrLen = StrLen(AssertTagPtr);
106 if (AssertTagStrLen > SMBIOS_STRING_MAX_LENGTH) {
107 return EFI_UNSUPPORTED;
108 }
109
110 //
111 // Two zeros following the last string.
112 //
113 SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 + 1);
114 ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 + 1);
115
116 SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE;
117 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE3);
118 //
119 // Make handle chosen by smbios protocol.add automatically.
120 //
121 SmbiosRecord->Hdr.Handle = 0;
122 //
123 // Manu will be the 1st optional string following the formatted structure.
124 //
125 SmbiosRecord->Manufacturer = 1;
126 SmbiosRecord->Type = PcdGet8 (PcdSMBIOSChassisType);
127 //
128 // Version will be the 2nd optional string following the formatted structure.
129 //
130 SmbiosRecord->Version = 2;
131 //
132 // SerialNumber will be the 3rd optional string following the formatted structure.
133 //
134 SmbiosRecord->SerialNumber = 3;
135 //
136 // AssertTag will be the 4th optional string following the formatted structure.
137 //
138 SmbiosRecord->AssetTag = 4;
139 SmbiosRecord->BootupState = PcdGet8 (PcdSMBIOSChassisBootupState);
140 SmbiosRecord->PowerSupplyState = PcdGet8 (PcdSMBIOSChassisPowerSupplyState);
141 SmbiosRecord->ThermalState = (UINT8)ForType3InputData->ChassisThermalState;
142 SmbiosRecord->SecurityStatus = PcdGet8 (PcdSMBIOSChassisSecurityState);
143 *(UINT32 *)&SmbiosRecord->OemDefined = PcdGet32 (PcdSMBIOSChassisOemDefined);
144 SmbiosRecord->Height = PcdGet8 (PcdSMBIOSChassisHeight);
145 SmbiosRecord->NumberofPowerCords = PcdGet8 (PcdSMBIOSChassisNumberPowerCords);
146 SmbiosRecord->ContainedElementCount = PcdGet8 (PcdSMBIOSChassisElementCount);
147 SmbiosRecord->ContainedElementRecordLength = PcdGet8 (PcdSMBIOSChassisElementRecordLength);
148
149 OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
150 UnicodeStrToAsciiStr(ManufacturerPtr, OptionalStrStart);
151 UnicodeStrToAsciiStr(VersionPtr, OptionalStrStart + ManuStrLen + 1);
152 UnicodeStrToAsciiStr(SerialNumberPtr, OptionalStrStart + ManuStrLen + 1 + VerStrLen + 1);
153 UnicodeStrToAsciiStr(AssertTagPtr, OptionalStrStart + ManuStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1);
154
155 //
156 // Now we have got the full smbios record, call smbios protocol to add this record.
157 //
158 SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
159 Status = Smbios-> Add(
160 Smbios,
161 NULL,
162 &SmbiosHandle,
163 (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
164 );
165
166 FreePool(SmbiosRecord);
167 return Status;
168 }