1adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff/** @file
2adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  UEFI Component Name protocol for Partition driver.
3adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
4284ee2e829ab2453293b7dc4539727ad6c047163niruiyuCopyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
5e5eed7d3641d71d7ea539e5379ea9c6a5cd97004hhtianThis program and the accompanying materials
6f42be64210ea5ef394835a3c35f0444086537f66qhuangare licensed and made available under the terms and conditions of the BSD License
7f42be64210ea5ef394835a3c35f0444086537f66qhuangwhich accompanies this distribution.  The full text of the license may be found at
8f42be64210ea5ef394835a3c35f0444086537f66qhuanghttp://opensource.org/licenses/bsd-license.php
9f42be64210ea5ef394835a3c35f0444086537f66qhuang
10f42be64210ea5ef394835a3c35f0444086537f66qhuangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11f42be64210ea5ef394835a3c35f0444086537f66qhuangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
13adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff**/
14adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
15adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff#include "Partition.h"
16adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
17adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff//
18adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff// EFI Component Name Protocol
19adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff//
201307dcd745881377355a2e7fba53ff9184e92657qhuangGLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL  gPartitionComponentName = {
21adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  PartitionComponentNameGetDriverName,
22adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  PartitionComponentNameGetControllerName,
23adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  "eng"
241307dcd745881377355a2e7fba53ff9184e92657qhuang};
25d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
26d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang//
27d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang// EFI Component Name 2 Protocol
28d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang//
291307dcd745881377355a2e7fba53ff9184e92657qhuangGLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gPartitionComponentName2 = {
30d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) PartitionComponentNameGetDriverName,
31d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) PartitionComponentNameGetControllerName,
32d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  "en"
331307dcd745881377355a2e7fba53ff9184e92657qhuang};
34d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
35ff61847ddc91285a9ef8be00b89304870c493ef8qhuang//
36ff61847ddc91285a9ef8be00b89304870c493ef8qhuang// Driver name table for Partition module.
37ff61847ddc91285a9ef8be00b89304870c493ef8qhuang// It is shared by the implementation of ComponentName & ComponentName2 Protocol.
38ff61847ddc91285a9ef8be00b89304870c493ef8qhuang//
39d1aeb0bdc36f6bece71a2b0fd3684857d11a867bqhuangGLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mPartitionDriverNameTable[] = {
40adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  {
41d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang    "eng;en",
42ff61847ddc91285a9ef8be00b89304870c493ef8qhuang    L"Partition Driver(MBR/GPT/El Torito)"
43adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  },
44adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  {
45adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff    NULL,
46adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff    NULL
47adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  }
48adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff};
49adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
50adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
51adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
52adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff/**
53d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  Retrieves a Unicode string that is the user readable name of the driver.
54d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
55d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  This function retrieves the user readable name of a driver in the form of a
56d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  Unicode string. If the driver specified by This has a user readable name in
57d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  the language specified by Language, then a pointer to the driver name is
58d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
59d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  by This does not support the language specified by Language,
60d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  then EFI_UNSUPPORTED is returned.
61d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
62d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
63d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                EFI_COMPONENT_NAME_PROTOCOL instance.
64d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
65d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @param  Language[in]          A pointer to a Null-terminated ASCII string
66d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                array indicating the language. This is the
67d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                language of the driver name that the caller is
68d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                requesting, and it must match one of the
69d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                languages specified in SupportedLanguages. The
70d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                number of languages supported by a driver is up
71d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                to the driver writer. Language is specified
720254efc01e461445240512ae1a1c2fc48ed2f70egikidy                                in RFC 4646 or ISO 639-2 language code format.
73d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
74d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @param  DriverName[out]       A pointer to the Unicode string to return.
75d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                This Unicode string is the name of the
76d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                driver specified by This in the language
77d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                specified by Language.
78d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
79d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @retval EFI_SUCCESS           The Unicode string for the Driver specified by
80d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                This and the language specified by Language was
81d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                returned in DriverName.
82adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
83adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  @retval EFI_INVALID_PARAMETER Language is NULL.
84d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
85adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  @retval EFI_INVALID_PARAMETER DriverName is NULL.
86d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
87d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @retval EFI_UNSUPPORTED       The driver specified by This does not support
88d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                the language specified by Language.
89adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
90adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff**/
91adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeffEFI_STATUS
92adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeffEFIAPI
93adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeffPartitionComponentNameGetDriverName (
94adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
95adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  IN  CHAR8                        *Language,
96adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  OUT CHAR16                       **DriverName
97adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  )
98adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff{
99d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  return LookupUnicodeString2 (
100d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang           Language,
101d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang           This->SupportedLanguages,
102d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang           mPartitionDriverNameTable,
103d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang           DriverName,
104d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang           (BOOLEAN)(This == &gPartitionComponentName)
105d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang           );
106adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff}
107adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
108adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
109adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff/**
110d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  Retrieves a Unicode string that is the user readable name of the controller
111d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  that is being managed by a driver.
112d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
113d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  This function retrieves the user readable name of the controller specified by
114d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  ControllerHandle and ChildHandle in the form of a Unicode string. If the
115d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  driver specified by This has a user readable name in the language specified by
116d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  Language, then a pointer to the controller name is returned in ControllerName,
117d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  and EFI_SUCCESS is returned.  If the driver specified by This is not currently
118d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  managing the controller specified by ControllerHandle and ChildHandle,
119d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not
120d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  support the language specified by Language, then EFI_UNSUPPORTED is returned.
121d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
122d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
123d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                EFI_COMPONENT_NAME_PROTOCOL instance.
124d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
125d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @param  ControllerHandle[in]  The handle of a controller that the driver
126d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                specified by This is managing.  This handle
127d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                specifies the controller whose name is to be
128d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                returned.
129d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
130d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @param  ChildHandle[in]       The handle of the child controller to retrieve
131d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                the name of.  This is an optional parameter that
132d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                may be NULL.  It will be NULL for device
133d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                drivers.  It will also be NULL for a bus drivers
134d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                that wish to retrieve the name of the bus
135d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                controller.  It will not be NULL for a bus
136d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                driver that wishes to retrieve the name of a
137d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                child controller.
138d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
139d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @param  Language[in]          A pointer to a Null-terminated ASCII string
140d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                array indicating the language.  This is the
141d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                language of the driver name that the caller is
142d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                requesting, and it must match one of the
143d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                languages specified in SupportedLanguages. The
144d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                number of languages supported by a driver is up
145d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                to the driver writer. Language is specified in
1460254efc01e461445240512ae1a1c2fc48ed2f70egikidy                                RFC 4646 or ISO 639-2 language code format.
147d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
148d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @param  ControllerName[out]   A pointer to the Unicode string to return.
149d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                This Unicode string is the name of the
150d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                controller specified by ControllerHandle and
151d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                ChildHandle in the language specified by
152d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                Language from the point of view of the driver
153d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                specified by This.
154d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
155d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @retval EFI_SUCCESS           The Unicode string for the user readable name in
156d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                the language specified by Language for the
157d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                driver specified by This was returned in
158d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                DriverName.
159d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
160284ee2e829ab2453293b7dc4539727ad6c047163niruiyu  @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
161d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang
162d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
163adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff                                EFI_HANDLE.
164adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
165adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  @retval EFI_INVALID_PARAMETER Language is NULL.
166adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
167adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  @retval EFI_INVALID_PARAMETER ControllerName is NULL.
168adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
169d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
170d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                managing the controller specified by
171d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                ControllerHandle and ChildHandle.
172adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
173d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang  @retval EFI_UNSUPPORTED       The driver specified by This does not support
174d38a0f446fbb13a7969294cc6665ee7c789d9fc2qhuang                                the language specified by Language.
175adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff
176adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff**/
177adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeffEFI_STATUS
178adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeffEFIAPI
179adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeffPartitionComponentNameGetControllerName (
180adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,
181adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  IN  EFI_HANDLE                                      ControllerHandle,
182adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,
183adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  IN  CHAR8                                           *Language,
184adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  OUT CHAR16                                          **ControllerName
185adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  )
186adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff{
187adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff  return EFI_UNSUPPORTED;
188adbcbf8ffcaedab483d23b52e8283aaad74cc807vanjeff}
189