]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/MiscSubClassPlatformDxe/MiscChassisManufacturerFunction.c
EmulatorPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / EmulatorPkg / MiscSubClassPlatformDxe / MiscChassisManufacturerFunction.c
CommitLineData
949f388f 1/** @file\r
2 Chassis manufacturer information boot time changes.\r
3 SMBIOS type 3.\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/**\r
13 This function makes boot time changes to the contents of the\r
14 MiscChassisManufacturer (Type 3).\r
15\r
d18d8a1d 16 @param RecordData Pointer to copy of RecordData from the Data Table.\r
949f388f 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(MiscChassisManufacturer)\r
24{\r
25 CHAR8 *OptionalStrStart;\r
26 UINTN ManuStrLen;\r
27 UINTN VerStrLen;\r
28 UINTN AssertTagStrLen;\r
29 UINTN SerialNumStrLen;\r
30 EFI_STATUS Status;\r
31 EFI_STRING Manufacturer;\r
32 EFI_STRING Version;\r
33 EFI_STRING SerialNumber;\r
34 EFI_STRING AssertTag;\r
35 STRING_REF TokenToGet;\r
36 EFI_SMBIOS_HANDLE SmbiosHandle;\r
37 SMBIOS_TABLE_TYPE3 *SmbiosRecord;\r
38 EFI_MISC_CHASSIS_MANUFACTURER *ForType3InputData;\r
39\r
40 ForType3InputData = (EFI_MISC_CHASSIS_MANUFACTURER *)RecordData;\r
41\r
42 //\r
43 // First check for invalid parameters.\r
44 //\r
45 if (RecordData == NULL) {\r
46 return EFI_INVALID_PARAMETER;\r
47 }\r
48\r
49 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER);\r
50 Manufacturer = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
51 ManuStrLen = StrLen(Manufacturer);\r
52 if (ManuStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
53 return EFI_UNSUPPORTED;\r
54 }\r
55\r
56 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_VERSION);\r
57 Version = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
58 VerStrLen = StrLen(Version);\r
59 if (VerStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
60 return EFI_UNSUPPORTED;\r
61 }\r
62\r
63 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER);\r
64 SerialNumber = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
65 SerialNumStrLen = StrLen(SerialNumber);\r
66 if (SerialNumStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
67 return EFI_UNSUPPORTED;\r
68 }\r
69\r
70 TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG);\r
71 AssertTag = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r
72 AssertTagStrLen = StrLen(AssertTag);\r
73 if (AssertTagStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
74 return EFI_UNSUPPORTED;\r
75 }\r
76\r
77 //\r
78 // Two zeros following the last string.\r
79 //\r
80 SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 + 1);\r
81 ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 + 1);\r
82\r
83 SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE;\r
84 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE3);\r
85 //\r
86 // Make handle chosen by smbios protocol.add automatically.\r
87 //\r
d18d8a1d 88 SmbiosRecord->Hdr.Handle = 0;\r
949f388f 89 //\r
90 // Manu will be the 1st optional string following the formatted structure.\r
d18d8a1d 91 //\r
92 SmbiosRecord->Manufacturer = 1;\r
949f388f 93 SmbiosRecord->Type = (UINT8)ForType3InputData->ChassisType.ChassisType;\r
94 //\r
95 // Version will be the 2nd optional string following the formatted structure.\r
96 //\r
d18d8a1d 97 SmbiosRecord->Version = 2;\r
949f388f 98 //\r
99 // SerialNumber will be the 3rd optional string following the formatted structure.\r
100 //\r
d18d8a1d 101 SmbiosRecord->SerialNumber = 3;\r
949f388f 102 //\r
103 // AssertTag will be the 4th optional string following the formatted structure.\r
104 //\r
d18d8a1d 105 SmbiosRecord->AssetTag = 4;\r
949f388f 106 SmbiosRecord->BootupState = (UINT8)ForType3InputData->ChassisBootupState;\r
107 SmbiosRecord->PowerSupplyState = (UINT8)ForType3InputData->ChassisPowerSupplyState;\r
108 SmbiosRecord->ThermalState = (UINT8)ForType3InputData->ChassisThermalState;\r
109 SmbiosRecord->SecurityStatus = (UINT8)ForType3InputData->ChassisSecurityState;\r
110 CopyMem (SmbiosRecord->OemDefined,(UINT8*)&ForType3InputData->ChassisOemDefined, 4);\r
111\r
112 OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
113 UnicodeStrToAsciiStr(Manufacturer, OptionalStrStart);\r
114 UnicodeStrToAsciiStr(Version, OptionalStrStart + ManuStrLen + 1);\r
115 UnicodeStrToAsciiStr(SerialNumber, OptionalStrStart + ManuStrLen + 1 + VerStrLen + 1);\r
116 UnicodeStrToAsciiStr(AssertTag, OptionalStrStart + ManuStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1);\r
117\r
118 //\r
119 // Now we have got the full smbios record, call smbios protocol to add this record.\r
120 //\r
2bfd90f9 121 Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);\r
949f388f 122\r
123 FreePool(SmbiosRecord);\r
124 return Status;\r
125}\r