]> git.proxmox.com Git - mirror_edk2.git/blame - DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DeviceTreeTableFactory/DeviceTreeTableFactory.c
DynamicTablesPkg: Apply uncrustify changes
[mirror_edk2.git] / DynamicTablesPkg / Drivers / DynamicTableFactoryDxe / DeviceTreeTableFactory / DeviceTreeTableFactory.c
CommitLineData
3a609e0a
SM
1/** @file\r
2 Device Tree Table Factory\r
3\r
4 Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.\r
5\r
9cd9bdc6 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
3a609e0a
SM
7\r
8 @par Glossary:\r
9 - Std - Standard\r
10**/\r
11\r
12#include <Library/BaseLib.h>\r
13#include <Library/BaseMemoryLib.h>\r
14#include <Library/DebugLib.h>\r
15\r
16// Module specific include files.\r
17#include <DeviceTreeTableGenerator.h>\r
18#include <ConfigurationManagerObject.h>\r
19#include <Protocol/ConfigurationManagerProtocol.h>\r
20#include <Protocol/DynamicTableFactoryProtocol.h>\r
21\r
22#include "DynamicTableFactory.h"\r
23\r
731c67e1 24extern EDKII_DYNAMIC_TABLE_FACTORY_INFO TableFactoryInfo;\r
3a609e0a
SM
25\r
26/** Return a pointer to the DT table generator.\r
27\r
28 @param [in] This Pointer to the Dynamic Table Factory Protocol.\r
29 @param [in] GeneratorId The DT table generator ID for the\r
30 requested generator.\r
31 @param [out] Generator Pointer to the requested DT table\r
32 generator.\r
33\r
34 @retval EFI_SUCCESS Success.\r
35 @retval EFI_INVALID_PARAMETER A parameter is invalid.\r
36 @retval EFI_NOT_FOUND The requested generator is not found\r
37 in the list of registered generators.\r
38**/\r
39EFI_STATUS\r
40EFIAPI\r
41GetDtTableGenerator (\r
731c67e1 42 IN CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL *CONST This,\r
3a609e0a 43 IN CONST DT_TABLE_GENERATOR_ID GeneratorId,\r
731c67e1 44 OUT CONST DT_TABLE_GENERATOR **CONST Generator\r
3a609e0a
SM
45 )\r
46{\r
731c67e1
MK
47 UINT16 TableId;\r
48 EDKII_DYNAMIC_TABLE_FACTORY_INFO *FactoryInfo;\r
3a609e0a
SM
49\r
50 ASSERT (This != NULL);\r
51\r
52 FactoryInfo = This->TableFactoryInfo;\r
53\r
54 if (Generator == NULL) {\r
55 DEBUG ((DEBUG_ERROR, "ERROR: Invalid Generator pointer\n"));\r
56 return EFI_INVALID_PARAMETER;\r
57 }\r
58\r
59 if (!IS_GENERATOR_TYPE_DT (GeneratorId)) {\r
60 DEBUG ((DEBUG_ERROR, "ERROR: Generator Type is not DT\n"));\r
61 return EFI_INVALID_PARAMETER;\r
62 }\r
63\r
64 *Generator = NULL;\r
731c67e1 65 TableId = GET_TABLE_ID (GeneratorId);\r
3a609e0a
SM
66 if (IS_GENERATOR_NAMESPACE_STD (GeneratorId)) {\r
67 if (TableId >= EStdDtTableIdMax) {\r
68 ASSERT (TableId < EStdDtTableIdMax);\r
69 return EFI_INVALID_PARAMETER;\r
70 }\r
731c67e1 71\r
3a609e0a
SM
72 if (FactoryInfo->StdDtTableGeneratorList[TableId] != NULL) {\r
73 *Generator = FactoryInfo->StdDtTableGeneratorList[TableId];\r
74 } else {\r
75 return EFI_NOT_FOUND;\r
76 }\r
77 } else {\r
78 if (TableId > FixedPcdGet16 (PcdMaxCustomDTGenerators)) {\r
79 ASSERT (TableId <= FixedPcdGet16 (PcdMaxCustomDTGenerators));\r
80 return EFI_INVALID_PARAMETER;\r
81 }\r
731c67e1 82\r
3a609e0a
SM
83 if (FactoryInfo->CustomDtTableGeneratorList[TableId] != NULL) {\r
84 *Generator = FactoryInfo->CustomDtTableGeneratorList[TableId];\r
85 } else {\r
86 return EFI_NOT_FOUND;\r
87 }\r
88 }\r
731c67e1 89\r
3a609e0a
SM
90 return EFI_SUCCESS;\r
91}\r
92\r
93/** Register DT table factory generator.\r
94\r
95 The DT table factory maintains a list of the Standard and OEM DT\r
96 table generators.\r
97\r
98 @param [in] Generator Pointer to the DT table generator.\r
99\r
100 @retval EFI_SUCCESS The Generator was registered\r
101 successfully.\r
102 @retval EFI_INVALID_PARAMETER The Generator ID is invalid or\r
103 the Generator pointer is NULL.\r
104 @retval EFI_ALREADY_STARTED The Generator for the Table ID is\r
105 already registered.\r
106**/\r
107EFI_STATUS\r
108EFIAPI\r
109RegisterDtTableGenerator (\r
731c67e1 110 IN CONST DT_TABLE_GENERATOR *CONST Generator\r
3a609e0a
SM
111 )\r
112{\r
113 UINT16 TableId;\r
114\r
115 if (Generator == NULL) {\r
116 DEBUG ((DEBUG_ERROR, "ERROR: DT register - Invalid Generator\n"));\r
117 return EFI_INVALID_PARAMETER;\r
118 }\r
119\r
120 if (!IS_GENERATOR_TYPE_DT (Generator->GeneratorID)) {\r
121 DEBUG ((\r
122 DEBUG_ERROR,\r
123 "ERROR: DT register - Generator" \\r
124 " Type is not DT\n"\r
125 ));\r
126 return EFI_INVALID_PARAMETER;\r
127 }\r
128\r
129 DEBUG ((DEBUG_INFO, "Registering %s\n", Generator->Description));\r
130\r
131 TableId = GET_TABLE_ID (Generator->GeneratorID);\r
132 if (IS_GENERATOR_NAMESPACE_STD (Generator->GeneratorID)) {\r
133 if (TableId >= EStdDtTableIdMax) {\r
134 ASSERT (TableId < EStdDtTableIdMax);\r
135 return EFI_INVALID_PARAMETER;\r
136 }\r
731c67e1 137\r
3a609e0a
SM
138 if (TableFactoryInfo.StdDtTableGeneratorList[TableId] == NULL) {\r
139 TableFactoryInfo.StdDtTableGeneratorList[TableId] = Generator;\r
140 } else {\r
141 return EFI_ALREADY_STARTED;\r
142 }\r
143 } else {\r
144 if (TableId > FixedPcdGet16 (PcdMaxCustomDTGenerators)) {\r
145 ASSERT (TableId <= FixedPcdGet16 (PcdMaxCustomDTGenerators));\r
146 return EFI_INVALID_PARAMETER;\r
147 }\r
731c67e1 148\r
3a609e0a
SM
149 if (TableFactoryInfo.CustomDtTableGeneratorList[TableId] == NULL) {\r
150 TableFactoryInfo.CustomDtTableGeneratorList[TableId] = Generator;\r
151 } else {\r
152 return EFI_ALREADY_STARTED;\r
153 }\r
154 }\r
731c67e1 155\r
3a609e0a
SM
156 return EFI_SUCCESS;\r
157}\r
158\r
159/** Deregister DT generator.\r
160\r
161 This function is called by the DT table generator to deregister itself\r
162 from the DT table factory.\r
163\r
164 @param [in] Generator Pointer to the DT table generator.\r
165\r
166 @retval EFI_SUCCESS Success.\r
167 @retval EFI_INVALID_PARAMETER The generator is invalid.\r
168 @retval EFI_NOT_FOUND The requested generator is not found\r
169 in the list of registered generators.\r
170**/\r
171EFI_STATUS\r
172EFIAPI\r
173DeregisterDtTableGenerator (\r
731c67e1 174 IN CONST DT_TABLE_GENERATOR *CONST Generator\r
3a609e0a
SM
175 )\r
176{\r
177 UINT16 TableId;\r
178\r
179 if (Generator == NULL) {\r
180 DEBUG ((DEBUG_ERROR, "ERROR: DT deregister - Invalid Generator\n"));\r
181 return EFI_INVALID_PARAMETER;\r
182 }\r
183\r
184 if (!IS_GENERATOR_TYPE_DT (Generator->GeneratorID)) {\r
185 DEBUG ((\r
186 DEBUG_ERROR,\r
187 "ERROR: DT deregister - Generator" \\r
188 " Type is not DT\n"\r
189 ));\r
190 return EFI_INVALID_PARAMETER;\r
191 }\r
192\r
193 TableId = GET_TABLE_ID (Generator->GeneratorID);\r
194 if (IS_GENERATOR_NAMESPACE_STD (Generator->GeneratorID)) {\r
195 if (TableId >= EStdDtTableIdMax) {\r
196 ASSERT (TableId < EStdDtTableIdMax);\r
197 return EFI_INVALID_PARAMETER;\r
198 }\r
731c67e1 199\r
3a609e0a
SM
200 if (TableFactoryInfo.StdDtTableGeneratorList[TableId] != NULL) {\r
201 if (Generator != TableFactoryInfo.StdDtTableGeneratorList[TableId]) {\r
202 return EFI_INVALID_PARAMETER;\r
203 }\r
731c67e1 204\r
3a609e0a
SM
205 TableFactoryInfo.StdDtTableGeneratorList[TableId] = NULL;\r
206 } else {\r
207 return EFI_NOT_FOUND;\r
208 }\r
209 } else {\r
210 if (TableId > FixedPcdGet16 (PcdMaxCustomDTGenerators)) {\r
211 ASSERT (TableId <= FixedPcdGet16 (PcdMaxCustomDTGenerators));\r
212 return EFI_INVALID_PARAMETER;\r
213 }\r
731c67e1 214\r
3a609e0a
SM
215 if (TableFactoryInfo.CustomDtTableGeneratorList[TableId] != NULL) {\r
216 if (Generator !=\r
731c67e1
MK
217 TableFactoryInfo.CustomDtTableGeneratorList[TableId])\r
218 {\r
3a609e0a
SM
219 return EFI_INVALID_PARAMETER;\r
220 }\r
731c67e1 221\r
3a609e0a
SM
222 TableFactoryInfo.CustomDtTableGeneratorList[TableId] = NULL;\r
223 } else {\r
224 return EFI_NOT_FOUND;\r
225 }\r
226 }\r
227\r
228 DEBUG ((DEBUG_INFO, "Deregistering %s\n", Generator->Description));\r
229 return EFI_SUCCESS;\r
230}\r