summaryrefslogtreecommitdiffstats
path: root/DynamicTablesPkg/Include
diff options
context:
space:
mode:
authorSami Mujawar <sami.mujawar@arm.com>2018-12-15 11:54:52 +0000
committerSami Mujawar <sami.mujawar@arm.com>2019-02-19 10:37:29 +0000
commita485dce6245ca8964c4f684894b0f089eed85d5c (patch)
tree0fefd3ccf9a564fd881c3ed0f4457c463f0a2836 /DynamicTablesPkg/Include
parent2440e68ca08883e7c2fe94ad4b3d5cb0cce45b0b (diff)
downloadedk2-a485dce6245ca8964c4f684894b0f089eed85d5c.tar.gz
edk2-a485dce6245ca8964c4f684894b0f089eed85d5c.tar.bz2
edk2-a485dce6245ca8964c4f684894b0f089eed85d5c.zip
DynamicTablesPkg: SMBIOS Table Generator
This patch introduces the required interfaces and definitions for implementing a SMBIOS table generator. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Alexei Fedorov <alexei.fedorov@arm.com>
Diffstat (limited to 'DynamicTablesPkg/Include')
-rw-r--r--DynamicTablesPkg/Include/SmbiosTableGenerator.h240
1 files changed, 240 insertions, 0 deletions
diff --git a/DynamicTablesPkg/Include/SmbiosTableGenerator.h b/DynamicTablesPkg/Include/SmbiosTableGenerator.h
new file mode 100644
index 0000000000..82b9156ac3
--- /dev/null
+++ b/DynamicTablesPkg/Include/SmbiosTableGenerator.h
@@ -0,0 +1,240 @@
+/** @file
+
+ Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.
+
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef SMBIOS_TABLE_GENERATOR_H_
+#define SMBIOS_TABLE_GENERATOR_H_
+
+#include <IndustryStandard/SmBios.h>
+
+#include <TableGenerator.h>
+
+#pragma pack(1)
+
+/** The SMBIOS_TABLE_GENERATOR_ID type describes SMBIOS table generator ID.
+*/
+typedef TABLE_GENERATOR_ID SMBIOS_TABLE_GENERATOR_ID;
+
+/** The ESTD_SMBIOS_TABLE_ID enum describes the SMBIOS table IDs reserved for
+ the standard generators.
+
+ NOTE: The SMBIOS Generator IDs do not match the table type numbers!
+ This allows 0 to be used to catch invalid parameters.
+*/
+typedef enum StdSmbiosTableGeneratorId {
+ EStdSmbiosTableIdReserved = 0x0000,
+ EStdSmbiosTableIdRAW,
+ EStdSmbiosTableIdType00,
+ EStdSmbiosTableIdType01,
+ EStdSmbiosTableIdType02,
+ EStdSmbiosTableIdType03,
+ EStdSmbiosTableIdType04,
+ EStdSmbiosTableIdType05,
+ EStdSmbiosTableIdType06,
+ EStdSmbiosTableIdType07,
+ EStdSmbiosTableIdType08,
+ EStdSmbiosTableIdType09,
+ EStdSmbiosTableIdType10,
+ EStdSmbiosTableIdType11,
+ EStdSmbiosTableIdType12,
+ EStdSmbiosTableIdType13,
+ EStdSmbiosTableIdType14,
+ EStdSmbiosTableIdType15,
+ EStdSmbiosTableIdType16,
+ EStdSmbiosTableIdType17,
+ EStdSmbiosTableIdType18,
+ EStdSmbiosTableIdType19,
+ EStdSmbiosTableIdType20,
+ EStdSmbiosTableIdType21,
+ EStdSmbiosTableIdType22,
+ EStdSmbiosTableIdType23,
+ EStdSmbiosTableIdType24,
+ EStdSmbiosTableIdType25,
+ EStdSmbiosTableIdType26,
+ EStdSmbiosTableIdType27,
+ EStdSmbiosTableIdType28,
+ EStdSmbiosTableIdType29,
+ EStdSmbiosTableIdType30,
+ EStdSmbiosTableIdType31,
+ EStdSmbiosTableIdType32,
+ EStdSmbiosTableIdType33,
+ EStdSmbiosTableIdType34,
+ EStdSmbiosTableIdType35,
+ EStdSmbiosTableIdType36,
+ EStdSmbiosTableIdType37,
+ EStdSmbiosTableIdType38,
+ EStdSmbiosTableIdType39,
+ EStdSmbiosTableIdType40,
+ EStdSmbiosTableIdType41,
+ EStdSmbiosTableIdType42,
+
+ // IDs 43 - 125 are reserved
+
+ EStdSmbiosTableIdType126 = (EStdSmbiosTableIdType00 + 126),
+ EStdSmbiosTableIdType127,
+ EStdSmbiosTableIdMax
+} ESTD_SMBIOS_TABLE_ID;
+
+/** This macro checks if the Table Generator ID is for an SMBIOS Table
+ Generator.
+
+ @param [in] TableGeneratorId The table generator ID.
+
+ @return TRUE if the table generator ID is for an SMBIOS Table
+ Generator.
+**/
+#define IS_GENERATOR_TYPE_SMBIOS(TableGeneratorId) \
+ ( \
+ GET_TABLE_TYPE (TableGeneratorId) == \
+ ETableGeneratorTypeSmbios \
+ )
+
+/** This macro checks if the Table Generator ID is for a standard SMBIOS
+ Table Generator.
+
+ @param [in] TableGeneratorId The table generator ID.
+
+ @return TRUE if the table generator ID is for a standard SMBIOS
+ Table Generator.
+**/
+#define IS_VALID_STD_SMBIOS_GENERATOR_ID(TableGeneratorId) \
+ ( \
+ IS_GENERATOR_NAMESPACE_STD(TableGeneratorId) && \
+ IS_GENERATOR_TYPE_SMBIOS(TableGeneratorId) && \
+ ((GET_TABLE_ID(GeneratorId) >= EStdSmbiosTableIdRaw) && \
+ (GET_TABLE_ID(GeneratorId) < EStdSmbiosTableIdMax)) \
+ )
+
+/** This macro creates a standard SMBIOS Table Generator ID.
+
+ @param [in] TableId The table generator ID.
+
+ @return a standard SMBIOS table generator ID.
+**/
+#define CREATE_STD_SMBIOS_TABLE_GEN_ID(TableId) \
+ CREATE_TABLE_GEN_ID ( \
+ ETableGeneratorTypeSmbios, \
+ ETableGeneratorNameSpaceStd, \
+ TableId \
+ )
+
+/** Forward declarations.
+*/
+typedef struct ConfigurationManagerProtocol EDKII_CONFIGURATION_MANAGER_PROTOCOL;
+typedef struct CmStdObjSmbiosTableInfo CM_STD_OBJ_SMBIOS_TABLE_INFO;
+typedef struct SmbiosTableGenerator SMBIOS_TABLE_GENERATOR;
+
+/** This function pointer describes the interface to SMBIOS table build
+ functions provided by the SMBIOS table generator and called by the
+ Table Manager to build an SMBIOS table.
+
+ @param [in] Generator Pointer to the SMBIOS table generator.
+ @param [in] SmbiosTableInfo Pointer to the SMBIOS table information.
+ @param [in] CfgMgrProtocol Pointer to the Configuration Manager
+ Protocol interface.
+ @param [out] Table Pointer to the generated SMBIOS table.
+
+ @return EFI_SUCCESS If the table is generated successfully or other
+ failure codes as returned by the generator.
+**/
+typedef EFI_STATUS (*SMBIOS_TABLE_GENERATOR_BUILD_TABLE) (
+ IN CONST SMBIOS_TABLE_GENERATOR * Generator,
+ IN CM_STD_OBJ_SMBIOS_TABLE_INFO * CONST SmbiosTableInfo,
+ IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,
+ OUT SMBIOS_STRUCTURE ** Table
+ );
+
+/** This function pointer describes the interface to used by the
+ Table Manager to give the generator an opportunity to free
+ any resources allocated for building the SMBIOS table.
+
+ @param [in] Generator Pointer to the SMBIOS table generator.
+ @param [in] SmbiosTableInfo Pointer to the SMBIOS table information.
+ @param [in] CfgMgrProtocol Pointer to the Configuration Manager
+ Protocol interface.
+ @param [in] Table Pointer to the generated SMBIOS table.
+
+ @return EFI_SUCCESS If freed successfully or other failure codes
+ as returned by the generator.
+**/
+typedef EFI_STATUS (*SMBIOS_TABLE_GENERATOR_FREE_TABLE) (
+ IN CONST SMBIOS_TABLE_GENERATOR * Generator,
+ IN CONST CM_STD_OBJ_SMBIOS_TABLE_INFO * CONST SmbiosTableInfo,
+ IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,
+ IN SMBIOS_STRUCTURE ** Table
+ );
+
+/** The SMBIOS_TABLE_GENERATOR structure provides an interface that the
+ Table Manager can use to invoke the functions to build SMBIOS tables.
+*/
+typedef struct SmbiosTableGenerator {
+ /// The SMBIOS table generator ID.
+ SMBIOS_TABLE_GENERATOR_ID GeneratorID;
+
+ /// String describing the DT table
+ /// generator.
+ CONST CHAR16* Description;
+
+ /// The SMBIOS table type.
+ SMBIOS_TYPE Type;
+
+ /// SMBIOS table build function pointer.
+ SMBIOS_TABLE_GENERATOR_BUILD_TABLE BuildSmbiosTable;
+
+ /** The function to free any resources
+ allocated for building the SMBIOS table.
+ */
+ SMBIOS_TABLE_GENERATOR_FREE_TABLE FreeTableResources;
+} SMBIOS_TABLE_GENERATOR;
+
+/** Register SMBIOS table factory generator.
+
+ The SMBIOS table factory maintains a list of the Standard and OEM SMBIOS
+ table generators.
+
+ @param [in] Generator Pointer to the SMBIOS table generator.
+
+ @retval EFI_SUCCESS The Generator was registered
+ successfully.
+ @retval EFI_INVALID_PARAMETER The Generator ID is invalid or
+ the Generator pointer is NULL.
+ @retval EFI_ALREADY_STARTED The Generator for the Table ID is
+ already registered.
+**/
+EFI_STATUS
+EFIAPI
+RegisterSmbiosTableGenerator (
+ IN CONST SMBIOS_TABLE_GENERATOR * CONST Generator
+ );
+
+/** Deregister SMBIOS generator.
+
+ This function is called by the SMBIOS table generator to deregister itself
+ from the SMBIOS table factory.
+
+ @param [in] Generator Pointer to the SMBIOS table generator.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_INVALID_PARAMETER The generator is invalid.
+ @retval EFI_NOT_FOUND The requested generator is not found
+ in the list of registered generators.
+**/
+EFI_STATUS
+EFIAPI
+DeregisterSmbiosTableGenerator (
+ IN CONST SMBIOS_TABLE_GENERATOR * CONST Generator
+ );
+#pragma pack()
+
+#endif // SMBIOS_TABLE_GENERATOR_H_
+