]> git.proxmox.com Git - mirror_edk2.git/blame - DynamicTablesPkg/Include/SmbiosTableGenerator.h
UefiCpuPkg CpuCommFeaturesLib: Fix GP fault issue about ProcTrace
[mirror_edk2.git] / DynamicTablesPkg / Include / SmbiosTableGenerator.h
CommitLineData
a485dce6
SM
1/** @file\r
2\r
3 Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.\r
4\r
9cd9bdc6 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a485dce6
SM
6\r
7**/\r
8\r
9#ifndef SMBIOS_TABLE_GENERATOR_H_\r
10#define SMBIOS_TABLE_GENERATOR_H_\r
11\r
12#include <IndustryStandard/SmBios.h>\r
13\r
14#include <TableGenerator.h>\r
15\r
16#pragma pack(1)\r
17\r
18/** The SMBIOS_TABLE_GENERATOR_ID type describes SMBIOS table generator ID.\r
19*/\r
20typedef TABLE_GENERATOR_ID SMBIOS_TABLE_GENERATOR_ID;\r
21\r
22/** The ESTD_SMBIOS_TABLE_ID enum describes the SMBIOS table IDs reserved for\r
23 the standard generators.\r
24\r
25 NOTE: The SMBIOS Generator IDs do not match the table type numbers!\r
26 This allows 0 to be used to catch invalid parameters.\r
27*/\r
28typedef enum StdSmbiosTableGeneratorId {\r
29 EStdSmbiosTableIdReserved = 0x0000,\r
30 EStdSmbiosTableIdRAW,\r
31 EStdSmbiosTableIdType00,\r
32 EStdSmbiosTableIdType01,\r
33 EStdSmbiosTableIdType02,\r
34 EStdSmbiosTableIdType03,\r
35 EStdSmbiosTableIdType04,\r
36 EStdSmbiosTableIdType05,\r
37 EStdSmbiosTableIdType06,\r
38 EStdSmbiosTableIdType07,\r
39 EStdSmbiosTableIdType08,\r
40 EStdSmbiosTableIdType09,\r
41 EStdSmbiosTableIdType10,\r
42 EStdSmbiosTableIdType11,\r
43 EStdSmbiosTableIdType12,\r
44 EStdSmbiosTableIdType13,\r
45 EStdSmbiosTableIdType14,\r
46 EStdSmbiosTableIdType15,\r
47 EStdSmbiosTableIdType16,\r
48 EStdSmbiosTableIdType17,\r
49 EStdSmbiosTableIdType18,\r
50 EStdSmbiosTableIdType19,\r
51 EStdSmbiosTableIdType20,\r
52 EStdSmbiosTableIdType21,\r
53 EStdSmbiosTableIdType22,\r
54 EStdSmbiosTableIdType23,\r
55 EStdSmbiosTableIdType24,\r
56 EStdSmbiosTableIdType25,\r
57 EStdSmbiosTableIdType26,\r
58 EStdSmbiosTableIdType27,\r
59 EStdSmbiosTableIdType28,\r
60 EStdSmbiosTableIdType29,\r
61 EStdSmbiosTableIdType30,\r
62 EStdSmbiosTableIdType31,\r
63 EStdSmbiosTableIdType32,\r
64 EStdSmbiosTableIdType33,\r
65 EStdSmbiosTableIdType34,\r
66 EStdSmbiosTableIdType35,\r
67 EStdSmbiosTableIdType36,\r
68 EStdSmbiosTableIdType37,\r
69 EStdSmbiosTableIdType38,\r
70 EStdSmbiosTableIdType39,\r
71 EStdSmbiosTableIdType40,\r
72 EStdSmbiosTableIdType41,\r
73 EStdSmbiosTableIdType42,\r
74\r
75 // IDs 43 - 125 are reserved\r
76\r
77 EStdSmbiosTableIdType126 = (EStdSmbiosTableIdType00 + 126),\r
78 EStdSmbiosTableIdType127,\r
79 EStdSmbiosTableIdMax\r
80} ESTD_SMBIOS_TABLE_ID;\r
81\r
82/** This macro checks if the Table Generator ID is for an SMBIOS Table\r
83 Generator.\r
84\r
85 @param [in] TableGeneratorId The table generator ID.\r
86\r
87 @return TRUE if the table generator ID is for an SMBIOS Table\r
88 Generator.\r
89**/\r
90#define IS_GENERATOR_TYPE_SMBIOS(TableGeneratorId) \\r
91 ( \\r
92 GET_TABLE_TYPE (TableGeneratorId) == \\r
93 ETableGeneratorTypeSmbios \\r
94 )\r
95\r
96/** This macro checks if the Table Generator ID is for a standard SMBIOS\r
97 Table Generator.\r
98\r
99 @param [in] TableGeneratorId The table generator ID.\r
100\r
101 @return TRUE if the table generator ID is for a standard SMBIOS\r
102 Table Generator.\r
103**/\r
104#define IS_VALID_STD_SMBIOS_GENERATOR_ID(TableGeneratorId) \\r
105 ( \\r
106 IS_GENERATOR_NAMESPACE_STD(TableGeneratorId) && \\r
107 IS_GENERATOR_TYPE_SMBIOS(TableGeneratorId) && \\r
108 ((GET_TABLE_ID(GeneratorId) >= EStdSmbiosTableIdRaw) && \\r
109 (GET_TABLE_ID(GeneratorId) < EStdSmbiosTableIdMax)) \\r
110 )\r
111\r
112/** This macro creates a standard SMBIOS Table Generator ID.\r
113\r
114 @param [in] TableId The table generator ID.\r
115\r
116 @return a standard SMBIOS table generator ID.\r
117**/\r
118#define CREATE_STD_SMBIOS_TABLE_GEN_ID(TableId) \\r
119 CREATE_TABLE_GEN_ID ( \\r
120 ETableGeneratorTypeSmbios, \\r
121 ETableGeneratorNameSpaceStd, \\r
122 TableId \\r
123 )\r
124\r
125/** Forward declarations.\r
126*/\r
127typedef struct ConfigurationManagerProtocol EDKII_CONFIGURATION_MANAGER_PROTOCOL;\r
128typedef struct CmStdObjSmbiosTableInfo CM_STD_OBJ_SMBIOS_TABLE_INFO;\r
129typedef struct SmbiosTableGenerator SMBIOS_TABLE_GENERATOR;\r
130\r
131/** This function pointer describes the interface to SMBIOS table build\r
132 functions provided by the SMBIOS table generator and called by the\r
133 Table Manager to build an SMBIOS table.\r
134\r
135 @param [in] Generator Pointer to the SMBIOS table generator.\r
136 @param [in] SmbiosTableInfo Pointer to the SMBIOS table information.\r
137 @param [in] CfgMgrProtocol Pointer to the Configuration Manager\r
138 Protocol interface.\r
139 @param [out] Table Pointer to the generated SMBIOS table.\r
140\r
141 @return EFI_SUCCESS If the table is generated successfully or other\r
142 failure codes as returned by the generator.\r
143**/\r
144typedef EFI_STATUS (*SMBIOS_TABLE_GENERATOR_BUILD_TABLE) (\r
145 IN CONST SMBIOS_TABLE_GENERATOR * Generator,\r
146 IN CM_STD_OBJ_SMBIOS_TABLE_INFO * CONST SmbiosTableInfo,\r
147 IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,\r
148 OUT SMBIOS_STRUCTURE ** Table\r
149 );\r
150\r
151/** This function pointer describes the interface to used by the\r
152 Table Manager to give the generator an opportunity to free\r
153 any resources allocated for building the SMBIOS table.\r
154\r
155 @param [in] Generator Pointer to the SMBIOS table generator.\r
156 @param [in] SmbiosTableInfo Pointer to the SMBIOS table information.\r
157 @param [in] CfgMgrProtocol Pointer to the Configuration Manager\r
158 Protocol interface.\r
159 @param [in] Table Pointer to the generated SMBIOS table.\r
160\r
161 @return EFI_SUCCESS If freed successfully or other failure codes\r
162 as returned by the generator.\r
163**/\r
164typedef EFI_STATUS (*SMBIOS_TABLE_GENERATOR_FREE_TABLE) (\r
165 IN CONST SMBIOS_TABLE_GENERATOR * Generator,\r
166 IN CONST CM_STD_OBJ_SMBIOS_TABLE_INFO * CONST SmbiosTableInfo,\r
167 IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,\r
168 IN SMBIOS_STRUCTURE ** Table\r
169 );\r
170\r
171/** The SMBIOS_TABLE_GENERATOR structure provides an interface that the\r
172 Table Manager can use to invoke the functions to build SMBIOS tables.\r
173*/\r
174typedef struct SmbiosTableGenerator {\r
175 /// The SMBIOS table generator ID.\r
176 SMBIOS_TABLE_GENERATOR_ID GeneratorID;\r
177\r
178 /// String describing the DT table\r
179 /// generator.\r
180 CONST CHAR16* Description;\r
181\r
182 /// The SMBIOS table type.\r
183 SMBIOS_TYPE Type;\r
184\r
185 /// SMBIOS table build function pointer.\r
186 SMBIOS_TABLE_GENERATOR_BUILD_TABLE BuildSmbiosTable;\r
187\r
188 /** The function to free any resources\r
189 allocated for building the SMBIOS table.\r
190 */\r
191 SMBIOS_TABLE_GENERATOR_FREE_TABLE FreeTableResources;\r
192} SMBIOS_TABLE_GENERATOR;\r
193\r
194/** Register SMBIOS table factory generator.\r
195\r
196 The SMBIOS table factory maintains a list of the Standard and OEM SMBIOS\r
197 table generators.\r
198\r
199 @param [in] Generator Pointer to the SMBIOS table generator.\r
200\r
201 @retval EFI_SUCCESS The Generator was registered\r
202 successfully.\r
203 @retval EFI_INVALID_PARAMETER The Generator ID is invalid or\r
204 the Generator pointer is NULL.\r
205 @retval EFI_ALREADY_STARTED The Generator for the Table ID is\r
206 already registered.\r
207**/\r
208EFI_STATUS\r
209EFIAPI\r
210RegisterSmbiosTableGenerator (\r
211 IN CONST SMBIOS_TABLE_GENERATOR * CONST Generator\r
212 );\r
213\r
214/** Deregister SMBIOS generator.\r
215\r
216 This function is called by the SMBIOS table generator to deregister itself\r
217 from the SMBIOS table factory.\r
218\r
219 @param [in] Generator Pointer to the SMBIOS table generator.\r
220\r
221 @retval EFI_SUCCESS Success.\r
222 @retval EFI_INVALID_PARAMETER The generator is invalid.\r
223 @retval EFI_NOT_FOUND The requested generator is not found\r
224 in the list of registered generators.\r
225**/\r
226EFI_STATUS\r
227EFIAPI\r
228DeregisterSmbiosTableGenerator (\r
229 IN CONST SMBIOS_TABLE_GENERATOR * CONST Generator\r
230 );\r
231#pragma pack()\r
232\r
233#endif // SMBIOS_TABLE_GENERATOR_H_\r
234\r