Home | History | Annotate | Download | only in MiscSubClassPlatformDxe
      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