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