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