Home | History | Annotate | Download | only in EnhancedFatDxe
      1 /** @file
      2 
      3 Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials are licensed and made available
      5 under the terms and conditions of the BSD License which accompanies this
      6 distribution. The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 
     13 **/
     14 
     15 #include "Fat.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 FatComponentNameGetDriverName (
     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 FatComponentNameGetControllerName (
    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 // EFI Component Name Protocol
    148 //
    149 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL  gFatComponentName = {
    150   FatComponentNameGetDriverName,
    151   FatComponentNameGetControllerName,
    152   "eng"
    153 };
    154 
    155 //
    156 // EFI Component Name 2 Protocol
    157 //
    158 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gFatComponentName2 = {
    159   (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) FatComponentNameGetDriverName,
    160   (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) FatComponentNameGetControllerName,
    161   "en"
    162 };
    163 
    164 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mFatDriverNameTable[] = {
    165   {
    166     "eng;en",
    167     L"FAT File System Driver"
    168   },
    169   {
    170     NULL,
    171     NULL
    172   }
    173 };
    174 
    175 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mFatControllerNameTable[] = {
    176   {
    177     "eng;en",
    178     L"FAT File System"
    179   },
    180   {
    181     NULL,
    182     NULL
    183   }
    184 };
    185 
    186 
    187 /**
    188   Retrieves a Unicode string that is the user readable name of the driver.
    189 
    190   This function retrieves the user readable name of a driver in the form of a
    191   Unicode string. If the driver specified by This has a user readable name in
    192   the language specified by Language, then a pointer to the driver name is
    193   returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
    194   by This does not support the language specified by Language,
    195   then EFI_UNSUPPORTED is returned.
    196 
    197   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
    198                                 EFI_COMPONENT_NAME_PROTOCOL instance.
    199 
    200   @param  Language[in]          A pointer to a Null-terminated ASCII string
    201                                 array indicating the language. This is the
    202                                 language of the driver name that the caller is
    203                                 requesting, and it must match one of the
    204                                 languages specified in SupportedLanguages. The
    205                                 number of languages supported by a driver is up
    206                                 to the driver writer. Language is specified
    207                                 in RFC 4646 or ISO 639-2 language code format.
    208 
    209   @param  DriverName[out]       A pointer to the Unicode string to return.
    210                                 This Unicode string is the name of the
    211                                 driver specified by This in the language
    212                                 specified by Language.
    213 
    214   @retval EFI_SUCCESS           The Unicode string for the Driver specified by
    215                                 This and the language specified by Language was
    216                                 returned in DriverName.
    217 
    218   @retval EFI_INVALID_PARAMETER Language is NULL.
    219 
    220   @retval EFI_INVALID_PARAMETER DriverName is NULL.
    221 
    222   @retval EFI_UNSUPPORTED       The driver specified by This does not support
    223                                 the language specified by Language.
    224 
    225 **/
    226 EFI_STATUS
    227 EFIAPI
    228 FatComponentNameGetDriverName (
    229   IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
    230   IN  CHAR8                        *Language,
    231   OUT CHAR16                       **DriverName
    232   )
    233 {
    234   return LookupUnicodeString2 (
    235            Language,
    236            This->SupportedLanguages,
    237            mFatDriverNameTable,
    238            DriverName,
    239            (BOOLEAN)(This == &gFatComponentName)
    240            );
    241 }
    242 
    243 /**
    244   Retrieves a Unicode string that is the user readable name of the controller
    245   that is being managed by a driver.
    246 
    247   This function retrieves the user readable name of the controller specified by
    248   ControllerHandle and ChildHandle in the form of a Unicode string. If the
    249   driver specified by This has a user readable name in the language specified by
    250   Language, then a pointer to the controller name is returned in ControllerName,
    251   and EFI_SUCCESS is returned.  If the driver specified by This is not currently
    252   managing the controller specified by ControllerHandle and ChildHandle,
    253   then EFI_UNSUPPORTED is returned.  If the driver specified by This does not
    254   support the language specified by Language, then EFI_UNSUPPORTED is returned.
    255 
    256   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
    257                                 EFI_COMPONENT_NAME_PROTOCOL instance.
    258 
    259   @param  ControllerHandle[in]  The handle of a controller that the driver
    260                                 specified by This is managing.  This handle
    261                                 specifies the controller whose name is to be
    262                                 returned.
    263 
    264   @param  ChildHandle[in]       The handle of the child controller to retrieve
    265                                 the name of.  This is an optional parameter that
    266                                 may be NULL.  It will be NULL for device
    267                                 drivers.  It will also be NULL for a bus drivers
    268                                 that wish to retrieve the name of the bus
    269                                 controller.  It will not be NULL for a bus
    270                                 driver that wishes to retrieve the name of a
    271                                 child controller.
    272 
    273   @param  Language[in]          A pointer to a Null-terminated ASCII string
    274                                 array indicating the language.  This is the
    275                                 language of the driver name that the caller is
    276                                 requesting, and it must match one of the
    277                                 languages specified in SupportedLanguages. The
    278                                 number of languages supported by a driver is up
    279                                 to the driver writer. Language is specified in
    280                                 RFC 4646 or ISO 639-2 language code format.
    281 
    282   @param  ControllerName[out]   A pointer to the Unicode string to return.
    283                                 This Unicode string is the name of the
    284                                 controller specified by ControllerHandle and
    285                                 ChildHandle in the language specified by
    286                                 Language from the point of view of the driver
    287                                 specified by This.
    288 
    289   @retval EFI_SUCCESS           The Unicode string for the user readable name in
    290                                 the language specified by Language for the
    291                                 driver specified by This was returned in
    292                                 DriverName.
    293 
    294   @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
    295 
    296   @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
    297                                 EFI_HANDLE.
    298 
    299   @retval EFI_INVALID_PARAMETER Language is NULL.
    300 
    301   @retval EFI_INVALID_PARAMETER ControllerName is NULL.
    302 
    303   @retval EFI_UNSUPPORTED       The driver specified by This is not currently
    304                                 managing the controller specified by
    305                                 ControllerHandle and ChildHandle.
    306 
    307   @retval EFI_UNSUPPORTED       The driver specified by This does not support
    308                                 the language specified by Language.
    309 
    310 **/
    311 EFI_STATUS
    312 EFIAPI
    313 FatComponentNameGetControllerName (
    314   IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,
    315   IN  EFI_HANDLE                                      ControllerHandle,
    316   IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,
    317   IN  CHAR8                                           *Language,
    318   OUT CHAR16                                          **ControllerName
    319   )
    320 {
    321   EFI_STATUS  Status;
    322 
    323   //
    324   // This is a device driver, so ChildHandle must be NULL.
    325   //
    326   if (ChildHandle != NULL) {
    327     return EFI_UNSUPPORTED;
    328   }
    329 
    330   //
    331   // Make sure this driver is currently managing ControllHandle
    332   //
    333   Status = EfiTestManagedDevice (
    334              ControllerHandle,
    335              gFatDriverBinding.DriverBindingHandle,
    336              &gEfiDiskIoProtocolGuid
    337              );
    338   if (EFI_ERROR (Status)) {
    339     return Status;
    340   }
    341 
    342   return LookupUnicodeString2 (
    343            Language,
    344            This->SupportedLanguages,
    345            mFatControllerNameTable,
    346            ControllerName,
    347            (BOOLEAN)(This == &gFatComponentName)
    348            );
    349 }
    350