]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/UefiLib/UefiDriverModel.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdePkg / Library / UefiLib / UefiDriverModel.c
CommitLineData
e811b22f 1/** @file\r
2 Library functions that abstract driver model protocols\r
0290fca2 3 installation and uninstallation.\r
e811b22f 4\r
0290fca2 5 Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\r
9095d37b 6 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
9344f092 7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
e811b22f 8\r
9095d37b 9**/\r
e811b22f 10\r
f734a10a 11#include "UefiLibInternal.h"\r
e811b22f 12\r
13/**\r
cf8ae2f6 14 Installs and completes the initialization of a Driver Binding Protocol instance.\r
9095d37b 15\r
cf8ae2f6 16 Installs the Driver Binding Protocol specified by DriverBinding onto the handle\r
17 specified by DriverBindingHandle. If DriverBindingHandle is NULL, then DriverBinding\r
18 is installed onto a newly created handle. DriverBindingHandle is typically the same\r
19 as the driver's ImageHandle, but it can be different if the driver produces multiple\r
9095d37b
LG
20 Driver Binding Protocols.\r
21 If DriverBinding is NULL, then ASSERT().\r
cf8ae2f6 22 If DriverBinding can not be installed onto a handle, then ASSERT().\r
23\r
24 @param ImageHandle The image handle of the driver.\r
25 @param SystemTable The EFI System Table that was passed to the driver's entry point.\r
26 @param DriverBinding A Driver Binding Protocol instance that this driver is producing.\r
27 @param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this\r
28 parameter is NULL, then a new handle is created.\r
29\r
58380e9c 30 @retval EFI_SUCCESS The protocol installation successfully completed.\r
cf8ae2f6 31 @retval EFI_OUT_OF_RESOURCES There was not enough system resources to install the protocol.\r
32 @retval Others Status from gBS->InstallMultipleProtocolInterfaces().\r
e811b22f 33\r
34**/\r
35EFI_STATUS\r
36EFIAPI\r
37EfiLibInstallDriverBinding (\r
f662c194 38 IN CONST EFI_HANDLE ImageHandle,\r
39 IN CONST EFI_SYSTEM_TABLE *SystemTable,\r
e811b22f 40 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
41 IN EFI_HANDLE DriverBindingHandle\r
42 )\r
43{\r
44 EFI_STATUS Status;\r
45\r
3a6779fa 46 ASSERT (DriverBinding != NULL);\r
e811b22f 47\r
de27b8f0
RN
48 //\r
49 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
50 //\r
51 DriverBinding->ImageHandle = ImageHandle;\r
52 DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
53\r
e811b22f 54 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 55 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
56 &gEfiDriverBindingProtocolGuid,\r
57 DriverBinding,\r
e811b22f 58 NULL\r
59 );\r
60 //\r
61 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
62 //\r
63 ASSERT_EFI_ERROR (Status);\r
64\r
e811b22f 65 return Status;\r
66}\r
67\r
0290fca2
AS
68/**\r
69 Uninstalls a Driver Binding Protocol instance.\r
70\r
71 If DriverBinding is NULL, then ASSERT().\r
72 If DriverBinding can not be uninstalled, then ASSERT().\r
73\r
74 @param DriverBinding A Driver Binding Protocol instance that this driver produced.\r
75\r
76 @retval EFI_SUCCESS The protocol uninstallation successfully completed.\r
77 @retval Others Status from gBS->UninstallMultipleProtocolInterfaces().\r
78\r
79**/\r
80EFI_STATUS\r
81EFIAPI\r
82EfiLibUninstallDriverBinding (\r
83 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding\r
84 )\r
85{\r
86 EFI_STATUS Status;\r
87\r
88 ASSERT (DriverBinding != NULL);\r
89\r
90 Status = gBS->UninstallMultipleProtocolInterfaces (\r
91 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
92 &gEfiDriverBindingProtocolGuid,\r
93 DriverBinding,\r
0290fca2
AS
94 NULL\r
95 );\r
96 //\r
97 // ASSERT if the call to UninstallMultipleProtocolInterfaces() failed\r
98 //\r
99 ASSERT_EFI_ERROR (Status);\r
100\r
101 return Status;\r
102}\r
103\r
e811b22f 104/**\r
cf8ae2f6 105 Installs and completes the initialization of a Driver Binding Protocol instance and\r
106 optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols.\r
107\r
108 Initializes a driver by installing the Driver Binding Protocol together with the\r
109 optional Component Name, optional Driver Configure and optional Driver Diagnostic\r
110 Protocols onto the driver's DriverBindingHandle. If DriverBindingHandle is NULL,\r
111 then the protocols are installed onto a newly created handle. DriverBindingHandle\r
112 is typically the same as the driver's ImageHandle, but it can be different if the\r
9095d37b
LG
113 driver produces multiple Driver Binding Protocols.\r
114 If DriverBinding is NULL, then ASSERT().\r
cf8ae2f6 115 If the installation fails, then ASSERT().\r
9095d37b 116\r
cf8ae2f6 117 @param ImageHandle The image handle of the driver.\r
118 @param SystemTable The EFI System Table that was passed to the driver's entry point.\r
119 @param DriverBinding A Driver Binding Protocol instance that this driver is producing.\r
120 @param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this\r
121 parameter is NULL, then a new handle is created.\r
122 @param ComponentName A Component Name Protocol instance that this driver is producing.\r
123 @param DriverConfiguration A Driver Configuration Protocol instance that this driver is producing.\r
124 @param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing.\r
125\r
58380e9c 126 @retval EFI_SUCCESS The protocol installation successfully completed.\r
cf8ae2f6 127 @retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.\r
e811b22f 128\r
129**/\r
130EFI_STATUS\r
131EFIAPI\r
132EfiLibInstallAllDriverProtocols (\r
f662c194 133 IN CONST EFI_HANDLE ImageHandle,\r
134 IN CONST EFI_SYSTEM_TABLE *SystemTable,\r
e811b22f 135 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
136 IN EFI_HANDLE DriverBindingHandle,\r
d0e2f823
MK
137 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName OPTIONAL,\r
138 IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration OPTIONAL,\r
f662c194 139 IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics OPTIONAL\r
e811b22f 140 )\r
141{\r
142 EFI_STATUS Status;\r
143\r
3a6779fa 144 ASSERT (DriverBinding != NULL);\r
e811b22f 145\r
de27b8f0
RN
146 //\r
147 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
148 //\r
149 DriverBinding->ImageHandle = ImageHandle;\r
150 DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
9095d37b 151\r
2f88bd3a 152 if ((DriverDiagnostics == NULL) || FeaturePcdGet (PcdDriverDiagnosticsDisable)) {\r
e811b22f 153 if (DriverConfiguration == NULL) {\r
2f88bd3a 154 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
e811b22f 155 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 156 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
157 &gEfiDriverBindingProtocolGuid,\r
158 DriverBinding,\r
e811b22f 159 NULL\r
160 );\r
161 } else {\r
162 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 163 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
164 &gEfiDriverBindingProtocolGuid,\r
165 DriverBinding,\r
166 &gEfiComponentNameProtocolGuid,\r
167 ComponentName,\r
e811b22f 168 NULL\r
169 );\r
170 }\r
171 } else {\r
2f88bd3a 172 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
e811b22f 173 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 174 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
175 &gEfiDriverBindingProtocolGuid,\r
176 DriverBinding,\r
177 &gEfiDriverConfigurationProtocolGuid,\r
178 DriverConfiguration,\r
e811b22f 179 NULL\r
180 );\r
181 } else {\r
182 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 183 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
184 &gEfiDriverBindingProtocolGuid,\r
185 DriverBinding,\r
186 &gEfiComponentNameProtocolGuid,\r
187 ComponentName,\r
188 &gEfiDriverConfigurationProtocolGuid,\r
189 DriverConfiguration,\r
e811b22f 190 NULL\r
191 );\r
192 }\r
193 }\r
194 } else {\r
195 if (DriverConfiguration == NULL) {\r
2f88bd3a 196 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
e811b22f 197 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 198 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
199 &gEfiDriverBindingProtocolGuid,\r
200 DriverBinding,\r
201 &gEfiDriverDiagnosticsProtocolGuid,\r
202 DriverDiagnostics,\r
e811b22f 203 NULL\r
204 );\r
205 } else {\r
206 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 207 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
208 &gEfiDriverBindingProtocolGuid,\r
209 DriverBinding,\r
210 &gEfiComponentNameProtocolGuid,\r
211 ComponentName,\r
212 &gEfiDriverDiagnosticsProtocolGuid,\r
213 DriverDiagnostics,\r
e811b22f 214 NULL\r
215 );\r
216 }\r
217 } else {\r
2f88bd3a
MK
218 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
219 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 220 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
221 &gEfiDriverBindingProtocolGuid,\r
222 DriverBinding,\r
223 &gEfiDriverConfigurationProtocolGuid,\r
224 DriverConfiguration,\r
225 &gEfiDriverDiagnosticsProtocolGuid,\r
226 DriverDiagnostics,\r
e811b22f 227 NULL\r
228 );\r
229 } else {\r
230 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 231 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
232 &gEfiDriverBindingProtocolGuid,\r
233 DriverBinding,\r
234 &gEfiComponentNameProtocolGuid,\r
235 ComponentName,\r
236 &gEfiDriverConfigurationProtocolGuid,\r
237 DriverConfiguration,\r
238 &gEfiDriverDiagnosticsProtocolGuid,\r
239 DriverDiagnostics,\r
e811b22f 240 NULL\r
241 );\r
242 }\r
243 }\r
244 }\r
245\r
246 //\r
247 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
248 //\r
249 ASSERT_EFI_ERROR (Status);\r
250\r
e811b22f 251 return Status;\r
252}\r
253\r
0290fca2
AS
254/**\r
255 Uninstalls a Driver Binding Protocol instance and optionally uninstalls the\r
256 Component Name, Driver Configuration and Driver Diagnostics Protocols.\r
257\r
258 If DriverBinding is NULL, then ASSERT().\r
259 If the uninstallation fails, then ASSERT().\r
260\r
261 @param DriverBinding A Driver Binding Protocol instance that this driver produced.\r
262 @param ComponentName A Component Name Protocol instance that this driver produced.\r
263 @param DriverConfiguration A Driver Configuration Protocol instance that this driver produced.\r
264 @param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver produced.\r
265\r
266 @retval EFI_SUCCESS The protocol uninstallation successfully completed.\r
267 @retval Others Status from gBS->UninstallMultipleProtocolInterfaces().\r
268\r
269**/\r
270EFI_STATUS\r
271EFIAPI\r
272EfiLibUninstallAllDriverProtocols (\r
273 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
d0e2f823
MK
274 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName OPTIONAL,\r
275 IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration OPTIONAL,\r
0290fca2
AS
276 IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics OPTIONAL\r
277 )\r
278{\r
279 EFI_STATUS Status;\r
280\r
281 ASSERT (DriverBinding != NULL);\r
282\r
2f88bd3a 283 if ((DriverDiagnostics == NULL) || FeaturePcdGet (PcdDriverDiagnosticsDisable)) {\r
0290fca2 284 if (DriverConfiguration == NULL) {\r
2f88bd3a 285 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
0290fca2
AS
286 Status = gBS->UninstallMultipleProtocolInterfaces (\r
287 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
288 &gEfiDriverBindingProtocolGuid,\r
289 DriverBinding,\r
0290fca2
AS
290 NULL\r
291 );\r
292 } else {\r
293 Status = gBS->UninstallMultipleProtocolInterfaces (\r
294 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
295 &gEfiDriverBindingProtocolGuid,\r
296 DriverBinding,\r
297 &gEfiComponentNameProtocolGuid,\r
298 ComponentName,\r
0290fca2
AS
299 NULL\r
300 );\r
301 }\r
302 } else {\r
2f88bd3a 303 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
0290fca2
AS
304 Status = gBS->UninstallMultipleProtocolInterfaces (\r
305 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
306 &gEfiDriverBindingProtocolGuid,\r
307 DriverBinding,\r
308 &gEfiDriverConfigurationProtocolGuid,\r
309 DriverConfiguration,\r
0290fca2
AS
310 NULL\r
311 );\r
312 } else {\r
313 Status = gBS->UninstallMultipleProtocolInterfaces (\r
314 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
315 &gEfiDriverBindingProtocolGuid,\r
316 DriverBinding,\r
317 &gEfiComponentNameProtocolGuid,\r
318 ComponentName,\r
319 &gEfiDriverConfigurationProtocolGuid,\r
320 DriverConfiguration,\r
0290fca2
AS
321 NULL\r
322 );\r
323 }\r
324 }\r
325 } else {\r
326 if (DriverConfiguration == NULL) {\r
2f88bd3a 327 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
0290fca2
AS
328 Status = gBS->UninstallMultipleProtocolInterfaces (\r
329 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
330 &gEfiDriverBindingProtocolGuid,\r
331 DriverBinding,\r
332 &gEfiDriverDiagnosticsProtocolGuid,\r
333 DriverDiagnostics,\r
0290fca2
AS
334 NULL\r
335 );\r
336 } else {\r
337 Status = gBS->UninstallMultipleProtocolInterfaces (\r
338 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
339 &gEfiDriverBindingProtocolGuid,\r
340 DriverBinding,\r
341 &gEfiComponentNameProtocolGuid,\r
342 ComponentName,\r
343 &gEfiDriverDiagnosticsProtocolGuid,\r
344 DriverDiagnostics,\r
0290fca2
AS
345 NULL\r
346 );\r
347 }\r
348 } else {\r
2f88bd3a
MK
349 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
350 Status = gBS->UninstallMultipleProtocolInterfaces (\r
0290fca2 351 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
352 &gEfiDriverBindingProtocolGuid,\r
353 DriverBinding,\r
354 &gEfiDriverConfigurationProtocolGuid,\r
355 DriverConfiguration,\r
356 &gEfiDriverDiagnosticsProtocolGuid,\r
357 DriverDiagnostics,\r
0290fca2
AS
358 NULL\r
359 );\r
360 } else {\r
361 Status = gBS->UninstallMultipleProtocolInterfaces (\r
362 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
363 &gEfiDriverBindingProtocolGuid,\r
364 DriverBinding,\r
365 &gEfiComponentNameProtocolGuid,\r
366 ComponentName,\r
367 &gEfiDriverConfigurationProtocolGuid,\r
368 DriverConfiguration,\r
369 &gEfiDriverDiagnosticsProtocolGuid,\r
370 DriverDiagnostics,\r
0290fca2
AS
371 NULL\r
372 );\r
373 }\r
374 }\r
375 }\r
376\r
377 //\r
378 // ASSERT if the call to UninstallMultipleProtocolInterfaces() failed\r
379 //\r
380 ASSERT_EFI_ERROR (Status);\r
381\r
382 return Status;\r
383}\r
384\r
e811b22f 385/**\r
cf8ae2f6 386 Installs Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.\r
387\r
388 Initializes a driver by installing the Driver Binding Protocol together with the\r
389 optional Component Name and optional Component Name 2 protocols onto the driver's\r
390 DriverBindingHandle. If DriverBindingHandle is NULL, then the protocols are installed\r
391 onto a newly created handle. DriverBindingHandle is typically the same as the driver's\r
9095d37b
LG
392 ImageHandle, but it can be different if the driver produces multiple Driver Binding Protocols.\r
393 If DriverBinding is NULL, then ASSERT().\r
cf8ae2f6 394 If the installation fails, then ASSERT().\r
395\r
396 @param ImageHandle The image handle of the driver.\r
397 @param SystemTable The EFI System Table that was passed to the driver's entry point.\r
398 @param DriverBinding A Driver Binding Protocol instance that this driver is producing.\r
399 @param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this\r
400 parameter is NULL, then a new handle is created.\r
401 @param ComponentName A Component Name Protocol instance that this driver is producing.\r
402 @param ComponentName2 A Component Name 2 Protocol instance that this driver is producing.\r
403\r
58380e9c 404 @retval EFI_SUCCESS The protocol installation successfully completed.\r
cf8ae2f6 405 @retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.\r
f662c194 406\r
407**/\r
408EFI_STATUS\r
409EFIAPI\r
410EfiLibInstallDriverBindingComponentName2 (\r
2f88bd3a
MK
411 IN CONST EFI_HANDLE ImageHandle,\r
412 IN CONST EFI_SYSTEM_TABLE *SystemTable,\r
413 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
414 IN EFI_HANDLE DriverBindingHandle,\r
415 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName OPTIONAL,\r
416 IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL\r
f662c194 417 )\r
418{\r
419 EFI_STATUS Status;\r
420\r
3a6779fa 421 ASSERT (DriverBinding != NULL);\r
f662c194 422\r
de27b8f0
RN
423 //\r
424 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
425 //\r
426 DriverBinding->ImageHandle = ImageHandle;\r
427 DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
428\r
2f88bd3a
MK
429 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
430 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
f662c194 431 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 432 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
433 &gEfiDriverBindingProtocolGuid,\r
434 DriverBinding,\r
f662c194 435 NULL\r
436 );\r
2f88bd3a 437 } else {\r
f662c194 438 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 439 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
440 &gEfiDriverBindingProtocolGuid,\r
441 DriverBinding,\r
442 &gEfiComponentName2ProtocolGuid,\r
443 ComponentName2,\r
f662c194 444 NULL\r
445 );\r
2f88bd3a 446 }\r
f662c194 447 } else {\r
2f88bd3a
MK
448 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
449 Status = gBS->InstallMultipleProtocolInterfaces (\r
450 &DriverBinding->DriverBindingHandle,\r
451 &gEfiDriverBindingProtocolGuid,\r
452 DriverBinding,\r
453 &gEfiComponentNameProtocolGuid,\r
454 ComponentName,\r
455 NULL\r
456 );\r
457 } else {\r
458 Status = gBS->InstallMultipleProtocolInterfaces (\r
459 &DriverBinding->DriverBindingHandle,\r
460 &gEfiDriverBindingProtocolGuid,\r
461 DriverBinding,\r
462 &gEfiComponentNameProtocolGuid,\r
463 ComponentName,\r
464 &gEfiComponentName2ProtocolGuid,\r
465 ComponentName2,\r
466 NULL\r
467 );\r
f662c194 468 }\r
469 }\r
de27b8f0 470\r
f662c194 471 //\r
472 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
473 //\r
474 ASSERT_EFI_ERROR (Status);\r
475\r
f662c194 476 return Status;\r
477}\r
478\r
0290fca2
AS
479/**\r
480 Uninstalls Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.\r
481\r
482 If DriverBinding is NULL, then ASSERT().\r
483 If the uninstallation fails, then ASSERT().\r
484\r
485 @param DriverBinding A Driver Binding Protocol instance that this driver produced.\r
486 @param ComponentName A Component Name Protocol instance that this driver produced.\r
487 @param ComponentName2 A Component Name 2 Protocol instance that this driver produced.\r
488\r
489 @retval EFI_SUCCESS The protocol installation successfully completed.\r
490 @retval Others Status from gBS->UninstallMultipleProtocolInterfaces().\r
491\r
492**/\r
493EFI_STATUS\r
494EFIAPI\r
495EfiLibUninstallDriverBindingComponentName2 (\r
2f88bd3a
MK
496 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
497 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName OPTIONAL,\r
498 IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL\r
0290fca2
AS
499 )\r
500{\r
501 EFI_STATUS Status;\r
502\r
503 ASSERT (DriverBinding != NULL);\r
504\r
2f88bd3a
MK
505 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
506 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
507 Status = gBS->UninstallMultipleProtocolInterfaces (\r
508 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
509 &gEfiDriverBindingProtocolGuid,\r
510 DriverBinding,\r
0290fca2
AS
511 NULL\r
512 );\r
2f88bd3a 513 } else {\r
0290fca2
AS
514 Status = gBS->UninstallMultipleProtocolInterfaces (\r
515 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
516 &gEfiDriverBindingProtocolGuid,\r
517 DriverBinding,\r
518 &gEfiComponentName2ProtocolGuid,\r
519 ComponentName2,\r
0290fca2
AS
520 NULL\r
521 );\r
2f88bd3a 522 }\r
0290fca2 523 } else {\r
2f88bd3a
MK
524 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
525 Status = gBS->UninstallMultipleProtocolInterfaces (\r
526 DriverBinding->DriverBindingHandle,\r
527 &gEfiDriverBindingProtocolGuid,\r
528 DriverBinding,\r
529 &gEfiComponentNameProtocolGuid,\r
530 ComponentName,\r
531 NULL\r
532 );\r
533 } else {\r
534 Status = gBS->UninstallMultipleProtocolInterfaces (\r
535 DriverBinding->DriverBindingHandle,\r
536 &gEfiDriverBindingProtocolGuid,\r
537 DriverBinding,\r
538 &gEfiComponentNameProtocolGuid,\r
539 ComponentName,\r
540 &gEfiComponentName2ProtocolGuid,\r
541 ComponentName2,\r
542 NULL\r
543 );\r
0290fca2
AS
544 }\r
545 }\r
546\r
547 //\r
548 // ASSERT if the call to UninstallMultipleProtocolInterfaces() failed\r
549 //\r
550 ASSERT_EFI_ERROR (Status);\r
551\r
552 return Status;\r
553}\r
554\r
f662c194 555/**\r
cf8ae2f6 556 Installs Driver Binding Protocol with optional Component Name, Component Name 2, Driver\r
557 Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.\r
558\r
559 Initializes a driver by installing the Driver Binding Protocol together with the optional\r
63ba999c 560 Component Name, optional Component Name 2, optional Driver Configuration, optional Driver Configuration 2,\r
561 optional Driver Diagnostic, and optional Driver Diagnostic 2 Protocols onto the driver's DriverBindingHandle.\r
562 DriverBindingHandle is typically the same as the driver's ImageHandle, but it can be different if the driver\r
9095d37b
LG
563 produces multiple Driver Binding Protocols.\r
564 If DriverBinding is NULL, then ASSERT().\r
63ba999c 565 If the installation fails, then ASSERT().\r
566\r
cf8ae2f6 567\r
568 @param ImageHandle The image handle of the driver.\r
569 @param SystemTable The EFI System Table that was passed to the driver's entry point.\r
570 @param DriverBinding A Driver Binding Protocol instance that this driver is producing.\r
28d3e14f 571 @param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this\r
cf8ae2f6 572 parameter is NULL, then a new handle is created.\r
573 @param ComponentName A Component Name Protocol instance that this driver is producing.\r
574 @param ComponentName2 A Component Name 2 Protocol instance that this driver is producing.\r
575 @param DriverConfiguration A Driver Configuration Protocol instance that this driver is producing.\r
576 @param DriverConfiguration2 A Driver Configuration Protocol 2 instance that this driver is producing.\r
577 @param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing.\r
578 @param DriverDiagnostics2 A Driver Diagnostics Protocol 2 instance that this driver is producing.\r
579\r
58380e9c 580 @retval EFI_SUCCESS The protocol installation successfully completed.\r
cf8ae2f6 581 @retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.\r
e811b22f 582\r
583**/\r
584EFI_STATUS\r
585EFIAPI\r
586EfiLibInstallAllDriverProtocols2 (\r
2f88bd3a
MK
587 IN CONST EFI_HANDLE ImageHandle,\r
588 IN CONST EFI_SYSTEM_TABLE *SystemTable,\r
589 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
590 IN EFI_HANDLE DriverBindingHandle,\r
591 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName OPTIONAL,\r
592 IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL,\r
593 IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration OPTIONAL,\r
594 IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2 OPTIONAL,\r
595 IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics OPTIONAL,\r
596 IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL\r
e811b22f 597 )\r
598{\r
599 EFI_STATUS Status;\r
600\r
9095d37b 601 ASSERT (DriverBinding != NULL);\r
3a6779fa 602\r
de27b8f0
RN
603 //\r
604 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
605 //\r
606 DriverBinding->ImageHandle = ImageHandle;\r
607 DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
9095d37b 608\r
3a6779fa 609 if (DriverConfiguration2 == NULL) {\r
610 if (DriverConfiguration == NULL) {\r
2f88bd3a
MK
611 if ((DriverDiagnostics == NULL) || FeaturePcdGet (PcdDriverDiagnosticsDisable)) {\r
612 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
613 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
614 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 615 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 616 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
617 &gEfiDriverBindingProtocolGuid,\r
618 DriverBinding,\r
3a6779fa 619 NULL\r
620 );\r
621 } else {\r
622 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 623 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
624 &gEfiDriverBindingProtocolGuid,\r
625 DriverBinding,\r
626 &gEfiComponentName2ProtocolGuid,\r
627 ComponentName2,\r
3a6779fa 628 NULL\r
629 );\r
630 }\r
e811b22f 631 } else {\r
2f88bd3a 632 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 633 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 634 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
635 &gEfiDriverBindingProtocolGuid,\r
636 DriverBinding,\r
637 &gEfiComponentNameProtocolGuid,\r
638 ComponentName,\r
3a6779fa 639 NULL\r
640 );\r
641 } else {\r
642 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 643 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
644 &gEfiDriverBindingProtocolGuid,\r
645 DriverBinding,\r
646 &gEfiComponentNameProtocolGuid,\r
647 ComponentName,\r
648 &gEfiComponentName2ProtocolGuid,\r
649 ComponentName2,\r
3a6779fa 650 NULL\r
651 );\r
652 }\r
e811b22f 653 }\r
654 } else {\r
2f88bd3a
MK
655 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
656 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 657 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 658 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
659 &gEfiDriverBindingProtocolGuid,\r
660 DriverBinding,\r
661 &gEfiDriverDiagnostics2ProtocolGuid,\r
662 DriverDiagnostics2,\r
3a6779fa 663 NULL\r
664 );\r
665 } else {\r
666 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 667 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
668 &gEfiDriverBindingProtocolGuid,\r
669 DriverBinding,\r
670 &gEfiComponentName2ProtocolGuid,\r
671 ComponentName2,\r
672 &gEfiDriverDiagnostics2ProtocolGuid,\r
673 DriverDiagnostics2,\r
3a6779fa 674 NULL\r
675 );\r
676 }\r
e811b22f 677 } else {\r
2f88bd3a 678 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 679 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 680 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
681 &gEfiDriverBindingProtocolGuid,\r
682 DriverBinding,\r
683 &gEfiComponentNameProtocolGuid,\r
684 ComponentName,\r
685 &gEfiDriverDiagnostics2ProtocolGuid,\r
686 DriverDiagnostics2,\r
3a6779fa 687 NULL\r
688 );\r
689 } else {\r
690 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 691 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
692 &gEfiDriverBindingProtocolGuid,\r
693 DriverBinding,\r
694 &gEfiComponentNameProtocolGuid,\r
695 ComponentName,\r
696 &gEfiComponentName2ProtocolGuid,\r
697 ComponentName2,\r
698 &gEfiDriverDiagnostics2ProtocolGuid,\r
699 DriverDiagnostics2,\r
3a6779fa 700 NULL\r
701 );\r
702 }\r
e811b22f 703 }\r
704 }\r
705 } else {\r
2f88bd3a
MK
706 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
707 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
708 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 709 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 710 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
711 &gEfiDriverBindingProtocolGuid,\r
712 DriverBinding,\r
713 &gEfiDriverDiagnosticsProtocolGuid,\r
714 DriverDiagnostics,\r
3a6779fa 715 NULL\r
716 );\r
717 } else {\r
718 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 719 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
720 &gEfiDriverBindingProtocolGuid,\r
721 DriverBinding,\r
722 &gEfiComponentName2ProtocolGuid,\r
723 ComponentName2,\r
724 &gEfiDriverDiagnosticsProtocolGuid,\r
725 DriverDiagnostics,\r
3a6779fa 726 NULL\r
727 );\r
728 }\r
e811b22f 729 } else {\r
2f88bd3a 730 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 731 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 732 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
733 &gEfiDriverBindingProtocolGuid,\r
734 DriverBinding,\r
735 &gEfiComponentNameProtocolGuid,\r
736 ComponentName,\r
737 &gEfiDriverDiagnosticsProtocolGuid,\r
738 DriverDiagnostics,\r
3a6779fa 739 NULL\r
740 );\r
741 } else {\r
742 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 743 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
744 &gEfiDriverBindingProtocolGuid,\r
745 DriverBinding,\r
746 &gEfiComponentNameProtocolGuid,\r
747 ComponentName,\r
748 &gEfiComponentName2ProtocolGuid,\r
749 ComponentName2,\r
750 &gEfiDriverDiagnosticsProtocolGuid,\r
751 DriverDiagnostics,\r
3a6779fa 752 NULL\r
753 );\r
754 }\r
e811b22f 755 }\r
756 } else {\r
2f88bd3a
MK
757 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
758 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 759 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 760 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
761 &gEfiDriverBindingProtocolGuid,\r
762 DriverBinding,\r
763 &gEfiDriverDiagnosticsProtocolGuid,\r
764 DriverDiagnostics,\r
765 &gEfiDriverDiagnostics2ProtocolGuid,\r
766 DriverDiagnostics2,\r
3a6779fa 767 NULL\r
768 );\r
769 } else {\r
770 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 771 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
772 &gEfiDriverBindingProtocolGuid,\r
773 DriverBinding,\r
774 &gEfiComponentName2ProtocolGuid,\r
775 ComponentName2,\r
776 &gEfiDriverDiagnosticsProtocolGuid,\r
777 DriverDiagnostics,\r
778 &gEfiDriverDiagnostics2ProtocolGuid,\r
779 DriverDiagnostics2,\r
3a6779fa 780 NULL\r
781 );\r
782 }\r
e811b22f 783 } else {\r
2f88bd3a 784 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 785 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 786 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
787 &gEfiDriverBindingProtocolGuid,\r
788 DriverBinding,\r
789 &gEfiComponentNameProtocolGuid,\r
790 ComponentName,\r
791 &gEfiDriverDiagnosticsProtocolGuid,\r
792 DriverDiagnostics,\r
793 &gEfiDriverDiagnostics2ProtocolGuid,\r
794 DriverDiagnostics2,\r
3a6779fa 795 NULL\r
796 );\r
797 } else {\r
798 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 799 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
800 &gEfiDriverBindingProtocolGuid,\r
801 DriverBinding,\r
802 &gEfiComponentNameProtocolGuid,\r
803 ComponentName,\r
804 &gEfiComponentName2ProtocolGuid,\r
805 ComponentName2,\r
806 &gEfiDriverDiagnosticsProtocolGuid,\r
807 DriverDiagnostics,\r
808 &gEfiDriverDiagnostics2ProtocolGuid,\r
809 DriverDiagnostics2,\r
3a6779fa 810 NULL\r
811 );\r
812 }\r
e811b22f 813 }\r
814 }\r
815 }\r
816 } else {\r
2f88bd3a
MK
817 if ((DriverDiagnostics == NULL) || FeaturePcdGet (PcdDriverDiagnosticsDisable)) {\r
818 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
819 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
820 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 821 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 822 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
823 &gEfiDriverBindingProtocolGuid,\r
824 DriverBinding,\r
825 &gEfiDriverConfigurationProtocolGuid,\r
826 DriverConfiguration,\r
3a6779fa 827 NULL\r
828 );\r
829 } else {\r
830 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 831 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
832 &gEfiDriverBindingProtocolGuid,\r
833 DriverBinding,\r
834 &gEfiComponentName2ProtocolGuid,\r
835 ComponentName2,\r
836 &gEfiDriverConfigurationProtocolGuid,\r
837 DriverConfiguration,\r
3a6779fa 838 NULL\r
839 );\r
840 }\r
e811b22f 841 } else {\r
2f88bd3a 842 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 843 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 844 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
845 &gEfiDriverBindingProtocolGuid,\r
846 DriverBinding,\r
847 &gEfiComponentNameProtocolGuid,\r
848 ComponentName,\r
849 &gEfiDriverConfigurationProtocolGuid,\r
850 DriverConfiguration,\r
3a6779fa 851 NULL\r
852 );\r
853 } else {\r
854 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 855 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
856 &gEfiDriverBindingProtocolGuid,\r
857 DriverBinding,\r
858 &gEfiComponentNameProtocolGuid,\r
859 ComponentName,\r
860 &gEfiComponentName2ProtocolGuid,\r
861 ComponentName2,\r
862 &gEfiDriverConfigurationProtocolGuid,\r
863 DriverConfiguration,\r
3a6779fa 864 NULL\r
865 );\r
866 }\r
e811b22f 867 }\r
868 } else {\r
2f88bd3a
MK
869 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
870 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 871 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 872 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
873 &gEfiDriverBindingProtocolGuid,\r
874 DriverBinding,\r
875 &gEfiDriverConfigurationProtocolGuid,\r
876 DriverConfiguration,\r
877 &gEfiDriverDiagnostics2ProtocolGuid,\r
878 DriverDiagnostics2,\r
3a6779fa 879 NULL\r
880 );\r
881 } else {\r
882 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 883 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
884 &gEfiDriverBindingProtocolGuid,\r
885 DriverBinding,\r
886 &gEfiComponentName2ProtocolGuid,\r
887 ComponentName2,\r
888 &gEfiDriverConfigurationProtocolGuid,\r
889 DriverConfiguration,\r
890 &gEfiDriverDiagnostics2ProtocolGuid,\r
891 DriverDiagnostics2,\r
3a6779fa 892 NULL\r
893 );\r
894 }\r
e811b22f 895 } else {\r
2f88bd3a 896 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 897 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 898 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
899 &gEfiDriverBindingProtocolGuid,\r
900 DriverBinding,\r
901 &gEfiComponentNameProtocolGuid,\r
902 ComponentName,\r
903 &gEfiDriverConfigurationProtocolGuid,\r
904 DriverConfiguration,\r
905 &gEfiDriverDiagnostics2ProtocolGuid,\r
906 DriverDiagnostics2,\r
3a6779fa 907 NULL\r
908 );\r
909 } else {\r
910 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 911 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
912 &gEfiDriverBindingProtocolGuid,\r
913 DriverBinding,\r
914 &gEfiComponentNameProtocolGuid,\r
915 ComponentName,\r
916 &gEfiComponentName2ProtocolGuid,\r
917 ComponentName2,\r
918 &gEfiDriverConfigurationProtocolGuid,\r
919 DriverConfiguration,\r
920 &gEfiDriverDiagnostics2ProtocolGuid,\r
921 DriverDiagnostics2,\r
3a6779fa 922 NULL\r
923 );\r
924 }\r
e811b22f 925 }\r
926 }\r
927 } else {\r
2f88bd3a
MK
928 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
929 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
930 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 931 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 932 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
933 &gEfiDriverBindingProtocolGuid,\r
934 DriverBinding,\r
935 &gEfiDriverConfigurationProtocolGuid,\r
936 DriverConfiguration,\r
937 &gEfiDriverDiagnosticsProtocolGuid,\r
938 DriverDiagnostics,\r
3a6779fa 939 NULL\r
940 );\r
941 } else {\r
942 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 943 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
944 &gEfiDriverBindingProtocolGuid,\r
945 DriverBinding,\r
946 &gEfiComponentName2ProtocolGuid,\r
947 ComponentName2,\r
948 &gEfiDriverConfigurationProtocolGuid,\r
949 DriverConfiguration,\r
950 &gEfiDriverDiagnosticsProtocolGuid,\r
951 DriverDiagnostics,\r
3a6779fa 952 NULL\r
953 );\r
954 }\r
e811b22f 955 } else {\r
2f88bd3a 956 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 957 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 958 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
959 &gEfiDriverBindingProtocolGuid,\r
960 DriverBinding,\r
961 &gEfiComponentNameProtocolGuid,\r
962 ComponentName,\r
963 &gEfiDriverConfigurationProtocolGuid,\r
964 DriverConfiguration,\r
965 &gEfiDriverDiagnosticsProtocolGuid,\r
966 DriverDiagnostics,\r
3a6779fa 967 NULL\r
968 );\r
969 } else {\r
970 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 971 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
972 &gEfiDriverBindingProtocolGuid,\r
973 DriverBinding,\r
974 &gEfiComponentNameProtocolGuid,\r
975 ComponentName,\r
976 &gEfiComponentName2ProtocolGuid,\r
977 ComponentName2,\r
978 &gEfiDriverConfigurationProtocolGuid,\r
979 DriverConfiguration,\r
980 &gEfiDriverDiagnosticsProtocolGuid,\r
981 DriverDiagnostics,\r
3a6779fa 982 NULL\r
983 );\r
984 }\r
e811b22f 985 }\r
986 } else {\r
2f88bd3a
MK
987 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
988 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 989 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 990 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
991 &gEfiDriverBindingProtocolGuid,\r
992 DriverBinding,\r
993 &gEfiDriverConfigurationProtocolGuid,\r
994 DriverConfiguration,\r
995 &gEfiDriverDiagnosticsProtocolGuid,\r
996 DriverDiagnostics,\r
997 &gEfiDriverDiagnostics2ProtocolGuid,\r
998 DriverDiagnostics2,\r
3a6779fa 999 NULL\r
1000 );\r
1001 } else {\r
1002 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1003 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1004 &gEfiDriverBindingProtocolGuid,\r
1005 DriverBinding,\r
1006 &gEfiComponentName2ProtocolGuid,\r
1007 ComponentName2,\r
1008 &gEfiDriverConfigurationProtocolGuid,\r
1009 DriverConfiguration,\r
1010 &gEfiDriverDiagnosticsProtocolGuid,\r
1011 DriverDiagnostics,\r
1012 &gEfiDriverDiagnostics2ProtocolGuid,\r
1013 DriverDiagnostics2,\r
3a6779fa 1014 NULL\r
1015 );\r
1016 }\r
e811b22f 1017 } else {\r
2f88bd3a 1018 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1019 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1020 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1021 &gEfiDriverBindingProtocolGuid,\r
1022 DriverBinding,\r
1023 &gEfiComponentNameProtocolGuid,\r
1024 ComponentName,\r
1025 &gEfiDriverConfigurationProtocolGuid,\r
1026 DriverConfiguration,\r
1027 &gEfiDriverDiagnosticsProtocolGuid,\r
1028 DriverDiagnostics,\r
1029 &gEfiDriverDiagnostics2ProtocolGuid,\r
1030 DriverDiagnostics2,\r
3a6779fa 1031 NULL\r
1032 );\r
1033 } else {\r
1034 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1035 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1036 &gEfiDriverBindingProtocolGuid,\r
1037 DriverBinding,\r
1038 &gEfiComponentNameProtocolGuid,\r
1039 ComponentName,\r
1040 &gEfiComponentName2ProtocolGuid,\r
1041 ComponentName2,\r
1042 &gEfiDriverConfigurationProtocolGuid,\r
1043 DriverConfiguration,\r
1044 &gEfiDriverDiagnosticsProtocolGuid,\r
1045 DriverDiagnostics,\r
1046 &gEfiDriverDiagnostics2ProtocolGuid,\r
1047 DriverDiagnostics2,\r
3a6779fa 1048 NULL\r
1049 );\r
1050 }\r
e811b22f 1051 }\r
1052 }\r
1053 }\r
1054 }\r
1055 } else {\r
3a6779fa 1056 if (DriverConfiguration == NULL) {\r
2f88bd3a
MK
1057 if ((DriverDiagnostics == NULL) || FeaturePcdGet (PcdDriverDiagnosticsDisable)) {\r
1058 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
1059 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1060 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1061 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1062 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1063 &gEfiDriverBindingProtocolGuid,\r
1064 DriverBinding,\r
1065 &gEfiDriverConfiguration2ProtocolGuid,\r
1066 DriverConfiguration2,\r
3a6779fa 1067 NULL\r
1068 );\r
1069 } else {\r
1070 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1071 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1072 &gEfiDriverBindingProtocolGuid,\r
1073 DriverBinding,\r
1074 &gEfiComponentName2ProtocolGuid,\r
1075 ComponentName2,\r
1076 &gEfiDriverConfiguration2ProtocolGuid,\r
1077 DriverConfiguration2,\r
3a6779fa 1078 NULL\r
1079 );\r
1080 }\r
e811b22f 1081 } else {\r
2f88bd3a 1082 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1083 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1084 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1085 &gEfiDriverBindingProtocolGuid,\r
1086 DriverBinding,\r
1087 &gEfiComponentNameProtocolGuid,\r
1088 ComponentName,\r
1089 &gEfiDriverConfiguration2ProtocolGuid,\r
1090 DriverConfiguration2,\r
3a6779fa 1091 NULL\r
1092 );\r
1093 } else {\r
1094 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1095 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1096 &gEfiDriverBindingProtocolGuid,\r
1097 DriverBinding,\r
1098 &gEfiComponentNameProtocolGuid,\r
1099 ComponentName,\r
1100 &gEfiComponentName2ProtocolGuid,\r
1101 ComponentName2,\r
1102 &gEfiDriverConfiguration2ProtocolGuid,\r
1103 DriverConfiguration2,\r
3a6779fa 1104 NULL\r
1105 );\r
1106 }\r
e811b22f 1107 }\r
1108 } else {\r
2f88bd3a
MK
1109 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1110 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1111 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1112 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1113 &gEfiDriverBindingProtocolGuid,\r
1114 DriverBinding,\r
1115 &gEfiDriverDiagnostics2ProtocolGuid,\r
1116 DriverDiagnostics2,\r
1117 &gEfiDriverConfiguration2ProtocolGuid,\r
1118 DriverConfiguration2,\r
3a6779fa 1119 NULL\r
1120 );\r
1121 } else {\r
1122 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1123 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1124 &gEfiDriverBindingProtocolGuid,\r
1125 DriverBinding,\r
1126 &gEfiComponentName2ProtocolGuid,\r
1127 ComponentName2,\r
1128 &gEfiDriverConfiguration2ProtocolGuid,\r
1129 DriverConfiguration2,\r
1130 &gEfiDriverDiagnostics2ProtocolGuid,\r
1131 DriverDiagnostics2,\r
3a6779fa 1132 NULL\r
1133 );\r
1134 }\r
e811b22f 1135 } else {\r
2f88bd3a 1136 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1137 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1138 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1139 &gEfiDriverBindingProtocolGuid,\r
1140 DriverBinding,\r
1141 &gEfiComponentNameProtocolGuid,\r
1142 ComponentName,\r
1143 &gEfiDriverConfiguration2ProtocolGuid,\r
1144 DriverConfiguration2,\r
1145 &gEfiDriverDiagnostics2ProtocolGuid,\r
1146 DriverDiagnostics2,\r
3a6779fa 1147 NULL\r
1148 );\r
1149 } else {\r
1150 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1151 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1152 &gEfiDriverBindingProtocolGuid,\r
1153 DriverBinding,\r
1154 &gEfiComponentNameProtocolGuid,\r
1155 ComponentName,\r
1156 &gEfiComponentName2ProtocolGuid,\r
1157 ComponentName2,\r
1158 &gEfiDriverConfiguration2ProtocolGuid,\r
1159 DriverConfiguration2,\r
1160 &gEfiDriverDiagnostics2ProtocolGuid,\r
1161 DriverDiagnostics2,\r
3a6779fa 1162 NULL\r
1163 );\r
1164 }\r
e811b22f 1165 }\r
1166 }\r
1167 } else {\r
2f88bd3a
MK
1168 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
1169 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1170 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1171 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1172 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1173 &gEfiDriverBindingProtocolGuid,\r
1174 DriverBinding,\r
1175 &gEfiDriverDiagnosticsProtocolGuid,\r
1176 DriverDiagnostics,\r
1177 &gEfiDriverConfiguration2ProtocolGuid,\r
1178 DriverConfiguration2,\r
3a6779fa 1179 NULL\r
1180 );\r
1181 } else {\r
1182 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1183 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1184 &gEfiDriverBindingProtocolGuid,\r
1185 DriverBinding,\r
1186 &gEfiComponentName2ProtocolGuid,\r
1187 ComponentName2,\r
1188 &gEfiDriverConfiguration2ProtocolGuid,\r
1189 DriverConfiguration2,\r
1190 &gEfiDriverDiagnosticsProtocolGuid,\r
1191 DriverDiagnostics,\r
3a6779fa 1192 NULL\r
1193 );\r
1194 }\r
e811b22f 1195 } else {\r
2f88bd3a 1196 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1197 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1198 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1199 &gEfiDriverBindingProtocolGuid,\r
1200 DriverBinding,\r
1201 &gEfiComponentNameProtocolGuid,\r
1202 ComponentName,\r
1203 &gEfiDriverDiagnosticsProtocolGuid,\r
1204 DriverDiagnostics,\r
1205 &gEfiDriverConfiguration2ProtocolGuid,\r
1206 DriverConfiguration2,\r
3a6779fa 1207 NULL\r
1208 );\r
1209 } else {\r
1210 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1211 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1212 &gEfiDriverBindingProtocolGuid,\r
1213 DriverBinding,\r
1214 &gEfiComponentNameProtocolGuid,\r
1215 ComponentName,\r
1216 &gEfiComponentName2ProtocolGuid,\r
1217 ComponentName2,\r
1218 &gEfiDriverConfiguration2ProtocolGuid,\r
1219 DriverConfiguration2,\r
1220 &gEfiDriverDiagnosticsProtocolGuid,\r
1221 DriverDiagnostics,\r
3a6779fa 1222 NULL\r
1223 );\r
1224 }\r
e811b22f 1225 }\r
1226 } else {\r
2f88bd3a
MK
1227 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1228 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1229 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1230 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1231 &gEfiDriverBindingProtocolGuid,\r
1232 DriverBinding,\r
1233 &gEfiDriverConfiguration2ProtocolGuid,\r
1234 DriverConfiguration2,\r
1235 &gEfiDriverDiagnosticsProtocolGuid,\r
1236 DriverDiagnostics,\r
1237 &gEfiDriverDiagnostics2ProtocolGuid,\r
1238 DriverDiagnostics2,\r
3a6779fa 1239 NULL\r
1240 );\r
1241 } else {\r
1242 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1243 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1244 &gEfiDriverBindingProtocolGuid,\r
1245 DriverBinding,\r
1246 &gEfiComponentName2ProtocolGuid,\r
1247 ComponentName2,\r
1248 &gEfiDriverConfiguration2ProtocolGuid,\r
1249 DriverConfiguration2,\r
1250 &gEfiDriverDiagnosticsProtocolGuid,\r
1251 DriverDiagnostics,\r
1252 &gEfiDriverDiagnostics2ProtocolGuid,\r
1253 DriverDiagnostics2,\r
3a6779fa 1254 NULL\r
1255 );\r
1256 }\r
e811b22f 1257 } else {\r
2f88bd3a 1258 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1259 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1260 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1261 &gEfiDriverBindingProtocolGuid,\r
1262 DriverBinding,\r
1263 &gEfiComponentNameProtocolGuid,\r
1264 ComponentName,\r
1265 &gEfiDriverConfiguration2ProtocolGuid,\r
1266 DriverConfiguration2,\r
1267 &gEfiDriverDiagnosticsProtocolGuid,\r
1268 DriverDiagnostics,\r
1269 &gEfiDriverDiagnostics2ProtocolGuid,\r
1270 DriverDiagnostics2,\r
3a6779fa 1271 NULL\r
1272 );\r
1273 } else {\r
1274 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1275 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1276 &gEfiDriverBindingProtocolGuid,\r
1277 DriverBinding,\r
1278 &gEfiComponentNameProtocolGuid,\r
1279 ComponentName,\r
1280 &gEfiComponentName2ProtocolGuid,\r
1281 ComponentName2,\r
1282 &gEfiDriverConfiguration2ProtocolGuid,\r
1283 DriverConfiguration2,\r
1284 &gEfiDriverDiagnosticsProtocolGuid,\r
1285 DriverDiagnostics,\r
1286 &gEfiDriverDiagnostics2ProtocolGuid,\r
1287 DriverDiagnostics2,\r
3a6779fa 1288 NULL\r
1289 );\r
1290 }\r
e811b22f 1291 }\r
1292 }\r
1293 }\r
1294 } else {\r
2f88bd3a
MK
1295 if ((DriverDiagnostics == NULL) || FeaturePcdGet (PcdDriverDiagnosticsDisable)) {\r
1296 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
1297 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1298 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1299 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1300 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1301 &gEfiDriverBindingProtocolGuid,\r
1302 DriverBinding,\r
1303 &gEfiDriverConfigurationProtocolGuid,\r
1304 DriverConfiguration,\r
1305 &gEfiDriverConfiguration2ProtocolGuid,\r
1306 DriverConfiguration2,\r
3a6779fa 1307 NULL\r
1308 );\r
1309 } else {\r
1310 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1311 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1312 &gEfiDriverBindingProtocolGuid,\r
1313 DriverBinding,\r
1314 &gEfiComponentName2ProtocolGuid,\r
1315 ComponentName2,\r
1316 &gEfiDriverConfigurationProtocolGuid,\r
1317 DriverConfiguration,\r
1318 &gEfiDriverConfiguration2ProtocolGuid,\r
1319 DriverConfiguration2,\r
3a6779fa 1320 NULL\r
1321 );\r
1322 }\r
e811b22f 1323 } else {\r
2f88bd3a 1324 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1325 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1326 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1327 &gEfiDriverBindingProtocolGuid,\r
1328 DriverBinding,\r
1329 &gEfiComponentNameProtocolGuid,\r
1330 ComponentName,\r
1331 &gEfiDriverConfigurationProtocolGuid,\r
1332 DriverConfiguration,\r
1333 &gEfiDriverConfiguration2ProtocolGuid,\r
1334 DriverConfiguration2,\r
3a6779fa 1335 NULL\r
1336 );\r
1337 } else {\r
1338 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1339 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1340 &gEfiDriverBindingProtocolGuid,\r
1341 DriverBinding,\r
1342 &gEfiComponentNameProtocolGuid,\r
1343 ComponentName,\r
1344 &gEfiComponentName2ProtocolGuid,\r
1345 ComponentName2,\r
1346 &gEfiDriverConfigurationProtocolGuid,\r
1347 DriverConfiguration,\r
1348 &gEfiDriverConfiguration2ProtocolGuid,\r
1349 DriverConfiguration2,\r
3a6779fa 1350 NULL\r
1351 );\r
1352 }\r
e811b22f 1353 }\r
1354 } else {\r
2f88bd3a
MK
1355 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1356 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1357 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1358 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1359 &gEfiDriverBindingProtocolGuid,\r
1360 DriverBinding,\r
1361 &gEfiDriverConfigurationProtocolGuid,\r
1362 DriverConfiguration,\r
1363 &gEfiDriverConfiguration2ProtocolGuid,\r
1364 DriverConfiguration2,\r
1365 &gEfiDriverDiagnostics2ProtocolGuid,\r
1366 DriverDiagnostics2,\r
3a6779fa 1367 NULL\r
1368 );\r
1369 } else {\r
1370 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1371 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1372 &gEfiDriverBindingProtocolGuid,\r
1373 DriverBinding,\r
1374 &gEfiComponentName2ProtocolGuid,\r
1375 ComponentName2,\r
1376 &gEfiDriverConfigurationProtocolGuid,\r
1377 DriverConfiguration,\r
1378 &gEfiDriverConfiguration2ProtocolGuid,\r
1379 DriverConfiguration2,\r
1380 &gEfiDriverDiagnostics2ProtocolGuid,\r
1381 DriverDiagnostics2,\r
3a6779fa 1382 NULL\r
1383 );\r
1384 }\r
e811b22f 1385 } else {\r
2f88bd3a 1386 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1387 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1388 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1389 &gEfiDriverBindingProtocolGuid,\r
1390 DriverBinding,\r
1391 &gEfiComponentNameProtocolGuid,\r
1392 ComponentName,\r
1393 &gEfiDriverConfigurationProtocolGuid,\r
1394 DriverConfiguration,\r
1395 &gEfiDriverConfiguration2ProtocolGuid,\r
1396 DriverConfiguration2,\r
1397 &gEfiDriverDiagnostics2ProtocolGuid,\r
1398 DriverDiagnostics2,\r
3a6779fa 1399 NULL\r
1400 );\r
1401 } else {\r
1402 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1403 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1404 &gEfiDriverBindingProtocolGuid,\r
1405 DriverBinding,\r
1406 &gEfiComponentNameProtocolGuid,\r
1407 ComponentName,\r
1408 &gEfiComponentName2ProtocolGuid,\r
1409 ComponentName2,\r
1410 &gEfiDriverConfigurationProtocolGuid,\r
1411 DriverConfiguration,\r
1412 &gEfiDriverConfiguration2ProtocolGuid,\r
1413 DriverConfiguration2,\r
1414 &gEfiDriverDiagnostics2ProtocolGuid,\r
1415 DriverDiagnostics2,\r
3a6779fa 1416 NULL\r
1417 );\r
1418 }\r
e811b22f 1419 }\r
1420 }\r
1421 } else {\r
2f88bd3a
MK
1422 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
1423 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1424 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1425 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1426 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1427 &gEfiDriverBindingProtocolGuid,\r
1428 DriverBinding,\r
1429 &gEfiDriverConfigurationProtocolGuid,\r
1430 DriverConfiguration,\r
1431 &gEfiDriverConfiguration2ProtocolGuid,\r
1432 DriverConfiguration2,\r
1433 &gEfiDriverDiagnosticsProtocolGuid,\r
1434 DriverDiagnostics,\r
3a6779fa 1435 NULL\r
1436 );\r
1437 } else {\r
1438 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1439 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1440 &gEfiDriverBindingProtocolGuid,\r
1441 DriverBinding,\r
1442 &gEfiComponentName2ProtocolGuid,\r
1443 ComponentName2,\r
1444 &gEfiDriverConfigurationProtocolGuid,\r
1445 DriverConfiguration,\r
1446 &gEfiDriverConfiguration2ProtocolGuid,\r
1447 DriverConfiguration2,\r
1448 &gEfiDriverDiagnosticsProtocolGuid,\r
1449 DriverDiagnostics,\r
3a6779fa 1450 NULL\r
1451 );\r
1452 }\r
e811b22f 1453 } else {\r
2f88bd3a 1454 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1455 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1456 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1457 &gEfiDriverBindingProtocolGuid,\r
1458 DriverBinding,\r
1459 &gEfiComponentNameProtocolGuid,\r
1460 ComponentName,\r
1461 &gEfiDriverConfigurationProtocolGuid,\r
1462 DriverConfiguration,\r
1463 &gEfiDriverConfiguration2ProtocolGuid,\r
1464 DriverConfiguration2,\r
1465 &gEfiDriverDiagnosticsProtocolGuid,\r
1466 DriverDiagnostics,\r
3a6779fa 1467 NULL\r
1468 );\r
1469 } else {\r
1470 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1471 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1472 &gEfiDriverBindingProtocolGuid,\r
1473 DriverBinding,\r
1474 &gEfiComponentNameProtocolGuid,\r
1475 ComponentName,\r
1476 &gEfiComponentName2ProtocolGuid,\r
1477 ComponentName2,\r
1478 &gEfiDriverConfigurationProtocolGuid,\r
1479 DriverConfiguration,\r
1480 &gEfiDriverConfiguration2ProtocolGuid,\r
1481 DriverConfiguration2,\r
1482 &gEfiDriverDiagnosticsProtocolGuid,\r
1483 DriverDiagnostics,\r
3a6779fa 1484 NULL\r
1485 );\r
1486 }\r
e811b22f 1487 }\r
1488 } else {\r
2f88bd3a
MK
1489 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1490 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1491 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1492 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1493 &gEfiDriverBindingProtocolGuid,\r
1494 DriverBinding,\r
1495 &gEfiDriverConfigurationProtocolGuid,\r
1496 DriverConfiguration,\r
1497 &gEfiDriverConfiguration2ProtocolGuid,\r
1498 DriverConfiguration2,\r
1499 &gEfiDriverDiagnosticsProtocolGuid,\r
1500 DriverDiagnostics,\r
1501 &gEfiDriverDiagnostics2ProtocolGuid,\r
1502 DriverDiagnostics2,\r
3a6779fa 1503 NULL\r
1504 );\r
1505 } else {\r
1506 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1507 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1508 &gEfiDriverBindingProtocolGuid,\r
1509 DriverBinding,\r
1510 &gEfiComponentName2ProtocolGuid,\r
1511 ComponentName2,\r
1512 &gEfiDriverConfigurationProtocolGuid,\r
1513 DriverConfiguration,\r
1514 &gEfiDriverConfiguration2ProtocolGuid,\r
1515 DriverConfiguration2,\r
1516 &gEfiDriverDiagnosticsProtocolGuid,\r
1517 DriverDiagnostics,\r
1518 &gEfiDriverDiagnostics2ProtocolGuid,\r
1519 DriverDiagnostics2,\r
3a6779fa 1520 NULL\r
1521 );\r
1522 }\r
e811b22f 1523 } else {\r
2f88bd3a 1524 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
3a6779fa 1525 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1526 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1527 &gEfiDriverBindingProtocolGuid,\r
1528 DriverBinding,\r
1529 &gEfiComponentNameProtocolGuid,\r
1530 ComponentName,\r
1531 &gEfiDriverConfigurationProtocolGuid,\r
1532 DriverConfiguration,\r
1533 &gEfiDriverConfiguration2ProtocolGuid,\r
1534 DriverConfiguration2,\r
1535 &gEfiDriverDiagnosticsProtocolGuid,\r
1536 DriverDiagnostics,\r
1537 &gEfiDriverDiagnostics2ProtocolGuid,\r
1538 DriverDiagnostics2,\r
3a6779fa 1539 NULL\r
1540 );\r
1541 } else {\r
1542 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1543 &DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1544 &gEfiDriverBindingProtocolGuid,\r
1545 DriverBinding,\r
1546 &gEfiComponentNameProtocolGuid,\r
1547 ComponentName,\r
1548 &gEfiComponentName2ProtocolGuid,\r
1549 ComponentName2,\r
1550 &gEfiDriverConfigurationProtocolGuid,\r
1551 DriverConfiguration,\r
1552 &gEfiDriverConfiguration2ProtocolGuid,\r
1553 DriverConfiguration2,\r
1554 &gEfiDriverDiagnosticsProtocolGuid,\r
1555 DriverDiagnostics,\r
1556 &gEfiDriverDiagnostics2ProtocolGuid,\r
1557 DriverDiagnostics2,\r
3a6779fa 1558 NULL\r
1559 );\r
1560 }\r
e811b22f 1561 }\r
1562 }\r
1563 }\r
1564 }\r
1565 }\r
1566\r
1567 //\r
1568 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
1569 //\r
1570 ASSERT_EFI_ERROR (Status);\r
1571\r
e811b22f 1572 return Status;\r
1573}\r
0290fca2 1574\r
0290fca2
AS
1575/**\r
1576 Uninstalls Driver Binding Protocol with optional Component Name, Component Name 2, Driver\r
1577 Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.\r
1578\r
1579 If DriverBinding is NULL, then ASSERT().\r
1580 If the installation fails, then ASSERT().\r
1581\r
1582\r
1583 @param DriverBinding A Driver Binding Protocol instance that this driver produced.\r
1584 @param ComponentName A Component Name Protocol instance that this driver produced.\r
1585 @param ComponentName2 A Component Name 2 Protocol instance that this driver produced.\r
1586 @param DriverConfiguration A Driver Configuration Protocol instance that this driver produced.\r
1587 @param DriverConfiguration2 A Driver Configuration Protocol 2 instance that this driver produced.\r
1588 @param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver produced.\r
1589 @param DriverDiagnostics2 A Driver Diagnostics Protocol 2 instance that this driver produced.\r
1590\r
1591 @retval EFI_SUCCESS The protocol uninstallation successfully completed.\r
1592 @retval Others Status from gBS->UninstallMultipleProtocolInterfaces().\r
1593\r
1594**/\r
1595EFI_STATUS\r
1596EFIAPI\r
1597EfiLibUninstallAllDriverProtocols2 (\r
2f88bd3a
MK
1598 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
1599 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName OPTIONAL,\r
1600 IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL,\r
1601 IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration OPTIONAL,\r
1602 IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2 OPTIONAL,\r
1603 IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics OPTIONAL,\r
1604 IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL\r
0290fca2
AS
1605 )\r
1606{\r
1607 EFI_STATUS Status;\r
1608\r
1609 ASSERT (DriverBinding != NULL);\r
1610\r
1611 if (DriverConfiguration2 == NULL) {\r
1612 if (DriverConfiguration == NULL) {\r
2f88bd3a
MK
1613 if ((DriverDiagnostics == NULL) || FeaturePcdGet (PcdDriverDiagnosticsDisable)) {\r
1614 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
1615 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1616 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1617 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1618 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1619 &gEfiDriverBindingProtocolGuid,\r
1620 DriverBinding,\r
0290fca2
AS
1621 NULL\r
1622 );\r
1623 } else {\r
1624 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1625 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1626 &gEfiDriverBindingProtocolGuid,\r
1627 DriverBinding,\r
1628 &gEfiComponentName2ProtocolGuid,\r
1629 ComponentName2,\r
0290fca2
AS
1630 NULL\r
1631 );\r
1632 }\r
1633 } else {\r
2f88bd3a 1634 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1635 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1636 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1637 &gEfiDriverBindingProtocolGuid,\r
1638 DriverBinding,\r
1639 &gEfiComponentNameProtocolGuid,\r
1640 ComponentName,\r
0290fca2
AS
1641 NULL\r
1642 );\r
1643 } else {\r
1644 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1645 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1646 &gEfiDriverBindingProtocolGuid,\r
1647 DriverBinding,\r
1648 &gEfiComponentNameProtocolGuid,\r
1649 ComponentName,\r
1650 &gEfiComponentName2ProtocolGuid,\r
1651 ComponentName2,\r
0290fca2
AS
1652 NULL\r
1653 );\r
1654 }\r
1655 }\r
1656 } else {\r
2f88bd3a
MK
1657 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1658 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1659 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1660 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1661 &gEfiDriverBindingProtocolGuid,\r
1662 DriverBinding,\r
1663 &gEfiDriverDiagnostics2ProtocolGuid,\r
1664 DriverDiagnostics2,\r
0290fca2
AS
1665 NULL\r
1666 );\r
1667 } else {\r
1668 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1669 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1670 &gEfiDriverBindingProtocolGuid,\r
1671 DriverBinding,\r
1672 &gEfiComponentName2ProtocolGuid,\r
1673 ComponentName2,\r
1674 &gEfiDriverDiagnostics2ProtocolGuid,\r
1675 DriverDiagnostics2,\r
0290fca2
AS
1676 NULL\r
1677 );\r
1678 }\r
1679 } else {\r
2f88bd3a 1680 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1681 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1682 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1683 &gEfiDriverBindingProtocolGuid,\r
1684 DriverBinding,\r
1685 &gEfiComponentNameProtocolGuid,\r
1686 ComponentName,\r
1687 &gEfiDriverDiagnostics2ProtocolGuid,\r
1688 DriverDiagnostics2,\r
0290fca2
AS
1689 NULL\r
1690 );\r
1691 } else {\r
1692 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1693 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1694 &gEfiDriverBindingProtocolGuid,\r
1695 DriverBinding,\r
1696 &gEfiComponentNameProtocolGuid,\r
1697 ComponentName,\r
1698 &gEfiComponentName2ProtocolGuid,\r
1699 ComponentName2,\r
1700 &gEfiDriverDiagnostics2ProtocolGuid,\r
1701 DriverDiagnostics2,\r
0290fca2
AS
1702 NULL\r
1703 );\r
1704 }\r
1705 }\r
1706 }\r
1707 } else {\r
2f88bd3a
MK
1708 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
1709 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1710 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1711 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1712 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1713 &gEfiDriverBindingProtocolGuid,\r
1714 DriverBinding,\r
1715 &gEfiDriverDiagnosticsProtocolGuid,\r
1716 DriverDiagnostics,\r
0290fca2
AS
1717 NULL\r
1718 );\r
1719 } else {\r
1720 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1721 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1722 &gEfiDriverBindingProtocolGuid,\r
1723 DriverBinding,\r
1724 &gEfiComponentName2ProtocolGuid,\r
1725 ComponentName2,\r
1726 &gEfiDriverDiagnosticsProtocolGuid,\r
1727 DriverDiagnostics,\r
0290fca2
AS
1728 NULL\r
1729 );\r
1730 }\r
1731 } else {\r
2f88bd3a 1732 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1733 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1734 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1735 &gEfiDriverBindingProtocolGuid,\r
1736 DriverBinding,\r
1737 &gEfiComponentNameProtocolGuid,\r
1738 ComponentName,\r
1739 &gEfiDriverDiagnosticsProtocolGuid,\r
1740 DriverDiagnostics,\r
0290fca2
AS
1741 NULL\r
1742 );\r
1743 } else {\r
1744 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1745 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1746 &gEfiDriverBindingProtocolGuid,\r
1747 DriverBinding,\r
1748 &gEfiComponentNameProtocolGuid,\r
1749 ComponentName,\r
1750 &gEfiComponentName2ProtocolGuid,\r
1751 ComponentName2,\r
1752 &gEfiDriverDiagnosticsProtocolGuid,\r
1753 DriverDiagnostics,\r
0290fca2
AS
1754 NULL\r
1755 );\r
1756 }\r
1757 }\r
1758 } else {\r
2f88bd3a
MK
1759 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1760 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1761 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1762 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1763 &gEfiDriverBindingProtocolGuid,\r
1764 DriverBinding,\r
1765 &gEfiDriverDiagnosticsProtocolGuid,\r
1766 DriverDiagnostics,\r
1767 &gEfiDriverDiagnostics2ProtocolGuid,\r
1768 DriverDiagnostics2,\r
0290fca2
AS
1769 NULL\r
1770 );\r
1771 } else {\r
1772 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1773 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1774 &gEfiDriverBindingProtocolGuid,\r
1775 DriverBinding,\r
1776 &gEfiComponentName2ProtocolGuid,\r
1777 ComponentName2,\r
1778 &gEfiDriverDiagnosticsProtocolGuid,\r
1779 DriverDiagnostics,\r
1780 &gEfiDriverDiagnostics2ProtocolGuid,\r
1781 DriverDiagnostics2,\r
0290fca2
AS
1782 NULL\r
1783 );\r
1784 }\r
1785 } else {\r
2f88bd3a 1786 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1787 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1788 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1789 &gEfiDriverBindingProtocolGuid,\r
1790 DriverBinding,\r
1791 &gEfiComponentNameProtocolGuid,\r
1792 ComponentName,\r
1793 &gEfiDriverDiagnosticsProtocolGuid,\r
1794 DriverDiagnostics,\r
1795 &gEfiDriverDiagnostics2ProtocolGuid,\r
1796 DriverDiagnostics2,\r
0290fca2
AS
1797 NULL\r
1798 );\r
1799 } else {\r
1800 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1801 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1802 &gEfiDriverBindingProtocolGuid,\r
1803 DriverBinding,\r
1804 &gEfiComponentNameProtocolGuid,\r
1805 ComponentName,\r
1806 &gEfiComponentName2ProtocolGuid,\r
1807 ComponentName2,\r
1808 &gEfiDriverDiagnosticsProtocolGuid,\r
1809 DriverDiagnostics,\r
1810 &gEfiDriverDiagnostics2ProtocolGuid,\r
1811 DriverDiagnostics2,\r
0290fca2
AS
1812 NULL\r
1813 );\r
1814 }\r
1815 }\r
1816 }\r
1817 }\r
1818 } else {\r
2f88bd3a
MK
1819 if ((DriverDiagnostics == NULL) || FeaturePcdGet (PcdDriverDiagnosticsDisable)) {\r
1820 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
1821 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1822 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1823 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1824 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1825 &gEfiDriverBindingProtocolGuid,\r
1826 DriverBinding,\r
1827 &gEfiDriverConfigurationProtocolGuid,\r
1828 DriverConfiguration,\r
0290fca2
AS
1829 NULL\r
1830 );\r
1831 } else {\r
1832 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1833 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1834 &gEfiDriverBindingProtocolGuid,\r
1835 DriverBinding,\r
1836 &gEfiComponentName2ProtocolGuid,\r
1837 ComponentName2,\r
1838 &gEfiDriverConfigurationProtocolGuid,\r
1839 DriverConfiguration,\r
0290fca2
AS
1840 NULL\r
1841 );\r
1842 }\r
1843 } else {\r
2f88bd3a 1844 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1845 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1846 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1847 &gEfiDriverBindingProtocolGuid,\r
1848 DriverBinding,\r
1849 &gEfiComponentNameProtocolGuid,\r
1850 ComponentName,\r
1851 &gEfiDriverConfigurationProtocolGuid,\r
1852 DriverConfiguration,\r
0290fca2
AS
1853 NULL\r
1854 );\r
1855 } else {\r
1856 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1857 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1858 &gEfiDriverBindingProtocolGuid,\r
1859 DriverBinding,\r
1860 &gEfiComponentNameProtocolGuid,\r
1861 ComponentName,\r
1862 &gEfiComponentName2ProtocolGuid,\r
1863 ComponentName2,\r
1864 &gEfiDriverConfigurationProtocolGuid,\r
1865 DriverConfiguration,\r
0290fca2
AS
1866 NULL\r
1867 );\r
1868 }\r
1869 }\r
1870 } else {\r
2f88bd3a
MK
1871 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1872 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1873 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1874 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1875 &gEfiDriverBindingProtocolGuid,\r
1876 DriverBinding,\r
1877 &gEfiDriverConfigurationProtocolGuid,\r
1878 DriverConfiguration,\r
1879 &gEfiDriverDiagnostics2ProtocolGuid,\r
1880 DriverDiagnostics2,\r
0290fca2
AS
1881 NULL\r
1882 );\r
1883 } else {\r
1884 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1885 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1886 &gEfiDriverBindingProtocolGuid,\r
1887 DriverBinding,\r
1888 &gEfiComponentName2ProtocolGuid,\r
1889 ComponentName2,\r
1890 &gEfiDriverConfigurationProtocolGuid,\r
1891 DriverConfiguration,\r
1892 &gEfiDriverDiagnostics2ProtocolGuid,\r
1893 DriverDiagnostics2,\r
0290fca2
AS
1894 NULL\r
1895 );\r
1896 }\r
1897 } else {\r
2f88bd3a 1898 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1899 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1900 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1901 &gEfiDriverBindingProtocolGuid,\r
1902 DriverBinding,\r
1903 &gEfiComponentNameProtocolGuid,\r
1904 ComponentName,\r
1905 &gEfiDriverConfigurationProtocolGuid,\r
1906 DriverConfiguration,\r
1907 &gEfiDriverDiagnostics2ProtocolGuid,\r
1908 DriverDiagnostics2,\r
0290fca2
AS
1909 NULL\r
1910 );\r
1911 } else {\r
1912 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1913 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1914 &gEfiDriverBindingProtocolGuid,\r
1915 DriverBinding,\r
1916 &gEfiComponentNameProtocolGuid,\r
1917 ComponentName,\r
1918 &gEfiComponentName2ProtocolGuid,\r
1919 ComponentName2,\r
1920 &gEfiDriverConfigurationProtocolGuid,\r
1921 DriverConfiguration,\r
1922 &gEfiDriverDiagnostics2ProtocolGuid,\r
1923 DriverDiagnostics2,\r
0290fca2
AS
1924 NULL\r
1925 );\r
1926 }\r
1927 }\r
1928 }\r
1929 } else {\r
2f88bd3a
MK
1930 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
1931 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1932 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1933 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1934 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1935 &gEfiDriverBindingProtocolGuid,\r
1936 DriverBinding,\r
1937 &gEfiDriverConfigurationProtocolGuid,\r
1938 DriverConfiguration,\r
1939 &gEfiDriverDiagnosticsProtocolGuid,\r
1940 DriverDiagnostics,\r
0290fca2
AS
1941 NULL\r
1942 );\r
1943 } else {\r
1944 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1945 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1946 &gEfiDriverBindingProtocolGuid,\r
1947 DriverBinding,\r
1948 &gEfiComponentName2ProtocolGuid,\r
1949 ComponentName2,\r
1950 &gEfiDriverConfigurationProtocolGuid,\r
1951 DriverConfiguration,\r
1952 &gEfiDriverDiagnosticsProtocolGuid,\r
1953 DriverDiagnostics,\r
0290fca2
AS
1954 NULL\r
1955 );\r
1956 }\r
1957 } else {\r
2f88bd3a 1958 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1959 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1960 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1961 &gEfiDriverBindingProtocolGuid,\r
1962 DriverBinding,\r
1963 &gEfiComponentNameProtocolGuid,\r
1964 ComponentName,\r
1965 &gEfiDriverConfigurationProtocolGuid,\r
1966 DriverConfiguration,\r
1967 &gEfiDriverDiagnosticsProtocolGuid,\r
1968 DriverDiagnostics,\r
0290fca2
AS
1969 NULL\r
1970 );\r
1971 } else {\r
1972 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1973 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1974 &gEfiDriverBindingProtocolGuid,\r
1975 DriverBinding,\r
1976 &gEfiComponentNameProtocolGuid,\r
1977 ComponentName,\r
1978 &gEfiComponentName2ProtocolGuid,\r
1979 ComponentName2,\r
1980 &gEfiDriverConfigurationProtocolGuid,\r
1981 DriverConfiguration,\r
1982 &gEfiDriverDiagnosticsProtocolGuid,\r
1983 DriverDiagnostics,\r
0290fca2
AS
1984 NULL\r
1985 );\r
1986 }\r
1987 }\r
1988 } else {\r
2f88bd3a
MK
1989 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
1990 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
1991 Status = gBS->UninstallMultipleProtocolInterfaces (\r
1992 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
1993 &gEfiDriverBindingProtocolGuid,\r
1994 DriverBinding,\r
1995 &gEfiDriverConfigurationProtocolGuid,\r
1996 DriverConfiguration,\r
1997 &gEfiDriverDiagnosticsProtocolGuid,\r
1998 DriverDiagnostics,\r
1999 &gEfiDriverDiagnostics2ProtocolGuid,\r
2000 DriverDiagnostics2,\r
0290fca2
AS
2001 NULL\r
2002 );\r
2003 } else {\r
2004 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2005 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2006 &gEfiDriverBindingProtocolGuid,\r
2007 DriverBinding,\r
2008 &gEfiComponentName2ProtocolGuid,\r
2009 ComponentName2,\r
2010 &gEfiDriverConfigurationProtocolGuid,\r
2011 DriverConfiguration,\r
2012 &gEfiDriverDiagnosticsProtocolGuid,\r
2013 DriverDiagnostics,\r
2014 &gEfiDriverDiagnostics2ProtocolGuid,\r
2015 DriverDiagnostics2,\r
0290fca2
AS
2016 NULL\r
2017 );\r
2018 }\r
2019 } else {\r
2f88bd3a 2020 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2021 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2022 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2023 &gEfiDriverBindingProtocolGuid,\r
2024 DriverBinding,\r
2025 &gEfiComponentNameProtocolGuid,\r
2026 ComponentName,\r
2027 &gEfiDriverConfigurationProtocolGuid,\r
2028 DriverConfiguration,\r
2029 &gEfiDriverDiagnosticsProtocolGuid,\r
2030 DriverDiagnostics,\r
2031 &gEfiDriverDiagnostics2ProtocolGuid,\r
2032 DriverDiagnostics2,\r
0290fca2
AS
2033 NULL\r
2034 );\r
2035 } else {\r
2036 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2037 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2038 &gEfiDriverBindingProtocolGuid,\r
2039 DriverBinding,\r
2040 &gEfiComponentNameProtocolGuid,\r
2041 ComponentName,\r
2042 &gEfiComponentName2ProtocolGuid,\r
2043 ComponentName2,\r
2044 &gEfiDriverConfigurationProtocolGuid,\r
2045 DriverConfiguration,\r
2046 &gEfiDriverDiagnosticsProtocolGuid,\r
2047 DriverDiagnostics,\r
2048 &gEfiDriverDiagnostics2ProtocolGuid,\r
2049 DriverDiagnostics2,\r
0290fca2
AS
2050 NULL\r
2051 );\r
2052 }\r
2053 }\r
2054 }\r
2055 }\r
2056 }\r
2057 } else {\r
2058 if (DriverConfiguration == NULL) {\r
2f88bd3a
MK
2059 if ((DriverDiagnostics == NULL) || FeaturePcdGet (PcdDriverDiagnosticsDisable)) {\r
2060 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
2061 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
2062 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2063 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2064 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2065 &gEfiDriverBindingProtocolGuid,\r
2066 DriverBinding,\r
2067 &gEfiDriverConfiguration2ProtocolGuid,\r
2068 DriverConfiguration2,\r
0290fca2
AS
2069 NULL\r
2070 );\r
2071 } else {\r
2072 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2073 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2074 &gEfiDriverBindingProtocolGuid,\r
2075 DriverBinding,\r
2076 &gEfiComponentName2ProtocolGuid,\r
2077 ComponentName2,\r
2078 &gEfiDriverConfiguration2ProtocolGuid,\r
2079 DriverConfiguration2,\r
0290fca2
AS
2080 NULL\r
2081 );\r
2082 }\r
2083 } else {\r
2f88bd3a 2084 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2085 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2086 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2087 &gEfiDriverBindingProtocolGuid,\r
2088 DriverBinding,\r
2089 &gEfiComponentNameProtocolGuid,\r
2090 ComponentName,\r
2091 &gEfiDriverConfiguration2ProtocolGuid,\r
2092 DriverConfiguration2,\r
0290fca2
AS
2093 NULL\r
2094 );\r
2095 } else {\r
2096 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2097 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2098 &gEfiDriverBindingProtocolGuid,\r
2099 DriverBinding,\r
2100 &gEfiComponentNameProtocolGuid,\r
2101 ComponentName,\r
2102 &gEfiComponentName2ProtocolGuid,\r
2103 ComponentName2,\r
2104 &gEfiDriverConfiguration2ProtocolGuid,\r
2105 DriverConfiguration2,\r
0290fca2
AS
2106 NULL\r
2107 );\r
2108 }\r
2109 }\r
2110 } else {\r
2f88bd3a
MK
2111 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
2112 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2113 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2114 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2115 &gEfiDriverBindingProtocolGuid,\r
2116 DriverBinding,\r
2117 &gEfiDriverDiagnostics2ProtocolGuid,\r
2118 DriverDiagnostics2,\r
2119 &gEfiDriverConfiguration2ProtocolGuid,\r
2120 DriverConfiguration2,\r
0290fca2
AS
2121 NULL\r
2122 );\r
2123 } else {\r
2124 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2125 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2126 &gEfiDriverBindingProtocolGuid,\r
2127 DriverBinding,\r
2128 &gEfiComponentName2ProtocolGuid,\r
2129 ComponentName2,\r
2130 &gEfiDriverConfiguration2ProtocolGuid,\r
2131 DriverConfiguration2,\r
2132 &gEfiDriverDiagnostics2ProtocolGuid,\r
2133 DriverDiagnostics2,\r
0290fca2
AS
2134 NULL\r
2135 );\r
2136 }\r
2137 } else {\r
2f88bd3a 2138 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2139 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2140 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2141 &gEfiDriverBindingProtocolGuid,\r
2142 DriverBinding,\r
2143 &gEfiComponentNameProtocolGuid,\r
2144 ComponentName,\r
2145 &gEfiDriverConfiguration2ProtocolGuid,\r
2146 DriverConfiguration2,\r
2147 &gEfiDriverDiagnostics2ProtocolGuid,\r
2148 DriverDiagnostics2,\r
0290fca2
AS
2149 NULL\r
2150 );\r
2151 } else {\r
2152 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2153 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2154 &gEfiDriverBindingProtocolGuid,\r
2155 DriverBinding,\r
2156 &gEfiComponentNameProtocolGuid,\r
2157 ComponentName,\r
2158 &gEfiComponentName2ProtocolGuid,\r
2159 ComponentName2,\r
2160 &gEfiDriverConfiguration2ProtocolGuid,\r
2161 DriverConfiguration2,\r
2162 &gEfiDriverDiagnostics2ProtocolGuid,\r
2163 DriverDiagnostics2,\r
0290fca2
AS
2164 NULL\r
2165 );\r
2166 }\r
2167 }\r
2168 }\r
2169 } else {\r
2f88bd3a
MK
2170 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
2171 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
2172 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2173 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2174 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2175 &gEfiDriverBindingProtocolGuid,\r
2176 DriverBinding,\r
2177 &gEfiDriverDiagnosticsProtocolGuid,\r
2178 DriverDiagnostics,\r
2179 &gEfiDriverConfiguration2ProtocolGuid,\r
2180 DriverConfiguration2,\r
0290fca2
AS
2181 NULL\r
2182 );\r
2183 } else {\r
2184 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2185 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2186 &gEfiDriverBindingProtocolGuid,\r
2187 DriverBinding,\r
2188 &gEfiComponentName2ProtocolGuid,\r
2189 ComponentName2,\r
2190 &gEfiDriverConfiguration2ProtocolGuid,\r
2191 DriverConfiguration2,\r
2192 &gEfiDriverDiagnosticsProtocolGuid,\r
2193 DriverDiagnostics,\r
0290fca2
AS
2194 NULL\r
2195 );\r
2196 }\r
2197 } else {\r
2f88bd3a 2198 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2199 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2200 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2201 &gEfiDriverBindingProtocolGuid,\r
2202 DriverBinding,\r
2203 &gEfiComponentNameProtocolGuid,\r
2204 ComponentName,\r
2205 &gEfiDriverDiagnosticsProtocolGuid,\r
2206 DriverDiagnostics,\r
2207 &gEfiDriverConfiguration2ProtocolGuid,\r
2208 DriverConfiguration2,\r
0290fca2
AS
2209 NULL\r
2210 );\r
2211 } else {\r
2212 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2213 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2214 &gEfiDriverBindingProtocolGuid,\r
2215 DriverBinding,\r
2216 &gEfiComponentNameProtocolGuid,\r
2217 ComponentName,\r
2218 &gEfiComponentName2ProtocolGuid,\r
2219 ComponentName2,\r
2220 &gEfiDriverConfiguration2ProtocolGuid,\r
2221 DriverConfiguration2,\r
2222 &gEfiDriverDiagnosticsProtocolGuid,\r
2223 DriverDiagnostics,\r
0290fca2
AS
2224 NULL\r
2225 );\r
2226 }\r
2227 }\r
2228 } else {\r
2f88bd3a
MK
2229 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
2230 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2231 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2232 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2233 &gEfiDriverBindingProtocolGuid,\r
2234 DriverBinding,\r
2235 &gEfiDriverConfiguration2ProtocolGuid,\r
2236 DriverConfiguration2,\r
2237 &gEfiDriverDiagnosticsProtocolGuid,\r
2238 DriverDiagnostics,\r
2239 &gEfiDriverDiagnostics2ProtocolGuid,\r
2240 DriverDiagnostics2,\r
0290fca2
AS
2241 NULL\r
2242 );\r
2243 } else {\r
2244 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2245 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2246 &gEfiDriverBindingProtocolGuid,\r
2247 DriverBinding,\r
2248 &gEfiComponentName2ProtocolGuid,\r
2249 ComponentName2,\r
2250 &gEfiDriverConfiguration2ProtocolGuid,\r
2251 DriverConfiguration2,\r
2252 &gEfiDriverDiagnosticsProtocolGuid,\r
2253 DriverDiagnostics,\r
2254 &gEfiDriverDiagnostics2ProtocolGuid,\r
2255 DriverDiagnostics2,\r
0290fca2
AS
2256 NULL\r
2257 );\r
2258 }\r
2259 } else {\r
2f88bd3a 2260 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2261 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2262 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2263 &gEfiDriverBindingProtocolGuid,\r
2264 DriverBinding,\r
2265 &gEfiComponentNameProtocolGuid,\r
2266 ComponentName,\r
2267 &gEfiDriverConfiguration2ProtocolGuid,\r
2268 DriverConfiguration2,\r
2269 &gEfiDriverDiagnosticsProtocolGuid,\r
2270 DriverDiagnostics,\r
2271 &gEfiDriverDiagnostics2ProtocolGuid,\r
2272 DriverDiagnostics2,\r
0290fca2
AS
2273 NULL\r
2274 );\r
2275 } else {\r
2276 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2277 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2278 &gEfiDriverBindingProtocolGuid,\r
2279 DriverBinding,\r
2280 &gEfiComponentNameProtocolGuid,\r
2281 ComponentName,\r
2282 &gEfiComponentName2ProtocolGuid,\r
2283 ComponentName2,\r
2284 &gEfiDriverConfiguration2ProtocolGuid,\r
2285 DriverConfiguration2,\r
2286 &gEfiDriverDiagnosticsProtocolGuid,\r
2287 DriverDiagnostics,\r
2288 &gEfiDriverDiagnostics2ProtocolGuid,\r
2289 DriverDiagnostics2,\r
0290fca2
AS
2290 NULL\r
2291 );\r
2292 }\r
2293 }\r
2294 }\r
2295 }\r
2296 } else {\r
2f88bd3a
MK
2297 if ((DriverDiagnostics == NULL) || FeaturePcdGet (PcdDriverDiagnosticsDisable)) {\r
2298 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
2299 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
2300 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2301 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2302 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2303 &gEfiDriverBindingProtocolGuid,\r
2304 DriverBinding,\r
2305 &gEfiDriverConfigurationProtocolGuid,\r
2306 DriverConfiguration,\r
2307 &gEfiDriverConfiguration2ProtocolGuid,\r
2308 DriverConfiguration2,\r
0290fca2
AS
2309 NULL\r
2310 );\r
2311 } else {\r
2312 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2313 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2314 &gEfiDriverBindingProtocolGuid,\r
2315 DriverBinding,\r
2316 &gEfiComponentName2ProtocolGuid,\r
2317 ComponentName2,\r
2318 &gEfiDriverConfigurationProtocolGuid,\r
2319 DriverConfiguration,\r
2320 &gEfiDriverConfiguration2ProtocolGuid,\r
2321 DriverConfiguration2,\r
0290fca2
AS
2322 NULL\r
2323 );\r
2324 }\r
2325 } else {\r
2f88bd3a 2326 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2327 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2328 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2329 &gEfiDriverBindingProtocolGuid,\r
2330 DriverBinding,\r
2331 &gEfiComponentNameProtocolGuid,\r
2332 ComponentName,\r
2333 &gEfiDriverConfigurationProtocolGuid,\r
2334 DriverConfiguration,\r
2335 &gEfiDriverConfiguration2ProtocolGuid,\r
2336 DriverConfiguration2,\r
0290fca2
AS
2337 NULL\r
2338 );\r
2339 } else {\r
2340 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2341 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2342 &gEfiDriverBindingProtocolGuid,\r
2343 DriverBinding,\r
2344 &gEfiComponentNameProtocolGuid,\r
2345 ComponentName,\r
2346 &gEfiComponentName2ProtocolGuid,\r
2347 ComponentName2,\r
2348 &gEfiDriverConfigurationProtocolGuid,\r
2349 DriverConfiguration,\r
2350 &gEfiDriverConfiguration2ProtocolGuid,\r
2351 DriverConfiguration2,\r
0290fca2
AS
2352 NULL\r
2353 );\r
2354 }\r
2355 }\r
2356 } else {\r
2f88bd3a
MK
2357 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
2358 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2359 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2360 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2361 &gEfiDriverBindingProtocolGuid,\r
2362 DriverBinding,\r
2363 &gEfiDriverConfigurationProtocolGuid,\r
2364 DriverConfiguration,\r
2365 &gEfiDriverConfiguration2ProtocolGuid,\r
2366 DriverConfiguration2,\r
2367 &gEfiDriverDiagnostics2ProtocolGuid,\r
2368 DriverDiagnostics2,\r
0290fca2
AS
2369 NULL\r
2370 );\r
2371 } else {\r
2372 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2373 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2374 &gEfiDriverBindingProtocolGuid,\r
2375 DriverBinding,\r
2376 &gEfiComponentName2ProtocolGuid,\r
2377 ComponentName2,\r
2378 &gEfiDriverConfigurationProtocolGuid,\r
2379 DriverConfiguration,\r
2380 &gEfiDriverConfiguration2ProtocolGuid,\r
2381 DriverConfiguration2,\r
2382 &gEfiDriverDiagnostics2ProtocolGuid,\r
2383 DriverDiagnostics2,\r
0290fca2
AS
2384 NULL\r
2385 );\r
2386 }\r
2387 } else {\r
2f88bd3a 2388 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2389 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2390 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2391 &gEfiDriverBindingProtocolGuid,\r
2392 DriverBinding,\r
2393 &gEfiComponentNameProtocolGuid,\r
2394 ComponentName,\r
2395 &gEfiDriverConfigurationProtocolGuid,\r
2396 DriverConfiguration,\r
2397 &gEfiDriverConfiguration2ProtocolGuid,\r
2398 DriverConfiguration2,\r
2399 &gEfiDriverDiagnostics2ProtocolGuid,\r
2400 DriverDiagnostics2,\r
0290fca2
AS
2401 NULL\r
2402 );\r
2403 } else {\r
2404 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2405 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2406 &gEfiDriverBindingProtocolGuid,\r
2407 DriverBinding,\r
2408 &gEfiComponentNameProtocolGuid,\r
2409 ComponentName,\r
2410 &gEfiComponentName2ProtocolGuid,\r
2411 ComponentName2,\r
2412 &gEfiDriverConfigurationProtocolGuid,\r
2413 DriverConfiguration,\r
2414 &gEfiDriverConfiguration2ProtocolGuid,\r
2415 DriverConfiguration2,\r
2416 &gEfiDriverDiagnostics2ProtocolGuid,\r
2417 DriverDiagnostics2,\r
0290fca2
AS
2418 NULL\r
2419 );\r
2420 }\r
2421 }\r
2422 }\r
2423 } else {\r
2f88bd3a
MK
2424 if ((DriverDiagnostics2 == NULL) || FeaturePcdGet (PcdDriverDiagnostics2Disable)) {\r
2425 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
2426 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2427 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2428 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2429 &gEfiDriverBindingProtocolGuid,\r
2430 DriverBinding,\r
2431 &gEfiDriverConfigurationProtocolGuid,\r
2432 DriverConfiguration,\r
2433 &gEfiDriverConfiguration2ProtocolGuid,\r
2434 DriverConfiguration2,\r
2435 &gEfiDriverDiagnosticsProtocolGuid,\r
2436 DriverDiagnostics,\r
0290fca2
AS
2437 NULL\r
2438 );\r
2439 } else {\r
2440 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2441 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2442 &gEfiDriverBindingProtocolGuid,\r
2443 DriverBinding,\r
2444 &gEfiComponentName2ProtocolGuid,\r
2445 ComponentName2,\r
2446 &gEfiDriverConfigurationProtocolGuid,\r
2447 DriverConfiguration,\r
2448 &gEfiDriverConfiguration2ProtocolGuid,\r
2449 DriverConfiguration2,\r
2450 &gEfiDriverDiagnosticsProtocolGuid,\r
2451 DriverDiagnostics,\r
0290fca2
AS
2452 NULL\r
2453 );\r
2454 }\r
2455 } else {\r
2f88bd3a 2456 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2457 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2458 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2459 &gEfiDriverBindingProtocolGuid,\r
2460 DriverBinding,\r
2461 &gEfiComponentNameProtocolGuid,\r
2462 ComponentName,\r
2463 &gEfiDriverConfigurationProtocolGuid,\r
2464 DriverConfiguration,\r
2465 &gEfiDriverConfiguration2ProtocolGuid,\r
2466 DriverConfiguration2,\r
2467 &gEfiDriverDiagnosticsProtocolGuid,\r
2468 DriverDiagnostics,\r
0290fca2
AS
2469 NULL\r
2470 );\r
2471 } else {\r
2472 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2473 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2474 &gEfiDriverBindingProtocolGuid,\r
2475 DriverBinding,\r
2476 &gEfiComponentNameProtocolGuid,\r
2477 ComponentName,\r
2478 &gEfiComponentName2ProtocolGuid,\r
2479 ComponentName2,\r
2480 &gEfiDriverConfigurationProtocolGuid,\r
2481 DriverConfiguration,\r
2482 &gEfiDriverConfiguration2ProtocolGuid,\r
2483 DriverConfiguration2,\r
2484 &gEfiDriverDiagnosticsProtocolGuid,\r
2485 DriverDiagnostics,\r
0290fca2
AS
2486 NULL\r
2487 );\r
2488 }\r
2489 }\r
2490 } else {\r
2f88bd3a
MK
2491 if ((ComponentName == NULL) || FeaturePcdGet (PcdComponentNameDisable)) {\r
2492 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
0290fca2
AS
2493 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2494 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2495 &gEfiDriverBindingProtocolGuid,\r
2496 DriverBinding,\r
2497 &gEfiDriverConfigurationProtocolGuid,\r
2498 DriverConfiguration,\r
2499 &gEfiDriverConfiguration2ProtocolGuid,\r
2500 DriverConfiguration2,\r
2501 &gEfiDriverDiagnosticsProtocolGuid,\r
2502 DriverDiagnostics,\r
2503 &gEfiDriverDiagnostics2ProtocolGuid,\r
2504 DriverDiagnostics2,\r
0290fca2
AS
2505 NULL\r
2506 );\r
2507 } else {\r
2508 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2509 DriverBinding->DriverBindingHandle,\r
2f88bd3a
MK
2510 &gEfiDriverBindingProtocolGuid,\r
2511 DriverBinding,\r
2512 &gEfiComponentName2ProtocolGuid,\r
2513 ComponentName2,\r
2514 &gEfiDriverConfigurationProtocolGuid,\r
2515 DriverConfiguration,\r
2516 &gEfiDriverConfiguration2ProtocolGuid,\r
2517 DriverConfiguration2,\r
2518 &gEfiDriverDiagnosticsProtocolGuid,\r
2519 DriverDiagnostics,\r
2520 &gEfiDriverDiagnostics2ProtocolGuid,\r
2521 DriverDiagnostics2,\r
0290fca2
AS
2522 NULL\r
2523 );\r
2524 }\r
2525 } else {\r
2f88bd3a
MK
2526 if ((ComponentName2 == NULL) || FeaturePcdGet (PcdComponentName2Disable)) {\r
2527 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2528 DriverBinding->DriverBindingHandle,\r
2529 &gEfiDriverBindingProtocolGuid,\r
2530 DriverBinding,\r
2531 &gEfiComponentNameProtocolGuid,\r
2532 ComponentName,\r
2533 &gEfiDriverConfigurationProtocolGuid,\r
2534 DriverConfiguration,\r
2535 &gEfiDriverConfiguration2ProtocolGuid,\r
2536 DriverConfiguration2,\r
2537 &gEfiDriverDiagnosticsProtocolGuid,\r
2538 DriverDiagnostics,\r
2539 &gEfiDriverDiagnostics2ProtocolGuid,\r
2540 DriverDiagnostics2,\r
2541 NULL\r
2542 );\r
2543 } else {\r
2544 Status = gBS->UninstallMultipleProtocolInterfaces (\r
2545 DriverBinding->DriverBindingHandle,\r
2546 &gEfiDriverBindingProtocolGuid,\r
2547 DriverBinding,\r
2548 &gEfiComponentNameProtocolGuid,\r
2549 ComponentName,\r
2550 &gEfiComponentName2ProtocolGuid,\r
2551 ComponentName2,\r
2552 &gEfiDriverConfigurationProtocolGuid,\r
2553 DriverConfiguration,\r
2554 &gEfiDriverConfiguration2ProtocolGuid,\r
2555 DriverConfiguration2,\r
2556 &gEfiDriverDiagnosticsProtocolGuid,\r
2557 DriverDiagnostics,\r
2558 &gEfiDriverDiagnostics2ProtocolGuid,\r
2559 DriverDiagnostics2,\r
0290fca2
AS
2560 NULL\r
2561 );\r
2562 }\r
2563 }\r
2564 }\r
2565 }\r
2566 }\r
2567 }\r
2568\r
2569 //\r
2570 // ASSERT if the call to UninstallMultipleProtocolInterfaces() failed\r
2571 //\r
2572 ASSERT_EFI_ERROR (Status);\r
2573\r
2574 return Status;\r
2575}\r