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