]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/UefiLib/UefiDriverModel.c
Fill the ImageHandle and DriverBindingHandle field of Driver Binding Protocol before...
[mirror_edk2.git] / MdePkg / Library / UefiLib / UefiDriverModel.c
CommitLineData
e811b22f 1/** @file\r
2 Library functions that abstract driver model protocols\r
3 installation.\r
4\r
de27b8f0 5 Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>\r
19388d29 6 This program and the accompanying materials are\r
e811b22f 7 licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
2fc59a00 9 http://opensource.org/licenses/bsd-license.php.\r
e811b22f 10 \r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/ \r
15\r
1efcc4ae 16\r
f734a10a 17#include "UefiLibInternal.h"\r
e811b22f 18\r
19/**\r
cf8ae2f6 20 Installs and completes the initialization of a Driver Binding Protocol instance.\r
21 \r
22 Installs the Driver Binding Protocol specified by DriverBinding onto the handle\r
23 specified by DriverBindingHandle. If DriverBindingHandle is NULL, then DriverBinding\r
24 is installed onto a newly created handle. DriverBindingHandle is typically the same\r
25 as the driver's ImageHandle, but it can be different if the driver produces multiple\r
26 Driver Binding Protocols. \r
27 If DriverBinding is NULL, then ASSERT(). \r
28 If DriverBinding can not be installed onto a handle, then ASSERT().\r
29\r
30 @param ImageHandle The image handle of the driver.\r
31 @param SystemTable The EFI System Table that was passed to the driver's entry point.\r
32 @param DriverBinding A Driver Binding Protocol instance that this driver is producing.\r
33 @param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this\r
34 parameter is NULL, then a new handle is created.\r
35\r
58380e9c 36 @retval EFI_SUCCESS The protocol installation successfully completed.\r
cf8ae2f6 37 @retval EFI_OUT_OF_RESOURCES There was not enough system resources to install the protocol.\r
38 @retval Others Status from gBS->InstallMultipleProtocolInterfaces().\r
e811b22f 39\r
40**/\r
41EFI_STATUS\r
42EFIAPI\r
43EfiLibInstallDriverBinding (\r
f662c194 44 IN CONST EFI_HANDLE ImageHandle,\r
45 IN CONST EFI_SYSTEM_TABLE *SystemTable,\r
e811b22f 46 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
47 IN EFI_HANDLE DriverBindingHandle\r
48 )\r
49{\r
50 EFI_STATUS Status;\r
51\r
3a6779fa 52 ASSERT (DriverBinding != NULL);\r
e811b22f 53\r
de27b8f0
RN
54 //\r
55 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
56 //\r
57 DriverBinding->ImageHandle = ImageHandle;\r
58 DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
59\r
e811b22f 60 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 61 &DriverBinding->DriverBindingHandle,\r
e811b22f 62 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
63 NULL\r
64 );\r
65 //\r
66 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
67 //\r
68 ASSERT_EFI_ERROR (Status);\r
69\r
e811b22f 70 return Status;\r
71}\r
72\r
f662c194 73\r
e811b22f 74/**\r
cf8ae2f6 75 Installs and completes the initialization of a Driver Binding Protocol instance and\r
76 optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols.\r
77\r
78 Initializes a driver by installing the Driver Binding Protocol together with the\r
79 optional Component Name, optional Driver Configure and optional Driver Diagnostic\r
80 Protocols onto the driver's DriverBindingHandle. If DriverBindingHandle is NULL,\r
81 then the protocols are installed onto a newly created handle. DriverBindingHandle\r
82 is typically the same as the driver's ImageHandle, but it can be different if the\r
83 driver produces multiple Driver Binding Protocols. \r
84 If DriverBinding is NULL, then ASSERT(). \r
85 If the installation fails, then ASSERT().\r
86 \r
87 @param ImageHandle The image handle of the driver.\r
88 @param SystemTable The EFI System Table that was passed to the driver's entry point.\r
89 @param DriverBinding A Driver Binding Protocol instance that this driver is producing.\r
90 @param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this\r
91 parameter is NULL, then a new handle is created.\r
92 @param ComponentName A Component Name Protocol instance that this driver is producing.\r
93 @param DriverConfiguration A Driver Configuration Protocol instance that this driver is producing.\r
94 @param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing.\r
95\r
58380e9c 96 @retval EFI_SUCCESS The protocol installation successfully completed.\r
cf8ae2f6 97 @retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.\r
e811b22f 98\r
99**/\r
100EFI_STATUS\r
101EFIAPI\r
102EfiLibInstallAllDriverProtocols (\r
f662c194 103 IN CONST EFI_HANDLE ImageHandle,\r
104 IN CONST EFI_SYSTEM_TABLE *SystemTable,\r
e811b22f 105 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
106 IN EFI_HANDLE DriverBindingHandle,\r
f662c194 107 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL\r
108 IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL\r
109 IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics OPTIONAL\r
e811b22f 110 )\r
111{\r
112 EFI_STATUS Status;\r
113\r
3a6779fa 114 ASSERT (DriverBinding != NULL);\r
e811b22f 115\r
de27b8f0
RN
116 //\r
117 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
118 //\r
119 DriverBinding->ImageHandle = ImageHandle;\r
120 DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
121 \r
e811b22f 122 if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
123 if (DriverConfiguration == NULL) {\r
124 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
125 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 126 &DriverBinding->DriverBindingHandle,\r
e811b22f 127 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
128 NULL\r
129 );\r
130 } else {\r
131 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 132 &DriverBinding->DriverBindingHandle,\r
e811b22f 133 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
134 &gEfiComponentNameProtocolGuid, ComponentName,\r
135 NULL\r
136 );\r
137 }\r
138 } else {\r
139 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
140 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 141 &DriverBinding->DriverBindingHandle,\r
e811b22f 142 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
143 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
144 NULL\r
145 );\r
146 } else {\r
147 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 148 &DriverBinding->DriverBindingHandle,\r
e811b22f 149 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
150 &gEfiComponentNameProtocolGuid, ComponentName,\r
151 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
152 NULL\r
153 );\r
154 }\r
155 }\r
156 } else {\r
157 if (DriverConfiguration == NULL) {\r
158 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
159 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 160 &DriverBinding->DriverBindingHandle,\r
e811b22f 161 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
162 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
163 NULL\r
164 );\r
165 } else {\r
166 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 167 &DriverBinding->DriverBindingHandle,\r
e811b22f 168 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
169 &gEfiComponentNameProtocolGuid, ComponentName,\r
170 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
171 NULL\r
172 );\r
173 }\r
174 } else {\r
175 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
176 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 177 &DriverBinding->DriverBindingHandle,\r
e811b22f 178 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
179 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
180 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
181 NULL\r
182 );\r
183 } else {\r
184 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 185 &DriverBinding->DriverBindingHandle,\r
e811b22f 186 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
187 &gEfiComponentNameProtocolGuid, ComponentName,\r
188 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
189 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
190 NULL\r
191 );\r
192 }\r
193 }\r
194 }\r
195\r
196 //\r
197 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
198 //\r
199 ASSERT_EFI_ERROR (Status);\r
200\r
e811b22f 201 return Status;\r
202}\r
203\r
204\r
f662c194 205\r
e811b22f 206/**\r
cf8ae2f6 207 Installs Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.\r
208\r
209 Initializes a driver by installing the Driver Binding Protocol together with the\r
210 optional Component Name and optional Component Name 2 protocols onto the driver's\r
211 DriverBindingHandle. If DriverBindingHandle is NULL, then the protocols are installed\r
212 onto a newly created handle. DriverBindingHandle is typically the same as the driver's\r
213 ImageHandle, but it can be different if the driver produces multiple Driver Binding Protocols. \r
214 If DriverBinding is NULL, then ASSERT(). \r
215 If the installation fails, then ASSERT().\r
216\r
217 @param ImageHandle The image handle of the driver.\r
218 @param SystemTable The EFI System Table that was passed to the driver's entry point.\r
219 @param DriverBinding A Driver Binding Protocol instance that this driver is producing.\r
220 @param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this\r
221 parameter is NULL, then a new handle is created.\r
222 @param ComponentName A Component Name Protocol instance that this driver is producing.\r
223 @param ComponentName2 A Component Name 2 Protocol instance that this driver is producing.\r
224\r
58380e9c 225 @retval EFI_SUCCESS The protocol installation successfully completed.\r
cf8ae2f6 226 @retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.\r
f662c194 227\r
228**/\r
229EFI_STATUS\r
230EFIAPI\r
231EfiLibInstallDriverBindingComponentName2 (\r
232 IN CONST EFI_HANDLE ImageHandle,\r
233 IN CONST EFI_SYSTEM_TABLE *SystemTable,\r
234 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
235 IN EFI_HANDLE DriverBindingHandle,\r
236 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL\r
237 IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL\r
238 )\r
239{\r
240 EFI_STATUS Status;\r
241\r
3a6779fa 242 ASSERT (DriverBinding != NULL);\r
f662c194 243\r
de27b8f0
RN
244 //\r
245 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
246 //\r
247 DriverBinding->ImageHandle = ImageHandle;\r
248 DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
249\r
f662c194 250 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
251 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
252 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 253 &DriverBinding->DriverBindingHandle,\r
f662c194 254 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
255 NULL\r
256 );\r
257 } else {\r
258 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 259 &DriverBinding->DriverBindingHandle,\r
f662c194 260 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
261 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
262 NULL\r
263 );\r
264 }\r
265 } else {\r
266 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
267 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 268 &DriverBinding->DriverBindingHandle,\r
f662c194 269 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
270 &gEfiComponentNameProtocolGuid, ComponentName,\r
271 NULL\r
272 );\r
273 } else {\r
274 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 275 &DriverBinding->DriverBindingHandle,\r
f662c194 276 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
277 &gEfiComponentNameProtocolGuid, ComponentName,\r
278 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
279 NULL\r
280 );\r
281 }\r
282 }\r
de27b8f0 283\r
f662c194 284 //\r
285 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
286 //\r
287 ASSERT_EFI_ERROR (Status);\r
288\r
f662c194 289 return Status;\r
290}\r
291\r
292\r
293\r
294/**\r
cf8ae2f6 295 Installs Driver Binding Protocol with optional Component Name, Component Name 2, Driver\r
296 Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.\r
297\r
298 Initializes a driver by installing the Driver Binding Protocol together with the optional\r
63ba999c 299 Component Name, optional Component Name 2, optional Driver Configuration, optional Driver Configuration 2,\r
300 optional Driver Diagnostic, and optional Driver Diagnostic 2 Protocols onto the driver's DriverBindingHandle.\r
301 DriverBindingHandle is typically the same as the driver's ImageHandle, but it can be different if the driver\r
302 produces multiple Driver Binding Protocols. \r
cf8ae2f6 303 If DriverBinding is NULL, then ASSERT(). \r
63ba999c 304 If the installation fails, then ASSERT().\r
305\r
cf8ae2f6 306\r
307 @param ImageHandle The image handle of the driver.\r
308 @param SystemTable The EFI System Table that was passed to the driver's entry point.\r
309 @param DriverBinding A Driver Binding Protocol instance that this driver is producing.\r
28d3e14f 310 @param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this\r
cf8ae2f6 311 parameter is NULL, then a new handle is created.\r
312 @param ComponentName A Component Name Protocol instance that this driver is producing.\r
313 @param ComponentName2 A Component Name 2 Protocol instance that this driver is producing.\r
314 @param DriverConfiguration A Driver Configuration Protocol instance that this driver is producing.\r
315 @param DriverConfiguration2 A Driver Configuration Protocol 2 instance that this driver is producing.\r
316 @param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing.\r
317 @param DriverDiagnostics2 A Driver Diagnostics Protocol 2 instance that this driver is producing.\r
318\r
58380e9c 319 @retval EFI_SUCCESS The protocol installation successfully completed.\r
cf8ae2f6 320 @retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.\r
e811b22f 321\r
322**/\r
323EFI_STATUS\r
324EFIAPI\r
325EfiLibInstallAllDriverProtocols2 (\r
f662c194 326 IN CONST EFI_HANDLE ImageHandle,\r
327 IN CONST EFI_SYSTEM_TABLE *SystemTable,\r
e811b22f 328 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,\r
329 IN EFI_HANDLE DriverBindingHandle,\r
3a6779fa 330 IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL\r
331 IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2, OPTIONAL\r
332 IN CONST EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL\r
8408411a 333 IN CONST EFI_DRIVER_CONFIGURATION2_PROTOCOL *DriverConfiguration2, OPTIONAL\r
3a6779fa 334 IN CONST EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics, OPTIONAL\r
335 IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL\r
e811b22f 336 )\r
337{\r
338 EFI_STATUS Status;\r
339\r
3a6779fa 340 ASSERT (DriverBinding != NULL); \r
341\r
de27b8f0
RN
342 //\r
343 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol\r
344 //\r
345 DriverBinding->ImageHandle = ImageHandle;\r
346 DriverBinding->DriverBindingHandle = DriverBindingHandle;\r
347 \r
3a6779fa 348 if (DriverConfiguration2 == NULL) {\r
349 if (DriverConfiguration == NULL) {\r
350 if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
351 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
352 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
353 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
354 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 355 &DriverBinding->DriverBindingHandle,\r
3a6779fa 356 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
357 NULL\r
358 );\r
359 } else {\r
360 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 361 &DriverBinding->DriverBindingHandle,\r
3a6779fa 362 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
363 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
364 NULL\r
365 );\r
366 }\r
e811b22f 367 } else {\r
3a6779fa 368 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
369 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 370 &DriverBinding->DriverBindingHandle,\r
3a6779fa 371 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
372 &gEfiComponentNameProtocolGuid, ComponentName,\r
373 NULL\r
374 );\r
375 } else {\r
376 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 377 &DriverBinding->DriverBindingHandle,\r
3a6779fa 378 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
379 &gEfiComponentNameProtocolGuid, ComponentName,\r
380 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
381 NULL\r
382 );\r
383 }\r
e811b22f 384 }\r
385 } else {\r
3a6779fa 386 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
387 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
388 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 389 &DriverBinding->DriverBindingHandle,\r
3a6779fa 390 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
391 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
392 NULL\r
393 );\r
394 } else {\r
395 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 396 &DriverBinding->DriverBindingHandle,\r
3a6779fa 397 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
398 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
399 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
400 NULL\r
401 );\r
402 }\r
e811b22f 403 } else {\r
3a6779fa 404 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
405 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 406 &DriverBinding->DriverBindingHandle,\r
3a6779fa 407 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
408 &gEfiComponentNameProtocolGuid, ComponentName,\r
409 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
410 NULL\r
411 );\r
412 } else {\r
413 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 414 &DriverBinding->DriverBindingHandle,\r
3a6779fa 415 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
416 &gEfiComponentNameProtocolGuid, ComponentName,\r
417 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
418 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
419 NULL\r
420 );\r
421 }\r
e811b22f 422 }\r
423 }\r
424 } else {\r
3a6779fa 425 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
426 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
427 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
428 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 429 &DriverBinding->DriverBindingHandle,\r
3a6779fa 430 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
431 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
432 NULL\r
433 );\r
434 } else {\r
435 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 436 &DriverBinding->DriverBindingHandle,\r
3a6779fa 437 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
438 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
439 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
440 NULL\r
441 );\r
442 }\r
e811b22f 443 } else {\r
3a6779fa 444 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
445 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 446 &DriverBinding->DriverBindingHandle,\r
3a6779fa 447 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
448 &gEfiComponentNameProtocolGuid, ComponentName,\r
449 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
450 NULL\r
451 );\r
452 } else {\r
453 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 454 &DriverBinding->DriverBindingHandle,\r
3a6779fa 455 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
456 &gEfiComponentNameProtocolGuid, ComponentName,\r
457 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
458 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
459 NULL\r
460 );\r
461 }\r
e811b22f 462 }\r
463 } else {\r
3a6779fa 464 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
465 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
466 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 467 &DriverBinding->DriverBindingHandle,\r
3a6779fa 468 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
469 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
470 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
471 NULL\r
472 );\r
473 } else {\r
474 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 475 &DriverBinding->DriverBindingHandle,\r
3a6779fa 476 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
477 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
478 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
479 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
480 NULL\r
481 );\r
482 }\r
e811b22f 483 } else {\r
3a6779fa 484 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
485 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 486 &DriverBinding->DriverBindingHandle,\r
3a6779fa 487 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
488 &gEfiComponentNameProtocolGuid, ComponentName,\r
489 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
490 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
491 NULL\r
492 );\r
493 } else {\r
494 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 495 &DriverBinding->DriverBindingHandle,\r
3a6779fa 496 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
497 &gEfiComponentNameProtocolGuid, ComponentName,\r
498 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
499 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
500 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
501 NULL\r
502 );\r
503 }\r
e811b22f 504 }\r
505 }\r
506 }\r
507 } else {\r
3a6779fa 508 if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
509 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
510 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
511 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
512 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 513 &DriverBinding->DriverBindingHandle,\r
3a6779fa 514 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
515 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
516 NULL\r
517 );\r
518 } else {\r
519 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 520 &DriverBinding->DriverBindingHandle,\r
3a6779fa 521 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
522 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
523 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
524 NULL\r
525 );\r
526 }\r
e811b22f 527 } else {\r
3a6779fa 528 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
529 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 530 &DriverBinding->DriverBindingHandle,\r
3a6779fa 531 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
532 &gEfiComponentNameProtocolGuid, ComponentName,\r
533 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
534 NULL\r
535 );\r
536 } else {\r
537 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 538 &DriverBinding->DriverBindingHandle,\r
3a6779fa 539 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
540 &gEfiComponentNameProtocolGuid, ComponentName,\r
541 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
542 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
543 NULL\r
544 );\r
545 }\r
e811b22f 546 }\r
547 } else {\r
3a6779fa 548 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
549 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
550 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 551 &DriverBinding->DriverBindingHandle,\r
3a6779fa 552 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
553 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
554 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
555 NULL\r
556 );\r
557 } else {\r
558 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 559 &DriverBinding->DriverBindingHandle,\r
3a6779fa 560 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
561 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
562 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
563 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
564 NULL\r
565 );\r
566 }\r
e811b22f 567 } else {\r
3a6779fa 568 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
569 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 570 &DriverBinding->DriverBindingHandle,\r
3a6779fa 571 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
572 &gEfiComponentNameProtocolGuid, ComponentName,\r
573 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
574 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
575 NULL\r
576 );\r
577 } else {\r
578 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 579 &DriverBinding->DriverBindingHandle,\r
3a6779fa 580 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
581 &gEfiComponentNameProtocolGuid, ComponentName,\r
582 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
583 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
584 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
585 NULL\r
586 );\r
587 }\r
e811b22f 588 }\r
589 }\r
590 } else {\r
3a6779fa 591 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
592 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
593 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
594 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 595 &DriverBinding->DriverBindingHandle,\r
3a6779fa 596 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
597 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
598 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
599 NULL\r
600 );\r
601 } else {\r
602 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 603 &DriverBinding->DriverBindingHandle,\r
3a6779fa 604 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
605 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
606 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
607 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
608 NULL\r
609 );\r
610 }\r
e811b22f 611 } else {\r
3a6779fa 612 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
613 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 614 &DriverBinding->DriverBindingHandle,\r
3a6779fa 615 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
616 &gEfiComponentNameProtocolGuid, ComponentName,\r
617 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
618 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
619 NULL\r
620 );\r
621 } else {\r
622 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 623 &DriverBinding->DriverBindingHandle,\r
3a6779fa 624 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
625 &gEfiComponentNameProtocolGuid, ComponentName,\r
626 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
627 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
628 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
629 NULL\r
630 );\r
631 }\r
e811b22f 632 }\r
633 } else {\r
3a6779fa 634 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
635 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
636 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 637 &DriverBinding->DriverBindingHandle,\r
3a6779fa 638 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
639 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
640 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
641 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
642 NULL\r
643 );\r
644 } else {\r
645 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 646 &DriverBinding->DriverBindingHandle,\r
3a6779fa 647 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
648 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
649 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
650 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
651 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
652 NULL\r
653 );\r
654 }\r
e811b22f 655 } else {\r
3a6779fa 656 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
657 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 658 &DriverBinding->DriverBindingHandle,\r
3a6779fa 659 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
660 &gEfiComponentNameProtocolGuid, ComponentName,\r
661 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
662 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
663 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
664 NULL\r
665 );\r
666 } else {\r
667 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 668 &DriverBinding->DriverBindingHandle,\r
3a6779fa 669 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
670 &gEfiComponentNameProtocolGuid, ComponentName,\r
671 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
672 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
673 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
674 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
675 NULL\r
676 );\r
677 }\r
e811b22f 678 }\r
679 }\r
680 }\r
681 }\r
682 } else {\r
3a6779fa 683 if (DriverConfiguration == NULL) {\r
684 if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
685 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
686 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
687 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
688 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 689 &DriverBinding->DriverBindingHandle,\r
3a6779fa 690 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
691 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
692 NULL\r
693 );\r
694 } else {\r
695 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 696 &DriverBinding->DriverBindingHandle,\r
3a6779fa 697 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
698 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
699 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
700 NULL\r
701 );\r
702 }\r
e811b22f 703 } else {\r
3a6779fa 704 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
705 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 706 &DriverBinding->DriverBindingHandle,\r
3a6779fa 707 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
708 &gEfiComponentNameProtocolGuid, ComponentName,\r
709 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
710 NULL\r
711 );\r
712 } else {\r
713 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 714 &DriverBinding->DriverBindingHandle,\r
3a6779fa 715 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
716 &gEfiComponentNameProtocolGuid, ComponentName,\r
717 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
718 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
719 NULL\r
720 );\r
721 }\r
e811b22f 722 }\r
723 } else {\r
3a6779fa 724 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
725 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
726 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 727 &DriverBinding->DriverBindingHandle,\r
3a6779fa 728 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
729 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
730 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
731 NULL\r
732 );\r
733 } else {\r
734 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 735 &DriverBinding->DriverBindingHandle,\r
3a6779fa 736 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
737 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
738 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
739 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
740 NULL\r
741 );\r
742 }\r
e811b22f 743 } else {\r
3a6779fa 744 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
745 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 746 &DriverBinding->DriverBindingHandle,\r
3a6779fa 747 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
748 &gEfiComponentNameProtocolGuid, ComponentName,\r
749 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
750 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
751 NULL\r
752 );\r
753 } else {\r
754 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 755 &DriverBinding->DriverBindingHandle,\r
3a6779fa 756 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
757 &gEfiComponentNameProtocolGuid, ComponentName,\r
758 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
759 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
760 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
761 NULL\r
762 );\r
763 }\r
e811b22f 764 }\r
765 }\r
766 } else {\r
3a6779fa 767 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
768 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
769 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
770 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 771 &DriverBinding->DriverBindingHandle,\r
3a6779fa 772 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
773 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
774 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
775 NULL\r
776 );\r
777 } else {\r
778 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 779 &DriverBinding->DriverBindingHandle,\r
3a6779fa 780 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
781 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
782 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
783 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
784 NULL\r
785 );\r
786 }\r
e811b22f 787 } else {\r
3a6779fa 788 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
789 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 790 &DriverBinding->DriverBindingHandle,\r
3a6779fa 791 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
792 &gEfiComponentNameProtocolGuid, ComponentName,\r
793 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
794 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
795 NULL\r
796 );\r
797 } else {\r
798 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 799 &DriverBinding->DriverBindingHandle,\r
3a6779fa 800 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
801 &gEfiComponentNameProtocolGuid, ComponentName,\r
802 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
803 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
804 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
805 NULL\r
806 );\r
807 }\r
e811b22f 808 }\r
809 } else {\r
3a6779fa 810 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
811 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
812 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 813 &DriverBinding->DriverBindingHandle,\r
3a6779fa 814 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
815 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
816 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
817 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
818 NULL\r
819 );\r
820 } else {\r
821 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 822 &DriverBinding->DriverBindingHandle,\r
3a6779fa 823 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
824 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
825 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
826 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
827 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
828 NULL\r
829 );\r
830 }\r
e811b22f 831 } else {\r
3a6779fa 832 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
833 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 834 &DriverBinding->DriverBindingHandle,\r
3a6779fa 835 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
836 &gEfiComponentNameProtocolGuid, ComponentName,\r
837 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
838 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
839 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
840 NULL\r
841 );\r
842 } else {\r
843 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 844 &DriverBinding->DriverBindingHandle,\r
3a6779fa 845 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
846 &gEfiComponentNameProtocolGuid, ComponentName,\r
847 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
848 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
849 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
850 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
851 NULL\r
852 );\r
853 }\r
e811b22f 854 }\r
855 }\r
856 }\r
857 } else {\r
3a6779fa 858 if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {\r
859 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
860 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
861 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
862 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 863 &DriverBinding->DriverBindingHandle,\r
3a6779fa 864 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
865 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
866 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
867 NULL\r
868 );\r
869 } else {\r
870 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 871 &DriverBinding->DriverBindingHandle,\r
3a6779fa 872 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
873 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
874 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
875 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
876 NULL\r
877 );\r
878 }\r
e811b22f 879 } else {\r
3a6779fa 880 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
881 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 882 &DriverBinding->DriverBindingHandle,\r
3a6779fa 883 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
884 &gEfiComponentNameProtocolGuid, ComponentName,\r
885 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
886 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
887 NULL\r
888 );\r
889 } else {\r
890 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 891 &DriverBinding->DriverBindingHandle,\r
3a6779fa 892 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
893 &gEfiComponentNameProtocolGuid, ComponentName,\r
894 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
895 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
896 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
897 NULL\r
898 );\r
899 }\r
e811b22f 900 }\r
901 } else {\r
3a6779fa 902 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
903 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
904 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 905 &DriverBinding->DriverBindingHandle,\r
3a6779fa 906 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
907 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
908 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
909 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
910 NULL\r
911 );\r
912 } else {\r
913 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 914 &DriverBinding->DriverBindingHandle,\r
3a6779fa 915 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
916 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
917 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
918 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
919 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
920 NULL\r
921 );\r
922 }\r
e811b22f 923 } else {\r
3a6779fa 924 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
925 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 926 &DriverBinding->DriverBindingHandle,\r
3a6779fa 927 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
928 &gEfiComponentNameProtocolGuid, ComponentName,\r
929 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
930 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
931 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
932 NULL\r
933 );\r
934 } else {\r
935 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 936 &DriverBinding->DriverBindingHandle,\r
3a6779fa 937 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
938 &gEfiComponentNameProtocolGuid, ComponentName,\r
939 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
940 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
941 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
942 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
943 NULL\r
944 );\r
945 }\r
e811b22f 946 }\r
947 }\r
948 } else {\r
3a6779fa 949 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {\r
950 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
951 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
952 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 953 &DriverBinding->DriverBindingHandle,\r
3a6779fa 954 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
955 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
956 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
957 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
958 NULL\r
959 );\r
960 } else {\r
961 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 962 &DriverBinding->DriverBindingHandle,\r
3a6779fa 963 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
964 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
965 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
966 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
967 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
968 NULL\r
969 );\r
970 }\r
e811b22f 971 } else {\r
3a6779fa 972 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
973 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 974 &DriverBinding->DriverBindingHandle,\r
3a6779fa 975 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
976 &gEfiComponentNameProtocolGuid, ComponentName,\r
977 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
978 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
979 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
980 NULL\r
981 );\r
982 } else {\r
983 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 984 &DriverBinding->DriverBindingHandle,\r
3a6779fa 985 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
986 &gEfiComponentNameProtocolGuid, ComponentName,\r
987 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
988 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
989 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
990 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
991 NULL\r
992 );\r
993 }\r
e811b22f 994 }\r
995 } else {\r
3a6779fa 996 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {\r
997 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
998 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 999 &DriverBinding->DriverBindingHandle,\r
3a6779fa 1000 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
1001 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
1002 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
1003 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
1004 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
1005 NULL\r
1006 );\r
1007 } else {\r
1008 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1009 &DriverBinding->DriverBindingHandle,\r
3a6779fa 1010 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
1011 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
1012 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
1013 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
1014 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
1015 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
1016 NULL\r
1017 );\r
1018 }\r
e811b22f 1019 } else {\r
3a6779fa 1020 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {\r
1021 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1022 &DriverBinding->DriverBindingHandle,\r
3a6779fa 1023 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
1024 &gEfiComponentNameProtocolGuid, ComponentName,\r
1025 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
1026 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
1027 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
1028 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
1029 NULL\r
1030 );\r
1031 } else {\r
1032 Status = gBS->InstallMultipleProtocolInterfaces (\r
de27b8f0 1033 &DriverBinding->DriverBindingHandle,\r
3a6779fa 1034 &gEfiDriverBindingProtocolGuid, DriverBinding,\r
1035 &gEfiComponentNameProtocolGuid, ComponentName,\r
1036 &gEfiComponentName2ProtocolGuid, ComponentName2,\r
1037 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,\r
1038 &gEfiDriverConfiguration2ProtocolGuid, DriverConfiguration2,\r
1039 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,\r
1040 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,\r
1041 NULL\r
1042 );\r
1043 }\r
e811b22f 1044 }\r
1045 }\r
1046 }\r
1047 }\r
1048 }\r
1049\r
1050 //\r
1051 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed\r
1052 //\r
1053 ASSERT_EFI_ERROR (Status);\r
1054\r
e811b22f 1055 return Status;\r
1056}\r