| /** @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_ |