1 /** @file 2 3 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 **/ 13 14 #include "MiscSubclassDriver.h" 15 /** 16 This function makes boot time changes to the contents of the 17 MiscOemString (Type 11). 18 19 @param RecordData Pointer to copy of RecordData from the Data Table. 20 21 @retval EFI_SUCCESS All parameters were valid. 22 @retval EFI_UNSUPPORTED Unexpected RecordType value. 23 @retval EFI_INVALID_PARAMETER Invalid parameter was found. 24 25 **/ 26 MISC_SMBIOS_TABLE_FUNCTION(SystemLanguageString) 27 { 28 EFI_STATUS Status; 29 EFI_SMBIOS_HANDLE SmbiosHandle; 30 SMBIOS_TABLE_TYPE13 *SmbiosRecord; 31 UINTN StrLeng; 32 CHAR8 *OptionalStrStart; 33 EFI_STRING Str; 34 STRING_REF TokenToGet; 35 36 37 // 38 // First check for invalid parameters. 39 // 40 if (RecordData == NULL) { 41 return EFI_INVALID_PARAMETER; 42 } 43 44 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_LANGUAGE_STRING); 45 Str = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL); 46 StrLeng = StrLen(Str); 47 if (StrLeng > SMBIOS_STRING_MAX_LENGTH) { 48 return EFI_UNSUPPORTED; 49 } 50 51 // 52 // Two zeros following the last string. 53 // 54 SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE13) + StrLeng + 1 + 1); 55 ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE13) + StrLeng + 1 + 1); 56 57 SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION; 58 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE13); 59 // 60 // Make handle chosen by smbios protocol.add automatically. 61 // 62 SmbiosRecord->Hdr.Handle = 0; 63 SmbiosRecord->InstallableLanguages = 1; 64 SmbiosRecord->Flags = 1; 65 SmbiosRecord->CurrentLanguages = 1; 66 OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1); 67 UnicodeStrToAsciiStr(Str, OptionalStrStart); 68 69 70 // 71 // Now we have got the full smbios record, call smbios protocol to add this record. 72 // 73 Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); 74 75 FreePool(SmbiosRecord); 76 return Status; 77 } 78 79