Home | History | Annotate | Download | only in Ps2KeyboardDxe
      1 /** @file
      2   Routines related Component Name protocol.
      3 
      4 Copyright (c) 2006 - 2016, 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 "Ps2Keyboard.h"
     16 
     17 //
     18 // EFI Component Name Functions
     19 //
     20 /**
     21   Retrieves a Unicode string that is the user readable name of the driver.
     22 
     23   This function retrieves the user readable name of a driver in the form of a
     24   Unicode string. If the driver specified by This has a user readable name in
     25   the language specified by Language, then a pointer to the driver name is
     26   returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
     27   by This does not support the language specified by Language,
     28   then EFI_UNSUPPORTED is returned.
     29 
     30   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
     31                                 EFI_COMPONENT_NAME_PROTOCOL instance.
     32 
     33   @param  Language[in]          A pointer to a Null-terminated ASCII string
     34                                 array indicating the language. This is the
     35                                 language of the driver name that the caller is
     36                                 requesting, and it must match one of the
     37                                 languages specified in SupportedLanguages. The
     38                                 number of languages supported by a driver is up
     39                                 to the driver writer. Language is specified
     40                                 in RFC 4646 or ISO 639-2 language code format.
     41 
     42   @param  DriverName[out]       A pointer to the Unicode string to return.
     43                                 This Unicode string is the name of the
     44                                 driver specified by This in the language
     45                                 specified by Language.
     46 
     47   @retval EFI_SUCCESS           The Unicode string for the Driver specified by
     48                                 This and the language specified by Language was
     49                                 returned in DriverName.
     50 
     51   @retval EFI_INVALID_PARAMETER Language is NULL.
     52 
     53   @retval EFI_INVALID_PARAMETER DriverName is NULL.
     54 
     55   @retval EFI_UNSUPPORTED       The driver specified by This does not support
     56                                 the language specified by Language.
     57 
     58 **/
     59 EFI_STATUS
     60 EFIAPI
     61 Ps2KeyboardComponentNameGetDriverName (
     62   IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
     63   IN  CHAR8                        *Language,
     64   OUT CHAR16                       **DriverName
     65   );
     66 
     67 
     68 /**
     69   Retrieves a Unicode string that is the user readable name of the controller
     70   that is being managed by a driver.
     71 
     72   This function retrieves the user readable name of the controller specified by
     73   ControllerHandle and ChildHandle in the form of a Unicode string. If the
     74   driver specified by This has a user readable name in the language specified by
     75   Language, then a pointer to the controller name is returned in ControllerName,
     76   and EFI_SUCCESS is returned.  If the driver specified by This is not currently
     77   managing the controller specified by ControllerHandle and ChildHandle,
     78   then EFI_UNSUPPORTED is returned.  If the driver specified by This does not
     79   support the language specified by Language, then EFI_UNSUPPORTED is returned.
     80 
     81   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
     82                                 EFI_COMPONENT_NAME_PROTOCOL instance.
     83 
     84   @param  ControllerHandle[in]  The handle of a controller that the driver
     85                                 specified by This is managing.  This handle
     86                                 specifies the controller whose name is to be
     87                                 returned.
     88 
     89   @param  ChildHandle[in]       The handle of the child controller to retrieve
     90                                 the name of.  This is an optional parameter that
     91                                 may be NULL.  It will be NULL for device
     92                                 drivers.  It will also be NULL for a bus drivers
     93                                 that wish to retrieve the name of the bus
     94                                 controller.  It will not be NULL for a bus
     95                                 driver that wishes to retrieve the name of a
     96                                 child controller.
     97 
     98   @param  Language[in]          A pointer to a Null-terminated ASCII string
     99                                 array indicating the language.  This is the
    100                                 language of the driver name that the caller is
    101                                 requesting, and it must match one of the
    102                                 languages specified in SupportedLanguages. The
    103                                 number of languages supported by a driver is up
    104                                 to the driver writer. Language is specified in
    105                                 RFC 4646 or ISO 639-2 language code format.
    106 
    107   @param  ControllerName[out]   A pointer to the Unicode string to return.
    108                                 This Unicode string is the name of the
    109                                 controller specified by ControllerHandle and
    110                                 ChildHandle in the language specified by
    111                                 Language from the point of view of the driver
    112                                 specified by This.
    113 
    114   @retval EFI_SUCCESS           The Unicode string for the user readable name in
    115                                 the language specified by Language for the
    116                                 driver specified by This was returned in
    117                                 DriverName.
    118 
    119   @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
    120 
    121   @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
    122                                 EFI_HANDLE.
    123 
    124   @retval EFI_INVALID_PARAMETER Language is NULL.
    125 
    126   @retval EFI_INVALID_PARAMETER ControllerName is NULL.
    127 
    128   @retval EFI_UNSUPPORTED       The driver specified by This is not currently
    129                                 managing the controller specified by
    130                                 ControllerHandle and ChildHandle.
    131 
    132   @retval EFI_UNSUPPORTED       The driver specified by This does not support
    133                                 the language specified by Language.
    134 
    135 **/
    136 EFI_STATUS
    137 EFIAPI
    138 Ps2KeyboardComponentNameGetControllerName (
    139   IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,
    140   IN  EFI_HANDLE                                      ControllerHandle,
    141   IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,
    142   IN  CHAR8                                           *Language,
    143   OUT CHAR16                                          **ControllerName
    144   );
    145 
    146 
    147 //
    148 // EFI Component Name Protocol
    149 //
    150 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL  gPs2KeyboardComponentName = {
    151   Ps2KeyboardComponentNameGetDriverName,
    152   Ps2KeyboardComponentNameGetControllerName,
    153   "eng"
    154 };
    155 
    156 //
    157 // EFI Component Name 2 Protocol
    158 //
    159 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gPs2KeyboardComponentName2 = {
    160   (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) Ps2KeyboardComponentNameGetDriverName,
    161   (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) Ps2KeyboardComponentNameGetControllerName,
    162   "en"
    163 };
    164 
    165 
    166 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mPs2KeyboardDriverNameTable[] = {
    167   {
    168     "eng;en",
    169     L"PS/2 Keyboard Driver"
    170   },
    171   {
    172     NULL,
    173     NULL
    174   }
    175 };
    176 
    177 /**
    178   Retrieves a Unicode string that is the user readable name of the driver.
    179 
    180   This function retrieves the user readable name of a driver in the form of a
    181   Unicode string. If the driver specified by This has a user readable name in
    182   the language specified by Language, then a pointer to the driver name is
    183   returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
    184   by This does not support the language specified by Language,
    185   then EFI_UNSUPPORTED is returned.
    186 
    187   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
    188                                 EFI_COMPONENT_NAME_PROTOCOL instance.
    189 
    190   @param  Language[in]          A pointer to a Null-terminated ASCII string
    191                                 array indicating the language. This is the
    192                                 language of the driver name that the caller is
    193                                 requesting, and it must match one of the
    194                                 languages specified in SupportedLanguages. The
    195                                 number of languages supported by a driver is up
    196                                 to the driver writer. Language is specified
    197                                 in RFC 4646 or ISO 639-2 language code format.
    198 
    199   @param  DriverName[out]       A pointer to the Unicode string to return.
    200                                 This Unicode string is the name of the
    201                                 driver specified by This in the language
    202                                 specified by Language.
    203 
    204   @retval EFI_SUCCESS           The Unicode string for the Driver specified by
    205                                 This and the language specified by Language was
    206                                 returned in DriverName.
    207 
    208   @retval EFI_INVALID_PARAMETER Language is NULL.
    209 
    210   @retval EFI_INVALID_PARAMETER DriverName is NULL.
    211 
    212   @retval EFI_UNSUPPORTED       The driver specified by This does not support
    213                                 the language specified by Language.
    214 
    215 **/
    216 EFI_STATUS
    217 EFIAPI
    218 Ps2KeyboardComponentNameGetDriverName (
    219   IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
    220   IN  CHAR8                        *Language,
    221   OUT CHAR16                       **DriverName
    222   )
    223 {
    224   return LookupUnicodeString2 (
    225            Language,
    226            This->SupportedLanguages,
    227            mPs2KeyboardDriverNameTable,
    228            DriverName,
    229            (BOOLEAN)(This == &gPs2KeyboardComponentName)
    230            );
    231 }
    232 
    233 /**
    234   Retrieves a Unicode string that is the user readable name of the controller
    235   that is being managed by a driver.
    236 
    237   This function retrieves the user readable name of the controller specified by
    238   ControllerHandle and ChildHandle in the form of a Unicode string. If the
    239   driver specified by This has a user readable name in the language specified by
    240   Language, then a pointer to the controller name is returned in ControllerName,
    241   and EFI_SUCCESS is returned.  If the driver specified by This is not currently
    242   managing the controller specified by ControllerHandle and ChildHandle,
    243   then EFI_UNSUPPORTED is returned.  If the driver specified by This does not
    244   support the language specified by Language, then EFI_UNSUPPORTED is returned.
    245 
    246   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
    247                                 EFI_COMPONENT_NAME_PROTOCOL instance.
    248 
    249   @param  ControllerHandle[in]  The handle of a controller that the driver
    250                                 specified by This is managing.  This handle
    251                                 specifies the controller whose name is to be
    252                                 returned.
    253 
    254   @param  ChildHandle[in]       The handle of the child controller to retrieve
    255                                 the name of.  This is an optional parameter that
    256                                 may be NULL.  It will be NULL for device
    257                                 drivers.  It will also be NULL for a bus drivers
    258                                 that wish to retrieve the name of the bus
    259                                 controller.  It will not be NULL for a bus
    260                                 driver that wishes to retrieve the name of a
    261                                 child controller.
    262 
    263   @param  Language[in]          A pointer to a Null-terminated ASCII string
    264                                 array indicating the language.  This is the
    265                                 language of the driver name that the caller is
    266                                 requesting, and it must match one of the
    267                                 languages specified in SupportedLanguages. The
    268                                 number of languages supported by a driver is up
    269                                 to the driver writer. Language is specified in
    270                                 RFC 4646 or ISO 639-2 language code format.
    271 
    272   @param  ControllerName[out]   A pointer to the Unicode string to return.
    273                                 This Unicode string is the name of the
    274                                 controller specified by ControllerHandle and
    275                                 ChildHandle in the language specified by
    276                                 Language from the point of view of the driver
    277                                 specified by This.
    278 
    279   @retval EFI_SUCCESS           The Unicode string for the user readable name in
    280                                 the language specified by Language for the
    281                                 driver specified by This was returned in
    282                                 DriverName.
    283 
    284   @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
    285 
    286   @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
    287                                 EFI_HANDLE.
    288 
    289   @retval EFI_INVALID_PARAMETER Language is NULL.
    290 
    291   @retval EFI_INVALID_PARAMETER ControllerName is NULL.
    292 
    293   @retval EFI_UNSUPPORTED       The driver specified by This is not currently
    294                                 managing the controller specified by
    295                                 ControllerHandle and ChildHandle.
    296 
    297   @retval EFI_UNSUPPORTED       The driver specified by This does not support
    298                                 the language specified by Language.
    299 
    300 **/
    301 EFI_STATUS
    302 EFIAPI
    303 Ps2KeyboardComponentNameGetControllerName (
    304   IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,
    305   IN  EFI_HANDLE                                      ControllerHandle,
    306   IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,
    307   IN  CHAR8                                           *Language,
    308   OUT CHAR16                                          **ControllerName
    309   )
    310 {
    311   EFI_STATUS                                  Status;
    312   EFI_SIMPLE_TEXT_INPUT_PROTOCOL              *ConIn;
    313   KEYBOARD_CONSOLE_IN_DEV                     *ConsoleIn;
    314   //
    315   // This is a device driver, so ChildHandle must be NULL.
    316   //
    317   if (ChildHandle != NULL) {
    318     return EFI_UNSUPPORTED;
    319   }
    320 
    321   //
    322   // Check Controller's handle
    323   //
    324   Status = EfiTestManagedDevice (ControllerHandle, gKeyboardControllerDriver.DriverBindingHandle, &gEfiSioProtocolGuid);
    325   if (EFI_ERROR (Status)) {
    326     return Status;
    327   }
    328   //
    329   // Get the device context
    330   //
    331   Status = gBS->OpenProtocol (
    332                   ControllerHandle,
    333                   &gEfiSimpleTextInProtocolGuid,
    334                   (VOID **) &ConIn,
    335                   gKeyboardControllerDriver.DriverBindingHandle,
    336                   ControllerHandle,
    337                   EFI_OPEN_PROTOCOL_GET_PROTOCOL
    338                   );
    339   if (EFI_ERROR (Status)) {
    340     return Status;
    341   }
    342 
    343   ConsoleIn = KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (ConIn);
    344 
    345   return LookupUnicodeString2 (
    346            Language,
    347            This->SupportedLanguages,
    348            ConsoleIn->ControllerNameTable,
    349            ControllerName,
    350            (BOOLEAN)(This == &gPs2KeyboardComponentName)
    351            );
    352 }
    353