1fb0b259e4e440577dcd6ba6722c252d90605b3e9vanjeff/** @file
23e03cb4d84348029236764e179c9d3c788709664xli  UEFI Component Name(2) protocol implementation for USB Mass Storage Driver.
3e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff
439840c50c1a7cc727fb60cce044b0e956f94deb3erictianCopyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
5cd5ebaa06dca3e6ef3c464081e6defe00d358c69hhtianThis program and the accompanying materials
6e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffare licensed and made available under the terms and conditions of the BSD License
7e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffwhich accompanies this distribution.  The full text of the license may be found at
8e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffhttp://opensource.org/licenses/bsd-license.php
9e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff
10e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff
13fb0b259e4e440577dcd6ba6722c252d90605b3e9vanjeff**/
14e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff
1539840c50c1a7cc727fb60cce044b0e956f94deb3erictian#include "UsbMass.h"
1662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
17e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff//
18e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff// EFI Component Name Protocol
19e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff//
201307dcd745881377355a2e7fba53ff9184e92657qhuangGLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL  gUsbMassStorageComponentName = {
21e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff  UsbMassStorageGetDriverName,
22e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff  UsbMassStorageGetControllerName,
23e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff  "eng"
241307dcd745881377355a2e7fba53ff9184e92657qhuang};
2562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
2662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang//
2762b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang// EFI Component Name 2 Protocol
2862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang//
291307dcd745881377355a2e7fba53ff9184e92657qhuangGLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gUsbMassStorageComponentName2 = {
3062b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) UsbMassStorageGetDriverName,
3162b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) UsbMassStorageGetControllerName,
3262b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  "en"
331307dcd745881377355a2e7fba53ff9184e92657qhuang};
3462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
35e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff
36d1aeb0bdc36f6bece71a2b0fd3684857d11a867bqhuangGLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE
37e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffmUsbMassStorageDriverNameTable[] = {
3862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  {"eng;en", L"Usb Mass Storage Driver"},
39e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff  {NULL,  NULL}
40e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff};
41e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff
4262b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang/**
4362b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  Retrieves a Unicode string that is the user readable name of the driver.
4462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
4562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  This function retrieves the user readable name of a driver in the form of a
4662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  Unicode string. If the driver specified by This has a user readable name in
4762b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  the language specified by Language, then a pointer to the driver name is
4862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
4962b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  by This does not support the language specified by Language,
5062b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  then EFI_UNSUPPORTED is returned.
5162b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
523e03cb4d84348029236764e179c9d3c788709664xli  @param  This                  A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
5362b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                EFI_COMPONENT_NAME_PROTOCOL instance.
543e03cb4d84348029236764e179c9d3c788709664xli  @param  Language              A pointer to a Null-terminated ASCII string
5562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                array indicating the language. This is the
5662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                language of the driver name that the caller is
5762b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                requesting, and it must match one of the
5862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                languages specified in SupportedLanguages. The
5962b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                number of languages supported by a driver is up
6062b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                to the driver writer. Language is specified
610254efc01e461445240512ae1a1c2fc48ed2f70egikidy                                in RFC 4646 or ISO 639-2 language code format.
623e03cb4d84348029236764e179c9d3c788709664xli  @param  DriverName            A pointer to the Unicode string to return.
6362b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                This Unicode string is the name of the
6462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                driver specified by This in the language
6562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                specified by Language.
6662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
6762b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  @retval EFI_SUCCESS           The Unicode string for the Driver specified by
6862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                This and the language specified by Language was
6962b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                returned in DriverName.
7062b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  @retval EFI_INVALID_PARAMETER Language is NULL.
7162b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  @retval EFI_INVALID_PARAMETER DriverName is NULL.
7262b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  @retval EFI_UNSUPPORTED       The driver specified by This does not support
7362b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                the language specified by Language.
7462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
7562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang**/
76e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffEFI_STATUS
77e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffEFIAPI
78e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffUsbMassStorageGetDriverName (
79e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
80e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff  IN  CHAR8                        *Language,
81e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff  OUT CHAR16                       **DriverName
82e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff  )
83e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff{
8462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  return LookupUnicodeString2 (
85e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff           Language,
8662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang           This->SupportedLanguages,
87e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff           mUsbMassStorageDriverNameTable,
8862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang           DriverName,
8962b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang           (BOOLEAN)(This == &gUsbMassStorageComponentName)
90e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff           );
91e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff}
92e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff
9362b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang/**
9462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  Retrieves a Unicode string that is the user readable name of the controller
9562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  that is being managed by a driver.
9662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
9762b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  This function retrieves the user readable name of the controller specified by
9862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  ControllerHandle and ChildHandle in the form of a Unicode string. If the
9962b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  driver specified by This has a user readable name in the language specified by
10062b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  Language, then a pointer to the controller name is returned in ControllerName,
10162b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  and EFI_SUCCESS is returned.  If the driver specified by This is not currently
10262b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  managing the controller specified by ControllerHandle and ChildHandle,
10362b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not
10462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  support the language specified by Language, then EFI_UNSUPPORTED is returned.
10562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
1063e03cb4d84348029236764e179c9d3c788709664xli  @param  This                  A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
10762b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                EFI_COMPONENT_NAME_PROTOCOL instance.
1083e03cb4d84348029236764e179c9d3c788709664xli  @param  ControllerHandle      The handle of a controller that the driver
10962b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                specified by This is managing.  This handle
11062b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                specifies the controller whose name is to be
11162b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                returned.
1123e03cb4d84348029236764e179c9d3c788709664xli  @param  ChildHandle           The handle of the child controller to retrieve
11362b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                the name of.  This is an optional parameter that
11462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                may be NULL.  It will be NULL for device
11562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                drivers.  It will also be NULL for a bus drivers
11662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                that wish to retrieve the name of the bus
11762b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                controller.  It will not be NULL for a bus
11862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                driver that wishes to retrieve the name of a
11962b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                child controller.
1203e03cb4d84348029236764e179c9d3c788709664xli  @param  Language              A pointer to a Null-terminated ASCII string
12162b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                array indicating the language.  This is the
12262b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                language of the driver name that the caller is
12362b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                requesting, and it must match one of the
12462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                languages specified in SupportedLanguages. The
12562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                number of languages supported by a driver is up
12662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                to the driver writer. Language is specified in
1270254efc01e461445240512ae1a1c2fc48ed2f70egikidy                                RFC 4646 or ISO 639-2 language code format.
1283e03cb4d84348029236764e179c9d3c788709664xli  @param  ControllerName        A pointer to the Unicode string to return.
12962b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                This Unicode string is the name of the
13062b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                controller specified by ControllerHandle and
13162b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                ChildHandle in the language specified by
13262b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                Language from the point of view of the driver
13362b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                specified by This.
13462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
13562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  @retval EFI_SUCCESS           The Unicode string for the user readable name in
13662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                the language specified by Language for the
13762b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                driver specified by This was returned in
13862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                DriverName.
139284ee2e829ab2453293b7dc4539727ad6c047163niruiyu  @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
14062b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
14162b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                EFI_HANDLE.
14262b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  @retval EFI_INVALID_PARAMETER Language is NULL.
14362b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  @retval EFI_INVALID_PARAMETER ControllerName is NULL.
14462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
14562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                managing the controller specified by
14662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                ControllerHandle and ChildHandle.
14762b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  @retval EFI_UNSUPPORTED       The driver specified by This does not support
14862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang                                the language specified by Language.
14962b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang
15062b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang**/
151e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffEFI_STATUS
152e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffEFIAPI
153e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeffUsbMassStorageGetControllerName (
15462b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,
15562b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  IN  EFI_HANDLE                                      ControllerHandle,
15662b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,
15762b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  IN  CHAR8                                           *Language,
15862b9bb55c9a37e00b3bd9ea1713512bcc4d37131qhuang  OUT CHAR16                                          **ControllerName
159e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff  )
160e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff{
161e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff  return EFI_UNSUPPORTED;
162e237e7ae9fc23f32a25040d49cc9a16f2a7f3b4cvanjeff}
163