Home | History | Annotate | Download | only in MiscSubClassPlatformDxe
      1 /** @file
      2   BIOS system option string boot time changes.
      3   SMBIOS type 12.
      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 
     19 /**
     20   This function makes boot time changes to the contents of the
     21   MiscSystemOptionString (Type 12).
     22 
     23   @param  RecordData                 Pointer to copy of RecordData from the Data Table.
     24 
     25   @retval EFI_SUCCESS                All parameters were valid.
     26   @retval EFI_UNSUPPORTED            Unexpected RecordType value.
     27   @retval EFI_INVALID_PARAMETER      Invalid parameter was found.
     28 
     29 **/
     30 MISC_SMBIOS_TABLE_FUNCTION(SystemOptionString)
     31 {
     32   CHAR8                             *OptionalStrStart;
     33   UINTN                             OptStrLen;
     34   EFI_STRING                        OptionString;
     35   EFI_STATUS                        Status;
     36   STRING_REF                        TokenToGet;
     37   EFI_SMBIOS_HANDLE                 SmbiosHandle;
     38   SMBIOS_TABLE_TYPE12               *SmbiosRecord;
     39 
     40   //
     41   // First check for invalid parameters.
     42   //
     43   if (RecordData == NULL) {
     44     return EFI_INVALID_PARAMETER;
     45   }
     46 
     47   TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_OPTION_STRING);
     48   OptionString = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);
     49   OptStrLen = StrLen(OptionString);
     50   if (OptStrLen > SMBIOS_STRING_MAX_LENGTH) {
     51     return EFI_UNSUPPORTED;
     52   }
     53 
     54   //
     55   // Two zeros following the last string.
     56   //
     57   SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE12) + OptStrLen + 1 + 1);
     58   ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE12) + OptStrLen + 1 + 1);
     59 
     60   SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS;
     61   SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE12);
     62   //
     63   // Make handle chosen by smbios protocol.add automatically.
     64   //
     65   SmbiosRecord->Hdr.Handle = 0;
     66 
     67   SmbiosRecord->StringCount = 1;
     68   OptionalStrStart = (CHAR8*) (SmbiosRecord + 1);
     69   UnicodeStrToAsciiStr(OptionString, OptionalStrStart);
     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