mirror of https://github.com/acidanthera/audk.git
120 lines
3.6 KiB
C
120 lines
3.6 KiB
C
/** @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_
|