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