X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;ds=sidebyside;f=MdeModulePkg%2FUniversal%2FConsole%2FConSplitterDxe%2FComponentName.c;h=4f1b8fac2e1dc2d5fd912390f26460183b9b00e9;hb=e5eed7d3641d71d7ea539e5379ea9c6a5cd97004;hp=6a458436e4423d399514dfe14df64ffdca3a3c40;hpb=1307dcd745881377355a2e7fba53ff9184e92657;p=mirror_edk2.git diff --git a/MdeModulePkg/Universal/Console/ConSplitterDxe/ComponentName.c b/MdeModulePkg/Universal/Console/ConSplitterDxe/ComponentName.c index 6a458436e4..4f1b8fac2e 100644 --- a/MdeModulePkg/Universal/Console/ConSplitterDxe/ComponentName.c +++ b/MdeModulePkg/Universal/Console/ConSplitterDxe/ComponentName.c @@ -1,21 +1,16 @@ -/*++ +/** @file + UEFI Component Name(2) protocol implementation for ConSplitter driver. -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php -Module Name: +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - ComponentName.c - -Abstract: - ---*/ +**/ #include "ConSplitter.h" @@ -56,6 +51,23 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gConSplitterSimplePoi "en" }; +// +// EFI Component Name Protocol +// +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gConSplitterAbsolutePointerComponentName = { + ConSplitterComponentNameGetDriverName, + ConSplitterAbsolutePointerComponentNameGetControllerName, + "eng" +}; + +// +// EFI Component Name 2 Protocol +// +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gConSplitterAbsolutePointerComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ConSplitterComponentNameGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ConSplitterAbsolutePointerComponentNameGetControllerName, + "en" +}; // // EFI Component Name Protocol @@ -95,7 +107,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gConSplitterStdErrCom }; -static EFI_UNICODE_STRING_TABLE mConSplitterDriverNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterDriverNameTable[] = { { "eng;en", (CHAR16 *) L"Console Splitter Driver" @@ -106,7 +118,7 @@ static EFI_UNICODE_STRING_TABLE mConSplitterDriverNameTable[] = { } }; -static EFI_UNICODE_STRING_TABLE mConSplitterConInControllerNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterConInControllerNameTable[] = { { "eng;en", (CHAR16 *) L"Primary Console Input Device" @@ -117,7 +129,7 @@ static EFI_UNICODE_STRING_TABLE mConSplitterConInControllerNameTable[] = { } }; -static EFI_UNICODE_STRING_TABLE mConSplitterSimplePointerControllerNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterSimplePointerControllerNameTable[] = { { "eng;en", (CHAR16 *) L"Primary Simple Pointer Device" @@ -128,7 +140,18 @@ static EFI_UNICODE_STRING_TABLE mConSplitterSimplePointerControllerNameTable[] = } }; -static EFI_UNICODE_STRING_TABLE mConSplitterConOutControllerNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterAbsolutePointerControllerNameTable[] = { + { + "eng;en", + (CHAR16 *)L"Primary Absolute Pointer Device" + }, + { + NULL, + NULL + } +}; + +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterConOutControllerNameTable[] = { { "eng;en", (CHAR16 *) L"Primary Console Output Device" @@ -139,7 +162,7 @@ static EFI_UNICODE_STRING_TABLE mConSplitterConOutControllerNameTable[] = { } }; -static EFI_UNICODE_STRING_TABLE mConSplitterStdErrControllerNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mConSplitterStdErrControllerNameTable[] = { { "eng;en", (CHAR16 *) L"Primary Standard Error Device" @@ -170,7 +193,7 @@ static EFI_UNICODE_STRING_TABLE mConSplitterStdErrControllerNameTable[] = { languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified - in RFC 3066 or ISO 639-2 language code format. + in RFC 4646 or ISO 639-2 language code format. @param DriverName[out] A pointer to the Unicode string to return. This Unicode string is the name of the @@ -202,10 +225,79 @@ ConSplitterComponentNameGetDriverName ( This->SupportedLanguages, mConSplitterDriverNameTable, DriverName, - (BOOLEAN)(This == &gConSplitterConInComponentName) + (BOOLEAN)((This == &gConSplitterConInComponentName) || + (This == &gConSplitterSimplePointerComponentName) || + (This == &gConSplitterAbsolutePointerComponentName) || + (This == &gConSplitterConOutComponentName) || + (This == &gConSplitterStdErrComponentName)) ); } +/** + Tests whether a controller handle is being managed by a specific driver and + the child handle is a child device of the controller. + + @param ControllerHandle A handle for a controller to test. + @param DriverBindingHandle Specifies the driver binding handle for the + driver. + @param ProtocolGuid Specifies the protocol that the driver specified + by DriverBindingHandle opens in its Start() + function. + @param ChildHandle A child handle to test. + @param ConsumsedGuid Supplies the protocol that the child controller + opens on its parent controller. + + @retval EFI_SUCCESS ControllerHandle is managed by the driver + specifed by DriverBindingHandle and ChildHandle + is a child of the ControllerHandle. + @retval EFI_UNSUPPORTED ControllerHandle is not managed by the driver + specifed by DriverBindingHandle. + @retval EFI_UNSUPPORTED ChildHandle is not a child of the + ControllerHandle. + +**/ +EFI_STATUS +ConSplitterTestControllerHandles ( + IN CONST EFI_HANDLE ControllerHandle, + IN CONST EFI_HANDLE DriverBindingHandle, + IN CONST EFI_GUID *ProtocolGuid, + IN EFI_HANDLE ChildHandle, + IN CONST EFI_GUID *ConsumsedGuid + ) +{ + EFI_STATUS Status; + + // + // here ChildHandle is not an Optional parameter. + // + if (ChildHandle == NULL) { + return EFI_UNSUPPORTED; + } + + // + // Tests whether a controller handle is being managed by a specific driver. + // + Status = EfiTestManagedDevice ( + ControllerHandle, + DriverBindingHandle, + ProtocolGuid + ); + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Tests whether a child handle is a child device of the controller. + // + Status = EfiTestChildHandle ( + ControllerHandle, + ChildHandle, + ConsumsedGuid + ); + + return Status; +} + /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver. @@ -243,7 +335,7 @@ ConSplitterComponentNameGetDriverName ( languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in - RFC 3066 or ISO 639-2 language code format. + RFC 4646 or ISO 639-2 language code format. @param ControllerName[out] A pointer to the Unicode string to return. This Unicode string is the name of the @@ -285,24 +377,16 @@ ConSplitterConInComponentNameGetControllerName ( ) { EFI_STATUS Status; - EFI_SIMPLE_TEXT_INPUT_PROTOCOL *TextIn; - // - // here ChildHandle is not an Optional parameter. - // - if (ChildHandle == NULL) { - return EFI_UNSUPPORTED; - } - Status = gBS->OpenProtocol ( - ControllerHandle, - &gEfiSimpleTextInProtocolGuid, - (VOID **) &TextIn, - NULL, - ControllerHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); + Status = ConSplitterTestControllerHandles ( + ControllerHandle, + gConSplitterConInDriverBinding.DriverBindingHandle, + &gEfiConsoleInDeviceGuid, + ChildHandle, + &gEfiConsoleInDeviceGuid + ); if (EFI_ERROR (Status)) { - return EFI_UNSUPPORTED; + return Status; } return LookupUnicodeString2 ( @@ -351,7 +435,7 @@ ConSplitterConInComponentNameGetControllerName ( languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in - RFC 3066 or ISO 639-2 language code format. + RFC 4646 or ISO 639-2 language code format. @param ControllerName[out] A pointer to the Unicode string to return. This Unicode string is the name of the @@ -393,24 +477,16 @@ ConSplitterSimplePointerComponentNameGetControllerName ( ) { EFI_STATUS Status; - EFI_SIMPLE_POINTER_PROTOCOL *SimplePointer; - // - // here ChildHandle is not an Optional parameter. - // - if (ChildHandle == NULL) { - return EFI_UNSUPPORTED; - } - Status = gBS->OpenProtocol ( - ControllerHandle, - &gEfiSimplePointerProtocolGuid, - (VOID **) &SimplePointer, - NULL, - ControllerHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); + Status = ConSplitterTestControllerHandles ( + ControllerHandle, + gConSplitterSimplePointerDriverBinding.DriverBindingHandle, + &gEfiSimplePointerProtocolGuid, + ChildHandle, + &gEfiSimplePointerProtocolGuid + ); if (EFI_ERROR (Status)) { - return EFI_UNSUPPORTED; + return Status; } return LookupUnicodeString2 ( @@ -422,6 +498,83 @@ ConSplitterSimplePointerComponentNameGetControllerName ( ); } + +/** + Retrieves a Unicode string that is the user readable name of the controller + that is being managed by an EFI Driver. + + @param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL + instance. + @param ControllerHandle The handle of a controller that the driver + specified by This is managing. This handle + specifies the controller whose name is to be + returned. + @param ChildHandle The handle of the child controller to retrieve the + name of. This is an optional parameter that may + be NULL. It will be NULL for device drivers. It + will also be NULL for a bus drivers that wish to + retrieve the name of the bus controller. It will + not be NULL for a bus driver that wishes to + retrieve the name of a child controller. + @param Language A pointer to RFC4646 language identifier. This is + the language of the controller name that that the + caller is requesting, and it must match one of the + languages specified in SupportedLanguages. The + number of languages supported by a driver is up to + the driver writer. + @param ControllerName A pointer to the Unicode string to return. This + Unicode string is the name of the controller + specified by ControllerHandle and ChildHandle in + the language specified by Language from the point + of view of the driver specified by This. + + @retval EFI_SUCCESS The Unicode string for the user readable name in + the language specified by Language for the driver + specified by This was returned in DriverName. + @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. + @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid + EFI_HANDLE. + @retval EFI_INVALID_PARAMETER Language is NULL. + @retval EFI_INVALID_PARAMETER ControllerName is NULL. + @retval EFI_UNSUPPORTED The driver specified by This is not currently + managing the controller specified by + ControllerHandle and ChildHandle. + @retval EFI_UNSUPPORTED The driver specified by This does not support the + language specified by Language. + +**/ +EFI_STATUS +EFIAPI +ConSplitterAbsolutePointerComponentNameGetControllerName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ) +{ + EFI_STATUS Status; + + Status = ConSplitterTestControllerHandles ( + ControllerHandle, + gConSplitterAbsolutePointerDriverBinding.DriverBindingHandle, + &gEfiAbsolutePointerProtocolGuid, + ChildHandle, + &gEfiAbsolutePointerProtocolGuid + ); + if (EFI_ERROR (Status)) { + return Status; + } + + return LookupUnicodeString2 ( + Language, + This->SupportedLanguages, + mConSplitterAbsolutePointerControllerNameTable, + ControllerName, + (BOOLEAN)(This == &gConSplitterAbsolutePointerComponentName) + ); +} + /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver. @@ -459,7 +612,7 @@ ConSplitterSimplePointerComponentNameGetControllerName ( languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in - RFC 3066 or ISO 639-2 language code format. + RFC 4646 or ISO 639-2 language code format. @param ControllerName[out] A pointer to the Unicode string to return. This Unicode string is the name of the @@ -501,24 +654,16 @@ ConSplitterConOutComponentNameGetControllerName ( ) { EFI_STATUS Status; - EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut; - // - // here ChildHandle is not an Optional parameter. - // - if (ChildHandle == NULL) { - return EFI_UNSUPPORTED; - } - Status = gBS->OpenProtocol ( - ControllerHandle, - &gEfiSimpleTextOutProtocolGuid, - (VOID **) &TextOut, - NULL, - ControllerHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); + Status = ConSplitterTestControllerHandles ( + ControllerHandle, + gConSplitterConOutDriverBinding.DriverBindingHandle, + &gEfiConsoleOutDeviceGuid, + ChildHandle, + &gEfiConsoleOutDeviceGuid + ); if (EFI_ERROR (Status)) { - return EFI_UNSUPPORTED; + return Status; } return LookupUnicodeString2 ( @@ -567,7 +712,7 @@ ConSplitterConOutComponentNameGetControllerName ( languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in - RFC 3066 or ISO 639-2 language code format. + RFC 4646 or ISO 639-2 language code format. @param ControllerName[out] A pointer to the Unicode string to return. This Unicode string is the name of the @@ -609,24 +754,16 @@ ConSplitterStdErrComponentNameGetControllerName ( ) { EFI_STATUS Status; - EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ErrOut; - // - // here ChildHandle is not an Optional parameter. - // - if (ChildHandle == NULL) { - return EFI_UNSUPPORTED; - } - Status = gBS->OpenProtocol ( - ControllerHandle, - &gEfiSimpleTextOutProtocolGuid, - (VOID **) &ErrOut, - NULL, - ControllerHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); + Status = ConSplitterTestControllerHandles ( + ControllerHandle, + gConSplitterStdErrDriverBinding.DriverBindingHandle, + &gEfiStandardErrorDeviceGuid, + ChildHandle, + &gEfiStandardErrorDeviceGuid + ); if (EFI_ERROR (Status)) { - return EFI_UNSUPPORTED; + return Status; } return LookupUnicodeString2 (