1 /** @file 2 UEFI Component Name(2) protocol implementation for ConSplitter driver. 3 4 Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #include "ConSplitter.h" 16 17 // 18 // EFI Component Name Protocol 19 // 20 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gConSplitterConInComponentName = { 21 ConSplitterComponentNameGetDriverName, 22 ConSplitterConInComponentNameGetControllerName, 23 "eng" 24 }; 25 26 // 27 // EFI Component Name 2 Protocol 28 // 29 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gConSplitterConInComponentName2 = { 30 (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ConSplitterComponentNameGetDriverName, 31 (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ConSplitterConInComponentNameGetControllerName, 32 "en" 33 }; 34 35 36 // 37 // EFI Component Name Protocol 38 // 39 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gConSplitterSimplePointerComponentName = { 40 ConSplitterComponentNameGetDriverName, 41 ConSplitterSimplePointerComponentNameGetControllerName, 42 "eng" 43 }; 44 45 // 46 // EFI Component Name 2 Protocol 47 // 48 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gConSplitterSimplePointerComponentName2 = { 49 (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ConSplitterComponentNameGetDriverName, 50 (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ConSplitterSimplePointerComponentNameGetControllerName, 51 "en" 52 }; 53 54 // 55 // EFI Component Name Protocol 56 // 57 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gConSplitterAbsolutePointerComponentName = { 58 ConSplitterComponentNameGetDriverName, 59 ConSplitterAbsolutePointerComponentNameGetControllerName, 60 "eng" 61 }; 62 63 // 64 // EFI Component Name 2 Protocol 65 // 66 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gConSplitterAbsolutePointerComponentName2 = { 67 (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ConSplitterComponentNameGetDriverName, 68 (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ConSplitterAbsolutePointerComponentNameGetControllerName, 69 "en" 70 }; 71 72 // 73 // EFI Component Name Protocol 74 // 75 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gConSplitterConOutComponentName = { 76 ConSplitterComponentNameGetDriverName, 77 ConSplitterConOutComponentNameGetControllerName, 78 "eng" 79 }; 80 81 // 82 // EFI Component Name 2 Protocol 83 // 84 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gConSplitterConOutComponentName2 = { 85 (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ConSplitterComponentNameGetDriverName, 86 (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ConSplitterConOutComponentNameGetControllerName, 87 "en" 88 }; 89 90 91 // 92 // EFI Component Name Protocol 93 // 94 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gConSplitterStdErrComponentName = { 95 ConSplitterComponentNameGetDriverName, 96 ConSplitterStdErrComponentNameGetControllerName, 97 "eng" 98 }; 99 100 // 101 // EFI Component Name 2 Protocol 102 // 103 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gConSplitterStdErrComponentName2 = { 104 (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ConSplitterComponentNameGetDriverName, 105 (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ConSplitterStdErrComponentNameGetControllerName, 106 "en" 107 }; 108 109 110 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterDriverNameTable[] = { 111 { 112 "eng;en", 113 (CHAR16 *) L"Console Splitter Driver" 114 }, 115 { 116 NULL, 117 NULL 118 } 119 }; 120 121 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterConInControllerNameTable[] = { 122 { 123 "eng;en", 124 (CHAR16 *) L"Primary Console Input Device" 125 }, 126 { 127 NULL, 128 NULL 129 } 130 }; 131 132 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterSimplePointerControllerNameTable[] = { 133 { 134 "eng;en", 135 (CHAR16 *) L"Primary Simple Pointer Device" 136 }, 137 { 138 NULL, 139 NULL 140 } 141 }; 142 143 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterAbsolutePointerControllerNameTable[] = { 144 { 145 "eng;en", 146 (CHAR16 *)L"Primary Absolute Pointer Device" 147 }, 148 { 149 NULL, 150 NULL 151 } 152 }; 153 154 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterConOutControllerNameTable[] = { 155 { 156 "eng;en", 157 (CHAR16 *) L"Primary Console Output Device" 158 }, 159 { 160 NULL, 161 NULL 162 } 163 }; 164 165 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterStdErrControllerNameTable[] = { 166 { 167 "eng;en", 168 (CHAR16 *) L"Primary Standard Error Device" 169 }, 170 { 171 NULL, 172 NULL 173 } 174 }; 175 176 /** 177 Retrieves a Unicode string that is the user readable name of the driver. 178 179 This function retrieves the user readable name of a driver in the form of a 180 Unicode string. If the driver specified by This has a user readable name in 181 the language specified by Language, then a pointer to the driver name is 182 returned in DriverName, and EFI_SUCCESS is returned. If the driver specified 183 by This does not support the language specified by Language, 184 then EFI_UNSUPPORTED is returned. 185 186 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or 187 EFI_COMPONENT_NAME_PROTOCOL instance. 188 189 @param Language[in] A pointer to a Null-terminated ASCII string 190 array indicating the language. This is the 191 language of the driver name that the caller is 192 requesting, and it must match one of the 193 languages specified in SupportedLanguages. The 194 number of languages supported by a driver is up 195 to the driver writer. Language is specified 196 in RFC 4646 or ISO 639-2 language code format. 197 198 @param DriverName[out] A pointer to the Unicode string to return. 199 This Unicode string is the name of the 200 driver specified by This in the language 201 specified by Language. 202 203 @retval EFI_SUCCESS The Unicode string for the Driver specified by 204 This and the language specified by Language was 205 returned in DriverName. 206 207 @retval EFI_INVALID_PARAMETER Language is NULL. 208 209 @retval EFI_INVALID_PARAMETER DriverName is NULL. 210 211 @retval EFI_UNSUPPORTED The driver specified by This does not support 212 the language specified by Language. 213 214 **/ 215 EFI_STATUS 216 EFIAPI 217 ConSplitterComponentNameGetDriverName ( 218 IN EFI_COMPONENT_NAME_PROTOCOL *This, 219 IN CHAR8 *Language, 220 OUT CHAR16 **DriverName 221 ) 222 { 223 return LookupUnicodeString2 ( 224 Language, 225 This->SupportedLanguages, 226 mConSplitterDriverNameTable, 227 DriverName, 228 (BOOLEAN)((This == &gConSplitterConInComponentName) || 229 (This == &gConSplitterSimplePointerComponentName) || 230 (This == &gConSplitterAbsolutePointerComponentName) || 231 (This == &gConSplitterConOutComponentName) || 232 (This == &gConSplitterStdErrComponentName)) 233 ); 234 } 235 236 /** 237 Tests whether a controller handle is being managed by a specific driver and 238 the child handle is a child device of the controller. 239 240 @param ControllerHandle A handle for a controller to test. 241 @param DriverBindingHandle Specifies the driver binding handle for the 242 driver. 243 @param ProtocolGuid Specifies the protocol that the driver specified 244 by DriverBindingHandle opens in its Start() 245 function. 246 @param ChildHandle A child handle to test. 247 @param ConsumsedGuid Supplies the protocol that the child controller 248 opens on its parent controller. 249 250 @retval EFI_SUCCESS ControllerHandle is managed by the driver 251 specifed by DriverBindingHandle and ChildHandle 252 is a child of the ControllerHandle. 253 @retval EFI_UNSUPPORTED ControllerHandle is not managed by the driver 254 specifed by DriverBindingHandle. 255 @retval EFI_UNSUPPORTED ChildHandle is not a child of the 256 ControllerHandle. 257 258 **/ 259 EFI_STATUS 260 ConSplitterTestControllerHandles ( 261 IN CONST EFI_HANDLE ControllerHandle, 262 IN CONST EFI_HANDLE DriverBindingHandle, 263 IN CONST EFI_GUID *ProtocolGuid, 264 IN EFI_HANDLE ChildHandle, 265 IN CONST EFI_GUID *ConsumsedGuid 266 ) 267 { 268 EFI_STATUS Status; 269 270 // 271 // here ChildHandle is not an Optional parameter. 272 // 273 if (ChildHandle == NULL) { 274 return EFI_UNSUPPORTED; 275 } 276 277 // 278 // Tests whether a controller handle is being managed by a specific driver. 279 // 280 Status = EfiTestManagedDevice ( 281 ControllerHandle, 282 DriverBindingHandle, 283 ProtocolGuid 284 ); 285 if (EFI_ERROR (Status)) { 286 return Status; 287 } 288 289 // 290 // Tests whether a child handle is a child device of the controller. 291 // 292 Status = EfiTestChildHandle ( 293 ControllerHandle, 294 ChildHandle, 295 ConsumsedGuid 296 ); 297 298 return Status; 299 } 300 301 /** 302 Retrieves a Unicode string that is the user readable name of the controller 303 that is being managed by a driver. 304 305 This function retrieves the user readable name of the controller specified by 306 ControllerHandle and ChildHandle in the form of a Unicode string. If the 307 driver specified by This has a user readable name in the language specified by 308 Language, then a pointer to the controller name is returned in ControllerName, 309 and EFI_SUCCESS is returned. If the driver specified by This is not currently 310 managing the controller specified by ControllerHandle and ChildHandle, 311 then EFI_UNSUPPORTED is returned. If the driver specified by This does not 312 support the language specified by Language, then EFI_UNSUPPORTED is returned. 313 314 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or 315 EFI_COMPONENT_NAME_PROTOCOL instance. 316 317 @param ControllerHandle[in] The handle of a controller that the driver 318 specified by This is managing. This handle 319 specifies the controller whose name is to be 320 returned. 321 322 @param ChildHandle[in] The handle of the child controller to retrieve 323 the name of. This is an optional parameter that 324 may be NULL. It will be NULL for device 325 drivers. It will also be NULL for a bus drivers 326 that wish to retrieve the name of the bus 327 controller. It will not be NULL for a bus 328 driver that wishes to retrieve the name of a 329 child controller. 330 331 @param Language[in] A pointer to a Null-terminated ASCII string 332 array indicating the language. This is the 333 language of the driver name that the caller is 334 requesting, and it must match one of the 335 languages specified in SupportedLanguages. The 336 number of languages supported by a driver is up 337 to the driver writer. Language is specified in 338 RFC 4646 or ISO 639-2 language code format. 339 340 @param ControllerName[out] A pointer to the Unicode string to return. 341 This Unicode string is the name of the 342 controller specified by ControllerHandle and 343 ChildHandle in the language specified by 344 Language from the point of view of the driver 345 specified by This. 346 347 @retval EFI_SUCCESS The Unicode string for the user readable name in 348 the language specified by Language for the 349 driver specified by This was returned in 350 DriverName. 351 352 @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. 353 354 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid 355 EFI_HANDLE. 356 357 @retval EFI_INVALID_PARAMETER Language is NULL. 358 359 @retval EFI_INVALID_PARAMETER ControllerName is NULL. 360 361 @retval EFI_UNSUPPORTED The driver specified by This is not currently 362 managing the controller specified by 363 ControllerHandle and ChildHandle. 364 365 @retval EFI_UNSUPPORTED The driver specified by This does not support 366 the language specified by Language. 367 368 **/ 369 EFI_STATUS 370 EFIAPI 371 ConSplitterConInComponentNameGetControllerName ( 372 IN EFI_COMPONENT_NAME_PROTOCOL *This, 373 IN EFI_HANDLE ControllerHandle, 374 IN EFI_HANDLE ChildHandle OPTIONAL, 375 IN CHAR8 *Language, 376 OUT CHAR16 **ControllerName 377 ) 378 { 379 EFI_STATUS Status; 380 381 Status = ConSplitterTestControllerHandles ( 382 ControllerHandle, 383 gConSplitterConInDriverBinding.DriverBindingHandle, 384 &gEfiConsoleInDeviceGuid, 385 ChildHandle, 386 &gEfiConsoleInDeviceGuid 387 ); 388 if (EFI_ERROR (Status)) { 389 return Status; 390 } 391 392 return LookupUnicodeString2 ( 393 Language, 394 This->SupportedLanguages, 395 mConSplitterConInControllerNameTable, 396 ControllerName, 397 (BOOLEAN)(This == &gConSplitterConInComponentName) 398 ); 399 } 400 401 /** 402 Retrieves a Unicode string that is the user readable name of the controller 403 that is being managed by a driver. 404 405 This function retrieves the user readable name of the controller specified by 406 ControllerHandle and ChildHandle in the form of a Unicode string. If the 407 driver specified by This has a user readable name in the language specified by 408 Language, then a pointer to the controller name is returned in ControllerName, 409 and EFI_SUCCESS is returned. If the driver specified by This is not currently 410 managing the controller specified by ControllerHandle and ChildHandle, 411 then EFI_UNSUPPORTED is returned. If the driver specified by This does not 412 support the language specified by Language, then EFI_UNSUPPORTED is returned. 413 414 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or 415 EFI_COMPONENT_NAME_PROTOCOL instance. 416 417 @param ControllerHandle[in] The handle of a controller that the driver 418 specified by This is managing. This handle 419 specifies the controller whose name is to be 420 returned. 421 422 @param ChildHandle[in] The handle of the child controller to retrieve 423 the name of. This is an optional parameter that 424 may be NULL. It will be NULL for device 425 drivers. It will also be NULL for a bus drivers 426 that wish to retrieve the name of the bus 427 controller. It will not be NULL for a bus 428 driver that wishes to retrieve the name of a 429 child controller. 430 431 @param Language[in] A pointer to a Null-terminated ASCII string 432 array indicating the language. This is the 433 language of the driver name that the caller is 434 requesting, and it must match one of the 435 languages specified in SupportedLanguages. The 436 number of languages supported by a driver is up 437 to the driver writer. Language is specified in 438 RFC 4646 or ISO 639-2 language code format. 439 440 @param ControllerName[out] A pointer to the Unicode string to return. 441 This Unicode string is the name of the 442 controller specified by ControllerHandle and 443 ChildHandle in the language specified by 444 Language from the point of view of the driver 445 specified by This. 446 447 @retval EFI_SUCCESS The Unicode string for the user readable name in 448 the language specified by Language for the 449 driver specified by This was returned in 450 DriverName. 451 452 @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. 453 454 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid 455 EFI_HANDLE. 456 457 @retval EFI_INVALID_PARAMETER Language is NULL. 458 459 @retval EFI_INVALID_PARAMETER ControllerName is NULL. 460 461 @retval EFI_UNSUPPORTED The driver specified by This is not currently 462 managing the controller specified by 463 ControllerHandle and ChildHandle. 464 465 @retval EFI_UNSUPPORTED The driver specified by This does not support 466 the language specified by Language. 467 468 **/ 469 EFI_STATUS 470 EFIAPI 471 ConSplitterSimplePointerComponentNameGetControllerName ( 472 IN EFI_COMPONENT_NAME_PROTOCOL *This, 473 IN EFI_HANDLE ControllerHandle, 474 IN EFI_HANDLE ChildHandle OPTIONAL, 475 IN CHAR8 *Language, 476 OUT CHAR16 **ControllerName 477 ) 478 { 479 EFI_STATUS Status; 480 481 Status = ConSplitterTestControllerHandles ( 482 ControllerHandle, 483 gConSplitterSimplePointerDriverBinding.DriverBindingHandle, 484 &gEfiSimplePointerProtocolGuid, 485 ChildHandle, 486 &gEfiSimplePointerProtocolGuid 487 ); 488 if (EFI_ERROR (Status)) { 489 return Status; 490 } 491 492 return LookupUnicodeString2 ( 493 Language, 494 This->SupportedLanguages, 495 mConSplitterSimplePointerControllerNameTable, 496 ControllerName, 497 (BOOLEAN)(This == &gConSplitterSimplePointerComponentName) 498 ); 499 } 500 501 502 /** 503 Retrieves a Unicode string that is the user readable name of the controller 504 that is being managed by an EFI Driver. 505 506 @param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL 507 instance. 508 @param ControllerHandle The handle of a controller that the driver 509 specified by This is managing. This handle 510 specifies the controller whose name is to be 511 returned. 512 @param ChildHandle The handle of the child controller to retrieve the 513 name of. This is an optional parameter that may 514 be NULL. It will be NULL for device drivers. It 515 will also be NULL for a bus drivers that wish to 516 retrieve the name of the bus controller. It will 517 not be NULL for a bus driver that wishes to 518 retrieve the name of a child controller. 519 @param Language A pointer to RFC4646 language identifier. This is 520 the language of the controller name that that the 521 caller is requesting, and it must match one of the 522 languages specified in SupportedLanguages. The 523 number of languages supported by a driver is up to 524 the driver writer. 525 @param ControllerName A pointer to the Unicode string to return. This 526 Unicode string is the name of the controller 527 specified by ControllerHandle and ChildHandle in 528 the language specified by Language from the point 529 of view of the driver specified by This. 530 531 @retval EFI_SUCCESS The Unicode string for the user readable name in 532 the language specified by Language for the driver 533 specified by This was returned in DriverName. 534 @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. 535 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid 536 EFI_HANDLE. 537 @retval EFI_INVALID_PARAMETER Language is NULL. 538 @retval EFI_INVALID_PARAMETER ControllerName is NULL. 539 @retval EFI_UNSUPPORTED The driver specified by This is not currently 540 managing the controller specified by 541 ControllerHandle and ChildHandle. 542 @retval EFI_UNSUPPORTED The driver specified by This does not support the 543 language specified by Language. 544 545 **/ 546 EFI_STATUS 547 EFIAPI 548 ConSplitterAbsolutePointerComponentNameGetControllerName ( 549 IN EFI_COMPONENT_NAME_PROTOCOL *This, 550 IN EFI_HANDLE ControllerHandle, 551 IN EFI_HANDLE ChildHandle OPTIONAL, 552 IN CHAR8 *Language, 553 OUT CHAR16 **ControllerName 554 ) 555 { 556 EFI_STATUS Status; 557 558 Status = ConSplitterTestControllerHandles ( 559 ControllerHandle, 560 gConSplitterAbsolutePointerDriverBinding.DriverBindingHandle, 561 &gEfiAbsolutePointerProtocolGuid, 562 ChildHandle, 563 &gEfiAbsolutePointerProtocolGuid 564 ); 565 if (EFI_ERROR (Status)) { 566 return Status; 567 } 568 569 return LookupUnicodeString2 ( 570 Language, 571 This->SupportedLanguages, 572 mConSplitterAbsolutePointerControllerNameTable, 573 ControllerName, 574 (BOOLEAN)(This == &gConSplitterAbsolutePointerComponentName) 575 ); 576 } 577 578 /** 579 Retrieves a Unicode string that is the user readable name of the controller 580 that is being managed by a driver. 581 582 This function retrieves the user readable name of the controller specified by 583 ControllerHandle and ChildHandle in the form of a Unicode string. If the 584 driver specified by This has a user readable name in the language specified by 585 Language, then a pointer to the controller name is returned in ControllerName, 586 and EFI_SUCCESS is returned. If the driver specified by This is not currently 587 managing the controller specified by ControllerHandle and ChildHandle, 588 then EFI_UNSUPPORTED is returned. If the driver specified by This does not 589 support the language specified by Language, then EFI_UNSUPPORTED is returned. 590 591 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or 592 EFI_COMPONENT_NAME_PROTOCOL instance. 593 594 @param ControllerHandle[in] The handle of a controller that the driver 595 specified by This is managing. This handle 596 specifies the controller whose name is to be 597 returned. 598 599 @param ChildHandle[in] The handle of the child controller to retrieve 600 the name of. This is an optional parameter that 601 may be NULL. It will be NULL for device 602 drivers. It will also be NULL for a bus drivers 603 that wish to retrieve the name of the bus 604 controller. It will not be NULL for a bus 605 driver that wishes to retrieve the name of a 606 child controller. 607 608 @param Language[in] A pointer to a Null-terminated ASCII string 609 array indicating the language. This is the 610 language of the driver name that the caller is 611 requesting, and it must match one of the 612 languages specified in SupportedLanguages. The 613 number of languages supported by a driver is up 614 to the driver writer. Language is specified in 615 RFC 4646 or ISO 639-2 language code format. 616 617 @param ControllerName[out] A pointer to the Unicode string to return. 618 This Unicode string is the name of the 619 controller specified by ControllerHandle and 620 ChildHandle in the language specified by 621 Language from the point of view of the driver 622 specified by This. 623 624 @retval EFI_SUCCESS The Unicode string for the user readable name in 625 the language specified by Language for the 626 driver specified by This was returned in 627 DriverName. 628 629 @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. 630 631 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid 632 EFI_HANDLE. 633 634 @retval EFI_INVALID_PARAMETER Language is NULL. 635 636 @retval EFI_INVALID_PARAMETER ControllerName is NULL. 637 638 @retval EFI_UNSUPPORTED The driver specified by This is not currently 639 managing the controller specified by 640 ControllerHandle and ChildHandle. 641 642 @retval EFI_UNSUPPORTED The driver specified by This does not support 643 the language specified by Language. 644 645 **/ 646 EFI_STATUS 647 EFIAPI 648 ConSplitterConOutComponentNameGetControllerName ( 649 IN EFI_COMPONENT_NAME_PROTOCOL *This, 650 IN EFI_HANDLE ControllerHandle, 651 IN EFI_HANDLE ChildHandle OPTIONAL, 652 IN CHAR8 *Language, 653 OUT CHAR16 **ControllerName 654 ) 655 { 656 EFI_STATUS Status; 657 658 Status = ConSplitterTestControllerHandles ( 659 ControllerHandle, 660 gConSplitterConOutDriverBinding.DriverBindingHandle, 661 &gEfiConsoleOutDeviceGuid, 662 ChildHandle, 663 &gEfiConsoleOutDeviceGuid 664 ); 665 if (EFI_ERROR (Status)) { 666 return Status; 667 } 668 669 return LookupUnicodeString2 ( 670 Language, 671 This->SupportedLanguages, 672 mConSplitterConOutControllerNameTable, 673 ControllerName, 674 (BOOLEAN)(This == &gConSplitterConOutComponentName) 675 ); 676 } 677 678 /** 679 Retrieves a Unicode string that is the user readable name of the controller 680 that is being managed by a driver. 681 682 This function retrieves the user readable name of the controller specified by 683 ControllerHandle and ChildHandle in the form of a Unicode string. If the 684 driver specified by This has a user readable name in the language specified by 685 Language, then a pointer to the controller name is returned in ControllerName, 686 and EFI_SUCCESS is returned. If the driver specified by This is not currently 687 managing the controller specified by ControllerHandle and ChildHandle, 688 then EFI_UNSUPPORTED is returned. If the driver specified by This does not 689 support the language specified by Language, then EFI_UNSUPPORTED is returned. 690 691 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or 692 EFI_COMPONENT_NAME_PROTOCOL instance. 693 694 @param ControllerHandle[in] The handle of a controller that the driver 695 specified by This is managing. This handle 696 specifies the controller whose name is to be 697 returned. 698 699 @param ChildHandle[in] The handle of the child controller to retrieve 700 the name of. This is an optional parameter that 701 may be NULL. It will be NULL for device 702 drivers. It will also be NULL for a bus drivers 703 that wish to retrieve the name of the bus 704 controller. It will not be NULL for a bus 705 driver that wishes to retrieve the name of a 706 child controller. 707 708 @param Language[in] A pointer to a Null-terminated ASCII string 709 array indicating the language. This is the 710 language of the driver name that the caller is 711 requesting, and it must match one of the 712 languages specified in SupportedLanguages. The 713 number of languages supported by a driver is up 714 to the driver writer. Language is specified in 715 RFC 4646 or ISO 639-2 language code format. 716 717 @param ControllerName[out] A pointer to the Unicode string to return. 718 This Unicode string is the name of the 719 controller specified by ControllerHandle and 720 ChildHandle in the language specified by 721 Language from the point of view of the driver 722 specified by This. 723 724 @retval EFI_SUCCESS The Unicode string for the user readable name in 725 the language specified by Language for the 726 driver specified by This was returned in 727 DriverName. 728 729 @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. 730 731 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid 732 EFI_HANDLE. 733 734 @retval EFI_INVALID_PARAMETER Language is NULL. 735 736 @retval EFI_INVALID_PARAMETER ControllerName is NULL. 737 738 @retval EFI_UNSUPPORTED The driver specified by This is not currently 739 managing the controller specified by 740 ControllerHandle and ChildHandle. 741 742 @retval EFI_UNSUPPORTED The driver specified by This does not support 743 the language specified by Language. 744 745 **/ 746 EFI_STATUS 747 EFIAPI 748 ConSplitterStdErrComponentNameGetControllerName ( 749 IN EFI_COMPONENT_NAME_PROTOCOL *This, 750 IN EFI_HANDLE ControllerHandle, 751 IN EFI_HANDLE ChildHandle OPTIONAL, 752 IN CHAR8 *Language, 753 OUT CHAR16 **ControllerName 754 ) 755 { 756 EFI_STATUS Status; 757 758 Status = ConSplitterTestControllerHandles ( 759 ControllerHandle, 760 gConSplitterStdErrDriverBinding.DriverBindingHandle, 761 &gEfiStandardErrorDeviceGuid, 762 ChildHandle, 763 &gEfiStandardErrorDeviceGuid 764 ); 765 if (EFI_ERROR (Status)) { 766 return Status; 767 } 768 769 return LookupUnicodeString2 ( 770 Language, 771 This->SupportedLanguages, 772 mConSplitterStdErrControllerNameTable, 773 ControllerName, 774 (BOOLEAN)(This == &gConSplitterStdErrComponentName) 775 ); 776 } 777