/** @file SMBIOS String Table Helper library. Copyright (c) 2022, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef SMBIOS_STRING_TABLE_H_ #define SMBIOS_STRING_TABLE_H_ /** A structure representing a string in the string table. */ typedef struct StringElement { /// Length of the string (does not include the NULL termination) UINTN StringLen; /// Reference to the string CONST CHAR8 *String; } STRING_ELEMENT; /** A structure representing a string table. */ typedef struct StringTable { /// Count of strings in the table UINT8 StrCount; /// Total length of all strings in the table (does not include // the NULL termination for each string) UINTN TotalStrLen; /// Maximum string count UINT8 MaxStringElements; /// Pointer to the string table elements STRING_ELEMENT *Elements; } STRING_TABLE; /** Add a string to the string table @param[in] StrTable Pointer to the string table @param[in] Str Pointer to the string @param[out] StrRef Optional pointer to retrieve the string field reference of the string in the string table @return EFI_SUCCESS Success @return EFI_INVALID_PARAMETER Invalid string table pointer @return EFI_BUFFER_TOO_SMALL Insufficient space to add string **/ EFI_STATUS EFIAPI StringTableAddString ( IN STRING_TABLE *CONST StrTable, IN CONST CHAR8 *Str, OUT UINT8 *StrRef OPTIONAL ); /** Returns the total size required to publish the strings to the SMBIOS string area. @param[in] StrTable Pointer to the string table @return Total size required to publish the strings in the SMBIOS string area. **/ UINTN EFIAPI StringTableGetStringSetSize ( IN STRING_TABLE *CONST StrTable ); /** Iterate through the string table and publish the strings in the SMBIOS string area. @param[in] StrTable Pointer to the string table @param[in] SmbiosStringAreaStart Start address of the SMBIOS string area. @param[in] SmbiosStringAreaSize Size of the SMBIOS string area. @return EFI_SUCCESS Success @return EFI_INVALID_PARAMETER Invalid string table pointer @return EFI_BUFFER_TOO_SMALL Insufficient space to publish strings **/ EFI_STATUS EFIAPI StringTablePublishStringSet ( IN STRING_TABLE *CONST StrTable, IN CHAR8 *CONST SmbiosStringAreaStart, IN CONST UINTN SmbiosStringAreaSize ); /** Initialise the string table and allocate memory for the string elements. @param[in] StrTable Pointer to the string table @param[in] MaxStringElements Maximum number of strings that the string table can hold. @return EFI_SUCCESS Success @return EFI_INVALID_PARAMETER Invalid string table pointer @return EFI_OUT_OF_RESOURCES Failed to allocate memory for string elements **/ EFI_STATUS EFIAPI StringTableInitialize ( IN STRING_TABLE *CONST StrTable, IN UINTN MaxStringElements ); /** Free memory allocated for the string elements in the string table. @param[in] StrTable Pointer to the string table @return EFI_SUCCESS Success @return EFI_INVALID_PARAMETER Invalid string table pointer or string elements **/ EFI_STATUS EFIAPI StringTableFree ( IN STRING_TABLE *CONST StrTable ); #endif // SMBIOS_STRING_TABLE_H_