]> git.proxmox.com Git - mirror_edk2.git/blob - DynamicTablesPkg/Include/Protocol/DynamicTableFactoryProtocol.h
DynamicTablesPkg: Dynamic Table Factory Protocol
[mirror_edk2.git] / DynamicTablesPkg / Include / Protocol / DynamicTableFactoryProtocol.h
1 /** @file
2
3 Copyright (c) 2017 - 2018, ARM Limited. All rights reserved.
4
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 @par Glossary:
14 - ACPI - Advanced Configuration and Power Interface
15 - SMBIOS - System Management BIOS
16 - DT - Device Tree
17 **/
18
19 #ifndef DYNAMIC_TABLE_FACTORY_PROTOCOL_H_
20 #define DYNAMIC_TABLE_FACTORY_PROTOCOL_H_
21
22 #include <AcpiTableGenerator.h>
23 #include <SmbiosTableGenerator.h>
24 #include <DeviceTreeTableGenerator.h>
25
26 /** This macro defines the Dynamic Table Factory Protocol GUID.
27
28 GUID: {91D1E327-FE5A-49B8-AB65-0ECE2DDB45EC}
29 */
30 #define EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL_GUID \
31 { 0x91d1e327, 0xfe5a, 0x49b8, \
32 { 0xab, 0x65, 0xe, 0xce, 0x2d, 0xdb, 0x45, 0xec } \
33 };
34
35 /** This macro defines the Configuration Manager Protocol Revision.
36 */
37 #define EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL_REVISION CREATE_REVISION (1, 0)
38
39 #pragma pack(1)
40
41 /**
42 Forward declarations:
43 */
44 typedef struct DynamicTableFactoryProtocol EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL;
45 typedef struct DynamicTableFactoryInfo EDKII_DYNAMIC_TABLE_FACTORY_INFO;
46
47 /** Return a pointer to the ACPI table generator.
48
49 @param [in] This Pointer to the Dynamic Table Factory Protocol.
50 @param [in] TableId The ACPI table generator ID for the
51 requested generator.
52 @param [out] Generator Pointer to the requested ACPI table
53 generator.
54
55 @retval EFI_SUCCESS Success.
56 @retval EFI_INVALID_PARAMETER A parameter is invalid.
57 @retval EFI_NOT_FOUND The requested generator is not found
58 in the list of registered generators.
59 **/
60 typedef
61 EFI_STATUS
62 EFIAPI
63 (EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_GET_ACPI_TABLE_GENERATOR) (
64 IN CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL * CONST This,
65 IN CONST ACPI_TABLE_GENERATOR_ID GeneratorId,
66 OUT CONST ACPI_TABLE_GENERATOR ** CONST Generator
67 );
68
69 /** Registers an ACPI table generator.
70
71 @param [in] Generator Pointer to the ACPI table generator.
72
73 @retval EFI_SUCCESS The Generator was registered
74 successfully.
75 @retval EFI_INVALID_PARAMETER The Generator ID is invalid or
76 the Generator pointer is NULL.
77 @retval EFI_ALREADY_STARTED The Generator for the Table ID is
78 already registered.
79 **/
80 typedef
81 EFI_STATUS
82 EFIAPI
83 (EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_ACPI_TABLE_GENERATOR) (
84 IN CONST ACPI_TABLE_GENERATOR * CONST Generator
85 );
86
87 /** Deregister an ACPI table generator.
88
89 @param [in] Generator Pointer to the ACPI table generator.
90
91 @retval EFI_SUCCESS Success.
92 @retval EFI_INVALID_PARAMETER The generator is invalid.
93 @retval EFI_NOT_FOUND The requested generator is not found
94 in the list of registered generators.
95 **/
96 typedef
97 EFI_STATUS
98 EFIAPI
99 (EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_ACPI_TABLE_GENERATOR) (
100 IN CONST ACPI_TABLE_GENERATOR * CONST Generator
101 );
102
103 /** Return a pointer to the SMBIOS table generator.
104
105 @param [in] This Pointer to the Dynamic Table Factory Protocol.
106 @param [in] TableId The SMBIOS table generator ID for the
107 requested generator.
108 @param [out] Generator Pointer to the requested SMBIOS table
109 generator.
110
111 @retval EFI_SUCCESS Success.
112 @retval EFI_INVALID_PARAMETER A parameter is invalid.
113 @retval EFI_NOT_FOUND The requested generator is not found
114 in the list of registered generators.
115 **/
116 typedef
117 EFI_STATUS
118 EFIAPI
119 (EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_GET_SMBIOS_TABLE_GENERATOR) (
120 IN CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL * CONST This,
121 IN CONST SMBIOS_TABLE_GENERATOR_ID GeneratorId,
122 OUT CONST SMBIOS_TABLE_GENERATOR ** CONST Generator
123 );
124
125 /** Register a SMBIOS table generator.
126
127 @param [in] Generator Pointer to the SMBIOS table generator.
128
129 @retval EFI_SUCCESS The Generator was registered
130 successfully.
131 @retval EFI_INVALID_PARAMETER The Generator ID is invalid or
132 the Generator pointer is NULL.
133 @retval EFI_ALREADY_STARTED The Generator for the Table ID is
134 already registered.
135 **/
136 typedef
137 EFI_STATUS
138 EFIAPI
139 (EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_SMBIOS_TABLE_GENERATOR) (
140 IN CONST SMBIOS_TABLE_GENERATOR * CONST Generator
141 );
142
143 /** Deregister a SMBIOS table generator.
144
145 @param [in] Generator Pointer to the SMBIOS table generator.
146
147 @retval EFI_SUCCESS Success.
148 @retval EFI_INVALID_PARAMETER The generator is invalid.
149 @retval EFI_NOT_FOUND The requested generator is not found
150 in the list of registered generators.
151 **/
152 typedef
153 EFI_STATUS
154 EFIAPI
155 (EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_SMBIOS_TABLE_GENERATOR) (
156 IN CONST SMBIOS_TABLE_GENERATOR * CONST Generator
157 );
158
159 /** Return a pointer to the Device Tree table generator.
160
161 @param [in] This Pointer to the Dynamic Table Factory Protocol.
162 @param [in] TableId The Device Tree table generator ID for the
163 requested generator.
164 @param [out] Generator Pointer to the requested Device Tree table
165 generator.
166
167 @retval EFI_SUCCESS Success.
168 @retval EFI_INVALID_PARAMETER A parameter is invalid.
169 @retval EFI_NOT_FOUND The requested generator is not found
170 in the list of registered generators.
171 **/
172 typedef
173 EFI_STATUS
174 EFIAPI
175 (EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_GET_DT_TABLE_GENERATOR) (
176 IN CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL * CONST This,
177 IN CONST DT_TABLE_GENERATOR_ID GeneratorId,
178 OUT CONST DT_TABLE_GENERATOR ** CONST Generator
179 );
180
181 /** Register a DT table generator.
182
183 @param [in] Generator Pointer to the DT table generator.
184
185 @retval EFI_SUCCESS The Generator was registered
186 successfully.
187 @retval EFI_INVALID_PARAMETER The Generator ID is invalid or
188 the Generator pointer is NULL.
189 @retval EFI_ALREADY_STARTED The Generator for the Table ID is
190 already registered.
191 **/
192 typedef
193 EFI_STATUS
194 EFIAPI
195 (EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_DT_TABLE_GENERATOR) (
196 IN CONST DT_TABLE_GENERATOR * CONST Generator
197 );
198
199 /** Deregister a DT table generator.
200
201 This function is called by the DT table generator to deregister itself
202 from the DT table factory.
203
204 @param [in] Generator Pointer to the DT table generator.
205
206 @retval EFI_SUCCESS Success.
207 @retval EFI_INVALID_PARAMETER The generator is invalid.
208 @retval EFI_NOT_FOUND The requested generator is not found
209 in the list of registered generators.
210 **/
211 typedef
212 EFI_STATUS
213 EFIAPI
214 (EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_DT_TABLE_GENERATOR) (
215 IN CONST DT_TABLE_GENERATOR * CONST Generator
216 );
217
218 /** A structure describing the Dynamic Table Factory Protocol interface.
219 */
220 typedef struct DynamicTableFactoryProtocol {
221 /// The Dynamic Table Factory Protocol revision.
222 UINT32 Revision;
223
224 /// The interface used to request an ACPI Table Generator.
225 EDKII_DYNAMIC_TABLE_FACTORY_GET_ACPI_TABLE_GENERATOR GetAcpiTableGenerator;
226
227 /// Register an ACPI table Generator
228 EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_ACPI_TABLE_GENERATOR
229 RegisterAcpiTableGenerator;
230
231 /// Deregister an ACPI table Generator
232 EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_ACPI_TABLE_GENERATOR
233 DeregisterAcpiTableGenerator;
234
235 /// The interface used to request a SMBIOS Table Generator.
236 EDKII_DYNAMIC_TABLE_FACTORY_GET_SMBIOS_TABLE_GENERATOR GetSmbiosTableGenerator;
237
238 /// Register an SMBIOS table Generator
239 EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_SMBIOS_TABLE_GENERATOR
240 RegisterSmbiosTableGenerator;
241
242 /// Deregister an SMBIOS table Generator
243 EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_SMBIOS_TABLE_GENERATOR
244 DeregisterSmbiosTableGenerator;
245
246 /// The interface used to request a Device Tree Table Generator.
247 EDKII_DYNAMIC_TABLE_FACTORY_GET_DT_TABLE_GENERATOR GetDtTableGenerator;
248
249 /// Register a DT generator
250 EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_DT_TABLE_GENERATOR
251 RegisterDtTableGenerator;
252
253 /// Deregister a DT generator
254 EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_DT_TABLE_GENERATOR
255 DeregisterDtTableGenerator;
256
257 /** Pointer to the data structure that holds the
258 list of registered table generators
259 */
260 EDKII_DYNAMIC_TABLE_FACTORY_INFO * TableFactoryInfo;
261 } EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL;
262
263 /** The Dynamic Table Factory Protocol GUID.
264 */
265 extern EFI_GUID gEdkiiDynamicTableFactoryProtocolGuid;
266
267 #pragma pack()
268
269 #endif // DYNAMIC_TABLE_FACTORY_PROTOCOL_H_