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