2 UEFI Component Name(2) protocol implementation for SnpDxe driver.
4 Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
12 // EFI Component Name Functions
16 Retrieves a Unicode string that is the user readable name of the driver.
18 This function retrieves the user readable name of a driver in the form of a
19 Unicode string. If the driver specified by This has a user readable name in
20 the language specified by Language, then a pointer to the driver name is
21 returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
22 by This does not support the language specified by Language,
23 then EFI_UNSUPPORTED is returned.
25 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
26 EFI_COMPONENT_NAME_PROTOCOL instance.
28 @param Language[in] A pointer to a Null-terminated ASCII string
29 array indicating the language. This is the
30 language of the driver name that the caller is
31 requesting, and it must match one of the
32 languages specified in SupportedLanguages. The
33 number of languages supported by a driver is up
34 to the driver writer. Language is specified
35 in RFC 4646 or ISO 639-2 language code format.
37 @param DriverName[out] A pointer to the Unicode string to return.
38 This Unicode string is the name of the
39 driver specified by This in the language
40 specified by Language.
42 @retval EFI_SUCCESS The Unicode string for the Driver specified by
43 This and the language specified by Language was
44 returned in DriverName.
46 @retval EFI_INVALID_PARAMETER Language is NULL.
48 @retval EFI_INVALID_PARAMETER DriverName is NULL.
50 @retval EFI_UNSUPPORTED The driver specified by This does not support
51 the language specified by Language.
56 SimpleNetworkComponentNameGetDriverName (
57 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
59 OUT CHAR16
**DriverName
63 Retrieves a Unicode string that is the user readable name of the controller
64 that is being managed by a driver.
66 This function retrieves the user readable name of the controller specified by
67 ControllerHandle and ChildHandle in the form of a Unicode string. If the
68 driver specified by This has a user readable name in the language specified by
69 Language, then a pointer to the controller name is returned in ControllerName,
70 and EFI_SUCCESS is returned. If the driver specified by This is not currently
71 managing the controller specified by ControllerHandle and ChildHandle,
72 then EFI_UNSUPPORTED is returned. If the driver specified by This does not
73 support the language specified by Language, then EFI_UNSUPPORTED is returned.
75 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
76 EFI_COMPONENT_NAME_PROTOCOL instance.
78 @param ControllerHandle[in] The handle of a controller that the driver
79 specified by This is managing. This handle
80 specifies the controller whose name is to be
83 @param ChildHandle[in] The handle of the child controller to retrieve
84 the name of. This is an optional parameter that
85 may be NULL. It will be NULL for device
86 drivers. It will also be NULL for a bus drivers
87 that wish to retrieve the name of the bus
88 controller. It will not be NULL for a bus
89 driver that wishes to retrieve the name of a
92 @param Language[in] A pointer to a Null-terminated ASCII string
93 array indicating the language. This is the
94 language of the driver name that the caller is
95 requesting, and it must match one of the
96 languages specified in SupportedLanguages. The
97 number of languages supported by a driver is up
98 to the driver writer. Language is specified in
99 RFC 4646 or ISO 639-2 language code format.
101 @param ControllerName[out] A pointer to the Unicode string to return.
102 This Unicode string is the name of the
103 controller specified by ControllerHandle and
104 ChildHandle in the language specified by
105 Language from the point of view of the driver
108 @retval EFI_SUCCESS The Unicode string for the user readable name in
109 the language specified by Language for the
110 driver specified by This was returned in
113 @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
115 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
118 @retval EFI_INVALID_PARAMETER Language is NULL.
120 @retval EFI_INVALID_PARAMETER ControllerName is NULL.
122 @retval EFI_UNSUPPORTED The driver specified by This is not currently
123 managing the controller specified by
124 ControllerHandle and ChildHandle.
126 @retval EFI_UNSUPPORTED The driver specified by This does not support
127 the language specified by Language.
132 SimpleNetworkComponentNameGetControllerName (
133 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
134 IN EFI_HANDLE ControllerHandle
,
135 IN EFI_HANDLE ChildHandle OPTIONAL
,
137 OUT CHAR16
**ControllerName
141 // EFI Component Name Protocol
143 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gSimpleNetworkComponentName
= {
144 SimpleNetworkComponentNameGetDriverName
,
145 SimpleNetworkComponentNameGetControllerName
,
150 // EFI Component Name 2 Protocol
152 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSimpleNetworkComponentName2
= {
153 (EFI_COMPONENT_NAME2_GET_DRIVER_NAME
)SimpleNetworkComponentNameGetDriverName
,
154 (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME
)SimpleNetworkComponentNameGetControllerName
,
158 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSimpleNetworkDriverNameTable
[] = {
161 L
"Simple Network Protocol Driver"
169 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE
*gSimpleNetworkControllerNameTable
= NULL
;
172 Retrieves a Unicode string that is the user readable name of the driver.
174 This function retrieves the user readable name of a driver in the form of a
175 Unicode string. If the driver specified by This has a user readable name in
176 the language specified by Language, then a pointer to the driver name is
177 returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
178 by This does not support the language specified by Language,
179 then EFI_UNSUPPORTED is returned.
181 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
182 EFI_COMPONENT_NAME_PROTOCOL instance.
184 @param Language[in] A pointer to a Null-terminated ASCII string
185 array indicating the language. This is the
186 language of the driver name that the caller is
187 requesting, and it must match one of the
188 languages specified in SupportedLanguages. The
189 number of languages supported by a driver is up
190 to the driver writer. Language is specified
191 in RFC 4646 or ISO 639-2 language code format.
193 @param DriverName[out] A pointer to the Unicode string to return.
194 This Unicode string is the name of the
195 driver specified by This in the language
196 specified by Language.
198 @retval EFI_SUCCESS The Unicode string for the Driver specified by
199 This and the language specified by Language was
200 returned in DriverName.
202 @retval EFI_INVALID_PARAMETER Language is NULL.
204 @retval EFI_INVALID_PARAMETER DriverName is NULL.
206 @retval EFI_UNSUPPORTED The driver specified by This does not support
207 the language specified by Language.
212 SimpleNetworkComponentNameGetDriverName (
213 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
215 OUT CHAR16
**DriverName
218 return LookupUnicodeString2 (
220 This
->SupportedLanguages
,
221 mSimpleNetworkDriverNameTable
,
223 (BOOLEAN
)(This
== &gSimpleNetworkComponentName
)
228 Update the component name for the Snp child handle.
230 @param Snp[in] A pointer to the EFI_SIMPLE_NETWORK_PROTOCOL.
233 @retval EFI_SUCCESS Update the ControllerNameTable of this instance successfully.
234 @retval EFI_INVALID_PARAMETER The input parameter is invalid.
239 IN EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
243 CHAR16 HandleName
[80];
248 return EFI_INVALID_PARAMETER
;
252 OffSet
+= UnicodeSPrint (
257 for (Index
= 0; Index
< Snp
->Mode
->HwAddressSize
; Index
++) {
258 OffSet
+= UnicodeSPrint (
260 sizeof (HandleName
) - OffSet
* sizeof (CHAR16
),
262 Snp
->Mode
->CurrentAddress
.Addr
[Index
]
268 // Remove the last '-'
271 OffSet
+= UnicodeSPrint (
273 sizeof (HandleName
) - OffSet
* sizeof (CHAR16
),
276 if (gSimpleNetworkControllerNameTable
!= NULL
) {
277 FreeUnicodeStringTable (gSimpleNetworkControllerNameTable
);
278 gSimpleNetworkControllerNameTable
= NULL
;
281 Status
= AddUnicodeString2 (
283 gSimpleNetworkComponentName
.SupportedLanguages
,
284 &gSimpleNetworkControllerNameTable
,
288 if (EFI_ERROR (Status
)) {
292 return AddUnicodeString2 (
294 gSimpleNetworkComponentName2
.SupportedLanguages
,
295 &gSimpleNetworkControllerNameTable
,
302 Retrieves a Unicode string that is the user readable name of the controller
303 that is being managed by a driver.
305 This function retrieves the user readable name of the controller specified by
306 ControllerHandle and ChildHandle in the form of a Unicode string. If the
307 driver specified by This has a user readable name in the language specified by
308 Language, then a pointer to the controller name is returned in ControllerName,
309 and EFI_SUCCESS is returned. If the driver specified by This is not currently
310 managing the controller specified by ControllerHandle and ChildHandle,
311 then EFI_UNSUPPORTED is returned. If the driver specified by This does not
312 support the language specified by Language, then EFI_UNSUPPORTED is returned.
313 Currently not implemented.
315 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
316 EFI_COMPONENT_NAME_PROTOCOL instance.
318 @param ControllerHandle[in] The handle of a controller that the driver
319 specified by This is managing. This handle
320 specifies the controller whose name is to be
323 @param ChildHandle[in] The handle of the child controller to retrieve
324 the name of. This is an optional parameter that
325 may be NULL. It will be NULL for device
326 drivers. It will also be NULL for a bus drivers
327 that wish to retrieve the name of the bus
328 controller. It will not be NULL for a bus
329 driver that wishes to retrieve the name of a
332 @param Language[in] A pointer to a Null-terminated ASCII string
333 array indicating the language. This is the
334 language of the driver name that the caller is
335 requesting, and it must match one of the
336 languages specified in SupportedLanguages. The
337 number of languages supported by a driver is up
338 to the driver writer. Language is specified in
339 RFC 4646 or ISO 639-2 language code format.
341 @param ControllerName[out] A pointer to the Unicode string to return.
342 This Unicode string is the name of the
343 controller specified by ControllerHandle and
344 ChildHandle in the language specified by
345 Language from the point of view of the driver
348 @retval EFI_SUCCESS The Unicode string for the user readable name in
349 the language specified by Language for the
350 driver specified by This was returned in
353 @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
355 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
358 @retval EFI_INVALID_PARAMETER Language is NULL.
360 @retval EFI_INVALID_PARAMETER ControllerName is NULL.
362 @retval EFI_UNSUPPORTED The driver specified by This is not currently
363 managing the controller specified by
364 ControllerHandle and ChildHandle.
366 @retval EFI_UNSUPPORTED The driver specified by This does not support
367 the language specified by Language.
372 SimpleNetworkComponentNameGetControllerName (
373 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
374 IN EFI_HANDLE ControllerHandle
,
375 IN EFI_HANDLE ChildHandle OPTIONAL
,
377 OUT CHAR16
**ControllerName
381 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
;
383 if (ChildHandle
!= NULL
) {
384 return EFI_UNSUPPORTED
;
388 // Make sure this driver is currently managing ControllHandle
390 Status
= EfiTestManagedDevice (
392 gSimpleNetworkDriverBinding
.DriverBindingHandle
,
393 &gEfiSimpleNetworkProtocolGuid
395 if (EFI_ERROR (Status
)) {
400 // Retrieve an instance of a produced protocol from ControllerHandle
402 Status
= gBS
->OpenProtocol (
404 &gEfiSimpleNetworkProtocolGuid
,
408 EFI_OPEN_PROTOCOL_GET_PROTOCOL
410 if (EFI_ERROR (Status
)) {
415 // Update the component name for this child handle.
417 Status
= UpdateName (Snp
);
418 if (EFI_ERROR (Status
)) {
422 return LookupUnicodeString2 (
424 This
->SupportedLanguages
,
425 gSimpleNetworkControllerNameTable
,
427 (BOOLEAN
)(This
== &gSimpleNetworkComponentName
)