blob: fb183d427f78d5d85c94a051820cbd4949d5e311 [file] [log] [blame]
/** @file
SMBIOS String Table Helper library.
Copyright (c) 2022, Arm Limited. All rights reserved.<BR>
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_