Home | History | Annotate | Download | only in Library
      1 /** @file
      2   Provides library functions for common SMBIOS operations. Only available to DXE
      3   and UEFI module types.
      4 
      5 
      6 Copyright (c) 2012, Apple Inc. All rights reserved.
      7 Portitions Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
      8 This program and the accompanying materials are licensed and made available under
      9 the terms and conditions of the BSD License that accompanies this distribution.
     10 The full text of the license may be found at
     11 http://opensource.org/licenses/bsd-license.php.
     12 
     13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     15 
     16 **/
     17 
     18 #ifndef _SMBIOS_LIB_H__
     19 #define _SMBIOS_LIB_H__
     20 
     21 #include <IndustryStandard/SmBios.h>
     22 #include <Protocol/Smbios.h>
     23 
     24 
     25 ///
     26 /// Cache copy of the SMBIOS Protocol pointer
     27 ///
     28 extern EFI_SMBIOS_PROTOCOL *gSmbios;
     29 
     30 
     31 ///
     32 /// Template for SMBIOS table initialization.
     33 /// The SMBIOS_TABLE_STRING types in the formated area must match the
     34 /// StringArray sequene.
     35 ///
     36 typedef struct {
     37   //
     38   // formatted area of a given SMBIOS record
     39   //
     40   SMBIOS_STRUCTURE    *Entry;
     41   //
     42   // NULL terminated array of ASCII strings to be added to the SMBIOS record.
     43   //
     44   CHAR8               **StringArray;
     45 } SMBIOS_TEMPLATE_ENTRY;
     46 
     47 
     48 /**
     49   Create an initial SMBIOS Table from an array of SMBIOS_TEMPLATE_ENTRY
     50   entries. SMBIOS_TEMPLATE_ENTRY.NULL indicates the end of the table.
     51 
     52   @param  Template   Array of SMBIOS_TEMPLATE_ENTRY entries.
     53 
     54   @retval EFI_SUCCESS          New SMBIOS tables were created.
     55   @retval EFI_OUT_OF_RESOURCES New SMBIOS tables were not created.
     56 **/
     57 EFI_STATUS
     58 EFIAPI
     59 SmbiosLibInitializeFromTemplate (
     60   IN  SMBIOS_TEMPLATE_ENTRY   *Template
     61   );
     62 
     63 
     64 
     65 /**
     66   Create SMBIOS record.
     67 
     68   Converts a fixed SMBIOS structure and an array of pointers to strings into
     69   an SMBIOS record where the strings are cat'ed on the end of the fixed record
     70   and terminated via a double NULL and add to SMBIOS table.
     71 
     72   SMBIOS_TABLE_TYPE32 gSmbiosType12 = {
     73     { EFI_SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS, sizeof (SMBIOS_TABLE_TYPE12), 0 },
     74     1 // StringCount
     75   };
     76   CHAR8 *gSmbiosType12Strings[] = {
     77     "Not Found",
     78     NULL
     79   };
     80 
     81   ...
     82   AddSmbiosEntryFromTemplate (
     83     (EFI_SMBIOS_TABLE_HEADER*)&gSmbiosType12,
     84     gSmbiosType12Strings
     85     );
     86 
     87   @param  SmbiosEntry   Fixed SMBIOS structure
     88   @param  StringArray   Array of strings to convert to an SMBIOS string pack.
     89                         NULL is OK.
     90 
     91   @retval EFI_SUCCESS          New SmbiosEntry was added to SMBIOS table.
     92   @retval EFI_OUT_OF_RESOURCES SmbiosEntry was not added.
     93 **/
     94 EFI_STATUS
     95 EFIAPI
     96 SmbiosLibCreateEntry (
     97   IN  SMBIOS_STRUCTURE *SmbiosEntry,
     98   IN  CHAR8            **StringArray
     99   );
    100 
    101 
    102 /**
    103   Update the string associated with an existing SMBIOS record.
    104 
    105   This function allows the update of specific SMBIOS strings. The number of valid strings for any
    106   SMBIOS record is defined by how many strings were present when Add() was called.
    107 
    108   @param[in]    SmbiosHandle    SMBIOS Handle of structure that will have its string updated.
    109   @param[in]    StringNumber    The non-zero string number of the string to update.
    110   @param[in]    String          Update the StringNumber string with String.
    111 
    112   @retval EFI_SUCCESS           SmbiosHandle had its StringNumber String updated.
    113   @retval EFI_INVALID_PARAMETER SmbiosHandle does not exist. Or String is invalid.
    114   @retval EFI_UNSUPPORTED       String was not added because it is longer than the SMBIOS Table supports.
    115   @retval EFI_NOT_FOUND         The StringNumber.is not valid for this SMBIOS record.
    116 **/
    117 EFI_STATUS
    118 EFIAPI
    119 SmbiosLibUpdateString (
    120   IN  EFI_SMBIOS_HANDLE     SmbiosHandle,
    121   IN  SMBIOS_TABLE_STRING   StringNumber,
    122   IN  CHAR8                 *String
    123   );
    124 
    125 /**
    126   Update the string associated with an existing SMBIOS record.
    127 
    128   This function allows the update of specific SMBIOS strings. The number of valid strings for any
    129   SMBIOS record is defined by how many strings were present when Add() was called.
    130 
    131   @param[in]    SmbiosHandle    SMBIOS Handle of structure that will have its string updated.
    132   @param[in]    StringNumber    The non-zero string number of the string to update.
    133   @param[in]    String          Update the StringNumber string with String.
    134 
    135   @retval EFI_SUCCESS           SmbiosHandle had its StringNumber String updated.
    136   @retval EFI_INVALID_PARAMETER SmbiosHandle does not exist. Or String is invalid.
    137   @retval EFI_UNSUPPORTED       String was not added because it is longer than the SMBIOS Table supports.
    138   @retval EFI_NOT_FOUND         The StringNumber.is not valid for this SMBIOS record.
    139 **/
    140 EFI_STATUS
    141 EFIAPI
    142 SmbiosLibUpdateUnicodeString (
    143   IN  EFI_SMBIOS_HANDLE     SmbiosHandle,
    144   IN  SMBIOS_TABLE_STRING   StringNumber,
    145   IN  CHAR16                *String
    146   );
    147 
    148 /**
    149   Allow caller to read a specific SMBIOS string
    150 
    151   @param[in]    Header          SMBIOS record that contains the string.
    152   @param[in[    StringNumber    Instance of SMBIOS string 1 - N.
    153 
    154   @retval NULL                  Instance of Type SMBIOS string was not found.
    155   @retval Other                 Pointer to matching SMBIOS string.
    156 **/
    157 CHAR8 *
    158 EFIAPI
    159 SmbiosLibReadString (
    160   IN SMBIOS_STRUCTURE   *Header,
    161   IN EFI_SMBIOS_STRING  StringNumber
    162   );
    163 
    164 
    165 /**
    166   Allow the caller to discover a specific SMBIOS entry, and patch it if necissary.
    167 
    168   @param[in]    Type            Type of the next SMBIOS record to return.
    169   @param[in[    Instance        Instance of SMBIOS record 0 - N-1.
    170   @param[out]   SmbiosHandle    Returns SMBIOS handle for the matching record.
    171 
    172   @retval NULL                  Instance of Type SMBIOS record was not found.
    173   @retval Other                 Pointer to matching SMBIOS record.
    174 **/
    175 SMBIOS_STRUCTURE *
    176 EFIAPI
    177 SmbiosLibGetRecord (
    178   IN  EFI_SMBIOS_TYPE   Type,
    179   IN  UINTN             Instance,
    180   OUT EFI_SMBIOS_HANDLE *SmbiosHandle
    181   );
    182 
    183 /**
    184   Remove an SMBIOS record.
    185 
    186   This function removes an SMBIOS record using the handle specified by SmbiosHandle.
    187 
    188   @param[in]    SmbiosHandle        The handle of the SMBIOS record to remove.
    189 
    190   @retval EFI_SUCCESS               SMBIOS record was removed.
    191   @retval EFI_INVALID_PARAMETER     SmbiosHandle does not specify a valid SMBIOS record.
    192 **/
    193 EFI_STATUS
    194 EFIAPI
    195 SmbiosLibRemove (
    196   OUT EFI_SMBIOS_HANDLE SmbiosHandle
    197   );
    198 
    199 
    200 
    201 
    202 #endif
    203