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