]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/UefiDriverModelLib/UefiDriverModelLib.c
Sync all bug fixes between EDK1.04 and EDK1.06 into EdkCompatibilityPkg.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / Library / UefiDriverModelLib / UefiDriverModelLib.c
CommitLineData
3eb9473e 1/*++\r
2\r
3e99020d 3Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
2c7e5c2f 4This program and the accompanying materials \r
3eb9473e 5are licensed and made available under the terms and conditions of the BSD License \r
6which accompanies this distribution. The full text of the license may be found at \r
7http://opensource.org/licenses/bsd-license.php \r
8 \r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11\r
12\r
13Module Name:\r
14\r
15 UefiDriverModelLib.c\r
16 \r
17Abstract: \r
18\r
19 UEFI Driver Model Library.\r
20\r
21--*/\r
22\r
23#include "EdkIIGlueUefi.h"\r
24\r
c7f33ca4 25\r
3eb9473e 26/**\r
27 The constructor function installs the standard EFI Driver Model Protocols.\r
28\r
29 @param[in] ImageHandle The firmware allocated handle for the EFI image.\r
30 @param[in] SystemTable A pointer to the EFI System Table.\r
31\r
32 @retval EFI_SUCCESS The constructor always return EFI_SUCCESS.\r
33\r
34**/\r
35EFI_STATUS\r
36EFIAPI\r
37UefiDriverModelLibConstructor (\r
38 IN EFI_HANDLE ImageHandle,\r
39 IN EFI_SYSTEM_TABLE *SystemTable\r
40 )\r
41{\r
3e99020d 42 EFI_STATUS Status = EFI_UNSUPPORTED;\r
3eb9473e 43 EFI_HANDLE DriverBindingHandle;\r
44 EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;\r
45\r
46 //\r
47 // Install the first Driver Bindng Protocol onto ImageHandle\r
48 //\r
49 DriverBindingHandle = ImageHandle;\r
50\r
51 //\r
52 // See if onle one Driver Binding Protocol is advertised by the driver\r
53 // EdkIIGlueLib: _gDriverModelProtocolListEntries is always 1\r
54 //\r
55\r
3e99020d
LG
56 //\r
57 // The Driver Binding Protocol must never be NULL\r
58 //\r
59 ASSERT(_gDriverModelProtocolList[0].DriverBinding != NULL);\r
3eb9473e 60\r
3e99020d
LG
61 //\r
62 // Check for all 8 possible combinations of the ComponentName, DriverConfiguration, and DriverDiagnostics Protocol\r
63 // These are all checks against const pointers, so the optimizing compiler will only select one of the\r
64 // calls to InstallMultipleProtocolInterfaces()\r
65 //\r
66 if ((_gEdkIIGlueDriverModelProtocolSelection == 1) || (_gEdkIIGlueDriverModelProtocolSelection == 3)) {\r
3eb9473e 67 if (_gDriverModelProtocolList[0].DriverDiagnostics == NULL) {\r
68 if (_gDriverModelProtocolList[0].DriverConfiguration == NULL) {\r
69 if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
70 Status = gBS->InstallMultipleProtocolInterfaces (\r
71 &DriverBindingHandle,\r
72 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
73 NULL\r
74 );\r
75 } else {\r
3eb9473e 76 Status = gBS->InstallMultipleProtocolInterfaces (\r
77 &DriverBindingHandle,\r
78 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
3e99020d 79 &gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
3eb9473e 80 NULL\r
81 );\r
3eb9473e 82 }\r
83 } else {\r
84 if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
85 Status = gBS->InstallMultipleProtocolInterfaces (\r
86 &DriverBindingHandle,\r
87 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
88 &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
89 NULL\r
90 );\r
91 } else {\r
3eb9473e 92 Status = gBS->InstallMultipleProtocolInterfaces (\r
93 &DriverBindingHandle,\r
94 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
3e99020d 95 &gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
3eb9473e 96 &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
97 NULL\r
98 );\r
3eb9473e 99 }\r
100 }\r
101 } else {\r
102 if (_gDriverModelProtocolList[0].DriverConfiguration == NULL) {\r
103 if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
104 Status = gBS->InstallMultipleProtocolInterfaces (\r
105 &DriverBindingHandle,\r
106 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
107 &gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
108 NULL\r
109 );\r
110 } else {\r
3eb9473e 111 Status = gBS->InstallMultipleProtocolInterfaces (\r
112 &DriverBindingHandle,\r
113 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
3e99020d 114 &gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
3eb9473e 115 &gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
116 NULL\r
117 );\r
3eb9473e 118 }\r
119 } else {\r
120 if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
121 Status = gBS->InstallMultipleProtocolInterfaces (\r
122 &DriverBindingHandle,\r
123 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
124 &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
125 &gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
126 NULL\r
127 );\r
128 } else {\r
3eb9473e 129 Status = gBS->InstallMultipleProtocolInterfaces (\r
130 &DriverBindingHandle,\r
131 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
3e99020d 132 &gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
3eb9473e 133 &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
134 &gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
135 NULL\r
136 );\r
3eb9473e 137 }\r
138 }\r
139 }\r
3e99020d 140 } // selection == 1 or 3\r
3eb9473e 141\r
3e99020d
LG
142 if ((_gEdkIIGlueDriverModelProtocolSelection == 2) || (_gEdkIIGlueDriverModelProtocolSelection == 3)) {\r
143 if (_gDriverModelProtocolList[0].DriverDiagnostics2== NULL) {\r
144 if (_gDriverModelProtocolList[0].DriverConfiguration2== NULL) {\r
145 if (_gDriverModelProtocolList[0].ComponentName2== NULL) {\r
146 Status = gBS->InstallMultipleProtocolInterfaces (\r
147 &DriverBindingHandle,\r
148 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
149 NULL\r
150 );\r
151 } else {\r
152 Status = gBS->InstallMultipleProtocolInterfaces (\r
153 &DriverBindingHandle,\r
154 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
155 &gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
156 NULL\r
157 );\r
158 }\r
159 } else {\r
160 if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {\r
161 Status = gBS->InstallMultipleProtocolInterfaces (\r
162 &DriverBindingHandle,\r
163 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
164 &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
165 NULL\r
166 );\r
167 } else {\r
168 Status = gBS->InstallMultipleProtocolInterfaces (\r
169 &DriverBindingHandle,\r
170 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
171 &gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
172 &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
173 NULL\r
174 );\r
175 }\r
176 }\r
177 } else {\r
178 if (_gDriverModelProtocolList[0].DriverConfiguration2 == NULL) {\r
179 if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {\r
180 Status = gBS->InstallMultipleProtocolInterfaces (\r
181 &DriverBindingHandle,\r
182 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
183 &gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
184 NULL\r
185 );\r
186 } else {\r
187 Status = gBS->InstallMultipleProtocolInterfaces (\r
188 &DriverBindingHandle,\r
189 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
190 &gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
191 &gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
192 NULL\r
193 );\r
194 }\r
195 } else {\r
196 if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {\r
197 Status = gBS->InstallMultipleProtocolInterfaces (\r
198 &DriverBindingHandle,\r
199 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
200 &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
201 &gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
202 NULL\r
203 );\r
204 } else {\r
205 Status = gBS->InstallMultipleProtocolInterfaces (\r
206 &DriverBindingHandle,\r
207 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
208 &gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
209 &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
210 &gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
211 NULL\r
212 );\r
213 }\r
214 }\r
215 }\r
216 } // selection == 2 or 3\r
3eb9473e 217\r
3e99020d
LG
218 //\r
219 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
220 //\r
221 ASSERT_EFI_ERROR (Status);\r
222\r
223 //\r
224 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
225 //\r
226 DriverBinding = (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding;\r
227 DriverBinding->ImageHandle = ImageHandle;\r
228 DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
3eb9473e 229\r
230 \r
231 return EFI_SUCCESS;\r
232}\r
233\r
234/**\r
235 The destructor function uninstalls the standard EFI Driver Model Protocols.\r
236\r
237 @param[in] ImageHandle The firmware allocated handle for the EFI image.\r
238 @param[in] SystemTable A pointer to the EFI System Table.\r
239\r
240 @retval EFI_SUCCESS The destructor always return EFI_SUCCESS.\r
241\r
242**/\r
243EFI_STATUS\r
244EFIAPI\r
245UefiDriverModelLibDestructor (\r
246 IN EFI_HANDLE ImageHandle,\r
247 IN EFI_SYSTEM_TABLE *SystemTable\r
248 )\r
249{\r
3e99020d 250 EFI_STATUS Status = EFI_UNSUPPORTED;\r
3eb9473e 251 EFI_HANDLE DriverBindingHandle;\r
252\r
253 //\r
254 // See if onle one Driver Binding Protocol is advertised by the driver\r
255 // EdkIIGlueLib: _gDriverModelProtocolListEntries is always 1\r
256 //\r
257\r
3e99020d
LG
258 //\r
259 // The Driver Binding Protocol must never be NULL\r
260 //\r
261 ASSERT(_gDriverModelProtocolList[0].DriverBinding != NULL);\r
3eb9473e 262\r
3e99020d
LG
263 //\r
264 // Retrieve the DriverBindingHandle from the Driver Binding Protocol\r
265 //\r
266 DriverBindingHandle = _gDriverModelProtocolList[0].DriverBinding->DriverBindingHandle;\r
3eb9473e 267\r
3e99020d
LG
268 //\r
269 // Check for all 8 possible combinations of the ComponentName, DriverConfiguration, and DriverDiagnostics Protocol\r
270 // These are all checks against const pointers, so the optimizing compiler will only select one of the\r
271 // calls to InstallMultipleProtocolInterfaces()\r
272 //\r
273 if ((_gEdkIIGlueDriverModelProtocolSelection == 1) || (_gEdkIIGlueDriverModelProtocolSelection == 3)) {\r
3eb9473e 274 if (_gDriverModelProtocolList[0].DriverDiagnostics == NULL) {\r
275 if (_gDriverModelProtocolList[0].DriverConfiguration == NULL) {\r
276 if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
277 Status = gBS->UninstallMultipleProtocolInterfaces (\r
278 DriverBindingHandle,\r
279 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
280 NULL\r
281 );\r
282 } else {\r
3eb9473e 283 Status = gBS->UninstallMultipleProtocolInterfaces (\r
284 &DriverBindingHandle,\r
285 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
3e99020d 286 &gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
3eb9473e 287 NULL\r
288 );\r
3eb9473e 289 }\r
290 } else {\r
291 if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
292 Status = gBS->UninstallMultipleProtocolInterfaces (\r
293 &DriverBindingHandle,\r
294 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
295 &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
296 NULL\r
297 );\r
298 } else {\r
3eb9473e 299 Status = gBS->UninstallMultipleProtocolInterfaces (\r
300 &DriverBindingHandle,\r
301 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
3e99020d 302 &gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
3eb9473e 303 &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
304 NULL\r
305 );\r
3eb9473e 306 }\r
307 }\r
308 } else {\r
309 if (_gDriverModelProtocolList[0].DriverConfiguration == NULL) {\r
310 if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
311 Status = gBS->UninstallMultipleProtocolInterfaces (\r
312 &DriverBindingHandle,\r
313 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
314 &gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
315 NULL\r
316 );\r
317 } else {\r
3eb9473e 318 Status = gBS->UninstallMultipleProtocolInterfaces (\r
319 &DriverBindingHandle,\r
320 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
3e99020d 321 &gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
3eb9473e 322 &gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
323 NULL\r
324 );\r
3eb9473e 325 }\r
326 } else {\r
327 if (_gDriverModelProtocolList[0].ComponentName == NULL) {\r
328 Status = gBS->UninstallMultipleProtocolInterfaces (\r
329 &DriverBindingHandle,\r
330 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
331 &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
332 &gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
333 NULL\r
334 );\r
335 } else {\r
3eb9473e 336 Status = gBS->UninstallMultipleProtocolInterfaces (\r
337 &DriverBindingHandle,\r
338 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
3e99020d 339 &gEfiComponentNameProtocolGuid, (EFI_COMPONENT_NAME_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName,\r
3eb9473e 340 &gEfiDriverConfigurationProtocolGuid, (EFI_DRIVER_CONFIGURATION_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration,\r
341 &gEfiDriverDiagnosticsProtocolGuid, (EFI_DRIVER_DIAGNOSTICS_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics,\r
342 NULL\r
343 );\r
3eb9473e 344 }\r
345 }\r
346 }\r
3e99020d
LG
347 } // selection == 1 or 3\r
348\r
349 if ((_gEdkIIGlueDriverModelProtocolSelection == 2) || (_gEdkIIGlueDriverModelProtocolSelection == 3)) {\r
350 if (_gDriverModelProtocolList[0].DriverDiagnostics2 == NULL) {\r
351 if (_gDriverModelProtocolList[0].DriverConfiguration2 == NULL) {\r
352 if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {\r
353 Status = gBS->UninstallMultipleProtocolInterfaces (\r
354 DriverBindingHandle,\r
355 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
356 NULL\r
357 );\r
358 } else {\r
359 Status = gBS->UninstallMultipleProtocolInterfaces (\r
360 &DriverBindingHandle,\r
361 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
362 &gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
363 NULL\r
364 );\r
365 }\r
366 } else {\r
367 if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {\r
368 Status = gBS->UninstallMultipleProtocolInterfaces (\r
369 &DriverBindingHandle,\r
370 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
371 &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
372 NULL\r
373 );\r
374 } else {\r
375 Status = gBS->UninstallMultipleProtocolInterfaces (\r
376 &DriverBindingHandle,\r
377 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
378 &gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
379 &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
380 NULL\r
381 );\r
382 }\r
383 }\r
384 } else {\r
385 if (_gDriverModelProtocolList[0].DriverConfiguration2 == NULL) {\r
386 if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {\r
387 Status = gBS->UninstallMultipleProtocolInterfaces (\r
388 &DriverBindingHandle,\r
389 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
390 &gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
391 NULL\r
392 );\r
393 } else {\r
394 Status = gBS->UninstallMultipleProtocolInterfaces (\r
395 &DriverBindingHandle,\r
396 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
397 &gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
398 &gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
399 NULL\r
400 );\r
401 }\r
402 } else {\r
403 if (_gDriverModelProtocolList[0].ComponentName2 == NULL) {\r
404 Status = gBS->UninstallMultipleProtocolInterfaces (\r
405 &DriverBindingHandle,\r
406 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
407 &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
408 &gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
409 NULL\r
410 );\r
411 } else {\r
412 Status = gBS->UninstallMultipleProtocolInterfaces (\r
413 &DriverBindingHandle,\r
414 &gEfiDriverBindingProtocolGuid, (EFI_DRIVER_BINDING_PROTOCOL *)_gDriverModelProtocolList[0].DriverBinding,\r
415 &gEfiComponentName2ProtocolGuid, (EFI_COMPONENT_NAME2_PROTOCOL *)_gDriverModelProtocolList[0].ComponentName2,\r
416 &gEfiDriverConfiguration2ProtocolGuid, (EFI_DRIVER_CONFIGURATION2_PROTOCOL *)_gDriverModelProtocolList[0].DriverConfiguration2,\r
417 &gEfiDriverDiagnostics2ProtocolGuid, (EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *)_gDriverModelProtocolList[0].DriverDiagnostics2,\r
418 NULL\r
419 );\r
420 }\r
421 }\r
422 }\r
423 } // selection == 2 or 3\r
3eb9473e 424\r
3e99020d
LG
425 //\r
426 // ASSERT if the call to UninstallMultipleProtocolInterfaces() failed\r
427 //\r
428 ASSERT_EFI_ERROR (Status);\r
3eb9473e 429 \r
430 return EFI_SUCCESS;\r
431}\r