]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction.c
BaseTools: Library hashing fix and optimization for --hash feature
[mirror_edk2.git] / EmulatorPkg / MiscSubClassPlatformDxe / MiscBaseBoardManufacturerFunction.c
CommitLineData
949f388f 1/** @file\r
2 BaseBoard manufacturer information boot time changes.\r
3 SMBIOS type 2.\r
4\r
2bfd90f9 5 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
e3ba31da 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
949f388f 7\r
8**/\r
9\r
10#include "MiscSubClassDriver.h"\r
11/**\r
12 This function makes boot time changes to the contents of the\r
13 MiscBaseBoardManufacturer (Type 2).\r
14\r
d18d8a1d 15 @param RecordData Pointer to copy of RecordData from the Data Table.\r
949f388f 16\r
17 @retval EFI_SUCCESS All parameters were valid.\r
18 @retval EFI_UNSUPPORTED Unexpected RecordType value.\r
19 @retval EFI_INVALID_PARAMETER Invalid parameter was found.\r
20\r
21**/\r
22MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer)\r
23{\r
24 CHAR8 *OptionalStrStart;\r
25 UINTN ManuStrLen;\r
26 UINTN ProductStrLen;\r
27 UINTN VerStrLen;\r
28 UINTN AssertTagStrLen;\r
29 UINTN SerialNumStrLen;\r
30 UINTN ChassisStrLen;\r
31 EFI_STATUS Status;\r
32 EFI_STRING Manufacturer;\r
33 EFI_STRING Product;\r
34 EFI_STRING Version;\r
35 EFI_STRING SerialNumber;\r
36 EFI_STRING AssertTag;\r
37 EFI_STRING Chassis;\r
38 STRING_REF TokenToGet;\r
39 EFI_SMBIOS_HANDLE SmbiosHandle;\r
40 SMBIOS_TABLE_TYPE2 *SmbiosRecord;\r
41 EFI_MISC_BASE_BOARD_MANUFACTURER *ForType2InputData;\r
42\r
43 ForType2InputData = (EFI_MISC_BASE_BOARD_MANUFACTURER *)RecordData;\r
44\r
45 //\r
46 // First check for invalid parameters.\r
47 //\r
48 if (RecordData == NULL) {\r
49 return EFI_INVALID_PARAMETER;\r
50 }\r
51\r
52 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER);\r
53 Manufacturer = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
54 ManuStrLen = StrLen(Manufacturer);\r
55 if (ManuStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
56 return EFI_UNSUPPORTED;\r
57 }\r
58\r
59 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_PRODUCT_NAME);\r
60 Product = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
61 ProductStrLen = StrLen(Product);\r
62 if (ProductStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
63 return EFI_UNSUPPORTED;\r
64 }\r
65\r
66 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_VERSION);\r
67 Version = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
68 VerStrLen = StrLen(Version);\r
69 if (VerStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
70 return EFI_UNSUPPORTED;\r
71 }\r
72\r
73 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER);\r
74 SerialNumber = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
75 SerialNumStrLen = StrLen(SerialNumber);\r
76 if (SerialNumStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
77 return EFI_UNSUPPORTED;\r
78 }\r
79\r
80 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG);\r
81 AssertTag = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
82 AssertTagStrLen = StrLen(AssertTag);\r
83 if (AssertTagStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
84 return EFI_UNSUPPORTED;\r
85 }\r
86\r
87 TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_CHASSIS_LOCATION);\r
88 Chassis = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
89 ChassisStrLen = StrLen(Chassis);\r
90 if (ChassisStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
91 return EFI_UNSUPPORTED;\r
92 }\r
93\r
94\r
95 //\r
96 // Two zeros following the last string.\r
97 //\r
98 SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 + ChassisStrLen +1 + 1);\r
99 ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 + ChassisStrLen +1 + 1);\r
100\r
101 SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_BASEBOARD_INFORMATION;\r
102 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE2);\r
103 //\r
104 // Make handle chosen by smbios protocol.add automatically.\r
105 //\r
d18d8a1d 106 SmbiosRecord->Hdr.Handle = 0;\r
949f388f 107 //\r
108 // Manu will be the 1st optional string following the formatted structure.\r
d18d8a1d 109 //\r
110 SmbiosRecord->Manufacturer = 1;\r
949f388f 111 //\r
112 // ProductName will be the 2st optional string following the formatted structure.\r
d18d8a1d 113 //\r
114 SmbiosRecord->ProductName = 2;\r
949f388f 115 //\r
116 // Version will be the 3rd optional string following the formatted structure.\r
117 //\r
d18d8a1d 118 SmbiosRecord->Version = 3;\r
949f388f 119 //\r
120 // SerialNumber will be the 4th optional string following the formatted structure.\r
121 //\r
d18d8a1d 122 SmbiosRecord->SerialNumber = 4;\r
949f388f 123 //\r
124 // AssertTag will be the 5th optional string following the formatted structure.\r
125 //\r
d18d8a1d 126 SmbiosRecord->AssetTag = 5;\r
949f388f 127\r
128 //\r
129 // LocationInChassis will be the 6th optional string following the formatted structure.\r
130 //\r
d18d8a1d 131 SmbiosRecord->LocationInChassis = 6;\r
949f388f 132 SmbiosRecord->FeatureFlag = (*(BASE_BOARD_FEATURE_FLAGS*)&(ForType2InputData->BaseBoardFeatureFlags));\r
133 SmbiosRecord->ChassisHandle = 0;\r
134 SmbiosRecord->BoardType = (UINT8)ForType2InputData->BaseBoardType;\r
135 SmbiosRecord->NumberOfContainedObjectHandles = 0;\r
d18d8a1d 136\r
949f388f 137 OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
138 //\r
139 // Since we fill NumberOfContainedObjectHandles = 0 for simple, just after this filed to fill string\r
140 //\r
141 OptionalStrStart -= 2;\r
142 UnicodeStrToAsciiStr(Manufacturer, OptionalStrStart);\r
143 UnicodeStrToAsciiStr(Product, OptionalStrStart + ManuStrLen + 1);\r
144 UnicodeStrToAsciiStr(Version, OptionalStrStart + ManuStrLen + 1 + ProductStrLen + 1);\r
145 UnicodeStrToAsciiStr(SerialNumber, OptionalStrStart + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1);\r
146 UnicodeStrToAsciiStr(AssertTag, OptionalStrStart + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1);\r
147 UnicodeStrToAsciiStr(Chassis, OptionalStrStart + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1);\r
148 //\r
149 // Now we have got the full smbios record, call smbios protocol to add this record.\r
150 //\r
2bfd90f9 151 Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);\r
949f388f 152\r
153 FreePool(SmbiosRecord);\r
154 return Status;\r
155}\r