]> git.proxmox.com Git - mirror_edk2.git/blame - Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSystemOptionStringFunction.c
BaseTools: Fix corner-cases of --hash feature
[mirror_edk2.git] / Vlv2TbltDevicePkg / SmBiosMiscDxe / MiscSystemOptionStringFunction.c
CommitLineData
3cbfba02
DW
1/*++\r
2\r
3Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>\r
4 \r\r
9dc8036d
MK
5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
6\r
3cbfba02
DW
7 \r\r
8\r
9\r
10Module Name:\r
11\r
12 MiscSystemOptionStringFunction.c\r
13\r
14Abstract:\r
15\r
16 BIOS system option string boot time changes.\r
17 SMBIOS type 12.\r
18\r
19--*/\r
20\r
21\r
22#include "CommonHeader.h"\r
23\r
24#include "MiscSubclassDriver.h"\r
25\r
26\r
27/**\r
28 This function makes boot time changes to the contents of the\r
29 MiscSystemOptionString (Type 12).\r
30\r
31 @param RecordData Pointer to copy of RecordData from the Data Table.\r
32\r
33 @retval EFI_SUCCESS All parameters were valid.\r
34 @retval EFI_UNSUPPORTED Unexpected RecordType value.\r
35 @retval EFI_INVALID_PARAMETER Invalid parameter was found.\r
36\r
37**/\r
38MISC_SMBIOS_TABLE_FUNCTION(SystemOptionString)\r
39{\r
40 CHAR8 *OptionalStrStart;\r
41 UINTN OptStrLen;\r
42 EFI_STRING OptionString;\r
43 EFI_STATUS Status;\r
44 STRING_REF TokenToGet;\r
45 EFI_SMBIOS_HANDLE SmbiosHandle;\r
46 SMBIOS_TABLE_TYPE12 *SmbiosRecord;\r
47\r
48 //\r
49 // First check for invalid parameters.\r
50 //\r
51 if (RecordData == NULL) {\r
52 return EFI_INVALID_PARAMETER;\r
53 }\r
54\r
55 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_OPTION_EN_US);\r
56 OptionString = SmbiosMiscGetString (TokenToGet);\r
57 OptStrLen = StrLen(OptionString);\r
58 if (OptStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
59 return EFI_UNSUPPORTED;\r
60 }\r
61\r
62 //\r
63 // Two zeros following the last string.\r
64 //\r
65 SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE12) + OptStrLen + 1 + 1);\r
66 ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE12) + OptStrLen + 1 + 1);\r
67\r
68 SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS;\r
69 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE12);\r
70\r
71 //\r
72 // Make handle chosen by smbios protocol.add automatically.\r
73 //\r
74 SmbiosRecord->Hdr.Handle = 0;\r
75\r
76 SmbiosRecord->StringCount = 1;\r
77 OptionalStrStart = (CHAR8*) (SmbiosRecord + 1);\r
78 UnicodeStrToAsciiStr(OptionString, OptionalStrStart);\r
79\r
80 //\r
81 // Now we have got the full smbios record, call smbios protocol to add this record.\r
82 //\r
83 SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;\r
84 Status = Smbios-> Add(\r
85 Smbios,\r
86 NULL,\r
87 &SmbiosHandle,\r
88 (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r
89 );\r
90\r
91 FreePool(SmbiosRecord);\r
92 return Status;\r
93}\r