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