]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Network/Tcp4Dxe/ComponentName.c
Fix a bug in TCP driver’s component name print function.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Tcp4Dxe / ComponentName.c
1 /** @file
2 UEFI Component Name(2) protocol implementation for Tcp4Dxe driver.
3
4 Copyright (c) 2005 - 2013, 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<BR>
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 "Tcp4Main.h"
16
17 /**
18 Retrieves a Unicode string that is the user readable name of the driver.
19
20 This function retrieves the user readable name of a driver in the form of a
21 Unicode string. If the driver specified by This has a user readable name in
22 the language specified by Language, then a pointer to the driver name is
23 returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
24 by This does not support the language specified by Language,
25 then EFI_UNSUPPORTED is returned.
26
27 @param[in] This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
28 EFI_COMPONENT_NAME_PROTOCOL instance.
29
30 @param[in] Language A pointer to a Null-terminated ASCII string
31 array indicating the language. This is the
32 language of the driver name that the caller is
33 requesting, and it must match one of the
34 languages specified in SupportedLanguages. The
35 number of languages supported by a driver is up
36 to the driver writer. Language is specified
37 in RFC 4646 or ISO 639-2 language code format.
38
39 @param[out] DriverName A pointer to the Unicode string to return.
40 This Unicode string is the name of the
41 driver specified by This in the language
42 specified by Language.
43
44 @retval EFI_SUCCESS The Unicode string for the Driver specified by
45 This and the language specified by Language was
46 returned in DriverName.
47
48 @retval EFI_INVALID_PARAMETER Language is NULL.
49
50 @retval EFI_INVALID_PARAMETER DriverName is NULL.
51
52 @retval EFI_UNSUPPORTED The driver specified by This does not support
53 the language specified by Language.
54
55 **/
56 EFI_STATUS
57 EFIAPI
58 TcpComponentNameGetDriverName (
59 IN EFI_COMPONENT_NAME_PROTOCOL *This,
60 IN CHAR8 *Language,
61 OUT CHAR16 **DriverName
62 );
63
64
65 /**
66 Retrieves a Unicode string that is the user readable name of the controller
67 that is being managed by a driver.
68
69 This function retrieves the user readable name of the controller specified by
70 ControllerHandle and ChildHandle in the form of a Unicode string. If the
71 driver specified by This has a user readable name in the language specified by
72 Language, then a pointer to the controller name is returned in ControllerName,
73 and EFI_SUCCESS is returned. If the driver specified by This is not currently
74 managing the controller specified by ControllerHandle and ChildHandle,
75 then EFI_UNSUPPORTED is returned. If the driver specified by This does not
76 support the language specified by Language, then EFI_UNSUPPORTED is returned.
77
78 @param[in] This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
79 EFI_COMPONENT_NAME_PROTOCOL instance.
80
81 @param[in] ControllerHandle The handle of a controller that the driver
82 specified by This is managing. This handle
83 specifies the controller whose name is to be
84 returned.
85
86 @param[in] ChildHandle The handle of the child controller to retrieve
87 the name of. This is an optional parameter that
88 may be NULL. It will be NULL for device
89 drivers. It will also be NULL for a bus drivers
90 that wish to retrieve the name of the bus
91 controller. It will not be NULL for a bus
92 driver that wishes to retrieve the name of a
93 child controller.
94
95 @param[in] Language A pointer to a Null-terminated ASCII string
96 array indicating the language. This is the
97 language of the driver name that the caller is
98 requesting, and it must match one of the
99 languages specified in SupportedLanguages. The
100 number of languages supported by a driver is up
101 to the driver writer. Language is specified in
102 RFC 4646 or ISO 639-2 language code format.
103
104 @param[out] ControllerName A pointer to the Unicode string to return.
105 This Unicode string is the name of the
106 controller specified by ControllerHandle and
107 ChildHandle in the language specified by
108 Language from the point of view of the driver
109 specified by This.
110
111 @retval EFI_SUCCESS The Unicode string for the user readable name in
112 the language specified by Language for the
113 driver specified by This was returned in
114 DriverName.
115
116 @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
117
118 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
119 EFI_HANDLE.
120
121 @retval EFI_INVALID_PARAMETER Language is NULL.
122
123 @retval EFI_INVALID_PARAMETER ControllerName is NULL.
124
125 @retval EFI_UNSUPPORTED The driver specified by This is not currently
126 managing the controller specified by
127 ControllerHandle and ChildHandle.
128
129 @retval EFI_UNSUPPORTED The driver specified by This does not support
130 the language specified by Language.
131
132 **/
133 EFI_STATUS
134 EFIAPI
135 TcpComponentNameGetControllerName (
136 IN EFI_COMPONENT_NAME_PROTOCOL *This,
137 IN EFI_HANDLE ControllerHandle,
138 IN EFI_HANDLE ChildHandle OPTIONAL,
139 IN CHAR8 *Language,
140 OUT CHAR16 **ControllerName
141 );
142
143
144 ///
145 /// EFI Component Name Protocol
146 ///
147 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gTcp4ComponentName = {
148 TcpComponentNameGetDriverName,
149 TcpComponentNameGetControllerName,
150 "eng"
151 };
152
153 ///
154 /// EFI Component Name 2 Protocol
155 ///
156 GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gTcp4ComponentName2 = {
157 (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) TcpComponentNameGetDriverName,
158 (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) TcpComponentNameGetControllerName,
159 "en"
160 };
161
162
163 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mTcpDriverNameTable[] = {
164 {
165 "eng;en",
166 L"Tcp Network Service Driver"
167 },
168 {
169 NULL,
170 NULL
171 }
172 };
173
174 GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE *gTcpControllerNameTable = NULL;
175
176 /**
177 Retrieves a Unicode string that is the user readable name of the driver.
178
179 This function retrieves the user readable name of a driver in the form of a
180 Unicode string. If the driver specified by This has a user readable name in
181 the language specified by Language, then a pointer to the driver name is
182 returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
183 by This does not support the language specified by Language,
184 then EFI_UNSUPPORTED is returned.
185
186 @param[in] This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
187 EFI_COMPONENT_NAME_PROTOCOL instance.
188
189 @param[in] Language A pointer to a Null-terminated ASCII string
190 array indicating the language. This is the
191 language of the driver name that the caller is
192 requesting, and it must match one of the
193 languages specified in SupportedLanguages. The
194 number of languages supported by a driver is up
195 to the driver writer. Language is specified
196 in RFC 4646 or ISO 639-2 language code format.
197
198 @param[out] DriverName A pointer to the Unicode string to return.
199 This Unicode string is the name of the
200 driver specified by This in the language
201 specified by Language.
202
203 @retval EFI_SUCCESS The Unicode string for the Driver specified by
204 This and the language specified by Language was
205 returned in DriverName.
206
207 @retval EFI_INVALID_PARAMETER Language is NULL.
208
209 @retval EFI_INVALID_PARAMETER DriverName is NULL.
210
211 @retval EFI_UNSUPPORTED The driver specified by This does not support
212 the language specified by Language.
213
214 **/
215 EFI_STATUS
216 EFIAPI
217 TcpComponentNameGetDriverName (
218 IN EFI_COMPONENT_NAME_PROTOCOL *This,
219 IN CHAR8 *Language,
220 OUT CHAR16 **DriverName
221 )
222 {
223 return LookupUnicodeString2 (
224 Language,
225 This->SupportedLanguages,
226 mTcpDriverNameTable,
227 DriverName,
228 (BOOLEAN) (This == &gTcp4ComponentName)
229 );
230 }
231
232 /**
233 Update the component name for the Tcp4 child handle.
234
235 @param Tcp4[in] A pointer to the EFI_TCP4_PROTOCOL.
236
237
238 @retval EFI_SUCCESS Update the ControllerNameTable of this instance successfully.
239 @retval EFI_INVALID_PARAMETER The input parameter is invalid.
240
241 **/
242 EFI_STATUS
243 UpdateName (
244 IN EFI_TCP4_PROTOCOL *Tcp4
245 )
246 {
247 EFI_STATUS Status;
248 CHAR16 HandleName[80];
249 EFI_TCP4_CONFIG_DATA Tcp4ConfigData;
250
251 if (Tcp4 == NULL) {
252 return EFI_INVALID_PARAMETER;
253 }
254
255 //
256 // Format the child name into the string buffer as:
257 // TCPv4 (SrcPort=59, DestPort=60, ActiveFlag=TRUE)
258 //
259 Status = Tcp4->GetModeData (Tcp4, NULL, &Tcp4ConfigData, NULL, NULL, NULL);
260 if (!EFI_ERROR (Status)) {
261 UnicodeSPrint (HandleName, sizeof (HandleName),
262 L"TCPv4 (SrcPort=%d, DestPort=%d, ActiveFlag=%s)",
263 Tcp4ConfigData.AccessPoint.StationPort,
264 Tcp4ConfigData.AccessPoint.RemotePort,
265 (Tcp4ConfigData.AccessPoint.ActiveFlag ? L"TRUE" : L"FALSE")
266 );
267 } if (Status == EFI_NOT_STARTED) {
268 UnicodeSPrint (
269 HandleName,
270 sizeof (HandleName),
271 L"TCPv4 (Not started)"
272 );
273 } else {
274 return Status;
275 }
276
277 if (gTcpControllerNameTable != NULL) {
278 FreeUnicodeStringTable (gTcpControllerNameTable);
279 gTcpControllerNameTable = NULL;
280 }
281
282 Status = AddUnicodeString2 (
283 "eng",
284 gTcp4ComponentName.SupportedLanguages,
285 &gTcpControllerNameTable,
286 HandleName,
287 TRUE
288 );
289 if (EFI_ERROR (Status)) {
290 return Status;
291 }
292
293 return AddUnicodeString2 (
294 "en",
295 gTcp4ComponentName2.SupportedLanguages,
296 &gTcpControllerNameTable,
297 HandleName,
298 FALSE
299 );
300 }
301
302 /**
303 Retrieves a Unicode string that is the user readable name of the controller
304 that is being managed by a driver.
305
306 This function retrieves the user readable name of the controller specified by
307 ControllerHandle and ChildHandle in the form of a Unicode string. If the
308 driver specified by This has a user readable name in the language specified by
309 Language, then a pointer to the controller name is returned in ControllerName,
310 and EFI_SUCCESS is returned. If the driver specified by This is not currently
311 managing the controller specified by ControllerHandle and ChildHandle,
312 then EFI_UNSUPPORTED is returned. If the driver specified by This does not
313 support the language specified by Language, then EFI_UNSUPPORTED is returned.
314
315 @param[in] This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
316 EFI_COMPONENT_NAME_PROTOCOL instance.
317
318 @param[in] ControllerHandle 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
321 returned.
322
323 @param[in] ChildHandle 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
330 child controller.
331
332 @param[in] Language 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.
340
341 @param[out] ControllerName 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
346 specified by This.
347
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
351 DriverName.
352
353 @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
354
355 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
356 EFI_HANDLE.
357
358 @retval EFI_INVALID_PARAMETER Language is NULL.
359
360 @retval EFI_INVALID_PARAMETER ControllerName is NULL.
361
362 @retval EFI_UNSUPPORTED The driver specified by This is not currently
363 managing the controller specified by
364 ControllerHandle and ChildHandle.
365
366 @retval EFI_UNSUPPORTED The driver specified by This does not support
367 the language specified by Language.
368
369 **/
370 EFI_STATUS
371 EFIAPI
372 TcpComponentNameGetControllerName (
373 IN EFI_COMPONENT_NAME_PROTOCOL *This,
374 IN EFI_HANDLE ControllerHandle,
375 IN EFI_HANDLE ChildHandle OPTIONAL,
376 IN CHAR8 *Language,
377 OUT CHAR16 **ControllerName
378 )
379 {
380 EFI_STATUS Status;
381 EFI_TCP4_PROTOCOL *Tcp4;
382
383 //
384 // Only provide names for child handles.
385 //
386 if (ChildHandle == NULL) {
387 return EFI_UNSUPPORTED;
388 }
389
390 //
391 // Make sure this driver produced ChildHandle
392 //
393 Status = EfiTestChildHandle (
394 ControllerHandle,
395 ChildHandle,
396 &gEfiIp4ProtocolGuid
397 );
398 if (EFI_ERROR (Status)) {
399 return Status;
400 }
401
402 //
403 // Retrieve an instance of a produced protocol from ChildHandle
404 //
405 Status = gBS->OpenProtocol (
406 ChildHandle,
407 &gEfiTcp4ProtocolGuid,
408 (VOID **)&Tcp4,
409 NULL,
410 NULL,
411 EFI_OPEN_PROTOCOL_GET_PROTOCOL
412 );
413 if (EFI_ERROR (Status)) {
414 return Status;
415 }
416
417 //
418 // Update the component name for this child handle.
419 //
420 Status = UpdateName (Tcp4);
421 if (EFI_ERROR (Status)) {
422 return Status;
423 }
424
425 return LookupUnicodeString2 (
426 Language,
427 This->SupportedLanguages,
428 gTcpControllerNameTable,
429 ControllerName,
430 (BOOLEAN)(This == &gTcp4ComponentName)
431 );
432 }