--- /dev/null
+/** @file\r
+\r
+ Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.\r
+\r
+ This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef SMBIOS_TABLE_GENERATOR_H_\r
+#define SMBIOS_TABLE_GENERATOR_H_\r
+\r
+#include <IndustryStandard/SmBios.h>\r
+\r
+#include <TableGenerator.h>\r
+\r
+#pragma pack(1)\r
+\r
+/** The SMBIOS_TABLE_GENERATOR_ID type describes SMBIOS table generator ID.\r
+*/\r
+typedef TABLE_GENERATOR_ID SMBIOS_TABLE_GENERATOR_ID;\r
+\r
+/** The ESTD_SMBIOS_TABLE_ID enum describes the SMBIOS table IDs reserved for\r
+ the standard generators.\r
+\r
+ NOTE: The SMBIOS Generator IDs do not match the table type numbers!\r
+ This allows 0 to be used to catch invalid parameters.\r
+*/\r
+typedef enum StdSmbiosTableGeneratorId {\r
+ EStdSmbiosTableIdReserved = 0x0000,\r
+ EStdSmbiosTableIdRAW,\r
+ EStdSmbiosTableIdType00,\r
+ EStdSmbiosTableIdType01,\r
+ EStdSmbiosTableIdType02,\r
+ EStdSmbiosTableIdType03,\r
+ EStdSmbiosTableIdType04,\r
+ EStdSmbiosTableIdType05,\r
+ EStdSmbiosTableIdType06,\r
+ EStdSmbiosTableIdType07,\r
+ EStdSmbiosTableIdType08,\r
+ EStdSmbiosTableIdType09,\r
+ EStdSmbiosTableIdType10,\r
+ EStdSmbiosTableIdType11,\r
+ EStdSmbiosTableIdType12,\r
+ EStdSmbiosTableIdType13,\r
+ EStdSmbiosTableIdType14,\r
+ EStdSmbiosTableIdType15,\r
+ EStdSmbiosTableIdType16,\r
+ EStdSmbiosTableIdType17,\r
+ EStdSmbiosTableIdType18,\r
+ EStdSmbiosTableIdType19,\r
+ EStdSmbiosTableIdType20,\r
+ EStdSmbiosTableIdType21,\r
+ EStdSmbiosTableIdType22,\r
+ EStdSmbiosTableIdType23,\r
+ EStdSmbiosTableIdType24,\r
+ EStdSmbiosTableIdType25,\r
+ EStdSmbiosTableIdType26,\r
+ EStdSmbiosTableIdType27,\r
+ EStdSmbiosTableIdType28,\r
+ EStdSmbiosTableIdType29,\r
+ EStdSmbiosTableIdType30,\r
+ EStdSmbiosTableIdType31,\r
+ EStdSmbiosTableIdType32,\r
+ EStdSmbiosTableIdType33,\r
+ EStdSmbiosTableIdType34,\r
+ EStdSmbiosTableIdType35,\r
+ EStdSmbiosTableIdType36,\r
+ EStdSmbiosTableIdType37,\r
+ EStdSmbiosTableIdType38,\r
+ EStdSmbiosTableIdType39,\r
+ EStdSmbiosTableIdType40,\r
+ EStdSmbiosTableIdType41,\r
+ EStdSmbiosTableIdType42,\r
+\r
+ // IDs 43 - 125 are reserved\r
+\r
+ EStdSmbiosTableIdType126 = (EStdSmbiosTableIdType00 + 126),\r
+ EStdSmbiosTableIdType127,\r
+ EStdSmbiosTableIdMax\r
+} ESTD_SMBIOS_TABLE_ID;\r
+\r
+/** This macro checks if the Table Generator ID is for an SMBIOS Table\r
+ Generator.\r
+\r
+ @param [in] TableGeneratorId The table generator ID.\r
+\r
+ @return TRUE if the table generator ID is for an SMBIOS Table\r
+ Generator.\r
+**/\r
+#define IS_GENERATOR_TYPE_SMBIOS(TableGeneratorId) \\r
+ ( \\r
+ GET_TABLE_TYPE (TableGeneratorId) == \\r
+ ETableGeneratorTypeSmbios \\r
+ )\r
+\r
+/** This macro checks if the Table Generator ID is for a standard SMBIOS\r
+ Table Generator.\r
+\r
+ @param [in] TableGeneratorId The table generator ID.\r
+\r
+ @return TRUE if the table generator ID is for a standard SMBIOS\r
+ Table Generator.\r
+**/\r
+#define IS_VALID_STD_SMBIOS_GENERATOR_ID(TableGeneratorId) \\r
+ ( \\r
+ IS_GENERATOR_NAMESPACE_STD(TableGeneratorId) && \\r
+ IS_GENERATOR_TYPE_SMBIOS(TableGeneratorId) && \\r
+ ((GET_TABLE_ID(GeneratorId) >= EStdSmbiosTableIdRaw) && \\r
+ (GET_TABLE_ID(GeneratorId) < EStdSmbiosTableIdMax)) \\r
+ )\r
+\r
+/** This macro creates a standard SMBIOS Table Generator ID.\r
+\r
+ @param [in] TableId The table generator ID.\r
+\r
+ @return a standard SMBIOS table generator ID.\r
+**/\r
+#define CREATE_STD_SMBIOS_TABLE_GEN_ID(TableId) \\r
+ CREATE_TABLE_GEN_ID ( \\r
+ ETableGeneratorTypeSmbios, \\r
+ ETableGeneratorNameSpaceStd, \\r
+ TableId \\r
+ )\r
+\r
+/** Forward declarations.\r
+*/\r
+typedef struct ConfigurationManagerProtocol EDKII_CONFIGURATION_MANAGER_PROTOCOL;\r
+typedef struct CmStdObjSmbiosTableInfo CM_STD_OBJ_SMBIOS_TABLE_INFO;\r
+typedef struct SmbiosTableGenerator SMBIOS_TABLE_GENERATOR;\r
+\r
+/** This function pointer describes the interface to SMBIOS table build\r
+ functions provided by the SMBIOS table generator and called by the\r
+ Table Manager to build an SMBIOS table.\r
+\r
+ @param [in] Generator Pointer to the SMBIOS table generator.\r
+ @param [in] SmbiosTableInfo Pointer to the SMBIOS table information.\r
+ @param [in] CfgMgrProtocol Pointer to the Configuration Manager\r
+ Protocol interface.\r
+ @param [out] Table Pointer to the generated SMBIOS table.\r
+\r
+ @return EFI_SUCCESS If the table is generated successfully or other\r
+ failure codes as returned by the generator.\r
+**/\r
+typedef EFI_STATUS (*SMBIOS_TABLE_GENERATOR_BUILD_TABLE) (\r
+ IN CONST SMBIOS_TABLE_GENERATOR * Generator,\r
+ IN CM_STD_OBJ_SMBIOS_TABLE_INFO * CONST SmbiosTableInfo,\r
+ IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,\r
+ OUT SMBIOS_STRUCTURE ** Table\r
+ );\r
+\r
+/** This function pointer describes the interface to used by the\r
+ Table Manager to give the generator an opportunity to free\r
+ any resources allocated for building the SMBIOS table.\r
+\r
+ @param [in] Generator Pointer to the SMBIOS table generator.\r
+ @param [in] SmbiosTableInfo Pointer to the SMBIOS table information.\r
+ @param [in] CfgMgrProtocol Pointer to the Configuration Manager\r
+ Protocol interface.\r
+ @param [in] Table Pointer to the generated SMBIOS table.\r
+\r
+ @return EFI_SUCCESS If freed successfully or other failure codes\r
+ as returned by the generator.\r
+**/\r
+typedef EFI_STATUS (*SMBIOS_TABLE_GENERATOR_FREE_TABLE) (\r
+ IN CONST SMBIOS_TABLE_GENERATOR * Generator,\r
+ IN CONST CM_STD_OBJ_SMBIOS_TABLE_INFO * CONST SmbiosTableInfo,\r
+ IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,\r
+ IN SMBIOS_STRUCTURE ** Table\r
+ );\r
+\r
+/** The SMBIOS_TABLE_GENERATOR structure provides an interface that the\r
+ Table Manager can use to invoke the functions to build SMBIOS tables.\r
+*/\r
+typedef struct SmbiosTableGenerator {\r
+ /// The SMBIOS table generator ID.\r
+ SMBIOS_TABLE_GENERATOR_ID GeneratorID;\r
+\r
+ /// String describing the DT table\r
+ /// generator.\r
+ CONST CHAR16* Description;\r
+\r
+ /// The SMBIOS table type.\r
+ SMBIOS_TYPE Type;\r
+\r
+ /// SMBIOS table build function pointer.\r
+ SMBIOS_TABLE_GENERATOR_BUILD_TABLE BuildSmbiosTable;\r
+\r
+ /** The function to free any resources\r
+ allocated for building the SMBIOS table.\r
+ */\r
+ SMBIOS_TABLE_GENERATOR_FREE_TABLE FreeTableResources;\r
+} SMBIOS_TABLE_GENERATOR;\r
+\r
+/** Register SMBIOS table factory generator.\r
+\r
+ The SMBIOS table factory maintains a list of the Standard and OEM SMBIOS\r
+ table generators.\r
+\r
+ @param [in] Generator Pointer to the SMBIOS table generator.\r
+\r
+ @retval EFI_SUCCESS The Generator was registered\r
+ successfully.\r
+ @retval EFI_INVALID_PARAMETER The Generator ID is invalid or\r
+ the Generator pointer is NULL.\r
+ @retval EFI_ALREADY_STARTED The Generator for the Table ID is\r
+ already registered.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+RegisterSmbiosTableGenerator (\r
+ IN CONST SMBIOS_TABLE_GENERATOR * CONST Generator\r
+ );\r
+\r
+/** Deregister SMBIOS generator.\r
+\r
+ This function is called by the SMBIOS table generator to deregister itself\r
+ from the SMBIOS table factory.\r
+\r
+ @param [in] Generator Pointer to the SMBIOS table generator.\r
+\r
+ @retval EFI_SUCCESS Success.\r
+ @retval EFI_INVALID_PARAMETER The generator is invalid.\r
+ @retval EFI_NOT_FOUND The requested generator is not found\r
+ in the list of registered generators.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+DeregisterSmbiosTableGenerator (\r
+ IN CONST SMBIOS_TABLE_GENERATOR * CONST Generator\r
+ );\r
+#pragma pack()\r
+\r
+#endif // SMBIOS_TABLE_GENERATOR_H_\r
+\r