]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/UefiLib/UefiDriverModel.c
Add UefiDriverModel.c for Installation of driver model protocols .
[mirror_edk2.git] / MdePkg / Library / UefiLib / UefiDriverModel.c
1 /** @file
2 Library functions that abstract driver model protocols
3 installation.
4
5 Copyright (c) 2006 - 2007, Intel Corporation<BR> All rights
6 reserved. This program and the accompanying materials are
7 licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 //
17 // Include common header file for this module.
18 //
19 #include "CommonHeader.h"
20
21 /**
22 Intialize a driver by installing the Driver Binding Protocol onto the
23 driver's DriverBindingHandle. This is typically the same as the driver's
24 ImageHandle, but it can be different if the driver produces multiple
25 DriverBinding Protocols. This function also initializes the EFI Driver
26 Library that initializes the global variables gST, gBS, gRT.
27
28 @param ImageHandle The image handle of the driver
29 @param SystemTable The EFI System Table that was passed to the driver's entry point
30 @param DriverBinding A Driver Binding Protocol instance that this driver is producing
31 @param DriverBindingHandle The handle that DriverBinding is to be installe onto. If this
32 parameter is NULL, then a new handle is created.
33
34 @retval EFI_SUCCESS DriverBinding is installed onto DriverBindingHandle
35 @retval Other Status from gBS->InstallProtocolInterface()
36
37 **/
38 EFI_STATUS
39 EFIAPI
40 EfiLibInstallDriverBinding (
41 IN const EFI_HANDLE ImageHandle,
42 IN const EFI_SYSTEM_TABLE *SystemTable,
43 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
44 IN EFI_HANDLE DriverBindingHandle
45 )
46 {
47 EFI_STATUS Status;
48
49 ASSERT (NULL != DriverBinding);
50
51 Status = gBS->InstallMultipleProtocolInterfaces (
52 &DriverBindingHandle,
53 &gEfiDriverBindingProtocolGuid, DriverBinding,
54 NULL
55 );
56 //
57 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed
58 //
59 ASSERT_EFI_ERROR (Status);
60
61 //
62 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
63 //
64 DriverBinding->ImageHandle = ImageHandle;
65 DriverBinding->DriverBindingHandle = DriverBindingHandle;
66
67 return Status;
68 }
69
70 /**
71 Intialize a driver by installing the Driver Binding Protocol onto the
72 driver's DriverBindingHandle. This is typically the same as the driver's
73 ImageHandle, but it can be different if the driver produces multiple
74 DriverBinding Protocols. This function also initializes the EFI Driver
75 Library that initializes the global variables gST, gBS, gRT.
76
77 @ImageHandle The image handle of the driver
78 @SystemTable The EFI System Table that was passed to the driver's entry point
79 @DriverBinding A Driver Binding Protocol instance that this driver is producing
80 @DriverBindingHandle The handle that DriverBinding is to be installe onto. If this
81 parameter is NULL, then a new handle is created.
82 @ComponentName A Component Name Protocol instance that this driver is producing
83 @DriverConfiguration A Driver Configuration Protocol instance that this driver is producing
84 @DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing
85
86 @retval EFI_SUCCESS DriverBinding is installed onto DriverBindingHandle
87 @retval Other Status from gBS->InstallProtocolInterface()
88
89 **/
90 EFI_STATUS
91 EFIAPI
92 EfiLibInstallAllDriverProtocols (
93 IN const EFI_HANDLE ImageHandle,
94 IN const EFI_SYSTEM_TABLE *SystemTable,
95 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
96 IN EFI_HANDLE DriverBindingHandle,
97 IN const EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL
98 IN const EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL
99 IN const EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics OPTIONAL
100 )
101 {
102 EFI_STATUS Status;
103
104 ASSERT (NULL != DriverBinding);
105
106 if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
107 if (DriverConfiguration == NULL) {
108 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
109 Status = gBS->InstallMultipleProtocolInterfaces (
110 &DriverBindingHandle,
111 &gEfiDriverBindingProtocolGuid, DriverBinding,
112 NULL
113 );
114 } else {
115 Status = gBS->InstallMultipleProtocolInterfaces (
116 &DriverBindingHandle,
117 &gEfiDriverBindingProtocolGuid, DriverBinding,
118 &gEfiComponentNameProtocolGuid, ComponentName,
119 NULL
120 );
121 }
122 } else {
123 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
124 Status = gBS->InstallMultipleProtocolInterfaces (
125 &DriverBindingHandle,
126 &gEfiDriverBindingProtocolGuid, DriverBinding,
127 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
128 NULL
129 );
130 } else {
131 Status = gBS->InstallMultipleProtocolInterfaces (
132 &DriverBindingHandle,
133 &gEfiDriverBindingProtocolGuid, DriverBinding,
134 &gEfiComponentNameProtocolGuid, ComponentName,
135 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
136 NULL
137 );
138 }
139 }
140 } else {
141 if (DriverConfiguration == NULL) {
142 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
143 Status = gBS->InstallMultipleProtocolInterfaces (
144 &DriverBindingHandle,
145 &gEfiDriverBindingProtocolGuid, DriverBinding,
146 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
147 NULL
148 );
149 } else {
150 Status = gBS->InstallMultipleProtocolInterfaces (
151 &DriverBindingHandle,
152 &gEfiDriverBindingProtocolGuid, DriverBinding,
153 &gEfiComponentNameProtocolGuid, ComponentName,
154 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
155 NULL
156 );
157 }
158 } else {
159 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
160 Status = gBS->InstallMultipleProtocolInterfaces (
161 &DriverBindingHandle,
162 &gEfiDriverBindingProtocolGuid, DriverBinding,
163 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
164 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
165 NULL
166 );
167 } else {
168 Status = gBS->InstallMultipleProtocolInterfaces (
169 &DriverBindingHandle,
170 &gEfiDriverBindingProtocolGuid, DriverBinding,
171 &gEfiComponentNameProtocolGuid, ComponentName,
172 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
173 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
174 NULL
175 );
176 }
177 }
178 }
179
180 //
181 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed
182 //
183 ASSERT_EFI_ERROR (Status);
184
185 //
186 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
187 //
188 DriverBinding->ImageHandle = ImageHandle;
189 DriverBinding->DriverBindingHandle = DriverBindingHandle;
190
191 return Status;
192 }
193
194
195 /**
196 Intialize a driver by installing the Driver Binding Protocol onto the
197 driver's DriverBindingHandle. This is typically the same as the driver's
198 ImageHandle, but it can be different if the driver produces multiple
199 DriverBinding Protocols. This function also initializes the EFI Driver
200 Library that initializes the global variables gST, gBS, gRT.
201
202 @ImageHandle The image handle of the driver
203 @SystemTable The EFI System Table that was passed to the driver's entry point
204 @DriverBinding A Driver Binding Protocol instance that this driver is producing
205 @DriverBindingHandle The handle that DriverBinding is to be installe onto. If this
206 parameter is NULL, then a new handle is created.
207 @ComponentName A Component Name Protocol instance that this driver is producing
208 @DriverConfiguration A Driver Configuration Protocol instance that this driver is producing
209 @DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing
210
211 @retval EFI_SUCCESS DriverBinding is installed onto DriverBindingHandle
212 @retval Other Status from gBS->InstallProtocolInterface()
213
214 **/
215 EFI_STATUS
216 EFIAPI
217 EfiLibInstallAllDriverProtocols2 (
218 IN const EFI_HANDLE ImageHandle,
219 IN const EFI_SYSTEM_TABLE *SystemTable,
220 IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
221 IN EFI_HANDLE DriverBindingHandle,
222 IN const EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL
223 IN const EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2, OPTIONAL
224 IN const EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL
225 IN const EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics, OPTIONAL
226 IN const EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL
227 )
228 {
229 EFI_STATUS Status;
230
231 ASSERT (NULL != DriverBinding);
232
233 if (DriverConfiguration == NULL) {
234 if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
235 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
236 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
237 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
238 Status = gBS->InstallMultipleProtocolInterfaces (
239 &DriverBindingHandle,
240 &gEfiDriverBindingProtocolGuid, DriverBinding,
241 NULL
242 );
243 } else {
244 Status = gBS->InstallMultipleProtocolInterfaces (
245 &DriverBindingHandle,
246 &gEfiDriverBindingProtocolGuid, DriverBinding,
247 &gEfiComponentName2ProtocolGuid, ComponentName2,
248 NULL
249 );
250 }
251 } else {
252 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
253 Status = gBS->InstallMultipleProtocolInterfaces (
254 &DriverBindingHandle,
255 &gEfiDriverBindingProtocolGuid, DriverBinding,
256 &gEfiComponentNameProtocolGuid, ComponentName,
257 NULL
258 );
259 } else {
260 Status = gBS->InstallMultipleProtocolInterfaces (
261 &DriverBindingHandle,
262 &gEfiDriverBindingProtocolGuid, DriverBinding,
263 &gEfiComponentNameProtocolGuid, ComponentName,
264 &gEfiComponentName2ProtocolGuid, ComponentName2,
265 NULL
266 );
267 }
268 }
269 } else {
270 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
271 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
272 Status = gBS->InstallMultipleProtocolInterfaces (
273 &DriverBindingHandle,
274 &gEfiDriverBindingProtocolGuid, DriverBinding,
275 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
276 NULL
277 );
278 } else {
279 Status = gBS->InstallMultipleProtocolInterfaces (
280 &DriverBindingHandle,
281 &gEfiDriverBindingProtocolGuid, DriverBinding,
282 &gEfiComponentName2ProtocolGuid, ComponentName2,
283 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
284 NULL
285 );
286 }
287 } else {
288 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
289 Status = gBS->InstallMultipleProtocolInterfaces (
290 &DriverBindingHandle,
291 &gEfiDriverBindingProtocolGuid, DriverBinding,
292 &gEfiComponentNameProtocolGuid, ComponentName,
293 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
294 NULL
295 );
296 } else {
297 Status = gBS->InstallMultipleProtocolInterfaces (
298 &DriverBindingHandle,
299 &gEfiDriverBindingProtocolGuid, DriverBinding,
300 &gEfiComponentNameProtocolGuid, ComponentName,
301 &gEfiComponentName2ProtocolGuid, ComponentName2,
302 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
303 NULL
304 );
305 }
306 }
307 }
308 } else {
309 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
310 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
311 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
312 Status = gBS->InstallMultipleProtocolInterfaces (
313 &DriverBindingHandle,
314 &gEfiDriverBindingProtocolGuid, DriverBinding,
315 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
316 NULL
317 );
318 } else {
319 Status = gBS->InstallMultipleProtocolInterfaces (
320 &DriverBindingHandle,
321 &gEfiDriverBindingProtocolGuid, DriverBinding,
322 &gEfiComponentName2ProtocolGuid, ComponentName2,
323 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
324 NULL
325 );
326 }
327 } else {
328 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
329 Status = gBS->InstallMultipleProtocolInterfaces (
330 &DriverBindingHandle,
331 &gEfiDriverBindingProtocolGuid, DriverBinding,
332 &gEfiComponentNameProtocolGuid, ComponentName,
333 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
334 NULL
335 );
336 } else {
337 Status = gBS->InstallMultipleProtocolInterfaces (
338 &DriverBindingHandle,
339 &gEfiDriverBindingProtocolGuid, DriverBinding,
340 &gEfiComponentNameProtocolGuid, ComponentName,
341 &gEfiComponentName2ProtocolGuid, ComponentName2,
342 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
343 NULL
344 );
345 }
346 }
347 } else {
348 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
349 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
350 Status = gBS->InstallMultipleProtocolInterfaces (
351 &DriverBindingHandle,
352 &gEfiDriverBindingProtocolGuid, DriverBinding,
353 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
354 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
355 NULL
356 );
357 } else {
358 Status = gBS->InstallMultipleProtocolInterfaces (
359 &DriverBindingHandle,
360 &gEfiDriverBindingProtocolGuid, DriverBinding,
361 &gEfiComponentName2ProtocolGuid, ComponentName2,
362 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
363 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
364 NULL
365 );
366 }
367 } else {
368 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
369 Status = gBS->InstallMultipleProtocolInterfaces (
370 &DriverBindingHandle,
371 &gEfiDriverBindingProtocolGuid, DriverBinding,
372 &gEfiComponentNameProtocolGuid, ComponentName,
373 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
374 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
375 NULL
376 );
377 } else {
378 Status = gBS->InstallMultipleProtocolInterfaces (
379 &DriverBindingHandle,
380 &gEfiDriverBindingProtocolGuid, DriverBinding,
381 &gEfiComponentNameProtocolGuid, ComponentName,
382 &gEfiComponentName2ProtocolGuid, ComponentName2,
383 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
384 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
385 NULL
386 );
387 }
388 }
389 }
390 }
391 } else {
392 if (DriverDiagnostics == NULL || FeaturePcdGet(PcdDriverDiagnosticsDisable)) {
393 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
394 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
395 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
396 Status = gBS->InstallMultipleProtocolInterfaces (
397 &DriverBindingHandle,
398 &gEfiDriverBindingProtocolGuid, DriverBinding,
399 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
400 NULL
401 );
402 } else {
403 Status = gBS->InstallMultipleProtocolInterfaces (
404 &DriverBindingHandle,
405 &gEfiDriverBindingProtocolGuid, DriverBinding,
406 &gEfiComponentName2ProtocolGuid, ComponentName2,
407 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
408 NULL
409 );
410 }
411 } else {
412 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
413 Status = gBS->InstallMultipleProtocolInterfaces (
414 &DriverBindingHandle,
415 &gEfiDriverBindingProtocolGuid, DriverBinding,
416 &gEfiComponentNameProtocolGuid, ComponentName,
417 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
418 NULL
419 );
420 } else {
421 Status = gBS->InstallMultipleProtocolInterfaces (
422 &DriverBindingHandle,
423 &gEfiDriverBindingProtocolGuid, DriverBinding,
424 &gEfiComponentNameProtocolGuid, ComponentName,
425 &gEfiComponentName2ProtocolGuid, ComponentName2,
426 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
427 NULL
428 );
429 }
430 }
431 } else {
432 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
433 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
434 Status = gBS->InstallMultipleProtocolInterfaces (
435 &DriverBindingHandle,
436 &gEfiDriverBindingProtocolGuid, DriverBinding,
437 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
438 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
439 NULL
440 );
441 } else {
442 Status = gBS->InstallMultipleProtocolInterfaces (
443 &DriverBindingHandle,
444 &gEfiDriverBindingProtocolGuid, DriverBinding,
445 &gEfiComponentName2ProtocolGuid, ComponentName2,
446 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
447 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
448 NULL
449 );
450 }
451 } else {
452 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
453 Status = gBS->InstallMultipleProtocolInterfaces (
454 &DriverBindingHandle,
455 &gEfiDriverBindingProtocolGuid, DriverBinding,
456 &gEfiComponentNameProtocolGuid, ComponentName,
457 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
458 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
459 NULL
460 );
461 } else {
462 Status = gBS->InstallMultipleProtocolInterfaces (
463 &DriverBindingHandle,
464 &gEfiDriverBindingProtocolGuid, DriverBinding,
465 &gEfiComponentNameProtocolGuid, ComponentName,
466 &gEfiComponentName2ProtocolGuid, ComponentName2,
467 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
468 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
469 NULL
470 );
471 }
472 }
473 }
474 } else {
475 if (DriverDiagnostics2 == NULL || FeaturePcdGet(PcdDriverDiagnostics2Disable)) {
476 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
477 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
478 Status = gBS->InstallMultipleProtocolInterfaces (
479 &DriverBindingHandle,
480 &gEfiDriverBindingProtocolGuid, DriverBinding,
481 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
482 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
483 NULL
484 );
485 } else {
486 Status = gBS->InstallMultipleProtocolInterfaces (
487 &DriverBindingHandle,
488 &gEfiDriverBindingProtocolGuid, DriverBinding,
489 &gEfiComponentName2ProtocolGuid, ComponentName2,
490 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
491 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
492 NULL
493 );
494 }
495 } else {
496 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
497 Status = gBS->InstallMultipleProtocolInterfaces (
498 &DriverBindingHandle,
499 &gEfiDriverBindingProtocolGuid, DriverBinding,
500 &gEfiComponentNameProtocolGuid, ComponentName,
501 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
502 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
503 NULL
504 );
505 } else {
506 Status = gBS->InstallMultipleProtocolInterfaces (
507 &DriverBindingHandle,
508 &gEfiDriverBindingProtocolGuid, DriverBinding,
509 &gEfiComponentNameProtocolGuid, ComponentName,
510 &gEfiComponentName2ProtocolGuid, ComponentName2,
511 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
512 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
513 NULL
514 );
515 }
516 }
517 } else {
518 if (ComponentName == NULL || FeaturePcdGet(PcdComponentNameDisable)) {
519 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
520 Status = gBS->InstallMultipleProtocolInterfaces (
521 &DriverBindingHandle,
522 &gEfiDriverBindingProtocolGuid, DriverBinding,
523 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
524 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
525 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
526 NULL
527 );
528 } else {
529 Status = gBS->InstallMultipleProtocolInterfaces (
530 &DriverBindingHandle,
531 &gEfiDriverBindingProtocolGuid, DriverBinding,
532 &gEfiComponentName2ProtocolGuid, ComponentName2,
533 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
534 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
535 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
536 NULL
537 );
538 }
539 } else {
540 if (ComponentName2 == NULL || FeaturePcdGet(PcdComponentName2Disable)) {
541 Status = gBS->InstallMultipleProtocolInterfaces (
542 &DriverBindingHandle,
543 &gEfiDriverBindingProtocolGuid, DriverBinding,
544 &gEfiComponentNameProtocolGuid, ComponentName,
545 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
546 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
547 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
548 NULL
549 );
550 } else {
551 Status = gBS->InstallMultipleProtocolInterfaces (
552 &DriverBindingHandle,
553 &gEfiDriverBindingProtocolGuid, DriverBinding,
554 &gEfiComponentNameProtocolGuid, ComponentName,
555 &gEfiComponentName2ProtocolGuid, ComponentName2,
556 &gEfiDriverConfigurationProtocolGuid, DriverConfiguration,
557 &gEfiDriverDiagnosticsProtocolGuid, DriverDiagnostics,
558 &gEfiDriverDiagnostics2ProtocolGuid, DriverDiagnostics2,
559 NULL
560 );
561 }
562 }
563 }
564 }
565 }
566
567 //
568 // ASSERT if the call to InstallMultipleProtocolInterfaces() failed
569 //
570 ASSERT_EFI_ERROR (Status);
571
572 //
573 // Update the ImageHandle and DriverBindingHandle fields of the Driver Binding Protocol
574 //
575 DriverBinding->ImageHandle = ImageHandle;
576 DriverBinding->DriverBindingHandle = DriverBindingHandle;
577
578 return Status;
579 }
580
581