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